Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 647 → Rev 648

/programs/develop/libGUI/src/button.inc
0,0 → 1,1437
 
;button's types
bt_check_text_type = 1b
bt_check_picture_type = 10b
bt_check_picture_text_type = 100b
bt_no_draw = 1000b
bt_check_3D_type = 10000b
bt_check_full_redraw = 10000000b
bt_full_redraw_off = 1111111b
 
;button's flags
bt_crossing = 1b
bt_crossing_pressing = 11b
bt_crossing_pressing_off = 11111100b
 
bt_control_data_size = 50
 
;****************************************************
;******************craete Button**********************
;****************************************************
;IN
;pointer to parend
;pointer to Buttton's structure
;OUT
;pointer to initialized Button's structure
align 4
 
craete_button:
 
mov ebx,[esp+4] ;parend
mov eax,[esp+8] ;control
 
mov [PointerToStructureForButton],eax
 
mov eax,control_header_size+bt_control_data_size
call craete_control
 
;set all button's parameters in control
mov ecx,dword button
mov [eax],dword button
 
mov ecx,bt_control_data_size
mov esi,[PointerToStructureForButton]
mov edi,eax
add edi,control_header_size
rep movsb
 
mov ebx,[PointerToStructureForButton]
xor ecx,ecx
xor edx,edx
xor esi,esi
xor edi,edi
mov cx,[ebx+2] ;button x
mov dx,[ebx+4] ;button y
mov si,[ebx+6] ;button size x
mov di,[ebx+8] ;button size y
 
call get_skin_height
add ecx,border_width
add edx,[skin_height]
;copy information to control
mov [eax+24],ecx
mov [eax+28],edx
mov [eax+32],esi
mov [eax+36],edi
 
ret 8
 
;****************************************************
;*******************Draw Button**********************
;****************************************************
;IN
;pointer to control of button
;message
;OUT
;not returned value
align 4
 
button:
 
;get message
mov eax,[esp+8]
 
;get pointer to control of button
mov esi,[esp+4]
mov [PointerForButton],esi
;copy control to local control
mov edi,dword Button
mov ecx,control_header_size+bt_control_data_size
cld
rep movsb
 
 
cmp [eax],dword 1
jne no_redraw_all_button
 
or [Button.type],bt_check_full_redraw
no_redraw_all_button:
 
cmp [eax],dword 2
jne no_keys_button
 
jmp exit_button
no_keys_button:
 
cmp [eax],dword 3
jne no_pressed_button_button
 
jmp exit_button
no_pressed_button_button:
 
cmp [eax],dword 6
jne no_mouse_button
 
mov esi,[eax+4]
mov edi,[eax+8]
mov ecx,[eax+12]
mov [Button.mouseX],si
mov [Button.mouseY],di
mov [ButtonsOfMouse],ecx
 
no_mouse_button:
 
 
cmp [eax],dword -1
jne no_delete_button
 
jmp exit_button
no_delete_button:
 
;load coordinats and size from control
mov eax,[PointerForButton]
mov ebx,[eax+24] ;x
mov ecx,[eax+28] ;y
mov edx,[eax+32] ;size x
mov esi,[eax+36] ;size y
;set current coordinats and sizes in zakladka
mov [Button.x],bx
mov [Button.y],cx
mov [Button.width],dx
mov [Button.height],si
 
 
mov [Button.color2],0xffffff
 
xor eax,eax
mov al,[Button.type]
and al,bt_check_full_redraw
test al,al
jz no_redraw_button
 
and [Button.type],bt_full_redraw_off
 
mov esi,dword Button
mov edi,[PointerForButton]
add esi,control_header_size
add edi,control_header_size
mov ecx,2
cld
rep movsb
 
;if bit 3 is tru than no draw button
mov al,[Button.type]
and al,bt_no_draw
test al,al
jnz no_draw_button
 
;generate colors tables
mov eax,[Button.color1]
mov ebx,0xffffff
mov ecx,20
mov edx,dword colors_table1
call gradient
 
xor eax,eax
mov ebx,[Button.color1]
mov ecx,20
mov edx,dword colors_table2
call gradient
 
xor eax,eax
mov al,[Button.type]
 
and al,bt_check_3D_type
test al,al
jz no_3d_button
 
;draw gradient up rectangle
mov eax,[Button.color1]
mov ebx,[Button.color2]
and eax,0xffffff
and ebx,0xffffff
xor ecx,ecx
xor edx,edx
xor esi,esi
xor edi,edi
mov cx,[Button.x]
mov dx,[Button.y]
mov si,[Button.width]
mov di,[Button.height]
add cx,1
add dx,2
sub si,1
sub di,3
call rectangle_gradient_up
 
mov eax,[Button.color1]
mov [Line.color],eax
 
;draw left vertical line
xor eax,eax
xor ebx,ebx
xor ecx,ecx
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.y1],3
add [Line.y2],ecx
call DrawLine
 
;draw right vertical line
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov si,[Button.width]
add eax,esi
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.y1],3
add [Line.y2],ecx
call DrawLine
 
;draw down 1 horizontal line
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov si,[Button.width]
add ebx,ecx
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.x1],1
sub esi,1
add [Line.x2],esi
call DrawLine
 
;draw up light horizontal rectangle
xor ecx,ecx
xor esi,esi
mov si,[Button.height]
mov di,[Button.width]
mov eax,13
mov bx,[Button.x]
mov cx,[Button.y]
mov edx,0xffffff
add ebx,2
add ecx,1
shl ebx,16
shl ecx,16
sub edi,3
add ebx,edi
add ecx,2
mcall
 
;draw left light vertical line
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor edx,edx
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
 
;calculate color
mov dx,[Button.height]
sub edx,3+2
mov esi,[pointer+edx*3]
and esi,0xffffff
add eax,1
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
mov [Line.color],esi; dword 0xffffff
add [Line.y1],2
sub ecx,3
add [Line.y2],ecx
call DrawLine
 
;draw right light vertical line
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor edx,edx
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
 
add ax,[Button.width]
sub eax,1
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.y1],2
sub ecx,3
add [Line.y2],ecx
call DrawLine
 
mov eax,[pointer+3*3]
and eax,0xffffff
mov [Button.color2],eax
mov [Line.color],eax
 
;draw up light left vertical line 1
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov si,[Button.width]
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.y2],2
call DrawLine
 
;draw up light right vertical line 1
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov si,[Button.width]
add eax,esi
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.y2],2
call DrawLine
 
;draw up light left vertical line 2
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov si,[Button.width]
add eax,1
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.y2],1
call DrawLine
 
;draw up light right vertical line 2
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov si,[Button.width]
add eax,esi
sub eax,1
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.y2],1
call DrawLine
 
;draw up light horizontal line
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov si,[Button.width]
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.x1],2
sub esi,2
add [Line.x2],esi
call DrawLine
 
mov eax,[pointer+3*3]
mov ebx,[pointer+3*9]
and eax,0xffffff
and ebx,0xffffff
call calculate_average_color
 
mov [Pixel.color],eax
 
;(x,y)
xor eax,eax
xor ebx,ebx
mov ax,[Button.x]
mov bx,[Button.y]
mov [Pixel.x],eax
mov [Pixel.y],ebx
call DrawPixel
 
;(x+size_x,y)
xor eax,eax
xor ebx,ebx
xor ecx,ecx
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.width]
add eax,ecx
mov [Pixel.x],eax
mov [Pixel.y],ebx
call DrawPixel
 
;(x+1,y+1)
xor eax,eax
xor ebx,ebx
mov ax,[Button.x]
mov bx,[Button.y]
add eax,1
add ebx,1
mov [Pixel.x],eax
mov [Pixel.y],ebx
call DrawPixel
 
;(x+size_x-1,y+1)
xor eax,eax
xor ebx,ebx
xor ecx,ecx
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.width]
add eax,ecx
sub eax,1
add ebx,1
mov [Pixel.x],eax
mov [Pixel.y],ebx
call DrawPixel
 
;(x,y+size_y)
xor eax,eax
xor ebx,ebx
mov ax,[Button.x]
mov bx,[Button.y]
add bx,[Button.height]
mov [Pixel.x],eax
mov [Pixel.y],ebx
call DrawPixel
 
;(x+size_x,y+size_y)
xor eax,eax
xor ebx,ebx
xor ecx,ecx
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.width]
add eax,ecx
add bx,[Button.height]
mov [Pixel.x],eax
mov [Pixel.y],ebx
call DrawPixel
 
;(x+1,y+size_y-2)
xor eax,eax
xor ebx,ebx
mov ax,[Button.x]
mov bx,[Button.y]
add eax,1
add bx,[Button.height]
sub ebx,2
mov [Pixel.x],eax
mov [Pixel.y],ebx
call DrawPixel
 
;(x+size_x-1,y+size_y-2)
xor eax,eax
xor ebx,ebx
xor ecx,ecx
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.width]
add eax,ecx
sub eax,1
add bx,[Button.height]
sub ebx,2
mov [Pixel.x],eax
mov [Pixel.y],ebx
call DrawPixel
 
no_3d_button:
 
;****************************
;*********2D button**********
;****************************
xor eax,eax
mov al,[Button.type]
and al,bt_check_3D_type
test al,al
jnz no_2D_button
 
mov edx,[colors_table1+18]
and edx,0xffffff
 
xor ebx,ebx
xor ecx,ecx
xor esi,esi
xor edi,edi
mov si,[Button.width]
mov di,[Button.height]
mov eax,13
mov bx,[Button.x]
mov cx,[Button.y]
add ebx,1
add ecx,1
sub si,1
sub di,1
shl ebx,16
shl ecx,16
add ebx,esi
add ecx,edi
mcall
 
mov eax,[colors_table1+15*3]
and eax,0xffffff
mov [Line.color],eax
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.y2],ecx
call DrawLine
 
xor eax,eax
xor ebx,ebx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov si,[Button.width]
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.x2],esi
call DrawLine
 
mov eax,[colors_table2+8*3]
and eax,0xffffff
mov [Line.color],eax
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov si,[Button.width]
add eax,esi
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.y2],ecx
call DrawLine
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov si,[Button.width]
add ebx,ecx
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.x2],esi
call DrawLine
 
no_2D_button:
 
no_draw_button:
 
;check drawing text on the button
xor eax,eax
mov al,[Button.type]
 
and al,bt_check_text_type
test al,al
jz no_button_only_with_text
 
call DrawStringOnTheButton
jmp end_case_button
no_button_only_with_text:
 
;check drawing picture on the button
xor eax,eax
mov al,[Button.type]
and al,bt_check_picture_type
test al,al
jz no_button_only_with_picture
 
call DrawPictureOnTheButton
jmp end_case_button
no_button_only_with_picture:
 
 
xor eax,eax
mov al,[Button.type]
and al,bt_check_picture_text_type
test al,al
jz no_button_with_text_and_picture
 
;draw string in coordinats (textX,textY)
xor eax,eax
xor ebx,ebx
mov ax,[Button.textX]
mov bx,[Button.textY]
add ax,[Button.x]
add bx,[Button.y]
mov [Font.x],eax
mov [Font.y],ebx
call DrawString
 
;draw picture in coordinats (imageX,imageY)
xor eax,eax
xor ebx,ebx
mov ax,[Button.imageX]
mov bx,[Button.imageY]
add ax,[Button.x]
add bx,[Button.y]
mov [xo],eax
mov [x],eax
mov [y],ebx
 
xor esi,esi
xor edi,edi
mov si,[Button.imageSizeX]
mov di,[Button.imageSizeY]
mov ebp,[Button.image]
 
xor eax,eax
inc eax
 
loop_y_image_:
 
mov ebx,[xo]
mov [x],ebx
 
xor esi,esi
mov si,[Button.imageSizeX]
 
loop_x_image_:
 
mov edx,[ebp]
and edx,0xffffff
cmp edx,[Button.transparentColor]
je no_draw_pixel_
 
mov ebx,[x]
mov ecx,[y]
mcall
no_draw_pixel_:
 
add ebp,3
add [x],1
dec esi
jnz loop_x_image_
 
add [y],1
dec edi
jnz loop_y_image_
 
no_button_with_text_and_picture:
 
no_redraw_button:
 
end_case_button:
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor edx,edx
xor esi,esi
xor edi,edi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.width]
mov dx,[Button.height]
mov si,[Button.mouseX]
mov di,[Button.mouseY]
call CheckCrossingBox
 
cmp eax,0xffffff
jne no_crossing
 
xor ebx,ebx
mov bl,[Button.type]
and bl,bt_check_3D_type
test bl,bl
jz button_active_2D
 
push eax
mov eax,[ButtonsOfMouse]
 
cmp eax,1
je button_pressed_3d_
 
xor eax,eax
mov al,[Button.type]
and al,bt_no_draw
test al,al
jnz no_draw_active_button_3d_
 
call Draw3DActiveButton
 
no_draw_active_button_3d_:
 
mov [Button.flag],byte bt_crossing
jmp exit_button_pressed_3d_
 
button_pressed_3d_:
 
xor eax,eax
mov al,[Button.type]
and al,bt_no_draw
test al,al
jnz no_draw_pressed_button_3d_
 
call DrawPressed3DButton
 
no_draw_pressed_button_3d_:
 
mov [Button.flag],byte bt_crossing_pressing
 
exit_button_pressed_3d_:
 
pop eax
 
;save flag
mov esi,dword Button
mov edi,[PointerForButton]
add esi,control_header_size
add edi,control_header_size
mov ecx,2
cld
rep movsb
jmp no_crossing
 
button_active_2D:
 
push eax
mov eax,[ButtonsOfMouse]
 
cmp eax,1
je button_pressed_2d
 
xor eax,eax
mov al,[Button.type]
and al,bt_no_draw
test al,al
jnz no_active_button_2d_
 
call Draw2DActiveButton
 
no_active_button_2d_:
 
mov [Button.flag],byte bt_crossing
jmp exit_button_pressed_2d
button_pressed_2d:
 
xor eax,eax
mov al,[Button.type]
and al,bt_no_draw
test al,al
jnz no_draw_pressed_button_2d_
 
call DrawPressed2DButton
 
no_draw_pressed_button_2d_:
 
mov [Button.flag],byte bt_crossing_pressing
exit_button_pressed_2d:
 
pop eax
 
;save flag
mov esi,dword Button
mov edi,[PointerForButton]
add esi,control_header_size
add edi,control_header_size
mov ecx,2
cld
rep movsb
no_crossing:
 
cmp eax,0xffffff
je yes_crossing
xor ebx,ebx
mov bl,[Button.flag]
and bl,bt_crossing
test bl,bl
jz yes_crossing
 
xor ebx,ebx
mov bl,[Button.type]
and bl,bt_check_3D_type
test bl,bl
jz button_put_2D
 
push eax
 
xor eax,eax
mov al,[Button.type]
and al,bt_no_draw
test al,al
jnz no_draw_button_active_3d__
 
call Put3DActiveButton
no_draw_button_active_3d__:
 
pop eax
 
and [Button.flag],bt_crossing_pressing_off
mov esi,dword Button
mov edi,[PointerForButton]
add edi,control_header_size
add esi,control_header_size
mov ecx,2
cld
rep movsb
jmp yes_crossing
 
button_put_2D:
 
push eax
 
xor eax,eax
mov al,[Button.type]
and al,bt_no_draw
test al,al
jnz no_draw_button_active_2d__
 
call Put2DActiveButton
 
no_draw_button_active_2d__:
 
pop eax
 
and [Button.flag],bt_crossing_pressing_off
mov esi,dword Button
mov edi,[PointerForButton]
add esi,control_header_size
add edi,control_header_size
mov ecx,2
cld
rep movsb
yes_crossing:
 
exit_button:
 
ret 8
 
DrawStringOnTheButton:
 
;xor ebx,ebx
mov ebx,[Button.text]
call GetLengthString
imul eax,6 ;[Font.sizeX]
xor ebx,ebx
mov bx,[Button.width]
shr eax,1
shr ebx,1
sub ebx,eax
xor eax,eax
mov ax,[Button.x]
add eax,ebx
mov [Font.x],eax
xor ebx,ebx
mov bx,[Button.height]
shr ebx,1
sub ebx,3;[Font.sizeY]
xor eax,eax
mov ax,[Button.y]
add eax,ebx
mov [Font.y],eax
call DrawString
 
ret
 
DrawPictureOnTheButton:
 
xor esi,esi
xor edi,edi
xor eax,eax
xor ebx,ebx
mov ax,[Button.height]
mov bx,[Button.width]
mov di,[Button.imageSizeY]
mov si,[Button.imageSizeX]
shr ax,1
shr bx,1
shr si,1
shr di,1
sub ax,di
sub bx,si
add ax,[Button.y]
add bx,[Button.x]
mov [xo],ebx
mov [x],ebx
mov [y],eax
 
xor esi,esi
xor edi,edi
mov si,[Button.imageSizeX]
mov di,[Button.imageSizeY]
mov ebp,[Button.image]
 
xor eax,eax
inc eax
 
loop_y_image:
 
mov ebx,[xo]
mov [x],ebx
 
xor esi,esi
mov si,[Button.imageSizeX]
 
loop_x_image:
 
mov edx,[ebp]
and edx,0xffffff
cmp edx,[Button.transparentColor]
je no_draw_pixel
 
mov ebx,[x]
mov ecx,[y]
mcall
no_draw_pixel:
 
add ebp,3
add [x],1
dec esi
jnz loop_x_image
 
add [y],1
dec edi
jnz loop_y_image
 
ret
 
 
Draw3DActiveButton:
 
;call calculate_average_color
mov [Line.color],0xffffff;eax
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.y1],3
sub ecx,1
add [Line.y2],ecx
call DrawLine
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov si,[Button.width]
add eax,esi
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.y1],3
sub ecx,1
add [Line.y2],ecx
call DrawLine
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
add ebx,ecx
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.x1],1
xor ecx,ecx
mov cx,[Button.width]
sub ecx,1
add [Line.x2],ecx
call DrawLine
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.x1],1
xor ecx,ecx
mov cx,[Button.width]
sub ecx,1
add [Line.x2],ecx
call DrawLine
 
ret
 
Put3DActiveButton:
 
mov eax,[Button.color1]
mov ebx,0xffffff
mov ecx,20
mov edx,dword pointer
call gradient
 
mov eax,[pointer+3];[Button.color1]
and eax,0xffffff
mov [Line.color],eax
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.y1],3
sub ecx,1
add [Line.y2],ecx
call DrawLine
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov si,[Button.width]
add eax,esi
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.y1],3
sub ecx,1
add [Line.y2],ecx
call DrawLine
 
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
add ebx,ecx
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.x1],1
xor ecx,ecx
mov cx,[Button.width]
sub ecx,1
add [Line.x2],ecx
call DrawLine
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.x1],1
xor ecx,ecx
mov cx,[Button.width]
sub ecx,1
add [Line.x2],ecx
call DrawLine
 
ret
 
DrawPressed3DButton:
 
 
mov eax,[Button.color1]
mov ebx,0xffffff
mov ecx,20
mov edx,dword pointer
call gradient
 
mov edx,[pointer+3]
and edx,0xffffff
mov [Line.color],edx
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.y1],3
sub ecx,1
add [Line.y2],ecx
call DrawLine
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov si,[Button.width]
add eax,esi
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.y1],3
sub ecx,1
add [Line.y2],ecx
call DrawLine
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
add ebx,ecx
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.x1],1
xor ecx,ecx
mov cx,[Button.width]
sub ecx,1
add [Line.x2],ecx
call DrawLine
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.x1],1
xor ecx,ecx
mov cx,[Button.width]
sub ecx,1
add [Line.x2],ecx
call DrawLine
 
ret
 
Draw2DActiveButton:
 
mov edx,[colors_table1]
and edx,0xffffff
;mov [Button.color2],edx
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
mov [Line.color],edx
add [Line.y2],ecx
call DrawLine
 
xor eax,eax
xor ebx,ebx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov si,[Button.width]
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.x2],esi
call DrawLine
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov si,[Button.width]
add eax,esi
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.y2],ecx
call DrawLine
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov si,[Button.width]
add ebx,ecx
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.x2],esi
call DrawLine
 
ret
 
Put2DActiveButton:
 
mov edx,[pointer+15*3]
and edx,0xffffff
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
mov [Line.color],edx
add [Line.y2],ecx
call DrawLine
 
xor eax,eax
xor ebx,ebx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov si,[Button.width]
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.x2],esi
call DrawLine
 
mov edx,[colors_table2+8*3]
and edx,0xffffff
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov si,[Button.width]
add eax,esi
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
mov [Line.color],edx
add [Line.y2],ecx
call DrawLine
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov si,[Button.width]
add ebx,ecx
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.x2],esi
call DrawLine
 
ret
 
DrawPressed2DButton:
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
and [Line.color],0
add [Line.y2],ecx
call DrawLine
 
xor eax,eax
xor ebx,ebx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
;mov cx,[Button.height]
mov si,[Button.width]
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.x2],esi
call DrawLine
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov si,[Button.width]
add eax,esi
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
mov [Line.color],0xffffff
add [Line.y2],ecx
call DrawLine
 
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor esi,esi
mov ax,[Button.x]
mov bx,[Button.y]
mov cx,[Button.height]
mov si,[Button.width]
add ebx,ecx
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ebx
add [Line.x2],esi
call DrawLine
 
ret