forked from KolibriOS/kolibrios
4211 lines
94 KiB
PHP
4211 lines
94 KiB
PHP
|
|
;scroller's flags
|
|
sc_check_vertical = 00000001b
|
|
sc_check_horizontal = 00000010b
|
|
sc_check_init_child_buttons = 00000100b
|
|
sc_active = 00001000b
|
|
sc_check_3D_type = 00010000b
|
|
sc_scroll_bar_move = 00100000b
|
|
|
|
sc_redraw = 10000000b
|
|
sc_redraw_off = 01111111b
|
|
sc_full_redraw = 10101000b
|
|
sc_scroll_bar_move_off = 11011111b
|
|
sc_move_active_off = 11010111b
|
|
|
|
sc_first_child_button_pressed = 00000001b
|
|
sc_first_child_button_pressed_off = 11111110b
|
|
sc_second_child_button_pressed = 00010000b
|
|
sc_second_child_button_pressed_off = 11101111b
|
|
|
|
sc_control_data_size = 29
|
|
sc_child_button_type = 10001000b
|
|
|
|
;****************************************************
|
|
;******************Crate Scroller*********************
|
|
;****************************************************
|
|
;IN
|
|
;pointer to parend
|
|
;pointer to Scroller's structure
|
|
;OUT
|
|
;pointer to initialized Scroller's structure
|
|
align 4
|
|
|
|
craete_scroller:
|
|
|
|
push ebx
|
|
push ecx
|
|
push edx
|
|
push esi
|
|
push edi
|
|
push ebp
|
|
|
|
mov ebx,[esp+24+4]
|
|
mov eax,[esp+24+8]
|
|
|
|
mov [PointerToStructureForScroller],eax
|
|
|
|
mov eax,control_header_size+sc_control_data_size
|
|
call craete_control
|
|
|
|
;set all button's parameters in control
|
|
mov [eax],dword scroller
|
|
|
|
mov ecx,sc_control_data_size
|
|
mov esi,[PointerToStructureForScroller]
|
|
mov edi,eax
|
|
add edi,control_header_size
|
|
rep movsb
|
|
|
|
mov ebx,[PointerToStructureForScroller]
|
|
|
|
xor ecx,ecx
|
|
mov cl,byte[ebx]
|
|
and cl,sc_check_vertical
|
|
jz type_horizontal_scroller
|
|
|
|
;if we here than scroller vertical
|
|
mov esi,16 ;scroller size x
|
|
xor edi,edi
|
|
mov di,[ebx+5] ;scroller size y
|
|
jmp exit_type_scroller
|
|
type_horizontal_scroller:
|
|
|
|
xor esi,esi
|
|
mov si,[ebx+5] ;scroller size x
|
|
mov edi,16 ;scroller size y
|
|
exit_type_scroller:
|
|
|
|
xor ecx,ecx
|
|
xor edx,edx
|
|
mov cx,[ebx+1] ;scroller x
|
|
mov dx,[ebx+3] ;scroller 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
|
|
|
|
pop ebp
|
|
pop edi
|
|
pop esi
|
|
pop edx
|
|
pop ecx
|
|
pop ebx
|
|
|
|
ret 8
|
|
|
|
;****************************************************
|
|
;*******************Draw Scroller*********************
|
|
;****************************************************
|
|
;IN
|
|
;pointer to control of scroller
|
|
;message
|
|
;OUT
|
|
;not returned value
|
|
align 4
|
|
|
|
scroller:
|
|
|
|
|
|
;get message
|
|
mov eax,[esp+8]
|
|
|
|
;copy message
|
|
mov esi,eax
|
|
mov edi,dword Message
|
|
mov ecx,4
|
|
rep movsd
|
|
|
|
;get pointer to control of scroller
|
|
mov esi,[esp+4]
|
|
mov [PointerForScroller],esi
|
|
;copy control to local control
|
|
mov edi,dword Scroller
|
|
mov ecx,control_header_size+sc_control_data_size
|
|
rep movsb
|
|
|
|
|
|
cmp [eax],dword 1
|
|
jne no_redraw_all_scroller
|
|
|
|
or [Scroller.type],sc_full_redraw
|
|
no_redraw_all_scroller:
|
|
|
|
cmp [eax],dword 2
|
|
jne no_keys_scroller
|
|
|
|
jmp exit_scroller
|
|
no_keys_scroller:
|
|
|
|
cmp [eax],dword 3
|
|
jne no_pressed_button_scroller
|
|
|
|
jmp exit_scroller
|
|
no_pressed_button_scroller:
|
|
|
|
cmp [eax],dword 6
|
|
jne no_mouse_scroller
|
|
|
|
mov esi,[eax+4]
|
|
mov edi,[eax+8]
|
|
mov ecx,[eax+12]
|
|
mov [Scroller.mouseX],si
|
|
mov [Scroller.mouseY],di
|
|
mov [ButtonsOfMouse],ecx
|
|
no_mouse_scroller:
|
|
|
|
|
|
cmp [eax],dword -1
|
|
jne no_delete_scroller
|
|
|
|
mov eax,[Scroller.ChildButton1]
|
|
call free
|
|
|
|
mov eax,[Scroller.ChildButton2]
|
|
call free
|
|
|
|
;push [Scroller.ChildButton1]
|
|
;call destroy_control
|
|
|
|
;push [Scroller.ChildButton2]
|
|
;call destroy_control
|
|
|
|
jmp exit_scroller
|
|
no_delete_scroller:
|
|
|
|
;load coordinats and size from control
|
|
mov eax,[PointerForScroller]
|
|
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 scroller
|
|
mov [Scroller.x],bx
|
|
mov [Scroller.y],cx
|
|
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_check_vertical
|
|
test al,al
|
|
jz set_for_horizontal
|
|
|
|
mov [Scroller.length],si
|
|
|
|
jmp exit_if_vertical
|
|
set_for_horizontal:
|
|
|
|
mov [Scroller.length],dx
|
|
|
|
exit_if_vertical:
|
|
|
|
;checking to craete child buttons
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_check_init_child_buttons
|
|
jnz child_buttons_craeted
|
|
|
|
or [Scroller.type],sc_check_init_child_buttons
|
|
|
|
mov [ChildButton.type],byte sc_child_button_type
|
|
mov [ChildButton.width],16
|
|
mov [ChildButton.height],16
|
|
xor ebx,ebx
|
|
xor ecx,ecx
|
|
mov bx,[Scroller.x]
|
|
mov cx,[Scroller.y]
|
|
mov [ChildButton.x],bx
|
|
mov [ChildButton.y],cx
|
|
|
|
push ChildButton
|
|
push [PointerForScroller]
|
|
|
|
call craete_button
|
|
|
|
mov [Scroller.ChildButton1],eax
|
|
|
|
xor ebx,ebx
|
|
xor ecx,ecx
|
|
mov bx,[Scroller.x]
|
|
mov cx,[Scroller.y]
|
|
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_check_vertical
|
|
test al,al
|
|
jz init_buttons_for_horizontal_scroller
|
|
|
|
|
|
add cx,[Scroller.length]
|
|
sub ecx,16
|
|
|
|
|
|
jmp exit_if_init_buttons_for_horizontal_scroller
|
|
init_buttons_for_horizontal_scroller:
|
|
|
|
|
|
add bx,[Scroller.length]
|
|
sub ebx,16
|
|
|
|
exit_if_init_buttons_for_horizontal_scroller:
|
|
|
|
mov [ChildButton.x],bx
|
|
mov [ChildButton.y],cx
|
|
|
|
push ChildButton
|
|
push [PointerForScroller]
|
|
|
|
call craete_button
|
|
|
|
mov [Scroller.ChildButton2],eax
|
|
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
child_buttons_craeted:
|
|
|
|
;checking for redraw all control
|
|
;if it is true than change koordinats of child buttons
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_redraw
|
|
test al,al
|
|
jz no_change_koordinats_of_child_buttons
|
|
|
|
xor ebx,ebx
|
|
xor ecx,ecx
|
|
mov bx,[Scroller.x]
|
|
mov cx,[Scroller.y]
|
|
|
|
;first child button
|
|
mov eax,[Scroller.ChildButton1]
|
|
mov [eax+24],ebx ;x
|
|
mov [eax+28],ecx ;y
|
|
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_check_vertical
|
|
test al,al
|
|
jz change_koordinats_of_buttons_for_horizontal_scroller
|
|
|
|
add cx,[Scroller.length]
|
|
sub ecx,16
|
|
|
|
jmp exit_if_change_koordinats_of_buttons_for_horizontal_scroller
|
|
change_koordinats_of_buttons_for_horizontal_scroller:
|
|
|
|
add bx,[Scroller.length]
|
|
sub ebx,16
|
|
|
|
exit_if_change_koordinats_of_buttons_for_horizontal_scroller:
|
|
|
|
;second child button
|
|
mov eax,[Scroller.ChildButton2]
|
|
mov [eax+24],ebx ;x
|
|
mov [eax+28],ecx ;y
|
|
|
|
no_change_koordinats_of_child_buttons:
|
|
|
|
;is a 3D scroller ?
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_check_3D_type
|
|
test al,al
|
|
jz no_3D_scroller
|
|
|
|
|
|
mov eax,[Scroller.color1]
|
|
mov ebx,0xffffff
|
|
mov ecx,16
|
|
mov edx,dword pointer
|
|
call gradient
|
|
|
|
mov eax,[pointer+9]
|
|
and eax,0xffffff
|
|
mov [Color],eax
|
|
|
|
mov eax,[pointer]
|
|
mov ebx,0xffffff
|
|
call calculate_average_color
|
|
mov [AveregeColor],eax
|
|
|
|
;is a vertical 3D scroller ?
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_check_vertical
|
|
test al,al
|
|
jz no_vertical_scroller_3D
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
xor ecx,ecx
|
|
xor edx,edx
|
|
xor esi,esi
|
|
xor edi,edi
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov cx,16
|
|
mov dx,[Scroller.length]
|
|
mov si,[Scroller.mouseX]
|
|
mov di,[Scroller.mouseY]
|
|
add ebx,17
|
|
sub edx,17+17
|
|
call CheckCrossingBox
|
|
|
|
cmp eax,0xffffff
|
|
jne no_crossing_vertical_scroller_3D
|
|
|
|
or [Scroller.type],sc_active
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
no_crossing_vertical_scroller_3D:
|
|
|
|
;is a vertical 3D scroller active ?
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_active
|
|
test al,al
|
|
jz no_vertical_scroller_active
|
|
|
|
;calculate size of scroll bar
|
|
xor eax,eax
|
|
mov ax,[Scroller.length]
|
|
sub eax,16+16
|
|
mov [v],eax
|
|
fld [Scroller.size]
|
|
fild [v]
|
|
fmul st0,st1
|
|
fistp [Scrollersize]
|
|
fstp [v]
|
|
|
|
cmp [Scrollersize],4
|
|
jae no_minimum_size_vertical_3D_scroller
|
|
|
|
mov [Scrollersize],4
|
|
no_minimum_size_vertical_3D_scroller:
|
|
|
|
;if scroller is not active than use this is coordinats.
|
|
xor eax,eax
|
|
mov ax,[Scroller.length]
|
|
sub eax,17+17
|
|
sub eax,[Scrollersize]
|
|
mov [yo],eax
|
|
fld [Scroller.pos]
|
|
fild [yo]
|
|
fmul st0,st1
|
|
fistp [v]
|
|
fstp [v2]
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.y]
|
|
add ax,17
|
|
add eax,[v]
|
|
mov [ScrollBar.y],eax
|
|
|
|
;check button of mouse
|
|
mov eax,[ButtonsOfMouse]
|
|
and eax,1b
|
|
test al,al
|
|
jz no_vertical_scroller_move
|
|
;calculate in pixels length of scroll bar
|
|
|
|
xor eax,eax
|
|
xor edx,edx
|
|
xor ecx,ecx
|
|
mov ax,[Scroller.y]
|
|
mov cx,[Scroller.length]
|
|
mov dx,[Scroller.mouseY]
|
|
mov ebx,edx
|
|
add ecx,eax
|
|
add eax,17
|
|
sub ecx,17
|
|
mov esi,ecx
|
|
|
|
sub ebx,eax
|
|
jns no_minimum_scroller_y
|
|
|
|
mov [Scroller.mouseY],ax
|
|
no_minimum_scroller_y:
|
|
|
|
sub ecx,edx
|
|
jns no_maximum_scroller_y
|
|
|
|
mov [Scroller.mouseY],si
|
|
no_maximum_scroller_y:
|
|
|
|
|
|
mov eax,[Scrollersize]
|
|
shr eax,1
|
|
xor ebx,ebx
|
|
mov bx,[Scroller.mouseY]
|
|
sub bx,[Scroller.y]
|
|
sub ebx,17
|
|
xor ecx,ecx
|
|
mov cx,[Scroller.y]
|
|
add cx,[Scroller.length]
|
|
sub cx,17
|
|
sub cx,[Scroller.mouseY]
|
|
|
|
cmp ebx,eax
|
|
jae no_correct_y
|
|
xor edx,edx
|
|
mov dx,[Scroller.y]
|
|
add dx,17
|
|
add edx,eax
|
|
no_correct_y:
|
|
|
|
cmp ecx,eax
|
|
jae no_correct_y_
|
|
xor edx,edx
|
|
mov dx,[Scroller.y]
|
|
add dx,[Scroller.length]
|
|
sub dx,17
|
|
sub edx,eax
|
|
no_correct_y_:
|
|
|
|
mov [ScrollBar.y],edx
|
|
sub [ScrollBar.y],eax
|
|
sub dx,[Scroller.y]
|
|
sub edx,17
|
|
sub edx,eax
|
|
mov [v],edx
|
|
|
|
shl eax,1
|
|
xor ebx,ebx
|
|
mov bx,[Scroller.length]
|
|
sub ebx,17+17
|
|
sub ebx,[Scrollersize]
|
|
mov [v2],ebx
|
|
|
|
fild [v2]
|
|
fild [v]
|
|
fdiv st0,st1
|
|
fstp [Scroller.pos]
|
|
fistp [v2]
|
|
|
|
;put 5 bit(scroll bar move)
|
|
or [Scroller.type],sc_scroll_bar_move
|
|
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
jmp no_vertical_scroller_active
|
|
no_vertical_scroller_move:
|
|
|
|
no_vertical_scroller_active:
|
|
|
|
;if bit 7 is a true than redraw all scroller.
|
|
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_redraw
|
|
test al,al
|
|
jz no_redraw_all_vertical_scroller
|
|
|
|
and [Scroller.type],sc_redraw_off
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
call DrawButtonsOfVertical3DScroller
|
|
|
|
no_redraw_all_vertical_scroller:
|
|
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_scroll_bar_move
|
|
test al,al
|
|
jz no_move_vertical_scroller_bar_3D
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.x]
|
|
mov ebx,[ScrollBar.y]
|
|
mov ecx,[Scrollersize]
|
|
call DrawVertical3DScrollBar
|
|
|
|
and [Scroller.type],sc_scroll_bar_move_off
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
no_move_vertical_scroller_bar_3D:
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
xor ecx,ecx
|
|
xor edx,edx
|
|
xor esi,esi
|
|
xor edi,edi
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov cx,16
|
|
mov dx,[Scroller.length]
|
|
mov si,[Scroller.mouseX]
|
|
mov di,[Scroller.mouseY]
|
|
add ebx,17
|
|
sub edx,17+17
|
|
call CheckCrossingBox
|
|
|
|
cmp eax,0xffffff
|
|
jne no_crossing_vertical_scroller_3D_
|
|
|
|
or [Scroller.type],sc_active
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
jmp exit_crossing_vertical_scroller_3D
|
|
no_crossing_vertical_scroller_3D_:
|
|
|
|
;check button of mouse
|
|
mov eax,[ButtonsOfMouse]
|
|
|
|
and eax,1b
|
|
test al,al
|
|
jnz mouse_button_pressed_vertical
|
|
|
|
and [Scroller.type],sc_move_active_off
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
mouse_button_pressed_vertical:
|
|
|
|
exit_crossing_vertical_scroller_3D:
|
|
|
|
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_active
|
|
test al,al
|
|
jz no_change_vertical_scroller_3D
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.mouseX]
|
|
|
|
sub eax,ebx
|
|
jns no_signum_1
|
|
neg eax
|
|
no_signum_1:
|
|
|
|
cmp eax,110
|
|
jle no_change_bits_vertical_scroller_3D
|
|
|
|
and [Scroller.type],sc_move_active_off
|
|
no_change_bits_vertical_scroller_3D:
|
|
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
no_change_vertical_scroller_3D:
|
|
|
|
no_vertical_scroller_3D:
|
|
|
|
;****************Horinzontal scroller**************
|
|
|
|
;is a horizontal 3D scroller ?
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_check_horizontal
|
|
test al,al
|
|
jz no_horizontal_scroller_3D
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
xor ecx,ecx
|
|
xor edx,edx
|
|
xor esi,esi
|
|
xor edi,edi
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov cx,[Scroller.length]
|
|
mov dx,16
|
|
mov si,[Scroller.mouseX]
|
|
mov di,[Scroller.mouseY]
|
|
add eax,17
|
|
sub ecx,17+17
|
|
call CheckCrossingBox
|
|
|
|
cmp eax,0xffffff
|
|
jne no_crossing_horizontal_scroller_3D
|
|
|
|
or [Scroller.type],sc_active
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
no_crossing_horizontal_scroller_3D:
|
|
|
|
;is a vertical 3D scroller active ?
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_active
|
|
test al,al
|
|
jz no_horizontal_scroller_active
|
|
|
|
;calculate size of scroll bar
|
|
xor eax,eax
|
|
mov ax,[Scroller.length]
|
|
sub eax,16+16
|
|
mov [v],eax
|
|
fld [Scroller.size]
|
|
fild [v]
|
|
fmul st0,st1
|
|
fistp [Scrollersize]
|
|
fstp [v]
|
|
|
|
cmp [Scrollersize],4
|
|
jae no_minimum_size_horizontal_3D_scroller
|
|
|
|
mov [Scrollersize],4
|
|
no_minimum_size_horizontal_3D_scroller:
|
|
|
|
;if scroller is not active than use this is coordinats.
|
|
xor eax,eax
|
|
mov ax,[Scroller.length]
|
|
sub eax,17+17
|
|
sub eax,[Scrollersize]
|
|
mov [xo],eax
|
|
fld [Scroller.pos]
|
|
fild [xo]
|
|
fmul st0,st1
|
|
fistp [v]
|
|
fstp [v2]
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.x]
|
|
add ax,17
|
|
add eax,[v]
|
|
mov [ScrollBar.x],eax
|
|
|
|
;check button of mouse
|
|
mov eax,[ButtonsOfMouse]
|
|
|
|
and eax,1b
|
|
test al,al
|
|
jz no_horizontal_scroller_move
|
|
;calculate in pixels length of scroll bar
|
|
|
|
xor eax,eax
|
|
xor edx,edx
|
|
xor ecx,ecx
|
|
mov ax,[Scroller.x]
|
|
mov cx,[Scroller.length]
|
|
mov dx,[Scroller.mouseX]
|
|
mov ebx,edx
|
|
add ecx,eax
|
|
add eax,17
|
|
sub ecx,17
|
|
mov esi,ecx
|
|
|
|
sub ebx,eax
|
|
jns no_minimum_scroller_x_
|
|
|
|
mov [Scroller.mouseX],ax
|
|
no_minimum_scroller_x_:
|
|
|
|
sub ecx,edx
|
|
jns no_maximum_scroller_x_
|
|
|
|
mov [Scroller.mouseX],si
|
|
no_maximum_scroller_x_:
|
|
|
|
|
|
mov eax,[Scrollersize]
|
|
shr eax,1
|
|
xor ebx,ebx
|
|
mov bx,[Scroller.mouseX]
|
|
sub bx,[Scroller.x]
|
|
sub ebx,17
|
|
xor ecx,ecx
|
|
mov cx,[Scroller.x]
|
|
add cx,[Scroller.length]
|
|
sub cx,17
|
|
sub cx,[Scroller.mouseX]
|
|
|
|
cmp ebx,eax
|
|
jae no_correct_x_
|
|
xor edx,edx
|
|
mov dx,[Scroller.x]
|
|
add dx,17
|
|
add edx,eax
|
|
no_correct_x_:
|
|
|
|
cmp ecx,eax
|
|
jae no_correct_x__
|
|
xor edx,edx
|
|
mov dx,[Scroller.x]
|
|
add dx,[Scroller.length]
|
|
sub dx,17
|
|
sub edx,eax
|
|
no_correct_x__:
|
|
|
|
mov [ScrollBar.x],edx
|
|
sub [ScrollBar.x],eax
|
|
sub dx,[Scroller.x]
|
|
sub edx,17
|
|
sub edx,eax
|
|
mov [v],edx
|
|
|
|
xor ebx,ebx
|
|
mov bx,[Scroller.length]
|
|
sub ebx,17+17
|
|
sub ebx,[Scrollersize]
|
|
mov [v2],ebx
|
|
|
|
fild [v2]
|
|
fild [v]
|
|
fdiv st0,st1
|
|
fstp [Scroller.pos]
|
|
fistp [v2]
|
|
|
|
;put 5 bit(scroll bar move)
|
|
or [Scroller.type],sc_scroll_bar_move
|
|
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
jmp no_horizontal_scroller_active
|
|
no_horizontal_scroller_move:
|
|
|
|
no_horizontal_scroller_active:
|
|
|
|
;if bit 7 is a true than redraw all scroller.
|
|
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_redraw
|
|
test al,al
|
|
jz no_redraw_all_horizontal_scroller
|
|
|
|
and [Scroller.type],sc_redraw_off
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
call DrawButtonsOfHorizontal3DScroller
|
|
|
|
no_redraw_all_horizontal_scroller:
|
|
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_scroll_bar_move
|
|
test al,al
|
|
jz no_move_horizontal_scroller_bar_3D
|
|
|
|
xor ebx,ebx
|
|
mov bx,[Scroller.y]
|
|
mov eax,[ScrollBar.x]
|
|
mov ecx,[Scrollersize]
|
|
call DrawHorizontal3DScrollBar
|
|
|
|
and [Scroller.type],sc_scroll_bar_move_off
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
no_move_horizontal_scroller_bar_3D:
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
xor ecx,ecx
|
|
xor edx,edx
|
|
xor esi,esi
|
|
xor edi,edi
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov dx,16
|
|
mov cx,[Scroller.length]
|
|
mov si,[Scroller.mouseX]
|
|
mov di,[Scroller.mouseY]
|
|
add eax,17
|
|
sub ecx,17+17
|
|
call CheckCrossingBox
|
|
|
|
cmp eax,0xffffff
|
|
jne no_crossing_horizontal_scroller_3D_
|
|
|
|
or [Scroller.type],sc_active
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
jmp exit_crossing_horizontal_scroller_3D
|
|
no_crossing_horizontal_scroller_3D_:
|
|
|
|
;check button of mouse
|
|
mov eax,[ButtonsOfMouse]
|
|
|
|
and eax,1b
|
|
test al,al
|
|
jnz mouse_button_pressed_horizontal
|
|
|
|
and [Scroller.type],sc_move_active_off
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
mouse_button_pressed_horizontal:
|
|
|
|
exit_crossing_horizontal_scroller_3D:
|
|
|
|
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_active
|
|
test al,al
|
|
jz no_change_horizontal_scroller_3D
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.y]
|
|
mov bx,[Scroller.mouseY]
|
|
|
|
sub eax,ebx
|
|
jns no_signum_1_x
|
|
neg eax
|
|
no_signum_1_x:
|
|
|
|
cmp eax,110
|
|
jle no_change_bits_horizontal_scroller_3D
|
|
|
|
and [Scroller.type],sc_move_active_off
|
|
no_change_bits_horizontal_scroller_3D:
|
|
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
no_change_horizontal_scroller_3D:
|
|
|
|
no_horizontal_scroller_3D:
|
|
|
|
no_3D_scroller:
|
|
|
|
;****************************************************
|
|
;********************2D scrollers*********************
|
|
;****************************************************
|
|
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_check_3D_type
|
|
test al,al
|
|
jnz no_2D_scroller
|
|
|
|
mov eax,[Scroller.color1]
|
|
mov ebx,0xffffff
|
|
mov ecx,16
|
|
mov edx,dword pointer
|
|
call gradient
|
|
|
|
mov eax,[pointer+9]
|
|
and eax,0xffffff
|
|
mov [Color],eax
|
|
|
|
mov eax,[pointer]
|
|
mov ebx,0xffffff
|
|
call calculate_average_color
|
|
mov [AveregeColor],eax
|
|
|
|
;is a vertical 2D scroller ?
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_check_vertical
|
|
test al,al
|
|
jz no_vertical_scroller_2D
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
xor ecx,ecx
|
|
xor edx,edx
|
|
xor esi,esi
|
|
xor edi,edi
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov cx,16
|
|
mov dx,[Scroller.length]
|
|
mov si,[Scroller.mouseX]
|
|
mov di,[Scroller.mouseY]
|
|
add ebx,17
|
|
sub edx,17+17
|
|
call CheckCrossingBox
|
|
|
|
cmp eax,0xffffff
|
|
jne no_crossing_vertical_scroller_2D
|
|
|
|
or [Scroller.type],sc_active
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
no_crossing_vertical_scroller_2D:
|
|
|
|
;is a vertical 2D scroller active ?
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_active
|
|
test al,al
|
|
jz no_vertical_scroller_active_2D
|
|
|
|
;calculate size of scroll bar
|
|
xor eax,eax
|
|
mov ax,[Scroller.length]
|
|
sub eax,16+16
|
|
mov [v],eax
|
|
fld [Scroller.size]
|
|
fild [v]
|
|
fmul st0,st1
|
|
fistp [Scrollersize]
|
|
fstp [v]
|
|
|
|
cmp [Scrollersize],4
|
|
jae no_minimum_size_vertical_2D_scroller
|
|
|
|
mov [Scrollersize],4
|
|
no_minimum_size_vertical_2D_scroller:
|
|
|
|
;if scroller is not active than use this is coordinats.
|
|
xor eax,eax
|
|
mov ax,[Scroller.length]
|
|
sub eax,17+17
|
|
sub eax,[Scrollersize]
|
|
mov [yo],eax
|
|
fld [Scroller.pos]
|
|
fild [yo]
|
|
fmul st0,st1
|
|
fistp [v]
|
|
fstp [v2]
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.y]
|
|
add ax,16
|
|
add eax,[v]
|
|
mov [ScrollBar.y],eax
|
|
|
|
;check button of mouse
|
|
mov eax,[ButtonsOfMouse]
|
|
|
|
and eax,1b
|
|
test al,al
|
|
jz no_vertical_scroller_move_2D
|
|
;calculate in pixels length of scroll bar
|
|
|
|
xor eax,eax
|
|
xor edx,edx
|
|
xor ecx,ecx
|
|
mov ax,[Scroller.y]
|
|
mov cx,[Scroller.length]
|
|
mov dx,[Scroller.mouseY]
|
|
mov ebx,edx
|
|
add ecx,eax
|
|
add eax,17
|
|
sub ecx,17
|
|
mov esi,ecx
|
|
|
|
sub ebx,eax
|
|
jns no_minimum_scroller_y_2D
|
|
|
|
mov [Scroller.mouseY],ax
|
|
no_minimum_scroller_y_2D:
|
|
|
|
sub ecx,edx
|
|
jns no_maximum_scroller_y_2D
|
|
|
|
mov [Scroller.mouseY],si
|
|
no_maximum_scroller_y_2D:
|
|
|
|
|
|
mov eax,[Scrollersize]
|
|
shr eax,1
|
|
xor ebx,ebx
|
|
mov bx,[Scroller.mouseY]
|
|
sub bx,[Scroller.y]
|
|
sub ebx,17
|
|
xor ecx,ecx
|
|
mov cx,[Scroller.y]
|
|
add cx,[Scroller.length]
|
|
sub cx,17
|
|
sub cx,[Scroller.mouseY]
|
|
|
|
cmp ebx,eax
|
|
jae no_correct_y_2D_
|
|
xor edx,edx
|
|
mov dx,[Scroller.y]
|
|
add dx,16
|
|
add edx,eax
|
|
no_correct_y_2D_:
|
|
|
|
cmp ecx,eax
|
|
jae no_correct_y_2D
|
|
xor edx,edx
|
|
mov dx,[Scroller.y]
|
|
add dx,[Scroller.length]
|
|
sub dx,16
|
|
sub edx,eax
|
|
no_correct_y_2D:
|
|
|
|
mov [ScrollBar.y],edx
|
|
sub [ScrollBar.y],eax
|
|
sub dx,[Scroller.y]
|
|
sub edx,16
|
|
sub edx,eax
|
|
mov [v],edx
|
|
|
|
shl eax,1
|
|
xor ebx,ebx
|
|
mov bx,[Scroller.length]
|
|
sub ebx,16+16
|
|
sub ebx,[Scrollersize]
|
|
mov [v2],ebx
|
|
|
|
fild [v2]
|
|
fild [v]
|
|
fdiv st0,st1
|
|
fstp [Scroller.pos]
|
|
fistp [v2]
|
|
|
|
;put 5 bit(scroll bar move)
|
|
or [Scroller.type],sc_scroll_bar_move
|
|
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
jmp no_vertical_scroller_active_2D
|
|
no_vertical_scroller_move_2D:
|
|
|
|
no_vertical_scroller_active_2D:
|
|
|
|
;if bit 7 is a true than redraw all scroller.
|
|
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_redraw
|
|
test al,al
|
|
jz no_redraw_all_vertical_scroller_2D
|
|
|
|
and [Scroller.type],sc_redraw_off
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
call DrawButtonsOf2DVerticalScroller
|
|
|
|
no_redraw_all_vertical_scroller_2D:
|
|
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_scroll_bar_move
|
|
test al,al
|
|
jz no_move_vertical_scroller_bar_2D
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.x]
|
|
mov ebx,[ScrollBar.y]
|
|
mov ecx,[Scrollersize]
|
|
call DrawVertical2DScrollBar
|
|
|
|
and [Scroller.type],sc_scroll_bar_move_off
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
no_move_vertical_scroller_bar_2D:
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
xor ecx,ecx
|
|
xor edx,edx
|
|
xor esi,esi
|
|
xor edi,edi
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov cx,16
|
|
mov dx,[Scroller.length]
|
|
mov si,[Scroller.mouseX]
|
|
mov di,[Scroller.mouseY]
|
|
add ebx,17
|
|
sub edx,17+17
|
|
call CheckCrossingBox
|
|
|
|
cmp eax,0xffffff
|
|
jne no_crossing_vertical_scroller_2D_
|
|
|
|
or [Scroller.type],sc_active
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
jmp exit_crossing_vertical_scroller_2D
|
|
no_crossing_vertical_scroller_2D_:
|
|
|
|
;check button of mouse
|
|
mov eax,[ButtonsOfMouse]
|
|
|
|
and eax,1b
|
|
test al,al
|
|
jnz mouse_button_pressed_vertical_2D
|
|
|
|
and [Scroller.type],sc_move_active_off
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
mouse_button_pressed_vertical_2D:
|
|
|
|
exit_crossing_vertical_scroller_2D:
|
|
|
|
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_active
|
|
test al,al
|
|
jz no_change_vertical_scroller_2D
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.mouseX]
|
|
|
|
sub eax,ebx
|
|
jns no_signum_1_y_2D
|
|
neg eax
|
|
no_signum_1_y_2D:
|
|
|
|
cmp eax,110
|
|
jle no_change_bits_vertical_scroller_2D
|
|
|
|
and [Scroller.type],sc_move_active_off
|
|
no_change_bits_vertical_scroller_2D:
|
|
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
no_change_vertical_scroller_2D:
|
|
|
|
no_vertical_scroller_2D:
|
|
|
|
;****************Horinzontal scroller**************
|
|
|
|
;is a horizontal 2D scroller ?
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_check_horizontal
|
|
test al,al
|
|
jz no_horizontal_scroller_2D
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
xor ecx,ecx
|
|
xor edx,edx
|
|
xor esi,esi
|
|
xor edi,edi
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov cx,[Scroller.length]
|
|
mov dx,16
|
|
mov si,[Scroller.mouseX]
|
|
mov di,[Scroller.mouseY]
|
|
add eax,17
|
|
sub ecx,17+17
|
|
call CheckCrossingBox
|
|
|
|
cmp eax,0xffffff
|
|
jne no_crossing_horizontal_scroller_2D
|
|
|
|
or [Scroller.type],sc_active
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
no_crossing_horizontal_scroller_2D:
|
|
|
|
;is a vertical 3D scroller active ?
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_active
|
|
test al,al
|
|
jz no_horizontal_scroller_active_2D
|
|
|
|
;calculate size of scroll bar
|
|
xor eax,eax
|
|
mov ax,[Scroller.length]
|
|
sub eax,16+16
|
|
mov [v],eax
|
|
fld [Scroller.size]
|
|
fild [v]
|
|
fmul st0,st1
|
|
fistp [Scrollersize]
|
|
fstp [v]
|
|
|
|
cmp [Scrollersize],4
|
|
jae no_minimum_size_horizontal_2D_scroller
|
|
|
|
mov [Scrollersize],4
|
|
no_minimum_size_horizontal_2D_scroller:
|
|
|
|
;if scroller is not active than use this is coordinats.
|
|
xor eax,eax
|
|
mov ax,[Scroller.length]
|
|
sub eax,17+17
|
|
sub eax,[Scrollersize]
|
|
mov [yo],eax
|
|
fld [Scroller.pos]
|
|
fild [yo]
|
|
fmul st0,st1
|
|
fistp [v]
|
|
fstp [v2]
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.x]
|
|
add ax,16
|
|
add eax,[v]
|
|
mov [ScrollBar.x],eax
|
|
|
|
;check button of mouse
|
|
mov eax,[ButtonsOfMouse]
|
|
|
|
and eax,1b
|
|
test al,al
|
|
jz no_horizontal_scroller_move_2D
|
|
;calculate in pixels length of scroll bar
|
|
|
|
xor eax,eax
|
|
xor edx,edx
|
|
xor ecx,ecx
|
|
mov ax,[Scroller.x]
|
|
mov cx,[Scroller.length]
|
|
mov dx,[Scroller.mouseX]
|
|
mov ebx,edx
|
|
add ecx,eax
|
|
add eax,17
|
|
sub ecx,17
|
|
mov esi,ecx
|
|
|
|
sub ebx,eax
|
|
jns no_minimum_scroller_x_2D
|
|
|
|
mov [Scroller.mouseX],ax
|
|
no_minimum_scroller_x_2D:
|
|
|
|
sub ecx,edx
|
|
jns no_maximum_scroller_x_2D
|
|
|
|
mov [Scroller.mouseX],si
|
|
no_maximum_scroller_x_2D:
|
|
|
|
|
|
mov eax,[Scrollersize]
|
|
shr eax,1
|
|
xor ebx,ebx
|
|
mov bx,[Scroller.mouseX]
|
|
sub bx,[Scroller.x]
|
|
sub ebx,17
|
|
xor ecx,ecx
|
|
mov cx,[Scroller.x]
|
|
add cx,[Scroller.length]
|
|
sub cx,17
|
|
sub cx,[Scroller.mouseX]
|
|
|
|
cmp ebx,eax
|
|
jae no_correct_x_2D
|
|
xor edx,edx
|
|
mov dx,[Scroller.x]
|
|
add dx,16
|
|
add edx,eax
|
|
no_correct_x_2D:
|
|
|
|
cmp ecx,eax
|
|
jae no_correct_x__2D
|
|
xor edx,edx
|
|
mov dx,[Scroller.x]
|
|
add dx,[Scroller.length]
|
|
sub dx,16
|
|
sub edx,eax
|
|
no_correct_x__2D:
|
|
|
|
mov [ScrollBar.x],edx
|
|
sub [ScrollBar.x],eax
|
|
sub dx,[Scroller.x]
|
|
sub edx,16
|
|
sub edx,eax
|
|
mov [v],edx
|
|
|
|
xor ebx,ebx
|
|
mov bx,[Scroller.length]
|
|
sub ebx,16+16
|
|
sub ebx,[Scrollersize]
|
|
mov [v2],ebx
|
|
|
|
fild [v2]
|
|
fild [v]
|
|
fdiv st0,st1
|
|
fstp [Scroller.pos]
|
|
fistp [v2]
|
|
|
|
;put 5 bit(scroll bar move)
|
|
or [Scroller.type],sc_scroll_bar_move
|
|
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
jmp no_horizontal_scroller_active_2D
|
|
no_horizontal_scroller_move_2D:
|
|
|
|
no_horizontal_scroller_active_2D:
|
|
|
|
;if bit 7 is a true than redraw all scroller.
|
|
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_redraw
|
|
test al,al
|
|
jz no_redraw_all_horizontal_scroller_2D
|
|
|
|
and [Scroller.type],sc_redraw_off
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
call DrawButtonsOf2DHorizontalScroller
|
|
|
|
no_redraw_all_horizontal_scroller_2D:
|
|
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_scroll_bar_move
|
|
test al,al
|
|
jz no_move_horizontal_scroller_bar_2D
|
|
|
|
xor ebx,ebx
|
|
mov bx,[Scroller.y]
|
|
mov eax,[ScrollBar.x]
|
|
mov ecx,[Scrollersize]
|
|
call DrawHorizontal2DScrollBar
|
|
|
|
and [Scroller.type],sc_scroll_bar_move_off
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
no_move_horizontal_scroller_bar_2D:
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
xor ecx,ecx
|
|
xor edx,edx
|
|
xor esi,esi
|
|
xor edi,edi
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov dx,16
|
|
mov cx,[Scroller.length]
|
|
mov si,[Scroller.mouseX]
|
|
mov di,[Scroller.mouseY]
|
|
add eax,17
|
|
sub ecx,17+17
|
|
call CheckCrossingBox
|
|
|
|
cmp eax,0xffffff
|
|
jne no_crossing_horizontal_scroller_2D_
|
|
|
|
or [Scroller.type],sc_active
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
jmp exit_crossing_horizontal_scroller_2D
|
|
no_crossing_horizontal_scroller_2D_:
|
|
|
|
;check button of mouse
|
|
mov eax,[ButtonsOfMouse]
|
|
|
|
and eax,1b
|
|
test al,al
|
|
jnz mouse_button_pressed_horizontal_2D
|
|
|
|
and [Scroller.type],sc_move_active_off
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
mouse_button_pressed_horizontal_2D:
|
|
|
|
exit_crossing_horizontal_scroller_2D:
|
|
|
|
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_active
|
|
test al,al
|
|
jz no_change_horizontal_scroller_2D
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.y]
|
|
mov bx,[Scroller.mouseY]
|
|
|
|
sub eax,ebx
|
|
jns no_signum_1_x_2D
|
|
neg eax
|
|
no_signum_1_x_2D:
|
|
|
|
cmp eax,110
|
|
jle no_change_bits_horizontal_scroller_2D
|
|
|
|
and [Scroller.type],sc_move_active_off
|
|
no_change_bits_horizontal_scroller_2D:
|
|
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
mov ecx,sc_control_data_size
|
|
rep movsb
|
|
|
|
no_change_horizontal_scroller_2D:
|
|
|
|
no_horizontal_scroller_2D:
|
|
|
|
no_2D_scroller:
|
|
|
|
;checking to mouse events
|
|
cmp [Message],dword 6
|
|
jne no_send_message_to_child_buttons_of_scroller
|
|
|
|
;checking first child button
|
|
mov eax,[Scroller.ChildButton1]
|
|
mov ebx,[eax]
|
|
|
|
push Message
|
|
push eax
|
|
call ebx
|
|
|
|
mov eax,[Scroller.ChildButton1]
|
|
|
|
xor ebx,ebx
|
|
mov bl,[eax+45]
|
|
and bl,bt_crossing
|
|
test bl,bl
|
|
jz no_crossing_first_child_button_of_scroller
|
|
|
|
xor ebx,ebx
|
|
mov bl,[eax+45]
|
|
and bl,10b
|
|
test bl,bl
|
|
jz no_crossing_first_child_button_of_scroller
|
|
|
|
or [Scroller.buttons_flags],sc_first_child_button_pressed
|
|
or [Scroller.buttons_flags],10b
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [x],eax
|
|
mov [y],ebx
|
|
|
|
;--------------------------------------
|
|
;---Checking stcroler to 2D or 3D types
|
|
;--------------------------------------
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_check_3D_type
|
|
test al,al
|
|
jnz type_3D_first_child_button_crossing
|
|
|
|
;if we here than scroller 2D type
|
|
|
|
;----------------------------------------------------
|
|
;---Chcecking scroller to horizontal or vertical types
|
|
;----------------------------------------------------
|
|
|
|
call DrawPressedButtonOf2DScroller
|
|
|
|
jmp else_type_3D_first_child_button_crossing
|
|
|
|
type_3D_first_child_button_crossing:
|
|
|
|
;if we here than scroller 3D type
|
|
|
|
call DrawPressedButtonOf3DScroller
|
|
|
|
else_type_3D_first_child_button_crossing:
|
|
|
|
jmp crossing_first_child_button_of_scroller
|
|
no_crossing_first_child_button_of_scroller:
|
|
|
|
and [Scroller.buttons_flags],sc_first_child_button_pressed_off
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.buttons_flags]
|
|
and ax,10b
|
|
test ax,ax
|
|
jz no_put_first_child_button
|
|
|
|
;--------------------------------------
|
|
;---Checking stcroler to 2D or 3D types
|
|
;--------------------------------------
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_check_3D_type
|
|
test al,al
|
|
jnz type_3D_first_child_button_not_crossing
|
|
|
|
;if we here than scroller 2D type
|
|
|
|
;----------------------------------------------------
|
|
;---Chcecking scroller to horizontal or vertical types
|
|
;----------------------------------------------------
|
|
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_check_vertical
|
|
test al,al
|
|
jz type_horizontal_first_child_2D_button
|
|
|
|
;put vertical first child button
|
|
call DrawButtonsOf2DVerticalScroller
|
|
|
|
jmp exit_else_type_horizontal_first_child_2D_button
|
|
type_horizontal_first_child_2D_button:
|
|
|
|
;put horizontal first child button
|
|
call DrawButtonsOf2DVerticalScroller
|
|
|
|
exit_else_type_horizontal_first_child_2D_button:
|
|
|
|
jmp else_type_3D_first_child_button_not_crossing
|
|
|
|
type_3D_first_child_button_not_crossing:
|
|
|
|
;if we here than scroller 3D type
|
|
|
|
;----------------------------------------------------
|
|
;---Chcecking scroller to horizontal or vertical types
|
|
;----------------------------------------------------
|
|
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_check_vertical
|
|
test al,al
|
|
jz type_horizontal_first_child_3D_button
|
|
|
|
;put vertical first child button
|
|
call DrawButtonsOfVertical3DScroller
|
|
|
|
jmp else_type_3D_first_child_button_not_crossing
|
|
|
|
type_horizontal_first_child_3D_button:
|
|
|
|
;put horizontal first child button
|
|
call DrawButtonsOfHorizontal3DScroller
|
|
|
|
else_type_3D_first_child_button_not_crossing:
|
|
|
|
and [Scroller.buttons_flags],11111101b
|
|
|
|
no_put_first_child_button:
|
|
|
|
crossing_first_child_button_of_scroller:
|
|
|
|
;checking second child button
|
|
mov eax,[Scroller.ChildButton2]
|
|
mov ebx,[eax]
|
|
|
|
push Message
|
|
push eax
|
|
call ebx
|
|
|
|
mov eax,[Scroller.ChildButton2]
|
|
|
|
xor ebx,ebx
|
|
mov bl,[eax+45]
|
|
and bl,bt_crossing
|
|
test bl,bl
|
|
jz no_crossing_second_child_button_of_scroller
|
|
|
|
xor ebx,ebx
|
|
mov bl,[eax+45]
|
|
and bl,10b
|
|
test bl,bl
|
|
jz no_crossing_second_child_button_of_scroller
|
|
|
|
or [Scroller.buttons_flags],sc_second_child_button_pressed
|
|
or [Scroller.buttons_flags],100000b
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
xor ecx,ecx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [x],eax
|
|
mov [y],ebx
|
|
|
|
mov cx,[Scroller.length]
|
|
sub ecx,16
|
|
|
|
;----------------------------------------------------
|
|
;---Chcecking scroller to horizontal or vertical types
|
|
;----------------------------------------------------
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_check_vertical
|
|
test al,al
|
|
jz calculate_pos_horizontal_second_child_button
|
|
|
|
add [y],ecx
|
|
|
|
jmp exit_else_calculate_pos_horizontal_second_child_button
|
|
calculate_pos_horizontal_second_child_button:
|
|
|
|
add [x],ecx
|
|
|
|
exit_else_calculate_pos_horizontal_second_child_button:
|
|
|
|
;--------------------------------------
|
|
;---Checking stcroler to 2D or 3D types
|
|
;--------------------------------------
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_check_3D_type
|
|
test al,al
|
|
jnz type_3D_second_child_button_crossing
|
|
|
|
;if we here than scroller 2D type
|
|
|
|
;----------------------------------------------------
|
|
;---Chcecking scroller to horizontal or vertical types
|
|
;----------------------------------------------------
|
|
|
|
call DrawPressedButtonOf2DScroller
|
|
|
|
jmp else_type_3D_second_child_button_crossing
|
|
|
|
type_3D_second_child_button_crossing:
|
|
|
|
;if we here than scroller 3D type
|
|
|
|
call DrawPressedButtonOf3DScroller
|
|
|
|
else_type_3D_second_child_button_crossing:
|
|
|
|
jmp crossing_second_child_button_of_scroller
|
|
no_crossing_second_child_button_of_scroller:
|
|
|
|
and [Scroller.buttons_flags],sc_second_child_button_pressed_off
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.buttons_flags]
|
|
and ax,100000b
|
|
test ax,ax
|
|
jz no_put_second_child_button
|
|
|
|
;--------------------------------------
|
|
;---Checking stcroler to 2D or 3D types
|
|
;--------------------------------------
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_check_3D_type
|
|
test al,al
|
|
jnz type_3D_second_child_button_not_crossing
|
|
|
|
;if we here than scroller 2D type
|
|
|
|
;----------------------------------------------------
|
|
;---Chcecking scroller to horizontal or vertical types
|
|
;----------------------------------------------------
|
|
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_check_vertical
|
|
test al,al
|
|
jz type_horizontal_second_child_2D_button
|
|
|
|
;put vertical first child button
|
|
call DrawButtonsOf2DVerticalScroller
|
|
|
|
jmp exit_else_type_horizontal_second_child_2D_button
|
|
type_horizontal_second_child_2D_button:
|
|
|
|
;put horizontal first child button
|
|
call DrawButtonsOf2DVerticalScroller
|
|
|
|
exit_else_type_horizontal_second_child_2D_button:
|
|
|
|
jmp else_type_3D_second_child_button_not_crossing
|
|
|
|
type_3D_second_child_button_not_crossing:
|
|
|
|
;if we here than scroller 3D type
|
|
|
|
;----------------------------------------------------
|
|
;---Chcecking scroller to horizontal or vertical types
|
|
;----------------------------------------------------
|
|
|
|
xor eax,eax
|
|
mov al,[Scroller.type]
|
|
and al,sc_check_vertical
|
|
test al,al
|
|
jz type_horizontal_second_child_3D_button
|
|
|
|
;put vertical first child button
|
|
call DrawButtonsOfVertical3DScroller
|
|
|
|
jmp else_type_3D_second_child_button_not_crossing
|
|
|
|
type_horizontal_second_child_3D_button:
|
|
|
|
;put horizontal first child button
|
|
call DrawButtonsOfHorizontal3DScroller
|
|
|
|
else_type_3D_second_child_button_not_crossing:
|
|
|
|
and [Scroller.buttons_flags],11011111b
|
|
|
|
no_put_second_child_button:
|
|
|
|
crossing_second_child_button_of_scroller:
|
|
|
|
no_send_message_to_child_buttons_of_scroller:
|
|
|
|
exit_scroller:
|
|
|
|
;save resultat of work in control
|
|
mov esi,dword Scroller
|
|
mov edi,[PointerForScroller]
|
|
mov ecx,sc_control_data_size
|
|
add esi,control_header_size
|
|
add edi,control_header_size
|
|
rep movsb
|
|
|
|
ret 8
|
|
|
|
|
|
DrawPressedButtonOf2DScroller:
|
|
|
|
and [Line.color],0;eax
|
|
|
|
;draw horizontal up light line
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],15
|
|
call DrawLine
|
|
|
|
;draw vertical up light line
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],14
|
|
call DrawLine
|
|
|
|
;mov eax,[colors_table2+8*3]
|
|
;and eax,0xffffff
|
|
mov [Line.color],0xffffff ;eax
|
|
|
|
;draw vertical up dark line
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
add eax,15
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],15
|
|
call DrawLine
|
|
|
|
;draw horizontal up dark line
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
add ebx,15
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],15
|
|
call DrawLine
|
|
|
|
ret
|
|
|
|
DrawPressedButtonOf3DScroller:
|
|
|
|
and [Line.color],0;eax
|
|
|
|
;draw horizontal up light line
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],16
|
|
call DrawLine
|
|
|
|
;draw vertical up light line
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],16
|
|
call DrawLine
|
|
|
|
;mov eax,[colors_table2+8*3]
|
|
;and eax,0xffffff
|
|
mov [Line.color],0xffffff ;eax
|
|
|
|
;draw vertical up dark line
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
add eax,16
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],16
|
|
call DrawLine
|
|
|
|
;draw horizontal up dark line
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
add ebx,16
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],16
|
|
call DrawLine
|
|
|
|
ret
|
|
|
|
DrawButtonsOf2DHorizontalScroller:
|
|
|
|
;generate colors tables
|
|
mov eax,[Scroller.color1]
|
|
mov ebx,0xffffff
|
|
mov ecx,20
|
|
mov edx,dword colors_table1
|
|
call gradient
|
|
|
|
xor eax,eax
|
|
mov ebx,[Scroller.color1]
|
|
mov ecx,20
|
|
mov edx,dword colors_table2
|
|
call gradient
|
|
|
|
;draw vertical up rectangle
|
|
xor ebx,ebx
|
|
xor ecx,ecx
|
|
mov eax,13
|
|
mov bx,[Scroller.x]
|
|
mov cx,[Scroller.y]
|
|
shl ebx,16
|
|
shl ecx,16
|
|
add ebx,16
|
|
add ecx,16
|
|
mov edx,[Color]
|
|
and edx,0xffffff
|
|
mcall
|
|
|
|
mov eax,[colors_table1+15*3]
|
|
and eax,0xffffff
|
|
mov [Line.color],eax
|
|
|
|
;draw horizontal up light line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],15
|
|
call DrawLine
|
|
|
|
;draw vertical up light line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],15
|
|
call DrawLine
|
|
|
|
mov eax,[colors_table2+8*3]
|
|
and eax,0xffffff
|
|
mov [Line.color],eax
|
|
|
|
;draw vertical up dark line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,15
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],15
|
|
call DrawLine
|
|
|
|
;draw horizontal up dark line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ebx,15
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],14
|
|
call DrawLine
|
|
|
|
and [Line.color],0
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],5
|
|
add [Line.x2],9
|
|
add [Line.y1],8
|
|
add [Line.y2],4
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],6
|
|
add [Line.x2],9
|
|
add [Line.y1],8
|
|
add [Line.y2],5
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],5
|
|
add [Line.x2],9
|
|
add [Line.y1],8
|
|
add [Line.y2],12
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],6
|
|
add [Line.x2],9
|
|
add [Line.y1],8
|
|
add [Line.y2],11
|
|
call DrawLine
|
|
|
|
;draw vertical down rectangle
|
|
xor ebx,ebx
|
|
xor ecx,ecx
|
|
mov eax,13
|
|
mov edx,[Color]
|
|
mov bx,[Scroller.x]
|
|
mov cx,[Scroller.y]
|
|
add bx,[Scroller.length]
|
|
sub bx,16
|
|
shl ebx,16
|
|
shl ecx,16
|
|
add ebx,16
|
|
add ecx,16
|
|
and edx,0xffffff
|
|
mcall
|
|
|
|
mov eax,[colors_table1+15*3]
|
|
and eax,0xffffff
|
|
mov [Line.color],eax
|
|
|
|
;draw horizontal up light line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ax,[Scroller.length]
|
|
sub eax,15
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],15
|
|
call DrawLine
|
|
|
|
;draw vertical up light line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ax,[Scroller.length]
|
|
sub eax,16
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],15
|
|
call DrawLine
|
|
|
|
mov eax,[colors_table2+8*3]
|
|
and eax,0xffffff
|
|
mov [Line.color],eax
|
|
|
|
;draw vertical up dark line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ax,[Scroller.length]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],15
|
|
call DrawLine
|
|
|
|
;draw horizontal up dark line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ax,[Scroller.length]
|
|
sub eax,15
|
|
add ebx,15
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],15
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.length]
|
|
sub eax,16
|
|
mov [length],eax
|
|
|
|
and [Line.color],0
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,[length]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],12
|
|
add [Line.x2],8
|
|
add [Line.y1],8
|
|
add [Line.y2],4
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,[length]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],11
|
|
add [Line.x2],8
|
|
add [Line.y1],8
|
|
add [Line.y2],5
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,[length]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],12
|
|
add [Line.x2],8
|
|
add [Line.y1],8
|
|
add [Line.y2],12
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,[length]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],11
|
|
add [Line.x2],8
|
|
add [Line.y1],8
|
|
add [Line.y2],11
|
|
call DrawLine
|
|
|
|
ret
|
|
|
|
DrawButtonsOf2DVerticalScroller:
|
|
|
|
;generate colors tables
|
|
mov eax,[Scroller.color1]
|
|
mov ebx,0xffffff
|
|
mov ecx,20
|
|
mov edx,dword colors_table1
|
|
call gradient
|
|
|
|
xor eax,eax
|
|
mov ebx,[Scroller.color1]
|
|
mov ecx,20
|
|
mov edx,dword colors_table2
|
|
call gradient
|
|
|
|
;draw vertical up rectangle
|
|
mov eax,13
|
|
mov edx,[Color]
|
|
xor ebx,ebx
|
|
xor ecx,ecx
|
|
mov bx,[Scroller.x]
|
|
mov cx,[Scroller.y]
|
|
shl ebx,16
|
|
shl ecx,16
|
|
add ebx,16
|
|
add ecx,16
|
|
and edx,0xffffff
|
|
mcall
|
|
|
|
mov eax,[colors_table1+15*3]
|
|
and eax,0xffffff
|
|
mov [Line.color],eax
|
|
|
|
;draw horizontal up light line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],14
|
|
call DrawLine
|
|
|
|
;draw vertical up light line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],14
|
|
call DrawLine
|
|
|
|
mov eax,[colors_table2+8*3];[pointer]
|
|
and eax,0xffffff
|
|
mov [Line.color],eax
|
|
|
|
;draw vertical up dark line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,15
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],15
|
|
call DrawLine
|
|
|
|
;draw horizontal up dark line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ebx,15
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],15
|
|
call DrawLine
|
|
|
|
and [Line.color],0
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],4
|
|
add [Line.x2],8
|
|
add [Line.y1],9
|
|
add [Line.y2],5
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],4
|
|
add [Line.x2],8
|
|
add [Line.y1],10
|
|
add [Line.y2],6
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],8
|
|
add [Line.x2],12
|
|
add [Line.y1],5
|
|
add [Line.y2],9
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],8
|
|
add [Line.x2],12
|
|
add [Line.y1],6
|
|
add [Line.y2],10
|
|
call DrawLine
|
|
|
|
;draw vertical down rectangle
|
|
xor ebx,ebx
|
|
xor ecx,ecx
|
|
mov eax,13
|
|
mov edx,[Color]
|
|
and edx,0xffffff
|
|
mov bx,[Scroller.x]
|
|
mov cx,[Scroller.y]
|
|
add cx,[Scroller.length]
|
|
sub cx,16
|
|
shl ebx,16
|
|
shl ecx,16
|
|
add ebx,16
|
|
add ecx,16
|
|
mcall
|
|
|
|
mov eax,[colors_table1+15*3]
|
|
and eax,0xffffff
|
|
mov [Line.color],eax
|
|
|
|
;draw horizontal up light line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add bx,[Scroller.length]
|
|
sub ebx,16
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],15
|
|
call DrawLine
|
|
|
|
;draw vertical up light line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add bx,[Scroller.length]
|
|
sub ebx,16
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],15
|
|
call DrawLine
|
|
|
|
mov eax,[colors_table2+8*3];[pointer]
|
|
and eax,0xffffff
|
|
mov [Line.color],eax
|
|
|
|
;draw vertical up dark line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add bx,[Scroller.length]
|
|
sub ebx,16
|
|
add eax,15
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],15
|
|
call DrawLine
|
|
|
|
;draw horizontal up dark line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add bx,[Scroller.length]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],15
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.length]
|
|
sub eax,16
|
|
mov [length],eax
|
|
|
|
and [Line.color],0
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ebx,[length]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],4
|
|
add [Line.x2],8
|
|
add [Line.y1],7
|
|
add [Line.y2],11
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ebx,[length]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],4
|
|
add [Line.x2],8
|
|
add [Line.y1],6
|
|
add [Line.y2],10
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ebx,[length]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],12
|
|
add [Line.x2],8
|
|
add [Line.y1],7
|
|
add [Line.y2],11
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ebx,[length]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],12
|
|
add [Line.x2],8
|
|
add [Line.y1],6
|
|
add [Line.y2],10
|
|
call DrawLine
|
|
|
|
ret
|
|
|
|
DrawButtonsOfHorizontal3DScroller:
|
|
|
|
;draw vertical up rectangle
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Rectangle.x],eax
|
|
mov [Rectangle.y],ebx
|
|
mov [Rectangle.width],16
|
|
mov [Rectangle.height],16
|
|
|
|
mov eax,[pointer]
|
|
and eax,0xffffff
|
|
mov [Rectangle.color],eax
|
|
call RectangleContour
|
|
|
|
;draw gradient right
|
|
mov eax,[Scroller.color1]
|
|
mov ebx,dword 0xffffff
|
|
and eax,0xffffff
|
|
xor ecx,ecx
|
|
xor edx,edx
|
|
xor esi,esi
|
|
xor edi,edi
|
|
mov cx,[Scroller.x]
|
|
mov dx,[Scroller.y]
|
|
mov si,(16-1)
|
|
mov di,(16-2)
|
|
add cx,1
|
|
add dx,1
|
|
call rectangle_gradient_up
|
|
|
|
mov eax,[pointer+10*3]
|
|
and eax,0xffffff
|
|
mov [Line.color],eax
|
|
|
|
;draw horizontal up light line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,1
|
|
add ebx,1
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],14
|
|
call DrawLine
|
|
|
|
;draw vertical up light line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,1
|
|
add ebx,1
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],14
|
|
call DrawLine
|
|
|
|
mov eax,[Color]
|
|
mov [Line.color],eax
|
|
|
|
;draw vertical up dark line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,16
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y1],1
|
|
add [Line.y2],14
|
|
call DrawLine
|
|
|
|
;draw horizontal up dark line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,1
|
|
add ebx,15
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],14
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
mov eax,[AveregeColor]
|
|
mov [Pixel.color],eax
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.x]
|
|
add eax,16
|
|
mov [Pixel.x],eax
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.x]
|
|
mov [Pixel.x],eax
|
|
add [Pixel.y],16
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,16
|
|
add ebx,16
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
;----------------
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,1
|
|
add ebx,1
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,15
|
|
add ebx,1
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,1
|
|
add ebx,15
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,15
|
|
add ebx,15
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
mov [Line.color],0
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],5
|
|
add [Line.x2],9
|
|
add [Line.y1],8
|
|
add [Line.y2],4
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],6
|
|
add [Line.x2],9
|
|
add [Line.y1],8
|
|
add [Line.y2],5
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],5
|
|
add [Line.x2],9
|
|
add [Line.y1],8
|
|
add [Line.y2],12
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],6
|
|
add [Line.x2],9
|
|
add [Line.y1],8
|
|
add [Line.y2],11
|
|
call DrawLine
|
|
|
|
;draw vertical down rectangle
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ax,[Scroller.length]
|
|
sub ax,16
|
|
mov [Rectangle.x],eax
|
|
mov [Rectangle.y],ebx
|
|
mov [Rectangle.width],16
|
|
mov [Rectangle.height],16
|
|
|
|
mov eax,[pointer]
|
|
and eax,0xffffff
|
|
mov [Rectangle.color],eax
|
|
call RectangleContour
|
|
|
|
;draw gradient right
|
|
mov eax,[Scroller.color1]
|
|
mov ebx,dword 0xffffff
|
|
and eax,0xffffff
|
|
xor ecx,ecx
|
|
xor edx,edx
|
|
xor esi,esi
|
|
xor edi,edi
|
|
mov cx,[Scroller.x]
|
|
mov dx,[Scroller.y]
|
|
add cx,[Scroller.length]
|
|
sub cx,16
|
|
mov si,(16-1)
|
|
mov di,(16-2)
|
|
add cx,1
|
|
add dx,1
|
|
call rectangle_gradient_up
|
|
|
|
mov eax,[pointer+10*3]
|
|
and eax,0xffffff
|
|
mov [Line.color],eax
|
|
|
|
;draw horizontal up light line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ax,[Scroller.length]
|
|
sub eax,15
|
|
add ebx,1
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],15
|
|
call DrawLine
|
|
|
|
;draw vertical up light line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ebx,1
|
|
add ax,[Scroller.length]
|
|
sub eax,15
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],14
|
|
call DrawLine
|
|
|
|
mov eax,[Color];[pointer]
|
|
mov [Line.color],eax
|
|
|
|
;draw vertical up dark line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ax,[Scroller.length]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],15
|
|
call DrawLine
|
|
|
|
;draw horizontal up dark line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ax,[Scroller.length]
|
|
sub eax,15
|
|
add ebx,15
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],14
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.length]
|
|
sub eax,16
|
|
mov [length],eax
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,[length]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
add [Pixel.x],16
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ebx,16
|
|
add eax,[length]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,16
|
|
add ebx,16
|
|
add eax,[length]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
;----------------
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,1
|
|
add ebx,1
|
|
add eax,[length]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,15
|
|
add ebx,1
|
|
add eax,[length]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,1
|
|
add ebx,15
|
|
add eax,[length]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,15
|
|
add ebx,15
|
|
add eax,[length]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.length]
|
|
sub eax,16
|
|
mov [length],eax
|
|
|
|
and [Line.color],0
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,[length]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],12
|
|
add [Line.x2],8
|
|
add [Line.y1],8
|
|
add [Line.y2],4
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,[length]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],11
|
|
add [Line.x2],8
|
|
add [Line.y1],8
|
|
add [Line.y2],5
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,[length]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],12
|
|
add [Line.x2],8
|
|
add [Line.y1],8
|
|
add [Line.y2],12
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,[length]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],11
|
|
add [Line.x2],8
|
|
add [Line.y1],8
|
|
add [Line.y2],11
|
|
call DrawLine
|
|
|
|
ret
|
|
|
|
DrawButtonsOfVertical3DScroller:
|
|
|
|
;draw vertical up rectangle
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Rectangle.x],eax
|
|
mov [Rectangle.y],ebx
|
|
mov [Rectangle.width],16
|
|
mov [Rectangle.height],16
|
|
|
|
mov eax,[pointer]
|
|
and eax,0xffffff
|
|
mov [Rectangle.color],eax
|
|
call RectangleContour
|
|
|
|
;draw gradient right
|
|
mov eax,[Scroller.color1]
|
|
mov ebx,dword 0xffffff
|
|
and eax,0xffffff
|
|
xor ecx,ecx
|
|
xor edx,edx
|
|
xor esi,esi
|
|
xor edi,edi
|
|
mov cx,[Scroller.x]
|
|
mov dx,[Scroller.y]
|
|
mov si,(16-1)
|
|
mov di,(16-2)
|
|
add cx,1
|
|
add dx,1
|
|
call rectangle_gradient_right
|
|
|
|
mov eax,[pointer+10*3]
|
|
and eax,0xffffff
|
|
mov [Line.color],eax
|
|
|
|
;draw horizontal up light line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,1
|
|
add ebx,1
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],14
|
|
call DrawLine
|
|
|
|
;draw vertical up light line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,1
|
|
add ebx,1
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],14
|
|
call DrawLine
|
|
|
|
mov eax,[Color]
|
|
mov [Line.color],eax
|
|
|
|
;draw vertical up dark line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,15
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y1],1
|
|
add [Line.y2],14
|
|
call DrawLine
|
|
|
|
;draw horizontal up dark line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,1
|
|
add ebx,15
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],14
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
mov eax,[AveregeColor]
|
|
mov [Pixel.color],eax
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.x]
|
|
add eax,16
|
|
mov [Pixel.x],eax
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ebx,16
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,16
|
|
add ebx,16
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
;----------------
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,1
|
|
add ebx,1
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,15
|
|
add ebx,1
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,1
|
|
add ebx,15
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,15
|
|
add ebx,15
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
and [Line.color],0
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],4
|
|
add [Line.x2],8
|
|
add [Line.y1],9
|
|
add [Line.y2],5
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],4
|
|
add [Line.x2],8
|
|
add [Line.y1],10
|
|
add [Line.y2],6
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],8
|
|
add [Line.x2],12
|
|
add [Line.y1],5
|
|
add [Line.y2],9
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],8
|
|
add [Line.x2],12
|
|
add [Line.y1],6
|
|
add [Line.y2],10
|
|
call DrawLine
|
|
|
|
;draw vertical down rectangle
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add bx,[Scroller.length]
|
|
sub bx,16
|
|
mov [Rectangle.x],eax
|
|
mov [Rectangle.y],ebx
|
|
mov [Rectangle.width],16
|
|
mov [Rectangle.height],16
|
|
|
|
mov eax,[pointer]
|
|
and eax,0xffffff
|
|
mov [Rectangle.color],eax
|
|
call RectangleContour
|
|
|
|
;draw gradient right
|
|
mov eax,[Scroller.color1]
|
|
mov ebx,dword 0xffffff
|
|
and eax,0xffffff
|
|
xor ecx,ecx
|
|
xor edx,edx
|
|
xor esi,esi
|
|
xor edi,edi
|
|
mov cx,[Scroller.x]
|
|
mov dx,[Scroller.y]
|
|
add dx,[Scroller.length]
|
|
sub dx,(16-1)
|
|
mov si,(16-1)
|
|
mov di,(16-2)
|
|
add cx,1
|
|
call rectangle_gradient_right
|
|
|
|
mov eax,[pointer+10*3]
|
|
and eax,0xffffff
|
|
mov [Line.color],eax
|
|
|
|
;draw horizontal up light line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add bx,[Scroller.length]
|
|
sub ebx,15
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],1
|
|
add [Line.x2],15
|
|
call DrawLine
|
|
|
|
;draw vertical up light line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,1
|
|
add bx,[Scroller.length]
|
|
sub ebx,15
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],14
|
|
call DrawLine
|
|
|
|
mov eax,[Color];[pointer]
|
|
mov [Line.color],eax
|
|
|
|
;draw vertical up dark line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add bx,[Scroller.length]
|
|
sub ebx,15
|
|
add eax,15
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],14
|
|
call DrawLine
|
|
|
|
;draw horizontal up dark line
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add bx,[Scroller.length]
|
|
add eax,1
|
|
sub ebx,1
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],14
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.length]
|
|
sub eax,16
|
|
mov [length],eax
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ebx,[length]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.x]
|
|
add eax,16
|
|
mov [Pixel.x],eax
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.x]
|
|
mov [Pixel.x],eax
|
|
add [Pixel.y],16
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,16
|
|
add ebx,16
|
|
add ebx,[length]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
;----------------
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,1
|
|
add ebx,1
|
|
add ebx,[length]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,15
|
|
add ebx,1
|
|
add ebx,[length]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,1
|
|
add ebx,15
|
|
add ebx,[length]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add eax,15
|
|
add ebx,15
|
|
add ebx,[length]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.length]
|
|
sub eax,16
|
|
mov [length],eax
|
|
|
|
and [Line.color],0
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ebx,[length]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],4
|
|
add [Line.x2],8
|
|
add [Line.y1],7
|
|
add [Line.y2],11
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ebx,[length]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],4
|
|
add [Line.x2],8
|
|
add [Line.y1],6
|
|
add [Line.y2],10
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ebx,[length]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],12
|
|
add [Line.x2],8
|
|
add [Line.y1],7
|
|
add [Line.y2],11
|
|
call DrawLine
|
|
|
|
xor eax,eax
|
|
xor ebx,ebx
|
|
mov ax,[Scroller.x]
|
|
mov bx,[Scroller.y]
|
|
add ebx,[length]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x1],12
|
|
add [Line.x2],8
|
|
add [Line.y1],6
|
|
add [Line.y2],10
|
|
call DrawLine
|
|
|
|
ret
|
|
|
|
;eax - x
|
|
;ebx - y
|
|
;ecx - size y in pixels
|
|
DrawVertical3DScrollBar:
|
|
|
|
mov [x],eax
|
|
mov [y],ebx
|
|
mov [length2],ecx
|
|
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
mov ecx,[length2]
|
|
mov edx,[pointer]
|
|
and edx,0xffffff
|
|
mov [Rectangle.x],eax
|
|
mov [Rectangle.y],ebx
|
|
mov [Rectangle.width],16
|
|
mov [Rectangle.height],ecx
|
|
mov [Rectangle.color],edx
|
|
call RectangleContour
|
|
|
|
;draw gradient right
|
|
mov eax,[Scroller.color1]
|
|
mov ebx,dword 0xffffff
|
|
and eax,0xffffff
|
|
xor esi,esi
|
|
xor edi,edi
|
|
mov ecx,[x]
|
|
mov edx,[y]
|
|
add edx,1
|
|
mov si,(16-1)
|
|
mov edi,[length2]
|
|
sub edi,2
|
|
call rectangle_gradient_right
|
|
|
|
;------------------
|
|
xor eax,eax
|
|
mov eax,[AveregeColor]
|
|
mov [Pixel.color],eax
|
|
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
mov eax,[x]
|
|
add eax,16
|
|
mov [Pixel.x],eax
|
|
call DrawPixel
|
|
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
add ebx,[length2]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
add eax,16
|
|
add ebx,[length2]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
add eax,1
|
|
add ebx,1
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
add eax,15
|
|
add ebx,1
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
add eax,1
|
|
add ebx,[length2]
|
|
sub ebx,1
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
add eax,16
|
|
add ebx,[length2]
|
|
sub eax,1
|
|
sub ebx,1
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
cmp [length2],12
|
|
jl no_draw_reliev_vertical_3D
|
|
|
|
mov ebx,[x]
|
|
mov eax,[length2]
|
|
shr eax,1
|
|
add eax,[y]
|
|
add ebx,5
|
|
sub eax,3
|
|
|
|
mov [Line.x1],ebx
|
|
mov [Line.x2],ebx
|
|
mov [Line.y1],eax
|
|
mov [Line.y2],eax
|
|
mov [Line.color],0xffffff
|
|
add [Line.x2],6
|
|
|
|
mov esi,4
|
|
next_light_line_draw_r_vertical_3D:
|
|
|
|
call DrawLine
|
|
add [Line.y1],2
|
|
add [Line.y2],2
|
|
|
|
dec esi
|
|
jnz next_light_line_draw_r_vertical_3D
|
|
|
|
mov ebx,[x]
|
|
mov eax,[length2]
|
|
shr eax,1
|
|
add eax,[y]
|
|
add ebx,6
|
|
sub eax,2
|
|
|
|
mov ecx,[Scroller.color1]
|
|
mov [Line.x1],ebx
|
|
mov [Line.x2],ebx
|
|
mov [Line.y1],eax
|
|
mov [Line.y2],eax
|
|
mov [Line.color],ecx
|
|
add [Line.x2],6
|
|
|
|
mov esi,4
|
|
next_dark_line_draw_r_vertical_3D:
|
|
|
|
call DrawLine
|
|
add [Line.y1],2
|
|
add [Line.y2],2
|
|
|
|
dec esi
|
|
jnz next_dark_line_draw_r_vertical_3D
|
|
|
|
no_draw_reliev_vertical_3D:
|
|
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.y]
|
|
mov ebx,[y]
|
|
add eax,17
|
|
|
|
sub ebx,eax
|
|
jz no_draw_up_rectangle_vertical_3D
|
|
js no_draw_up_rectangle_vertical_3D
|
|
|
|
sub ebx,1
|
|
|
|
mov edi,ebx
|
|
|
|
mov eax,0xe4e4e4
|
|
mov ebx,0xffffff
|
|
xor edx,edx
|
|
mov ecx,[x]
|
|
mov dx,[Scroller.y]
|
|
add edx,17
|
|
sub ecx,1
|
|
mov esi,17
|
|
call rectangle_gradient_right
|
|
no_draw_up_rectangle_vertical_3D:
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.y]
|
|
add ax,[Scroller.length]
|
|
mov ebx,[y]
|
|
add ebx,[length2]
|
|
sub eax,17
|
|
|
|
sub eax,ebx
|
|
jz no_draw_down_rectangle_vertical_3D
|
|
js no_draw_down_rectangle_vertical_3D
|
|
|
|
sub eax,1
|
|
mov edi,eax
|
|
|
|
mov eax,0xe4e4e4
|
|
mov ebx,0xffffff
|
|
mov ecx,[x]
|
|
xor edx,edx
|
|
mov edx,[y]
|
|
add edx,[length2]
|
|
add edx,1
|
|
sub ecx,1
|
|
mov esi,17
|
|
call rectangle_gradient_right
|
|
|
|
no_draw_down_rectangle_vertical_3D:
|
|
|
|
ret
|
|
|
|
;eax - x
|
|
;ebx - y
|
|
;ecx - size y in pixels
|
|
DrawHorizontal3DScrollBar:
|
|
|
|
mov [x],eax
|
|
mov [y],ebx
|
|
mov [length2],ecx
|
|
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
mov ecx,[length2]
|
|
mov edx,[pointer]
|
|
and edx,0xffffff
|
|
mov [Rectangle.x],eax
|
|
mov [Rectangle.y],ebx
|
|
mov [Rectangle.width],ecx
|
|
mov [Rectangle.height],16
|
|
mov [Rectangle.color],edx
|
|
call RectangleContour
|
|
|
|
;draw gradient right
|
|
mov eax,[Scroller.color1]
|
|
mov ebx,dword 0xffffff
|
|
and eax,0xffffff
|
|
xor esi,esi
|
|
xor edi,edi
|
|
mov ecx,[x]
|
|
mov edx,[y]
|
|
add ecx,1
|
|
mov edi,(16-1)
|
|
mov esi,[length2]
|
|
sub esi,2
|
|
call rectangle_gradient_up
|
|
|
|
;------------------
|
|
xor eax,eax
|
|
mov eax,[AveregeColor]
|
|
mov [Pixel.color],eax
|
|
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
mov ebx,[y]
|
|
add ebx,16
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
add eax,[length2]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
add ebx,16
|
|
add eax,[length2]
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
add eax,1
|
|
add ebx,1
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
add ebx,15
|
|
add eax,1
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
add ebx,1
|
|
add eax,[length2]
|
|
sub eax,1
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
add ebx,15
|
|
add eax,[length2]
|
|
sub eax,1
|
|
mov [Pixel.x],eax
|
|
mov [Pixel.y],ebx
|
|
call DrawPixel
|
|
|
|
cmp [length2],12
|
|
jl no_draw_reliev_horizontal_3D
|
|
|
|
mov ebx,[y]
|
|
mov eax,[length2]
|
|
shr eax,1
|
|
add eax,[x]
|
|
add ebx,5
|
|
sub eax,3
|
|
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
mov [Line.color],0xffffff
|
|
add [Line.y2],6
|
|
|
|
mov esi,4
|
|
next_light_line_draw_r_horizontal_3D:
|
|
|
|
call DrawLine
|
|
add [Line.x1],2
|
|
add [Line.x2],2
|
|
|
|
dec esi
|
|
jnz next_light_line_draw_r_horizontal_3D
|
|
|
|
mov ebx,[y]
|
|
mov eax,[length2]
|
|
shr eax,1
|
|
add eax,[x]
|
|
add ebx,6
|
|
sub eax,2
|
|
|
|
mov ecx,[Scroller.color1]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
mov [Line.color],ecx
|
|
add [Line.y2],6
|
|
|
|
mov esi,4
|
|
next_dark_line_draw_r_horizontal_3D:
|
|
|
|
call DrawLine
|
|
add [Line.x1],2
|
|
add [Line.x2],2
|
|
|
|
dec esi
|
|
jnz next_dark_line_draw_r_horizontal_3D
|
|
|
|
no_draw_reliev_horizontal_3D:
|
|
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.x]
|
|
mov ebx,[x]
|
|
add eax,17
|
|
|
|
sub ebx,eax
|
|
jz no_draw_up_rectangle_horizontal_3D
|
|
js no_draw_up_rectangle_horizontal_3D
|
|
|
|
sub ebx,1
|
|
|
|
mov esi,ebx
|
|
|
|
mov eax,0xe4e4e4
|
|
mov ebx,0xffffff
|
|
xor ecx,ecx
|
|
mov edx,[y]
|
|
mov cx,[Scroller.x]
|
|
add ecx,17
|
|
sub edx,1
|
|
mov edi,17
|
|
call rectangle_gradient_up
|
|
no_draw_up_rectangle_horizontal_3D:
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.x]
|
|
add ax,[Scroller.length]
|
|
mov ebx,[x]
|
|
add ebx,[length2]
|
|
sub eax,17
|
|
|
|
sub eax,ebx
|
|
jz no_draw_down_rectangle_horizontal_3D
|
|
js no_draw_down_rectangle_horizontal_3D
|
|
|
|
sub eax,1
|
|
mov esi,eax
|
|
|
|
mov eax,0xe4e4e4
|
|
mov ebx,0xffffff
|
|
mov edx,[y]
|
|
xor ecx,ecx
|
|
mov ecx,[x]
|
|
add ecx,[length2]
|
|
add ecx,1
|
|
sub edx,1
|
|
mov edi,17
|
|
call rectangle_gradient_up
|
|
|
|
no_draw_down_rectangle_horizontal_3D:
|
|
|
|
ret
|
|
|
|
;eax - x
|
|
;ebx - y
|
|
;ecx - size y in pixels
|
|
DrawVertical2DScrollBar:
|
|
|
|
mov [x],eax
|
|
mov [y],ebx
|
|
mov [length2],ecx
|
|
|
|
mov eax,13
|
|
mov edx,[Color]
|
|
mov ebx,[x]
|
|
mov ecx,[y]
|
|
shl ebx,16
|
|
shl ecx,16
|
|
add ebx,16
|
|
add ecx,[length2]
|
|
and edx,0xffffff
|
|
mcall
|
|
|
|
;draw horizontal up light line
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],15
|
|
mov ecx,[colors_table1+15*3]
|
|
and ecx,0xffffff
|
|
mov [Line.color],ecx
|
|
call DrawLine
|
|
|
|
;draw vertical up light line
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
mov ecx,[length2]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
add [Line.y2],ecx
|
|
call DrawLine
|
|
|
|
;draw vertical up dark line
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
add eax,15
|
|
mov ecx,[length2]
|
|
sub ecx,1
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],ecx
|
|
mov ecx,[colors_table2+8*3];[pointer]
|
|
and ecx,0xffffff
|
|
mov [Line.color],ecx
|
|
call DrawLine
|
|
|
|
;draw horizontal up dark line
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
mov ecx,[length2]
|
|
add ebx,ecx
|
|
sub ebx,1
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],15
|
|
call DrawLine
|
|
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.y]
|
|
mov ebx,[y]
|
|
add eax,16
|
|
|
|
sub ebx,eax
|
|
jz no_draw_up_rectangle_vertical_2D
|
|
js no_draw_up_rectangle_vertical_2D
|
|
|
|
mov edi,ebx
|
|
|
|
xor ecx,ecx
|
|
mov eax,13
|
|
mov edx,0xe4e4e4
|
|
mov ebx,[x]
|
|
mov cx,[Scroller.y]
|
|
add ecx,16
|
|
shl ebx,16
|
|
shl ecx,16
|
|
add ebx,16
|
|
add ecx,edi
|
|
mcall
|
|
|
|
no_draw_up_rectangle_vertical_2D:
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.y]
|
|
add ax,[Scroller.length]
|
|
mov ebx,[y]
|
|
add ebx,[length2]
|
|
sub eax,16
|
|
|
|
sub eax,ebx
|
|
jz no_draw_down_rectangle_vertical_2D
|
|
js no_draw_down_rectangle_vertical_2D
|
|
|
|
;sub eax,1
|
|
mov edi,eax
|
|
|
|
xor ecx,ecx
|
|
mov eax,13
|
|
mov edx,0xe4e4e4
|
|
mov ebx,[x]
|
|
mov ecx,[y]
|
|
add ecx,[length2]
|
|
shl ebx,16
|
|
shl ecx,16
|
|
add ebx,16
|
|
add ecx,edi
|
|
mcall
|
|
|
|
no_draw_down_rectangle_vertical_2D:
|
|
|
|
ret
|
|
|
|
;eax - x
|
|
;ebx - y
|
|
;ecx - size x in pixels
|
|
DrawHorizontal2DScrollBar:
|
|
|
|
mov [x],eax
|
|
mov [y],ebx
|
|
mov [length2],ecx
|
|
|
|
mov eax,13
|
|
mov edx,[Color]
|
|
mov ebx,[x]
|
|
mov ecx,[y]
|
|
shl ebx,16
|
|
shl ecx,16
|
|
add ebx,[length2]
|
|
add ecx,16
|
|
and edx,0xffffff
|
|
mcall
|
|
|
|
;draw horizontal up light line
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
mov ecx,[length2]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
sub ecx,1
|
|
add [Line.x2],ecx
|
|
mov ecx,[colors_table1+15*3]
|
|
and ecx,0xffffff
|
|
mov [Line.color],ecx
|
|
call DrawLine
|
|
|
|
;draw vertical up light line
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],15
|
|
call DrawLine
|
|
|
|
;draw vertical up dark line
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
mov ecx,[length2]
|
|
sub ecx,1
|
|
add eax,ecx
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.y2],15
|
|
mov ecx,[colors_table2+8*3];[pointer]
|
|
and ecx,0xffffff
|
|
mov [Line.color],ecx
|
|
call DrawLine
|
|
|
|
;draw horizontal up dark line
|
|
mov eax,[x]
|
|
mov ebx,[y]
|
|
mov ecx,[length2]
|
|
sub ecx,1
|
|
add ebx,15
|
|
mov [Line.x1],eax
|
|
mov [Line.x2],eax
|
|
mov [Line.y1],ebx
|
|
mov [Line.y2],ebx
|
|
add [Line.x2],ecx
|
|
call DrawLine
|
|
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.x]
|
|
mov ebx,[x]
|
|
add eax,16
|
|
|
|
sub ebx,eax
|
|
jz no_draw_up_rectangle_horizontal_2D
|
|
js no_draw_up_rectangle_horizontal_2D
|
|
|
|
mov edi,ebx
|
|
|
|
xor ecx,ecx
|
|
xor ebx,ebx
|
|
mov eax,13
|
|
mov edx,0xe4e4e4
|
|
mov bx,[Scroller.x]
|
|
mov cx,[Scroller.y]
|
|
add ebx,16
|
|
shl ebx,16
|
|
shl ecx,16
|
|
add ecx,16
|
|
add ebx,edi
|
|
mcall
|
|
|
|
no_draw_up_rectangle_horizontal_2D:
|
|
|
|
xor eax,eax
|
|
mov ax,[Scroller.x]
|
|
add ax,[Scroller.length]
|
|
mov ebx,[x]
|
|
add ebx,[length2]
|
|
sub eax,16
|
|
|
|
sub eax,ebx
|
|
jz no_draw_down_rectangle_horizontal_2D
|
|
js no_draw_down_rectangle_horizontal_2D
|
|
|
|
;sub eax,1
|
|
mov edi,eax
|
|
|
|
xor ecx,ecx
|
|
mov eax,13
|
|
mov edx,0xe4e4e4
|
|
mov ebx,[x]
|
|
mov ecx,[y]
|
|
add ebx,[length2]
|
|
shl ebx,16
|
|
shl ecx,16
|
|
add ebx,edi
|
|
add ecx,16
|
|
mcall
|
|
|
|
no_draw_down_rectangle_horizontal_2D:
|
|
|
|
ret
|