The rollback r.4970.

git-svn-id: svn://kolibrios.org@5185 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Marat Zakiyanov (Mario79) 2014-11-21 23:27:14 +00:00
parent e54f076e14
commit 7388b6930f

View File

@ -39,7 +39,6 @@ syscall_button: ;///// system function 8 //////////////////////////////////////
;> 7 (31) = 0 ;> 7 (31) = 0
;> 6 (30) = don't draw button ;> 6 (30) = don't draw button
;> 5 (29) = don't draw button frame when pressed ;> 5 (29) = don't draw button frame when pressed
;> 4 (28) = don't draw button 3d frame
;> esi = button color ;> esi = button color
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;; Undefine button: ;; Undefine button:
@ -87,11 +86,9 @@ syscall_button: ;///// system function 8 //////////////////////////////////////
mov ax, dx mov ax, dx
stosw ; button id number: bits 0-15 stosw ; button id number: bits 0-15
mov eax, ebx mov eax, ebx
dec eax
rol eax, 16 rol eax, 16
stosd ; x start | x size stosd ; x start | x size
mov eax, ecx mov eax, ecx
dec eax
rol eax, 16 rol eax, 16
stosd ; y start | y size stosd ; y start | y size
mov eax, edx mov eax, edx
@ -103,116 +100,114 @@ syscall_button: ;///// system function 8 //////////////////////////////////////
test edx, 0x40000000 test edx, 0x40000000
jnz .exit jnz .exit
; DRAW BODY ----------------------------- ; draw button body
pushad pushad
call button._.button_calc_relativ
xor edi, edi ; for __sys_draw_line ; calculate window-relative coordinates
; set color movzx edi, cx
shr ebx, 16
shr ecx, 16
mov eax, [TASK_BASE]
add ebx, [eax - twdw + WDATA.box.left]
add ecx, [eax - twdw + WDATA.box.top]
mov eax, ebx
shl eax, 16
mov ax, bx
add ax, word[esp + 16]
mov ebx, ecx
shl ebx, 16
mov bx, cx
; calculate initial color
mov ecx, esi mov ecx, esi
; set coordinate
inc edx
; if gradient
cmp [buttontype], 0 cmp [buttontype], 0
je .next_line je @f
call button._.incecx call button._.incecx2
align 4
.next_line: ; set button height counter
@@:
mov edx, edi
.next_line:
call button._.button_dececx call button._.button_dececx
push edi
xor edi, edi
; call [draw_line]
call __sys_draw_line call __sys_draw_line
pop edi
add ebx, 0x00010001 add ebx, 0x00010001
dec edx dec edx
jnz .next_line jnz .next_line
popad popad
; DRAW FRAME ---------------------------- ; draw button frame
pushad
call button._.button_calc_relativ
mov esi, common_colours
mov edi, dword [esi+104] push ebx ecx
call .top_border
mov edi, dword [esi+104]
call .bottom_border
mov edi, dword [esi+104]
call .right_border
mov edi, dword [esi+104]
call .left_border
popad
; DRAW 3D SHADOW ------------------------ ; calculate window-relative coordinates
test edx, 0x10000000 shr ebx, 16
jnz .exit shr ecx, 16
mov eax, [TASK_BASE]
add ebx, [eax - twdw + WDATA.box.left]
add ecx, [eax - twdw + WDATA.box.top]
pushad ; top border
mov edi, edx mov eax, ebx
call button._.button_calc_relativ shl eax, 16
; get color address mov ax, bx
mov esi, common_colours add ax, [esp + 4]
test edi, 0x10000000
jnz @f
add eax, 0x10000
dec eax
inc ecx
dec edx
dec edx
align 4
@@:
mov edi, dword [esi+12]
call .top_border
mov edi, dword [esi+8]
call .bottom_border
mov edi, dword [esi+8]
call .right_border
mov edi, dword [esi+12]
call .left_border
popad
ret
align 4
.top_border:
mov ebx, ecx mov ebx, ecx
shl ebx, 16 shl ebx, 16
mov bx , cx mov bx, cx
mov ecx, edi push ebx
xor edi, edi xor edi, edi
mov ecx, esi
call button._.incecx
; call [draw_line]
call __sys_draw_line call __sys_draw_line
ret
align 4 ; bottom border
.bottom_border: movzx edx, word[esp + 4 + 0]
add bx , dx add ebx, edx
rol ebx, 16 shl edx, 16
add bx , dx add ebx, edx
mov ecx, edi mov ecx, esi
xor edi, edi call button._.dececx
; call [draw_line]
call __sys_draw_line call __sys_draw_line
ret
align 4 ; left border
.right_border: pop ebx
push eax push edx
sub bx, dx mov edx, eax
mov cx, ax shr edx, 16
shl eax, 16 mov ax, dx
mov ax, cx mov edx, ebx
mov ecx, edi shr edx, 16
xor edi, edi mov bx, dx
add bx, [esp + 4 + 0]
pop edx
mov ecx, esi
call button._.incecx
; call [draw_line]
call __sys_draw_line call __sys_draw_line
pop eax
ret
align 4 ; right border
.left_border: mov dx, [esp + 4]
shr eax, 16 add ax, dx
mov cx, ax shl edx, 16
shl eax, 16 add eax, edx
mov ax, cx add ebx, 0x00010000
mov ecx, edi mov ecx, esi
xor edi, edi call button._.dececx
; call [draw_line]
call __sys_draw_line call __sys_draw_line
ret
align 4 pop ecx ebx
.exit:
.exit:
ret ret
; FIXME: mutex needed ; FIXME: mutex needed
@ -274,10 +269,8 @@ sys_button_activate_handler: ;/////////////////////////////////////////////////
jz .exit jz .exit
mov ebx, dword[eax + SYS_BUTTON.id_hi - 2] mov ebx, dword[eax + SYS_BUTTON.id_hi - 2]
push edi ; spam
xor edi, edi
call button._.negative_button call button._.negative_button
pop edi
.exit: .exit:
ret ret
@ -296,11 +289,8 @@ sys_button_deactivate_handler: ;///////////////////////////////////////////////
jz .exit jz .exit
mov ebx, dword[eax + SYS_BUTTON.id_hi - 2] mov ebx, dword[eax + SYS_BUTTON.id_hi - 2]
push edi ; spam
xor edi, edi
inc edi
call button._.negative_button call button._.negative_button
pop edi
.exit: .exit:
ret ret
@ -383,6 +373,69 @@ button._.find_button: ;////////////////////////////////////////////////////////
pop edi esi edx ecx pop edi esi edx ecx
ret ret
;------------------------------------------------------------------------------
button._.dececx: ;/////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
;? <description>
;------------------------------------------------------------------------------
sub cl, 0x20
jnc @f
xor cl, cl
@@:
sub ch, 0x20
jnc @f
xor ch, ch
@@:
rol ecx, 16
sub cl, 0x20
jnc @f
xor cl, cl
@@:
rol ecx, 16
ret
;------------------------------------------------------------------------------
button._.incecx: ;/////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
;? <description>
;------------------------------------------------------------------------------
add cl, 0x20
jnc @f
or cl, -1
@@:
add ch, 0x20
jnc @f
or ch, -1
@@:
rol ecx, 16
add cl, 0x20
jnc @f
or cl, -1
@@:
rol ecx, 16
ret
;------------------------------------------------------------------------------
button._.incecx2: ;////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
;? <description>
;------------------------------------------------------------------------------
add cl, 0x14
jnc @f
or cl, -1
@@:
add ch, 0x14
jnc @f
or ch, -1
@@:
rol ecx, 16
add cl, 0x14
jnc @f
or cl, -1
@@:
rol ecx, 16
ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
button._.button_dececx: ;////////////////////////////////////////////////////// button._.button_dececx: ;//////////////////////////////////////////////////////
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
@ -393,9 +446,9 @@ button._.button_dececx: ;//////////////////////////////////////////////////////
push eax push eax
mov al, 1 mov al, 1
;cmp edi, 20 cmp edi, 20
;jg @f jg @f
;mov al, 2 mov al, 2
@@: @@:
sub cl, al sub cl, al
@ -417,60 +470,18 @@ button._.button_dececx: ;//////////////////////////////////////////////////////
.finish: .finish:
ret ret
;------------------------------------------------------------------------------
button._.incecx: ;////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
;? <description>
;------------------------------------------------------------------------------
add cl, 0x14
jnc @f
or cl, -1
@@:
add ch, 0x14
jnc @f
or ch, -1
@@:
rol ecx, 16
add cl, 0x14
jnc @f
or cl, -1
@@:
rol ecx, 16
ret
;------------------------------------------------------------------------------
button._.button_calc_relativ: ;
;------------------------------------------------------------------------------
;? <description>
;------------------------------------------------------------------------------
movzx edx, cx
dec edx ; get height
shr ebx, 16
shr ecx, 16
mov eax, [TASK_BASE]
add ebx, [eax - twdw + WDATA.box.left]
add ecx, [eax - twdw + WDATA.box.top]
mov eax, ebx
shl eax, 16
mov ax, bx
add ax, word[esp + 20]
dec eax
mov bx, cx
shl ebx, 16
mov bx, cx
ret
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
button._.negative_button: ;//////////////////////////////////////////////////// button._.negative_button: ;////////////////////////////////////////////////////
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
;? Invert system button border ;? Invert system button border
; edi - 0 activate, 1 - deactivate
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; if requested, do not display button border on press. ; if requested, do not display button border on press.
test ebx, 0x20000000 test ebx, 0x20000000
jnz .exit jnz .exit
pushad pushad
push ebx
xchg esi, eax xchg esi, eax
movzx ecx, [esi + SYS_BUTTON.pslot] movzx ecx, [esi + SYS_BUTTON.pslot]
@ -488,58 +499,10 @@ button._.negative_button: ;////////////////////////////////////////////////////
add ax, cx add ax, cx
add bx, dx add bx, dx
xor edx, edx mov esi, 0x01000000
mov dx, [esi + SYS_BUTTON.id_lo] call draw_rectangle.forced
cmp dx, 1
jne .no_close
sub eax, 0x00010001
dec ebx
mov esi, 0x01000000
call draw_rectangle.forced
jmp .fade
align 4
.no_close:
cmp dx, 65535
jne .no_mini
sub eax, 0x00010001
dec ebx
mov esi, 0x01000000
call draw_rectangle.forced
jmp .fade
align 4
.no_mini:
add eax, 0x00010000
add ebx, 0x00010000
pop edx
test edx, 0x10000000
jnz .only_frame
mov edx, common_colours
mov esi, dword [edx+12]
cmp edi, 0
jne .shadow
mov esi, dword [edx+8]
align 4
.shadow:
call draw_rectangle.forced
align 4
.only_frame:
mov edx, common_colours
sub eax, 0x00010000
sub ebx, 0x00010000
mov esi, dword [edx+104]
cmp edi, 0
jne .draw
mov esi, dword [edx+112]
align 4
.draw:
call draw_rectangle.forced
popad popad
ret
align 4 .exit:
.fade:
pop ebx
popad
align 4
.exit:
ret ret