;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