forked from KolibriOS/kolibrios
The rollback r.4970.
git-svn-id: svn://kolibrios.org@5185 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
e54f076e14
commit
7388b6930f
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user