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,115 +100,113 @@ syscall_button: ;///// system function 8 //////////////////////////////////////
test edx, 0x40000000 test edx, 0x40000000
jnz .exit jnz .exit
; DRAW BODY ----------------------------- ; draw button body
pushad
call button._.button_calc_relativ
xor edi, edi ; for __sys_draw_line
; set color
mov ecx, esi
; set coordinate
inc edx
; if gradient
cmp [buttontype], 0
je .next_line
call button._.incecx
align 4
.next_line:
call button._.button_dececx
call __sys_draw_line
add ebx, 0x00010001
dec edx
jnz .next_line
popad
; DRAW FRAME ----------------------------
pushad
call button._.button_calc_relativ
mov esi, common_colours
mov edi, dword [esi+104]
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 ------------------------
test edx, 0x10000000
jnz .exit
pushad pushad
mov edi, edx
call button._.button_calc_relativ
; get color address
mov esi, common_colours
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 ; calculate window-relative coordinates
.top_border: 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 mov ebx, ecx
shl ebx, 16 shl ebx, 16
mov bx, cx mov bx, cx
mov ecx, edi
xor edi, edi
call __sys_draw_line
ret
align 4 ; calculate initial color
.bottom_border: mov ecx, esi
add bx , dx cmp [buttontype], 0
rol ebx, 16 je @f
add bx , dx call button._.incecx2
mov ecx, edi
xor edi, edi
call __sys_draw_line
ret
align 4 ; set button height counter
.right_border: @@:
push eax mov edx, edi
sub bx, dx
mov cx, ax .next_line:
call button._.button_dececx
push edi
xor edi, edi
; call [draw_line]
call __sys_draw_line
pop edi
add ebx, 0x00010001
dec edx
jnz .next_line
popad
; draw button frame
push ebx ecx
; calculate window-relative coordinates
shr ebx, 16
shr ecx, 16
mov eax, [TASK_BASE]
add ebx, [eax - twdw + WDATA.box.left]
add ecx, [eax - twdw + WDATA.box.top]
; top border
mov eax, ebx
shl eax, 16 shl eax, 16
mov ax, cx mov ax, bx
mov ecx, edi add ax, [esp + 4]
mov ebx, ecx
shl ebx, 16
mov bx, cx
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
pop eax
ret
align 4 ; bottom border
.left_border: movzx edx, word[esp + 4 + 0]
shr eax, 16 add ebx, edx
mov cx, ax shl edx, 16
shl eax, 16 add ebx, edx
mov ax, cx mov ecx, esi
mov ecx, edi call button._.dececx
xor edi, edi ; call [draw_line]
call __sys_draw_line call __sys_draw_line
ret
align 4 ; left border
pop ebx
push edx
mov edx, eax
shr edx, 16
mov ax, dx
mov edx, ebx
shr edx, 16
mov bx, dx
add bx, [esp + 4 + 0]
pop edx
mov ecx, esi
call button._.incecx
; call [draw_line]
call __sys_draw_line
; right border
mov dx, [esp + 4]
add ax, dx
shl edx, 16
add eax, edx
add ebx, 0x00010000
mov ecx, esi
call button._.dececx
; call [draw_line]
call __sys_draw_line
pop ecx ebx
.exit: .exit:
ret ret
@ -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
.fade:
pop ebx
popad
align 4
.exit: .exit:
ret ret