Subversion Repositories Kolibri OS

Rev

Rev 648 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. ;scroller's flags
  3. sc_check_vertical                     = 00000001b
  4. sc_check_horizontal                   = 00000010b
  5. sc_check_init_child_buttons           = 00000100b
  6. sc_active                             = 00001000b
  7. sc_check_3D_type                      = 00010000b
  8. sc_scroll_bar_move                    = 00100000b
  9.  
  10. sc_redraw                             = 10000000b
  11. sc_redraw_off                         = 01111111b
  12. sc_full_redraw                        = 10101000b
  13. sc_scroll_bar_move_off                = 11011111b
  14. sc_move_active_off                    = 11010111b
  15.  
  16. sc_first_child_button_pressed         = 00000001b
  17. sc_first_child_button_pressed_off     = 11111110b
  18. sc_second_child_button_pressed        = 00010000b
  19. sc_second_child_button_pressed_off    = 11101111b
  20.  
  21. sc_control_data_size                  = 29
  22. sc_child_button_type                  = 10001000b
  23.  
  24. ;****************************************************
  25. ;******************Crate Scroller*********************
  26. ;****************************************************
  27. ;IN
  28. ;pointer to parend
  29. ;pointer to Scroller's structure
  30. ;OUT
  31. ;pointer to initialized Scroller's structure
  32. align 4
  33.  
  34. craete_scroller:
  35.  
  36.       mov ebx,[esp+4]
  37.       mov eax,[esp+8]
  38.  
  39.       mov [PointerToStructureForScroller],eax
  40.  
  41.       mov eax,control_header_size+sc_control_data_size
  42.       call craete_control
  43.  
  44.      ;set all button's parameters in control
  45.       mov [eax],dword scroller
  46.  
  47.       mov ecx,sc_control_data_size
  48.       mov esi,[PointerToStructureForScroller]
  49.       mov edi,eax
  50.       add edi,control_header_size
  51.       rep movsb
  52.  
  53.       mov ebx,[PointerToStructureForScroller]
  54.  
  55.       xor ecx,ecx
  56.       mov cl,byte[ebx]
  57.       and cl,sc_check_vertical
  58.       jz type_horizontal_scroller
  59.  
  60.       ;if we here than scroller vertical
  61.       mov esi,16         ;scroller size x
  62.       xor edi,edi
  63.       mov di,[ebx+5]    ;scroller size y
  64.       jmp exit_type_scroller
  65.       type_horizontal_scroller:
  66.  
  67.       xor esi,esi
  68.       mov si,[ebx+5]    ;scroller size x
  69.       mov edi,16        ;scroller size y
  70.       exit_type_scroller:
  71.  
  72.       xor ecx,ecx
  73.       xor edx,edx
  74.       mov cx,[ebx+1]    ;scroller x
  75.       mov dx,[ebx+3]    ;scroller y
  76.  
  77.       call get_skin_height
  78.       add ecx,border_width
  79.       add edx,[skin_height]
  80.       ;copy information to control
  81.       mov [eax+24],ecx
  82.       mov [eax+28],edx
  83.       mov [eax+32],esi
  84.       mov [eax+36],edi
  85.  
  86.       ret 8
  87.  
  88. ;****************************************************
  89. ;*******************Draw Scroller*********************
  90. ;****************************************************
  91. ;IN
  92. ;pointer to control of scroller
  93. ;message
  94. ;OUT
  95. ;not returned value
  96. align 4
  97.  
  98. scroller:
  99.  
  100.  
  101.       ;get message
  102.       mov eax,[esp+8]
  103.  
  104.       ;copy message
  105.       mov esi,eax
  106.       mov edi,dword Message
  107.       mov ecx,4
  108.       rep movsd
  109.  
  110.       ;get pointer to control of scroller
  111.       mov esi,[esp+4]
  112.       mov [PointerForScroller],esi
  113.       ;copy control to local control
  114.       mov edi,dword Scroller
  115.       mov ecx,control_header_size+sc_control_data_size
  116.       rep movsb
  117.  
  118.  
  119.       cmp [eax],dword 1
  120.       jne no_redraw_all_scroller
  121.  
  122.       or [Scroller.type],sc_full_redraw
  123.       no_redraw_all_scroller:
  124.  
  125.       cmp [eax],dword 2
  126.       jne no_keys_scroller
  127.  
  128.       jmp exit_scroller
  129.       no_keys_scroller:
  130.  
  131.       cmp [eax],dword 3
  132.       jne no_pressed_button_scroller
  133.  
  134.       jmp exit_scroller
  135.       no_pressed_button_scroller:
  136.  
  137.       cmp [eax],dword 6
  138.       jne no_mouse_scroller
  139.  
  140.       mov esi,[eax+4]
  141.       mov edi,[eax+8]
  142.       mov ecx,[eax+12]
  143.       mov [Scroller.mouseX],si
  144.       mov [Scroller.mouseY],di
  145.       mov [ButtonsOfMouse],ecx
  146.       no_mouse_scroller:
  147.  
  148.  
  149.       cmp [eax],dword -1
  150.       jne no_delete_scroller
  151.  
  152.         mov eax,[Scroller.ChildButton1]
  153.         call free
  154.  
  155.         mov eax,[Scroller.ChildButton2]
  156.         call free
  157.  
  158.         ;push [Scroller.ChildButton1]
  159.         ;call destroy_control
  160.  
  161.         ;push [Scroller.ChildButton2]
  162.         ;call destroy_control
  163.  
  164.       jmp exit_scroller
  165.       no_delete_scroller:
  166.  
  167.       ;load coordinats and size from control
  168.       mov eax,[PointerForScroller]
  169.       mov ebx,[eax+24]           ;x
  170.       mov ecx,[eax+28]           ;y
  171.       mov edx,[eax+32]           ;size x
  172.       mov esi,[eax+36]           ;size y
  173.       ;set current coordinats and sizes in scroller
  174.       mov [Scroller.x],bx
  175.       mov [Scroller.y],cx
  176.  
  177.       xor eax,eax
  178.       mov al,[Scroller.type]
  179.       and al,sc_check_vertical
  180.       test al,al
  181.       jz set_for_horizontal
  182.  
  183.         mov [Scroller.length],si
  184.  
  185.       jmp exit_if_vertical
  186.       set_for_horizontal:
  187.  
  188.         mov [Scroller.length],dx
  189.  
  190.       exit_if_vertical:
  191.  
  192.       ;checking to craete child buttons
  193.       xor eax,eax
  194.       mov al,[Scroller.type]
  195.       and al,sc_check_init_child_buttons
  196.       jnz child_buttons_craeted
  197.  
  198.          or [Scroller.type],sc_check_init_child_buttons
  199.  
  200.          mov [ChildButton.type],byte sc_child_button_type
  201.          mov [ChildButton.width],16
  202.          mov [ChildButton.height],16
  203.          xor ebx,ebx
  204.          xor ecx,ecx
  205.          mov bx,[Scroller.x]
  206.          mov cx,[Scroller.y]
  207.          mov [ChildButton.x],bx
  208.          mov [ChildButton.y],cx
  209.  
  210.          push ChildButton
  211.          push [PointerForScroller]
  212.  
  213.          call craete_button
  214.  
  215.          mov [Scroller.ChildButton1],eax
  216.  
  217.          xor ebx,ebx
  218.          xor ecx,ecx
  219.          mov bx,[Scroller.x]
  220.          mov cx,[Scroller.y]
  221.  
  222.          xor eax,eax
  223.          mov al,[Scroller.type]
  224.          and al,sc_check_vertical
  225.          test al,al
  226.          jz init_buttons_for_horizontal_scroller
  227.  
  228.  
  229.            add cx,[Scroller.length]
  230.            sub ecx,16
  231.  
  232.  
  233.            jmp exit_if_init_buttons_for_horizontal_scroller
  234.          init_buttons_for_horizontal_scroller:
  235.  
  236.  
  237.            add bx,[Scroller.length]
  238.            sub ebx,16
  239.  
  240.          exit_if_init_buttons_for_horizontal_scroller:
  241.  
  242.          mov [ChildButton.x],bx
  243.          mov [ChildButton.y],cx
  244.  
  245.          push ChildButton
  246.          push [PointerForScroller]
  247.  
  248.          call craete_button
  249.  
  250.          mov [Scroller.ChildButton2],eax
  251.  
  252.          mov esi,dword Scroller
  253.          mov edi,[PointerForScroller]
  254.          add esi,control_header_size
  255.          add edi,control_header_size
  256.          mov ecx,sc_control_data_size
  257.          rep movsb
  258.  
  259.       child_buttons_craeted:
  260.  
  261.       ;checking for redraw all control
  262.       ;if it is true than change koordinats of child buttons
  263.       xor eax,eax
  264.       mov al,[Scroller.type]
  265.       and al,sc_redraw
  266.       test al,al
  267.       jz no_change_koordinats_of_child_buttons
  268.  
  269.          xor ebx,ebx
  270.          xor ecx,ecx
  271.          mov bx,[Scroller.x]
  272.          mov cx,[Scroller.y]
  273.  
  274.          ;first child button
  275.          mov eax,[Scroller.ChildButton1]
  276.          mov [eax+24],ebx      ;x
  277.          mov [eax+28],ecx      ;y
  278.  
  279.          xor eax,eax
  280.          mov al,[Scroller.type]
  281.          and al,sc_check_vertical
  282.          test al,al
  283.          jz change_koordinats_of_buttons_for_horizontal_scroller
  284.  
  285.            add cx,[Scroller.length]
  286.            sub ecx,16
  287.  
  288.            jmp exit_if_change_koordinats_of_buttons_for_horizontal_scroller
  289.          change_koordinats_of_buttons_for_horizontal_scroller:
  290.  
  291.            add bx,[Scroller.length]
  292.            sub ebx,16
  293.  
  294.          exit_if_change_koordinats_of_buttons_for_horizontal_scroller:
  295.  
  296.          ;second child button
  297.          mov eax,[Scroller.ChildButton2]
  298.          mov [eax+24],ebx      ;x
  299.          mov [eax+28],ecx      ;y
  300.  
  301.       no_change_koordinats_of_child_buttons:
  302.  
  303.       ;is a 3D scroller ?
  304.       xor eax,eax
  305.       mov al,[Scroller.type]
  306.       and al,sc_check_3D_type
  307.       test al,al
  308.       jz no_3D_scroller
  309.  
  310.  
  311.       mov eax,[Scroller.color1]
  312.       mov ebx,0xffffff
  313.       mov ecx,16
  314.       mov edx,dword pointer
  315.       call gradient
  316.  
  317.       mov eax,[pointer+9]
  318.       and eax,0xffffff
  319.       mov [Color],eax
  320.  
  321.       mov eax,[pointer]
  322.       mov ebx,0xffffff
  323.       call calculate_average_color
  324.       mov [AveregeColor],eax
  325.  
  326.       ;is a vertical 3D scroller ?
  327.       xor eax,eax
  328.       mov al,[Scroller.type]
  329.       and al,sc_check_vertical
  330.       test al,al
  331.       jz no_vertical_scroller_3D
  332.  
  333.       xor eax,eax
  334.       xor ebx,ebx
  335.       xor ecx,ecx
  336.       xor edx,edx
  337.       xor esi,esi
  338.       xor edi,edi
  339.       mov ax,[Scroller.x]
  340.       mov bx,[Scroller.y]
  341.       mov cx,16
  342.       mov dx,[Scroller.length]
  343.       mov si,[Scroller.mouseX]
  344.       mov di,[Scroller.mouseY]
  345.       add ebx,17
  346.       sub edx,17+17
  347.       call CheckCrossingBox
  348.  
  349.       cmp eax,0xffffff
  350.       jne no_crossing_vertical_scroller_3D
  351.  
  352.       or [Scroller.type],sc_active
  353.       mov esi,dword Scroller
  354.       mov edi,[PointerForScroller]
  355.       add esi,control_header_size
  356.       add edi,control_header_size
  357.       mov ecx,sc_control_data_size
  358.       rep movsb
  359.  
  360.       no_crossing_vertical_scroller_3D:
  361.  
  362.       ;is a vertical 3D scroller active ?
  363.       xor eax,eax
  364.       mov al,[Scroller.type]
  365.       and al,sc_active
  366.       test al,al
  367.       jz no_vertical_scroller_active
  368.  
  369.       ;calculate size of scroll bar
  370.       xor eax,eax
  371.       mov ax,[Scroller.length]
  372.       sub eax,16+16
  373.       mov [v],eax
  374.       fld [Scroller.size]
  375.       fild [v]
  376.       fmul st0,st1
  377.       fistp [Scrollersize]
  378.       fstp [v]
  379.  
  380.       cmp [Scrollersize],4
  381.       jae no_minimum_size_vertical_3D_scroller
  382.  
  383.         mov [Scrollersize],4
  384.       no_minimum_size_vertical_3D_scroller:
  385.  
  386.       ;if scroller is not active than use this is coordinats.
  387.       xor eax,eax
  388.       mov ax,[Scroller.length]
  389.       sub eax,17+17
  390.       sub eax,[Scrollersize]
  391.       mov [yo],eax
  392.       fld [Scroller.pos]
  393.       fild [yo]
  394.       fmul st0,st1
  395.       fistp [v]
  396.       fstp [v2]
  397.  
  398.       xor eax,eax
  399.       mov ax,[Scroller.y]
  400.       add ax,17
  401.       add eax,[v]
  402.       mov [ScrollBar.y],eax
  403.  
  404.       ;check button of mouse
  405.       mov eax,[ButtonsOfMouse]
  406.       and eax,1b
  407.       test al,al
  408.       jz no_vertical_scroller_move
  409.       ;calculate in pixels length of scroll bar
  410.  
  411.       xor eax,eax
  412.       xor edx,edx
  413.       xor ecx,ecx
  414.       mov ax,[Scroller.y]
  415.       mov cx,[Scroller.length]
  416.       mov dx,[Scroller.mouseY]
  417.       mov ebx,edx
  418.       add ecx,eax
  419.       add eax,17
  420.       sub ecx,17
  421.       mov esi,ecx
  422.  
  423.       sub ebx,eax
  424.       jns no_minimum_scroller_y
  425.  
  426.       mov [Scroller.mouseY],ax
  427.       no_minimum_scroller_y:
  428.  
  429.       sub ecx,edx
  430.       jns no_maximum_scroller_y
  431.  
  432.       mov [Scroller.mouseY],si
  433.       no_maximum_scroller_y:
  434.  
  435.  
  436.       mov eax,[Scrollersize]
  437.       shr eax,1
  438.       xor ebx,ebx
  439.       mov bx,[Scroller.mouseY]
  440.       sub bx,[Scroller.y]
  441.       sub ebx,17
  442.       xor ecx,ecx
  443.       mov cx,[Scroller.y]
  444.       add cx,[Scroller.length]
  445.       sub cx,17
  446.       sub cx,[Scroller.mouseY]
  447.  
  448.       cmp ebx,eax
  449.       jae no_correct_y
  450.        xor edx,edx
  451.        mov dx,[Scroller.y]
  452.        add dx,17
  453.        add edx,eax
  454.       no_correct_y:
  455.  
  456.       cmp ecx,eax
  457.       jae no_correct_y_
  458.        xor edx,edx
  459.        mov dx,[Scroller.y]
  460.        add dx,[Scroller.length]
  461.        sub dx,17
  462.        sub edx,eax
  463.       no_correct_y_:
  464.  
  465.       mov [ScrollBar.y],edx
  466.       sub [ScrollBar.y],eax
  467.       sub dx,[Scroller.y]
  468.       sub edx,17
  469.       sub edx,eax
  470.       mov [v],edx
  471.  
  472.       shl eax,1
  473.       xor ebx,ebx
  474.       mov bx,[Scroller.length]
  475.       sub ebx,17+17
  476.       sub ebx,[Scrollersize]
  477.       mov [v2],ebx
  478.  
  479.       fild [v2]
  480.       fild [v]
  481.       fdiv st0,st1
  482.       fstp [Scroller.pos]
  483.       fistp [v2]
  484.  
  485.       ;put 5 bit(scroll bar move)
  486.       or [Scroller.type],sc_scroll_bar_move
  487.  
  488.       mov esi,dword Scroller
  489.       mov edi,[PointerForScroller]
  490.       add esi,control_header_size
  491.       add edi,control_header_size
  492.       mov ecx,sc_control_data_size
  493.       rep movsb
  494.  
  495.       jmp no_vertical_scroller_active
  496.       no_vertical_scroller_move:
  497.  
  498.       no_vertical_scroller_active:
  499.  
  500.       ;if bit 7 is a true than redraw all scroller.
  501.  
  502.       xor eax,eax
  503.       mov al,[Scroller.type]
  504.       and al,sc_redraw
  505.       test al,al
  506.       jz no_redraw_all_vertical_scroller
  507.  
  508.       and [Scroller.type],sc_redraw_off
  509.       mov esi,dword Scroller
  510.       mov edi,[PointerForScroller]
  511.       add esi,control_header_size
  512.       add edi,control_header_size
  513.       mov ecx,sc_control_data_size
  514.       rep movsb
  515.  
  516.       call DrawButtonsOfVertical3DScroller
  517.  
  518.       no_redraw_all_vertical_scroller:
  519.  
  520.       xor eax,eax
  521.       mov al,[Scroller.type]
  522.       and al,sc_scroll_bar_move
  523.       test al,al
  524.       jz no_move_vertical_scroller_bar_3D
  525.  
  526.         xor eax,eax
  527.         mov ax,[Scroller.x]
  528.         mov ebx,[ScrollBar.y]
  529.         mov ecx,[Scrollersize]
  530.         call DrawVertical3DScrollBar
  531.  
  532.         and [Scroller.type],sc_scroll_bar_move_off
  533.         mov esi,dword Scroller
  534.         mov edi,[PointerForScroller]
  535.         add esi,control_header_size
  536.         add edi,control_header_size
  537.         mov ecx,sc_control_data_size
  538.         rep movsb
  539.  
  540.       no_move_vertical_scroller_bar_3D:
  541.  
  542.       xor eax,eax
  543.       xor ebx,ebx
  544.       xor ecx,ecx
  545.       xor edx,edx
  546.       xor esi,esi
  547.       xor edi,edi
  548.       mov ax,[Scroller.x]
  549.       mov bx,[Scroller.y]
  550.       mov cx,16
  551.       mov dx,[Scroller.length]
  552.       mov si,[Scroller.mouseX]
  553.       mov di,[Scroller.mouseY]
  554.       add ebx,17
  555.       sub edx,17+17
  556.       call CheckCrossingBox
  557.  
  558.       cmp eax,0xffffff
  559.       jne no_crossing_vertical_scroller_3D_
  560.  
  561.       or [Scroller.type],sc_active
  562.       mov esi,dword Scroller
  563.       mov edi,[PointerForScroller]
  564.       add esi,control_header_size
  565.       add edi,control_header_size
  566.       mov ecx,sc_control_data_size
  567.       rep movsb
  568.  
  569.       jmp exit_crossing_vertical_scroller_3D
  570.       no_crossing_vertical_scroller_3D_:
  571.  
  572.         ;check button of mouse
  573.         mov eax,[ButtonsOfMouse]
  574.  
  575.         and eax,1b
  576.         test al,al
  577.         jnz mouse_button_pressed_vertical
  578.  
  579.           and [Scroller.type],sc_move_active_off
  580.           mov esi,dword Scroller
  581.           mov edi,[PointerForScroller]
  582.           add esi,control_header_size
  583.           add edi,control_header_size
  584.           mov ecx,sc_control_data_size
  585.           rep movsb
  586.          mouse_button_pressed_vertical:
  587.  
  588.       exit_crossing_vertical_scroller_3D:
  589.  
  590.  
  591.       xor eax,eax
  592.       mov al,[Scroller.type]
  593.       and al,sc_active
  594.       test al,al
  595.       jz no_change_vertical_scroller_3D
  596.  
  597.         xor eax,eax
  598.         xor ebx,ebx
  599.         mov ax,[Scroller.x]
  600.         mov bx,[Scroller.mouseX]
  601.  
  602.         sub eax,ebx
  603.         jns no_signum_1
  604.         neg eax
  605.         no_signum_1:
  606.  
  607.         cmp eax,110
  608.         jle no_change_bits_vertical_scroller_3D
  609.  
  610.         and [Scroller.type],sc_move_active_off
  611.         no_change_bits_vertical_scroller_3D:
  612.  
  613.         mov esi,dword Scroller
  614.         mov edi,[PointerForScroller]
  615.         add esi,control_header_size
  616.         add edi,control_header_size
  617.         mov ecx,sc_control_data_size
  618.         rep movsb
  619.  
  620.       no_change_vertical_scroller_3D:
  621.  
  622.       no_vertical_scroller_3D:
  623.  
  624.       ;****************Horinzontal scroller**************
  625.  
  626.       ;is a horizontal 3D scroller ?
  627.       xor eax,eax
  628.       mov al,[Scroller.type]
  629.       and al,sc_check_horizontal
  630.       test al,al
  631.       jz no_horizontal_scroller_3D
  632.  
  633.       xor eax,eax
  634.       xor ebx,ebx
  635.       xor ecx,ecx
  636.       xor edx,edx
  637.       xor esi,esi
  638.       xor edi,edi
  639.       mov ax,[Scroller.x]
  640.       mov bx,[Scroller.y]
  641.       mov cx,[Scroller.length]
  642.       mov dx,16
  643.       mov si,[Scroller.mouseX]
  644.       mov di,[Scroller.mouseY]
  645.       add eax,17
  646.       sub ecx,17+17
  647.       call CheckCrossingBox
  648.  
  649.       cmp eax,0xffffff
  650.       jne no_crossing_horizontal_scroller_3D
  651.  
  652.       or [Scroller.type],sc_active
  653.       mov esi,dword Scroller
  654.       mov edi,[PointerForScroller]
  655.       add esi,control_header_size
  656.       add edi,control_header_size
  657.       mov ecx,sc_control_data_size
  658.       rep movsb
  659.  
  660.       no_crossing_horizontal_scroller_3D:
  661.  
  662.       ;is a vertical 3D scroller active ?
  663.       xor eax,eax
  664.       mov al,[Scroller.type]
  665.       and al,sc_active
  666.       test al,al
  667.       jz no_horizontal_scroller_active
  668.  
  669.       ;calculate size of scroll bar
  670.       xor eax,eax
  671.       mov ax,[Scroller.length]
  672.       sub eax,16+16
  673.       mov [v],eax
  674.       fld [Scroller.size]
  675.       fild [v]
  676.       fmul st0,st1
  677.       fistp [Scrollersize]
  678.       fstp [v]
  679.  
  680.       cmp [Scrollersize],4
  681.       jae no_minimum_size_horizontal_3D_scroller
  682.  
  683.         mov [Scrollersize],4
  684.       no_minimum_size_horizontal_3D_scroller:
  685.  
  686.       ;if scroller is not active than use this is coordinats.
  687.       xor eax,eax
  688.       mov ax,[Scroller.length]
  689.       sub eax,17+17
  690.       sub eax,[Scrollersize]
  691.       mov [xo],eax
  692.       fld [Scroller.pos]
  693.       fild [xo]
  694.       fmul st0,st1
  695.       fistp [v]
  696.       fstp [v2]
  697.  
  698.       xor eax,eax
  699.       mov ax,[Scroller.x]
  700.       add ax,17
  701.       add eax,[v]
  702.       mov [ScrollBar.x],eax
  703.  
  704.       ;check button of mouse
  705.       mov eax,[ButtonsOfMouse]
  706.  
  707.       and eax,1b
  708.       test al,al
  709.       jz no_horizontal_scroller_move
  710.       ;calculate in pixels length of scroll bar
  711.  
  712.       xor eax,eax
  713.       xor edx,edx
  714.       xor ecx,ecx
  715.       mov ax,[Scroller.x]
  716.       mov cx,[Scroller.length]
  717.       mov dx,[Scroller.mouseX]
  718.       mov ebx,edx
  719.       add ecx,eax
  720.       add eax,17
  721.       sub ecx,17
  722.       mov esi,ecx
  723.  
  724.       sub ebx,eax
  725.       jns no_minimum_scroller_x_
  726.  
  727.       mov [Scroller.mouseX],ax
  728.       no_minimum_scroller_x_:
  729.  
  730.       sub ecx,edx
  731.       jns no_maximum_scroller_x_
  732.  
  733.       mov [Scroller.mouseX],si
  734.       no_maximum_scroller_x_:
  735.  
  736.  
  737.       mov eax,[Scrollersize]
  738.       shr eax,1
  739.       xor ebx,ebx
  740.       mov bx,[Scroller.mouseX]
  741.       sub bx,[Scroller.x]
  742.       sub ebx,17
  743.       xor ecx,ecx
  744.       mov cx,[Scroller.x]
  745.       add cx,[Scroller.length]
  746.       sub cx,17
  747.       sub cx,[Scroller.mouseX]
  748.  
  749.       cmp ebx,eax
  750.       jae no_correct_x_
  751.        xor edx,edx
  752.        mov dx,[Scroller.x]
  753.        add dx,17
  754.        add edx,eax
  755.       no_correct_x_:
  756.  
  757.       cmp ecx,eax
  758.       jae no_correct_x__
  759.        xor edx,edx
  760.        mov dx,[Scroller.x]
  761.        add dx,[Scroller.length]
  762.        sub dx,17
  763.        sub edx,eax
  764.       no_correct_x__:
  765.  
  766.       mov [ScrollBar.x],edx
  767.       sub [ScrollBar.x],eax
  768.       sub dx,[Scroller.x]
  769.       sub edx,17
  770.       sub edx,eax
  771.       mov [v],edx
  772.  
  773.       xor ebx,ebx
  774.       mov bx,[Scroller.length]
  775.       sub ebx,17+17
  776.       sub ebx,[Scrollersize]
  777.       mov [v2],ebx
  778.  
  779.       fild [v2]
  780.       fild [v]
  781.       fdiv st0,st1
  782.       fstp [Scroller.pos]
  783.       fistp [v2]
  784.  
  785.       ;put 5 bit(scroll bar move)
  786.       or [Scroller.type],sc_scroll_bar_move
  787.  
  788.       mov esi,dword Scroller
  789.       mov edi,[PointerForScroller]
  790.       add esi,control_header_size
  791.       add edi,control_header_size
  792.       mov ecx,sc_control_data_size
  793.       rep movsb
  794.  
  795.       jmp no_horizontal_scroller_active
  796.       no_horizontal_scroller_move:
  797.  
  798.       no_horizontal_scroller_active:
  799.  
  800.       ;if bit 7 is a true than redraw all scroller.
  801.  
  802.       xor eax,eax
  803.       mov al,[Scroller.type]
  804.       and al,sc_redraw
  805.       test al,al
  806.       jz no_redraw_all_horizontal_scroller
  807.  
  808.       and [Scroller.type],sc_redraw_off
  809.       mov esi,dword Scroller
  810.       mov edi,[PointerForScroller]
  811.       add esi,control_header_size
  812.       add edi,control_header_size
  813.       mov ecx,sc_control_data_size
  814.       rep movsb
  815.  
  816.       call DrawButtonsOfHorizontal3DScroller
  817.  
  818.       no_redraw_all_horizontal_scroller:
  819.  
  820.       xor eax,eax
  821.       mov al,[Scroller.type]
  822.       and al,sc_scroll_bar_move
  823.       test al,al
  824.       jz no_move_horizontal_scroller_bar_3D
  825.  
  826.         xor ebx,ebx
  827.         mov bx,[Scroller.y]
  828.         mov eax,[ScrollBar.x]
  829.         mov ecx,[Scrollersize]
  830.         call DrawHorizontal3DScrollBar
  831.  
  832.         and [Scroller.type],sc_scroll_bar_move_off
  833.         mov esi,dword Scroller
  834.         mov edi,[PointerForScroller]
  835.         add esi,control_header_size
  836.         add edi,control_header_size
  837.         mov ecx,sc_control_data_size
  838.         rep movsb
  839.  
  840.       no_move_horizontal_scroller_bar_3D:
  841.  
  842.       xor eax,eax
  843.       xor ebx,ebx
  844.       xor ecx,ecx
  845.       xor edx,edx
  846.       xor esi,esi
  847.       xor edi,edi
  848.       mov ax,[Scroller.x]
  849.       mov bx,[Scroller.y]
  850.       mov dx,16
  851.       mov cx,[Scroller.length]
  852.       mov si,[Scroller.mouseX]
  853.       mov di,[Scroller.mouseY]
  854.       add eax,17
  855.       sub ecx,17+17
  856.       call CheckCrossingBox
  857.  
  858.       cmp eax,0xffffff
  859.       jne no_crossing_horizontal_scroller_3D_
  860.  
  861.       or [Scroller.type],sc_active
  862.       mov esi,dword Scroller
  863.       mov edi,[PointerForScroller]
  864.       add esi,control_header_size
  865.       add edi,control_header_size
  866.       mov ecx,sc_control_data_size
  867.       rep movsb
  868.  
  869.       jmp exit_crossing_horizontal_scroller_3D
  870.       no_crossing_horizontal_scroller_3D_:
  871.  
  872.         ;check button of mouse
  873.         mov eax,[ButtonsOfMouse]
  874.  
  875.         and eax,1b
  876.         test al,al
  877.         jnz mouse_button_pressed_horizontal
  878.  
  879.           and [Scroller.type],sc_move_active_off
  880.           mov esi,dword Scroller
  881.           mov edi,[PointerForScroller]
  882.           add esi,control_header_size
  883.           add edi,control_header_size
  884.           mov ecx,sc_control_data_size
  885.           rep movsb
  886.          mouse_button_pressed_horizontal:
  887.  
  888.       exit_crossing_horizontal_scroller_3D:
  889.  
  890.  
  891.       xor eax,eax
  892.       mov al,[Scroller.type]
  893.       and al,sc_active
  894.       test al,al
  895.       jz no_change_horizontal_scroller_3D
  896.  
  897.         xor eax,eax
  898.         xor ebx,ebx
  899.         mov ax,[Scroller.y]
  900.         mov bx,[Scroller.mouseY]
  901.  
  902.         sub eax,ebx
  903.         jns no_signum_1_x
  904.         neg eax
  905.         no_signum_1_x:
  906.  
  907.         cmp eax,110
  908.         jle no_change_bits_horizontal_scroller_3D
  909.  
  910.         and [Scroller.type],sc_move_active_off
  911.         no_change_bits_horizontal_scroller_3D:
  912.  
  913.         mov esi,dword Scroller
  914.         mov edi,[PointerForScroller]
  915.         add esi,control_header_size
  916.         add edi,control_header_size
  917.         mov ecx,sc_control_data_size
  918.         rep movsb
  919.  
  920.       no_change_horizontal_scroller_3D:
  921.  
  922.       no_horizontal_scroller_3D:
  923.  
  924.       no_3D_scroller:
  925.  
  926.       ;****************************************************
  927.       ;********************2D scrollers*********************
  928.       ;****************************************************
  929.  
  930.       xor eax,eax
  931.       mov al,[Scroller.type]
  932.       and al,sc_check_3D_type
  933.       test al,al
  934.       jnz no_2D_scroller
  935.  
  936.       mov eax,[Scroller.color1]
  937.       mov ebx,0xffffff
  938.       mov ecx,16
  939.       mov edx,dword pointer
  940.       call gradient
  941.  
  942.       mov eax,[pointer+9]
  943.       and eax,0xffffff
  944.       mov [Color],eax
  945.  
  946.       mov eax,[pointer]
  947.       mov ebx,0xffffff
  948.       call calculate_average_color
  949.       mov [AveregeColor],eax
  950.  
  951.       ;is a vertical 2D scroller ?
  952.       xor eax,eax
  953.       mov al,[Scroller.type]
  954.       and al,sc_check_vertical
  955.       test al,al
  956.       jz no_vertical_scroller_2D
  957.  
  958.       xor eax,eax
  959.       xor ebx,ebx
  960.       xor ecx,ecx
  961.       xor edx,edx
  962.       xor esi,esi
  963.       xor edi,edi
  964.       mov ax,[Scroller.x]
  965.       mov bx,[Scroller.y]
  966.       mov cx,16
  967.       mov dx,[Scroller.length]
  968.       mov si,[Scroller.mouseX]
  969.       mov di,[Scroller.mouseY]
  970.       add ebx,17
  971.       sub edx,17+17
  972.       call CheckCrossingBox
  973.  
  974.       cmp eax,0xffffff
  975.       jne no_crossing_vertical_scroller_2D
  976.  
  977.       or [Scroller.type],sc_active
  978.       mov esi,dword Scroller
  979.       mov edi,[PointerForScroller]
  980.       add esi,control_header_size
  981.       add edi,control_header_size
  982.       mov ecx,sc_control_data_size
  983.       rep movsb
  984.  
  985.       no_crossing_vertical_scroller_2D:
  986.  
  987.       ;is a vertical 2D scroller active ?
  988.       xor eax,eax
  989.       mov al,[Scroller.type]
  990.       and al,sc_active
  991.       test al,al
  992.       jz no_vertical_scroller_active_2D
  993.  
  994.       ;calculate size of scroll bar
  995.       xor eax,eax
  996.       mov ax,[Scroller.length]
  997.       sub eax,16+16
  998.       mov [v],eax
  999.       fld [Scroller.size]
  1000.       fild [v]
  1001.       fmul st0,st1
  1002.       fistp [Scrollersize]
  1003.       fstp [v]
  1004.  
  1005.       cmp [Scrollersize],4
  1006.       jae no_minimum_size_vertical_2D_scroller
  1007.  
  1008.         mov [Scrollersize],4
  1009.       no_minimum_size_vertical_2D_scroller:
  1010.  
  1011.       ;if scroller is not active than use this is coordinats.
  1012.        xor eax,eax
  1013.       mov ax,[Scroller.length]
  1014.       sub eax,17+17
  1015.       sub eax,[Scrollersize]
  1016.       mov [yo],eax
  1017.       fld [Scroller.pos]
  1018.       fild [yo]
  1019.       fmul st0,st1
  1020.       fistp [v]
  1021.       fstp [v2]
  1022.  
  1023.       xor eax,eax
  1024.       mov ax,[Scroller.y]
  1025.       add ax,16
  1026.       add eax,[v]
  1027.       mov [ScrollBar.y],eax
  1028.  
  1029.       ;check button of mouse
  1030.       mov eax,[ButtonsOfMouse]
  1031.  
  1032.       and eax,1b
  1033.       test al,al
  1034.       jz no_vertical_scroller_move_2D
  1035.       ;calculate in pixels length of scroll bar
  1036.  
  1037.       xor eax,eax
  1038.       xor edx,edx
  1039.       xor ecx,ecx
  1040.       mov ax,[Scroller.y]
  1041.       mov cx,[Scroller.length]
  1042.       mov dx,[Scroller.mouseY]
  1043.       mov ebx,edx
  1044.       add ecx,eax
  1045.       add eax,17
  1046.       sub ecx,17
  1047.       mov esi,ecx
  1048.  
  1049.       sub ebx,eax
  1050.       jns no_minimum_scroller_y_2D
  1051.  
  1052.       mov [Scroller.mouseY],ax
  1053.       no_minimum_scroller_y_2D:
  1054.  
  1055.       sub ecx,edx
  1056.       jns no_maximum_scroller_y_2D
  1057.  
  1058.       mov [Scroller.mouseY],si
  1059.       no_maximum_scroller_y_2D:
  1060.  
  1061.  
  1062.       mov eax,[Scrollersize]
  1063.       shr eax,1
  1064.       xor ebx,ebx
  1065.       mov bx,[Scroller.mouseY]
  1066.       sub bx,[Scroller.y]
  1067.       sub ebx,17
  1068.       xor ecx,ecx
  1069.       mov cx,[Scroller.y]
  1070.       add cx,[Scroller.length]
  1071.       sub cx,17
  1072.       sub cx,[Scroller.mouseY]
  1073.  
  1074.       cmp ebx,eax
  1075.       jae no_correct_y_2D_
  1076.        xor edx,edx
  1077.        mov dx,[Scroller.y]
  1078.        add dx,16
  1079.        add edx,eax
  1080.       no_correct_y_2D_:
  1081.  
  1082.       cmp ecx,eax
  1083.       jae no_correct_y_2D
  1084.        xor edx,edx
  1085.        mov dx,[Scroller.y]
  1086.        add dx,[Scroller.length]
  1087.        sub dx,16
  1088.        sub edx,eax
  1089.       no_correct_y_2D:
  1090.  
  1091.       mov [ScrollBar.y],edx
  1092.       sub [ScrollBar.y],eax
  1093.       sub dx,[Scroller.y]
  1094.       sub edx,16
  1095.       sub edx,eax
  1096.       mov [v],edx
  1097.  
  1098.       shl eax,1
  1099.       xor ebx,ebx
  1100.       mov bx,[Scroller.length]
  1101.       sub ebx,16+16
  1102.       sub ebx,[Scrollersize]
  1103.       mov [v2],ebx
  1104.  
  1105.       fild [v2]
  1106.       fild [v]
  1107.       fdiv st0,st1
  1108.       fstp [Scroller.pos]
  1109.       fistp [v2]
  1110.  
  1111.       ;put 5 bit(scroll bar move)
  1112.       or [Scroller.type],sc_scroll_bar_move
  1113.  
  1114.       mov esi,dword Scroller
  1115.       mov edi,[PointerForScroller]
  1116.       add esi,control_header_size
  1117.       add edi,control_header_size
  1118.       mov ecx,sc_control_data_size
  1119.       rep movsb
  1120.  
  1121.       jmp no_vertical_scroller_active_2D
  1122.       no_vertical_scroller_move_2D:
  1123.  
  1124.       no_vertical_scroller_active_2D:
  1125.  
  1126.       ;if bit 7 is a true than redraw all scroller.
  1127.  
  1128.       xor eax,eax
  1129.       mov al,[Scroller.type]
  1130.       and al,sc_redraw
  1131.       test al,al
  1132.       jz no_redraw_all_vertical_scroller_2D
  1133.  
  1134.       and [Scroller.type],sc_redraw_off
  1135.       mov esi,dword Scroller
  1136.       mov edi,[PointerForScroller]
  1137.       add esi,control_header_size
  1138.       add edi,control_header_size
  1139.       mov ecx,sc_control_data_size
  1140.       rep movsb
  1141.  
  1142.       call DrawButtonsOf2DVerticalScroller
  1143.  
  1144.       no_redraw_all_vertical_scroller_2D:
  1145.  
  1146.       xor eax,eax
  1147.       mov al,[Scroller.type]
  1148.       and al,sc_scroll_bar_move
  1149.       test al,al
  1150.       jz no_move_vertical_scroller_bar_2D
  1151.  
  1152.         xor eax,eax
  1153.         mov ax,[Scroller.x]
  1154.         mov ebx,[ScrollBar.y]
  1155.         mov ecx,[Scrollersize]
  1156.         call DrawVertical2DScrollBar
  1157.  
  1158.         and [Scroller.type],sc_scroll_bar_move_off
  1159.         mov esi,dword Scroller
  1160.         mov edi,[PointerForScroller]
  1161.         add esi,control_header_size
  1162.         add edi,control_header_size
  1163.         mov ecx,sc_control_data_size
  1164.         rep movsb
  1165.  
  1166.       no_move_vertical_scroller_bar_2D:
  1167.  
  1168.       xor eax,eax
  1169.       xor ebx,ebx
  1170.       xor ecx,ecx
  1171.       xor edx,edx
  1172.       xor esi,esi
  1173.       xor edi,edi
  1174.       mov ax,[Scroller.x]
  1175.       mov bx,[Scroller.y]
  1176.       mov cx,16
  1177.       mov dx,[Scroller.length]
  1178.       mov si,[Scroller.mouseX]
  1179.       mov di,[Scroller.mouseY]
  1180.       add ebx,17
  1181.       sub edx,17+17
  1182.       call CheckCrossingBox
  1183.  
  1184.       cmp eax,0xffffff
  1185.       jne no_crossing_vertical_scroller_2D_
  1186.  
  1187.       or [Scroller.type],sc_active
  1188.       mov esi,dword Scroller
  1189.       mov edi,[PointerForScroller]
  1190.       add esi,control_header_size
  1191.       add edi,control_header_size
  1192.       mov ecx,sc_control_data_size
  1193.       rep movsb
  1194.  
  1195.       jmp exit_crossing_vertical_scroller_2D
  1196.       no_crossing_vertical_scroller_2D_:
  1197.  
  1198.         ;check button of mouse
  1199.         mov eax,[ButtonsOfMouse]
  1200.  
  1201.         and eax,1b
  1202.         test al,al
  1203.         jnz mouse_button_pressed_vertical_2D
  1204.  
  1205.           and [Scroller.type],sc_move_active_off
  1206.           mov esi,dword Scroller
  1207.           mov edi,[PointerForScroller]
  1208.           add esi,control_header_size
  1209.           add edi,control_header_size
  1210.           mov ecx,sc_control_data_size
  1211.           rep movsb
  1212.          mouse_button_pressed_vertical_2D:
  1213.  
  1214.       exit_crossing_vertical_scroller_2D:
  1215.  
  1216.  
  1217.       xor eax,eax
  1218.       mov al,[Scroller.type]
  1219.       and al,sc_active
  1220.       test al,al
  1221.       jz no_change_vertical_scroller_2D
  1222.  
  1223.         xor eax,eax
  1224.         xor ebx,ebx
  1225.         mov ax,[Scroller.x]
  1226.         mov bx,[Scroller.mouseX]
  1227.  
  1228.         sub eax,ebx
  1229.         jns no_signum_1_y_2D
  1230.         neg eax
  1231.         no_signum_1_y_2D:
  1232.  
  1233.         cmp eax,110
  1234.         jle no_change_bits_vertical_scroller_2D
  1235.  
  1236.         and [Scroller.type],sc_move_active_off
  1237.         no_change_bits_vertical_scroller_2D:
  1238.  
  1239.         mov esi,dword Scroller
  1240.         mov edi,[PointerForScroller]
  1241.         add esi,control_header_size
  1242.         add edi,control_header_size
  1243.         mov ecx,sc_control_data_size
  1244.         rep movsb
  1245.  
  1246.       no_change_vertical_scroller_2D:
  1247.  
  1248.       no_vertical_scroller_2D:
  1249.  
  1250.       ;****************Horinzontal scroller**************
  1251.  
  1252.       ;is a horizontal 2D scroller ?
  1253.       xor eax,eax
  1254.       mov al,[Scroller.type]
  1255.       and al,sc_check_horizontal
  1256.       test al,al
  1257.       jz no_horizontal_scroller_2D
  1258.  
  1259.       xor eax,eax
  1260.       xor ebx,ebx
  1261.       xor ecx,ecx
  1262.       xor edx,edx
  1263.       xor esi,esi
  1264.       xor edi,edi
  1265.       mov ax,[Scroller.x]
  1266.       mov bx,[Scroller.y]
  1267.       mov cx,[Scroller.length]
  1268.       mov dx,16
  1269.       mov si,[Scroller.mouseX]
  1270.       mov di,[Scroller.mouseY]
  1271.       add eax,17
  1272.       sub ecx,17+17
  1273.       call CheckCrossingBox
  1274.  
  1275.       cmp eax,0xffffff
  1276.       jne no_crossing_horizontal_scroller_2D
  1277.  
  1278.       or [Scroller.type],sc_active
  1279.       mov esi,dword Scroller
  1280.       mov edi,[PointerForScroller]
  1281.       add esi,control_header_size
  1282.       add edi,control_header_size
  1283.       mov ecx,sc_control_data_size
  1284.       rep movsb
  1285.  
  1286.       no_crossing_horizontal_scroller_2D:
  1287.  
  1288.       ;is a vertical 3D scroller active ?
  1289.       xor eax,eax
  1290.       mov al,[Scroller.type]
  1291.       and al,sc_active
  1292.       test al,al
  1293.       jz no_horizontal_scroller_active_2D
  1294.  
  1295.       ;calculate size of scroll bar
  1296.       xor eax,eax
  1297.       mov ax,[Scroller.length]
  1298.       sub eax,16+16
  1299.       mov [v],eax
  1300.       fld [Scroller.size]
  1301.       fild [v]
  1302.       fmul st0,st1
  1303.       fistp [Scrollersize]
  1304.       fstp [v]
  1305.  
  1306.       cmp [Scrollersize],4
  1307.       jae no_minimum_size_horizontal_2D_scroller
  1308.  
  1309.         mov [Scrollersize],4
  1310.       no_minimum_size_horizontal_2D_scroller:
  1311.  
  1312.       ;if scroller is not active than use this is coordinats.
  1313.        xor eax,eax
  1314.       mov ax,[Scroller.length]
  1315.       sub eax,17+17
  1316.       sub eax,[Scrollersize]
  1317.       mov [yo],eax
  1318.       fld [Scroller.pos]
  1319.       fild [yo]
  1320.       fmul st0,st1
  1321.       fistp [v]
  1322.       fstp [v2]
  1323.  
  1324.       xor eax,eax
  1325.       mov ax,[Scroller.x]
  1326.       add ax,16
  1327.       add eax,[v]
  1328.       mov [ScrollBar.x],eax
  1329.  
  1330.       ;check button of mouse
  1331.       mov eax,[ButtonsOfMouse]
  1332.  
  1333.       and eax,1b
  1334.       test al,al
  1335.       jz no_horizontal_scroller_move_2D
  1336.       ;calculate in pixels length of scroll bar
  1337.  
  1338.       xor eax,eax
  1339.       xor edx,edx
  1340.       xor ecx,ecx
  1341.       mov ax,[Scroller.x]
  1342.       mov cx,[Scroller.length]
  1343.       mov dx,[Scroller.mouseX]
  1344.       mov ebx,edx
  1345.       add ecx,eax
  1346.       add eax,17
  1347.       sub ecx,17
  1348.       mov esi,ecx
  1349.  
  1350.       sub ebx,eax
  1351.       jns no_minimum_scroller_x_2D
  1352.  
  1353.       mov [Scroller.mouseX],ax
  1354.       no_minimum_scroller_x_2D:
  1355.  
  1356.       sub ecx,edx
  1357.       jns no_maximum_scroller_x_2D
  1358.  
  1359.       mov [Scroller.mouseX],si
  1360.       no_maximum_scroller_x_2D:
  1361.  
  1362.  
  1363.       mov eax,[Scrollersize]
  1364.       shr eax,1
  1365.       xor ebx,ebx
  1366.       mov bx,[Scroller.mouseX]
  1367.       sub bx,[Scroller.x]
  1368.       sub ebx,17
  1369.       xor ecx,ecx
  1370.       mov cx,[Scroller.x]
  1371.       add cx,[Scroller.length]
  1372.       sub cx,17
  1373.       sub cx,[Scroller.mouseX]
  1374.  
  1375.       cmp ebx,eax
  1376.       jae no_correct_x_2D
  1377.        xor edx,edx
  1378.        mov dx,[Scroller.x]
  1379.        add dx,16
  1380.        add edx,eax
  1381.       no_correct_x_2D:
  1382.  
  1383.       cmp ecx,eax
  1384.       jae no_correct_x__2D
  1385.        xor edx,edx
  1386.        mov dx,[Scroller.x]
  1387.        add dx,[Scroller.length]
  1388.        sub dx,16
  1389.        sub edx,eax
  1390.       no_correct_x__2D:
  1391.  
  1392.       mov [ScrollBar.x],edx
  1393.       sub [ScrollBar.x],eax
  1394.       sub dx,[Scroller.x]
  1395.       sub edx,16
  1396.       sub edx,eax
  1397.       mov [v],edx
  1398.  
  1399.       xor ebx,ebx
  1400.       mov bx,[Scroller.length]
  1401.       sub ebx,16+16
  1402.       sub ebx,[Scrollersize]
  1403.       mov [v2],ebx
  1404.  
  1405.       fild [v2]
  1406.       fild [v]
  1407.       fdiv st0,st1
  1408.       fstp [Scroller.pos]
  1409.       fistp [v2]
  1410.  
  1411.       ;put 5 bit(scroll bar move)
  1412.       or [Scroller.type],sc_scroll_bar_move
  1413.  
  1414.       mov esi,dword Scroller
  1415.       mov edi,[PointerForScroller]
  1416.       add esi,control_header_size
  1417.       add edi,control_header_size
  1418.       mov ecx,sc_control_data_size
  1419.       rep movsb
  1420.  
  1421.       jmp no_horizontal_scroller_active_2D
  1422.       no_horizontal_scroller_move_2D:
  1423.  
  1424.       no_horizontal_scroller_active_2D:
  1425.  
  1426.       ;if bit 7 is a true than redraw all scroller.
  1427.  
  1428.       xor eax,eax
  1429.       mov al,[Scroller.type]
  1430.       and al,sc_redraw
  1431.       test al,al
  1432.       jz no_redraw_all_horizontal_scroller_2D
  1433.  
  1434.       and [Scroller.type],sc_redraw_off
  1435.       mov esi,dword Scroller
  1436.       mov edi,[PointerForScroller]
  1437.       add esi,control_header_size
  1438.       add edi,control_header_size
  1439.       mov ecx,sc_control_data_size
  1440.       rep movsb
  1441.  
  1442.       call DrawButtonsOf2DHorizontalScroller
  1443.  
  1444.       no_redraw_all_horizontal_scroller_2D:
  1445.  
  1446.       xor eax,eax
  1447.       mov al,[Scroller.type]
  1448.       and al,sc_scroll_bar_move
  1449.       test al,al
  1450.       jz no_move_horizontal_scroller_bar_2D
  1451.  
  1452.         xor ebx,ebx
  1453.         mov bx,[Scroller.y]
  1454.         mov eax,[ScrollBar.x]
  1455.         mov ecx,[Scrollersize]
  1456.         call DrawHorizontal2DScrollBar
  1457.  
  1458.         and [Scroller.type],sc_scroll_bar_move_off
  1459.         mov esi,dword Scroller
  1460.         mov edi,[PointerForScroller]
  1461.         add esi,control_header_size
  1462.         add edi,control_header_size
  1463.         mov ecx,sc_control_data_size
  1464.         rep movsb
  1465.  
  1466.       no_move_horizontal_scroller_bar_2D:
  1467.  
  1468.       xor eax,eax
  1469.       xor ebx,ebx
  1470.       xor ecx,ecx
  1471.       xor edx,edx
  1472.       xor esi,esi
  1473.       xor edi,edi
  1474.       mov ax,[Scroller.x]
  1475.       mov bx,[Scroller.y]
  1476.       mov dx,16
  1477.       mov cx,[Scroller.length]
  1478.       mov si,[Scroller.mouseX]
  1479.       mov di,[Scroller.mouseY]
  1480.       add eax,17
  1481.       sub ecx,17+17
  1482.       call CheckCrossingBox
  1483.  
  1484.       cmp eax,0xffffff
  1485.       jne no_crossing_horizontal_scroller_2D_
  1486.  
  1487.       or [Scroller.type],sc_active
  1488.       mov esi,dword Scroller
  1489.       mov edi,[PointerForScroller]
  1490.       add esi,control_header_size
  1491.       add edi,control_header_size
  1492.       mov ecx,sc_control_data_size
  1493.       rep movsb
  1494.  
  1495.       jmp exit_crossing_horizontal_scroller_2D
  1496.       no_crossing_horizontal_scroller_2D_:
  1497.  
  1498.         ;check button of mouse
  1499.         mov eax,[ButtonsOfMouse]
  1500.  
  1501.         and eax,1b
  1502.         test al,al
  1503.         jnz mouse_button_pressed_horizontal_2D
  1504.  
  1505.           and [Scroller.type],sc_move_active_off
  1506.           mov esi,dword Scroller
  1507.           mov edi,[PointerForScroller]
  1508.           add esi,control_header_size
  1509.           add edi,control_header_size
  1510.           mov ecx,sc_control_data_size
  1511.           rep movsb
  1512.          mouse_button_pressed_horizontal_2D:
  1513.  
  1514.       exit_crossing_horizontal_scroller_2D:
  1515.  
  1516.  
  1517.       xor eax,eax
  1518.       mov al,[Scroller.type]
  1519.       and al,sc_active
  1520.       test al,al
  1521.       jz no_change_horizontal_scroller_2D
  1522.  
  1523.         xor eax,eax
  1524.         xor ebx,ebx
  1525.         mov ax,[Scroller.y]
  1526.         mov bx,[Scroller.mouseY]
  1527.  
  1528.         sub eax,ebx
  1529.         jns no_signum_1_x_2D
  1530.         neg eax
  1531.         no_signum_1_x_2D:
  1532.  
  1533.         cmp eax,110
  1534.         jle no_change_bits_horizontal_scroller_2D
  1535.  
  1536.         and [Scroller.type],sc_move_active_off
  1537.         no_change_bits_horizontal_scroller_2D:
  1538.  
  1539.         mov esi,dword Scroller
  1540.         mov edi,[PointerForScroller]
  1541.         add esi,control_header_size
  1542.         add edi,control_header_size
  1543.         mov ecx,sc_control_data_size
  1544.         rep movsb
  1545.  
  1546.       no_change_horizontal_scroller_2D:
  1547.  
  1548.       no_horizontal_scroller_2D:
  1549.  
  1550.       no_2D_scroller:
  1551.  
  1552.       ;checking to mouse events
  1553.       cmp [Message],dword 6
  1554.       jne no_send_message_to_child_buttons_of_scroller
  1555.  
  1556.       ;checking first child button
  1557.       mov eax,[Scroller.ChildButton1]
  1558.       mov ebx,[eax]
  1559.  
  1560.       push Message
  1561.       push eax
  1562.       call ebx
  1563.  
  1564.       mov eax,[Scroller.ChildButton1]
  1565.  
  1566.       xor ebx,ebx
  1567.       mov bl,[eax+45]
  1568.       and bl,bt_crossing
  1569.       test bl,bl
  1570.       jz no_crossing_first_child_button_of_scroller
  1571.  
  1572.          xor ebx,ebx
  1573.          mov bl,[eax+45]
  1574.          and bl,10b
  1575.          test bl,bl
  1576.          jz no_crossing_first_child_button_of_scroller
  1577.  
  1578.          or [Scroller.buttons_flags],sc_first_child_button_pressed
  1579.          or [Scroller.buttons_flags],10b
  1580.  
  1581.          xor eax,eax
  1582.          xor ebx,ebx
  1583.          mov ax,[Scroller.x]
  1584.          mov bx,[Scroller.y]
  1585.          mov [x],eax
  1586.          mov [y],ebx
  1587.  
  1588.          ;--------------------------------------
  1589.          ;---Checking stcroler to 2D or 3D types
  1590.          ;--------------------------------------
  1591.          xor eax,eax
  1592.          mov al,[Scroller.type]
  1593.          and al,sc_check_3D_type
  1594.          test al,al
  1595.          jnz type_3D_first_child_button_crossing
  1596.  
  1597.            ;if we here than scroller 2D type
  1598.  
  1599.            ;----------------------------------------------------
  1600.            ;---Chcecking scroller to horizontal or vertical types
  1601.            ;----------------------------------------------------
  1602.  
  1603.            call DrawPressedButtonOf2DScroller
  1604.  
  1605.            jmp else_type_3D_first_child_button_crossing
  1606.  
  1607.          type_3D_first_child_button_crossing:
  1608.  
  1609.            ;if we here than scroller 3D type
  1610.  
  1611.            call DrawPressedButtonOf3DScroller
  1612.  
  1613.          else_type_3D_first_child_button_crossing:
  1614.  
  1615.       jmp crossing_first_child_button_of_scroller
  1616.       no_crossing_first_child_button_of_scroller:
  1617.  
  1618.          and [Scroller.buttons_flags],sc_first_child_button_pressed_off
  1619.  
  1620.          xor eax,eax
  1621.          mov ax,[Scroller.buttons_flags]
  1622.          and ax,10b
  1623.          test ax,ax
  1624.          jz no_put_first_child_button
  1625.  
  1626.              ;--------------------------------------
  1627.              ;---Checking stcroler to 2D or 3D types
  1628.              ;--------------------------------------
  1629.              xor eax,eax
  1630.              mov al,[Scroller.type]
  1631.              and al,sc_check_3D_type
  1632.              test al,al
  1633.              jnz type_3D_first_child_button_not_crossing
  1634.  
  1635.                  ;if we here than scroller 2D type
  1636.  
  1637.                  ;----------------------------------------------------
  1638.                  ;---Chcecking scroller to horizontal or vertical types
  1639.                  ;----------------------------------------------------
  1640.  
  1641.                   xor eax,eax
  1642.                   mov al,[Scroller.type]
  1643.                   and al,sc_check_vertical
  1644.                   test al,al
  1645.                   jz type_horizontal_first_child_2D_button
  1646.  
  1647.                      ;put vertical first child button
  1648.                      call DrawButtonsOf2DVerticalScroller
  1649.  
  1650.                      jmp exit_else_type_horizontal_first_child_2D_button
  1651.                   type_horizontal_first_child_2D_button:
  1652.  
  1653.                      ;put horizontal first child button
  1654.                      call DrawButtonsOf2DVerticalScroller
  1655.  
  1656.                   exit_else_type_horizontal_first_child_2D_button:
  1657.  
  1658.                  jmp else_type_3D_first_child_button_not_crossing
  1659.  
  1660.              type_3D_first_child_button_not_crossing:
  1661.  
  1662.                   ;if we here than scroller 3D type
  1663.  
  1664.                  ;----------------------------------------------------
  1665.                  ;---Chcecking scroller to horizontal or vertical types
  1666.                  ;----------------------------------------------------
  1667.  
  1668.                   xor eax,eax
  1669.                   mov al,[Scroller.type]
  1670.                   and al,sc_check_vertical
  1671.                   test al,al
  1672.                   jz type_horizontal_first_child_3D_button
  1673.  
  1674.                      ;put vertical first child button
  1675.                      call DrawButtonsOfVertical3DScroller
  1676.  
  1677.                      jmp else_type_3D_first_child_button_not_crossing
  1678.  
  1679.                   type_horizontal_first_child_3D_button:
  1680.  
  1681.                      ;put horizontal first child button
  1682.                      call DrawButtonsOfHorizontal3DScroller
  1683.  
  1684.              else_type_3D_first_child_button_not_crossing:
  1685.  
  1686.              and [Scroller.buttons_flags],11111101b
  1687.  
  1688.          no_put_first_child_button:
  1689.  
  1690.       crossing_first_child_button_of_scroller:
  1691.  
  1692.       ;checking second child button
  1693.       mov eax,[Scroller.ChildButton2]
  1694.       mov ebx,[eax]
  1695.  
  1696.       push Message
  1697.       push eax
  1698.       call ebx
  1699.  
  1700.       mov eax,[Scroller.ChildButton2]
  1701.  
  1702.       xor ebx,ebx
  1703.       mov bl,[eax+45]
  1704.       and bl,bt_crossing
  1705.       test bl,bl
  1706.       jz no_crossing_second_child_button_of_scroller
  1707.  
  1708.          xor ebx,ebx
  1709.          mov bl,[eax+45]
  1710.          and bl,10b
  1711.          test bl,bl
  1712.          jz no_crossing_second_child_button_of_scroller
  1713.  
  1714.          or [Scroller.buttons_flags],sc_second_child_button_pressed
  1715.          or [Scroller.buttons_flags],100000b
  1716.  
  1717.          xor eax,eax
  1718.          xor ebx,ebx
  1719.          xor ecx,ecx
  1720.          mov ax,[Scroller.x]
  1721.          mov bx,[Scroller.y]
  1722.          mov [x],eax
  1723.          mov [y],ebx
  1724.  
  1725.          mov cx,[Scroller.length]
  1726.          sub ecx,16
  1727.  
  1728.          ;----------------------------------------------------
  1729.          ;---Chcecking scroller to horizontal or vertical types
  1730.          ;----------------------------------------------------
  1731.          xor eax,eax
  1732.          mov al,[Scroller.type]
  1733.          and al,sc_check_vertical
  1734.          test al,al
  1735.          jz calculate_pos_horizontal_second_child_button
  1736.  
  1737.             add [y],ecx
  1738.  
  1739.             jmp exit_else_calculate_pos_horizontal_second_child_button
  1740.          calculate_pos_horizontal_second_child_button:
  1741.  
  1742.             add [x],ecx
  1743.  
  1744.          exit_else_calculate_pos_horizontal_second_child_button:
  1745.  
  1746.          ;--------------------------------------
  1747.          ;---Checking stcroler to 2D or 3D types
  1748.          ;--------------------------------------
  1749.          xor eax,eax
  1750.          mov al,[Scroller.type]
  1751.          and al,sc_check_3D_type
  1752.          test al,al
  1753.          jnz type_3D_second_child_button_crossing
  1754.  
  1755.            ;if we here than scroller 2D type
  1756.  
  1757.            ;----------------------------------------------------
  1758.            ;---Chcecking scroller to horizontal or vertical types
  1759.            ;----------------------------------------------------
  1760.  
  1761.            call DrawPressedButtonOf2DScroller
  1762.  
  1763.            jmp else_type_3D_second_child_button_crossing
  1764.  
  1765.          type_3D_second_child_button_crossing:
  1766.  
  1767.            ;if we here than scroller 3D type
  1768.  
  1769.            call DrawPressedButtonOf3DScroller
  1770.  
  1771.          else_type_3D_second_child_button_crossing:
  1772.  
  1773.       jmp crossing_second_child_button_of_scroller
  1774.       no_crossing_second_child_button_of_scroller:
  1775.  
  1776.          and [Scroller.buttons_flags],sc_second_child_button_pressed_off
  1777.  
  1778.          xor eax,eax
  1779.          mov ax,[Scroller.buttons_flags]
  1780.          and ax,100000b
  1781.          test ax,ax
  1782.          jz no_put_second_child_button
  1783.  
  1784.              ;--------------------------------------
  1785.              ;---Checking stcroler to 2D or 3D types
  1786.              ;--------------------------------------
  1787.              xor eax,eax
  1788.              mov al,[Scroller.type]
  1789.              and al,sc_check_3D_type
  1790.              test al,al
  1791.              jnz type_3D_second_child_button_not_crossing
  1792.  
  1793.                  ;if we here than scroller 2D type
  1794.  
  1795.                  ;----------------------------------------------------
  1796.                  ;---Chcecking scroller to horizontal or vertical types
  1797.                  ;----------------------------------------------------
  1798.  
  1799.                   xor eax,eax
  1800.                   mov al,[Scroller.type]
  1801.                   and al,sc_check_vertical
  1802.                   test al,al
  1803.                   jz type_horizontal_second_child_2D_button
  1804.  
  1805.                      ;put vertical first child button
  1806.                      call DrawButtonsOf2DVerticalScroller
  1807.  
  1808.                      jmp exit_else_type_horizontal_second_child_2D_button
  1809.                   type_horizontal_second_child_2D_button:
  1810.  
  1811.                      ;put horizontal first child button
  1812.                      call DrawButtonsOf2DVerticalScroller
  1813.  
  1814.                   exit_else_type_horizontal_second_child_2D_button:
  1815.  
  1816.                  jmp else_type_3D_second_child_button_not_crossing
  1817.  
  1818.              type_3D_second_child_button_not_crossing:
  1819.  
  1820.                   ;if we here than scroller 3D type
  1821.  
  1822.                  ;----------------------------------------------------
  1823.                  ;---Chcecking scroller to horizontal or vertical types
  1824.                  ;----------------------------------------------------
  1825.  
  1826.                   xor eax,eax
  1827.                   mov al,[Scroller.type]
  1828.                   and al,sc_check_vertical
  1829.                   test al,al
  1830.                   jz type_horizontal_second_child_3D_button
  1831.  
  1832.                      ;put vertical first child button
  1833.                      call DrawButtonsOfVertical3DScroller
  1834.  
  1835.                      jmp else_type_3D_second_child_button_not_crossing
  1836.  
  1837.                   type_horizontal_second_child_3D_button:
  1838.  
  1839.                      ;put horizontal first child button
  1840.                      call DrawButtonsOfHorizontal3DScroller
  1841.  
  1842.              else_type_3D_second_child_button_not_crossing:
  1843.  
  1844.              and [Scroller.buttons_flags],11011111b
  1845.  
  1846.          no_put_second_child_button:
  1847.  
  1848.       crossing_second_child_button_of_scroller:
  1849.  
  1850.       no_send_message_to_child_buttons_of_scroller:
  1851.  
  1852.       exit_scroller:
  1853.  
  1854.       ;save resultat of work in control
  1855.       mov esi,dword Scroller
  1856.       mov edi,[PointerForScroller]
  1857.       mov ecx,sc_control_data_size
  1858.       add esi,control_header_size
  1859.       add edi,control_header_size
  1860.       rep movsb
  1861.  
  1862.       ret 8
  1863.  
  1864.  
  1865. DrawPressedButtonOf2DScroller:
  1866.  
  1867.       and [Line.color],0;eax
  1868.  
  1869.       ;draw horizontal up light line
  1870.       mov eax,[x]
  1871.       mov ebx,[y]
  1872.       mov [Line.x1],eax
  1873.       mov [Line.x2],eax
  1874.       mov [Line.y1],ebx
  1875.       mov [Line.y2],ebx
  1876.       add [Line.x2],15
  1877.       call DrawLine
  1878.  
  1879.       ;draw vertical up light line
  1880.       mov eax,[x]
  1881.       mov ebx,[y]
  1882.       mov [Line.x1],eax
  1883.       mov [Line.x2],eax
  1884.       mov [Line.y1],ebx
  1885.       mov [Line.y2],ebx
  1886.       add [Line.y2],14
  1887.       call DrawLine
  1888.  
  1889.       ;mov eax,[colors_table2+8*3]
  1890.       ;and eax,0xffffff
  1891.       mov [Line.color],0xffffff ;eax
  1892.  
  1893.       ;draw vertical up dark line
  1894.       mov eax,[x]
  1895.       mov ebx,[y]
  1896.       add eax,15
  1897.       mov [Line.x1],eax
  1898.       mov [Line.x2],eax
  1899.       mov [Line.y1],ebx
  1900.       mov [Line.y2],ebx
  1901.       add [Line.y2],15
  1902.       call DrawLine
  1903.  
  1904.       ;draw horizontal up dark line
  1905.       mov eax,[x]
  1906.       mov ebx,[y]
  1907.       add ebx,15
  1908.       mov [Line.x1],eax
  1909.       mov [Line.x2],eax
  1910.       mov [Line.y1],ebx
  1911.       mov [Line.y2],ebx
  1912.       add [Line.x2],15
  1913.       call DrawLine
  1914.  
  1915.       ret
  1916.  
  1917. DrawPressedButtonOf3DScroller:
  1918.  
  1919.       and [Line.color],0;eax
  1920.  
  1921.       ;draw horizontal up light line
  1922.       mov eax,[x]
  1923.       mov ebx,[y]
  1924.       mov [Line.x1],eax
  1925.       mov [Line.x2],eax
  1926.       mov [Line.y1],ebx
  1927.       mov [Line.y2],ebx
  1928.       add [Line.x2],16
  1929.       call DrawLine
  1930.  
  1931.       ;draw vertical up light line
  1932.       mov eax,[x]
  1933.       mov ebx,[y]
  1934.       mov [Line.x1],eax
  1935.       mov [Line.x2],eax
  1936.       mov [Line.y1],ebx
  1937.       mov [Line.y2],ebx
  1938.       add [Line.y2],16
  1939.       call DrawLine
  1940.  
  1941.       ;mov eax,[colors_table2+8*3]
  1942.       ;and eax,0xffffff
  1943.       mov [Line.color],0xffffff ;eax
  1944.  
  1945.       ;draw vertical up dark line
  1946.       mov eax,[x]
  1947.       mov ebx,[y]
  1948.       add eax,16
  1949.       mov [Line.x1],eax
  1950.       mov [Line.x2],eax
  1951.       mov [Line.y1],ebx
  1952.       mov [Line.y2],ebx
  1953.       add [Line.y2],16
  1954.       call DrawLine
  1955.  
  1956.       ;draw horizontal up dark line
  1957.       mov eax,[x]
  1958.       mov ebx,[y]
  1959.       add ebx,16
  1960.       mov [Line.x1],eax
  1961.       mov [Line.x2],eax
  1962.       mov [Line.y1],ebx
  1963.       mov [Line.y2],ebx
  1964.       add [Line.x2],16
  1965.       call DrawLine
  1966.  
  1967.       ret
  1968.  
  1969. DrawButtonsOf2DHorizontalScroller:
  1970.  
  1971.        ;generate colors tables
  1972.       mov eax,[Scroller.color1]
  1973.       mov ebx,0xffffff
  1974.       mov ecx,20
  1975.       mov edx,dword colors_table1
  1976.       call gradient
  1977.  
  1978.       xor eax,eax
  1979.       mov ebx,[Scroller.color1]
  1980.       mov ecx,20
  1981.       mov edx,dword colors_table2
  1982.       call gradient
  1983.  
  1984.       ;draw vertical up rectangle
  1985.       xor ebx,ebx
  1986.       xor ecx,ecx
  1987.       mov eax,13
  1988.       mov bx,[Scroller.x]
  1989.       mov cx,[Scroller.y]
  1990.       shl ebx,16
  1991.       shl ecx,16
  1992.       add ebx,16
  1993.       add ecx,16
  1994.       mov edx,[Color]
  1995.       and edx,0xffffff
  1996.       mcall
  1997.  
  1998.       mov eax,[colors_table1+15*3]
  1999.       and eax,0xffffff
  2000.       mov [Line.color],eax
  2001.  
  2002.       ;draw horizontal up light line
  2003.       xor eax,eax
  2004.       xor ebx,ebx
  2005.       mov ax,[Scroller.x]
  2006.       mov bx,[Scroller.y]
  2007.       mov [Line.x1],eax
  2008.       mov [Line.x2],eax
  2009.       mov [Line.y1],ebx
  2010.       mov [Line.y2],ebx
  2011.       add [Line.x2],15
  2012.       call DrawLine
  2013.  
  2014.       ;draw vertical up light line
  2015.       xor eax,eax
  2016.       xor ebx,ebx
  2017.       mov ax,[Scroller.x]
  2018.       mov bx,[Scroller.y]
  2019.       mov [Line.x1],eax
  2020.       mov [Line.x2],eax
  2021.       mov [Line.y1],ebx
  2022.       mov [Line.y2],ebx
  2023.       add [Line.y2],15
  2024.       call DrawLine
  2025.  
  2026.       mov eax,[colors_table2+8*3]
  2027.       and eax,0xffffff
  2028.       mov [Line.color],eax
  2029.  
  2030.       ;draw vertical up dark line
  2031.       xor eax,eax
  2032.       xor ebx,ebx
  2033.       mov ax,[Scroller.x]
  2034.       mov bx,[Scroller.y]
  2035.       add eax,15
  2036.       mov [Line.x1],eax
  2037.       mov [Line.x2],eax
  2038.       mov [Line.y1],ebx
  2039.       mov [Line.y2],ebx
  2040.       add [Line.y2],15
  2041.       call DrawLine
  2042.  
  2043.       ;draw horizontal up dark line
  2044.       xor eax,eax
  2045.       xor ebx,ebx
  2046.       mov ax,[Scroller.x]
  2047.       mov bx,[Scroller.y]
  2048.       add ebx,15
  2049.       mov [Line.x1],eax
  2050.       mov [Line.x2],eax
  2051.       mov [Line.y1],ebx
  2052.       mov [Line.y2],ebx
  2053.       add [Line.x2],14
  2054.       call DrawLine
  2055.  
  2056.       and [Line.color],0
  2057.  
  2058.       xor eax,eax
  2059.       xor ebx,ebx
  2060.       mov ax,[Scroller.x]
  2061.       mov bx,[Scroller.y]
  2062.       mov [Line.x1],eax
  2063.       mov [Line.x2],eax
  2064.       mov [Line.y1],ebx
  2065.       mov [Line.y2],ebx
  2066.       add [Line.x1],5
  2067.       add [Line.x2],9
  2068.       add [Line.y1],8
  2069.       add [Line.y2],4
  2070.       call DrawLine
  2071.  
  2072.       xor eax,eax
  2073.       xor ebx,ebx
  2074.       mov ax,[Scroller.x]
  2075.       mov bx,[Scroller.y]
  2076.       mov [Line.x1],eax
  2077.       mov [Line.x2],eax
  2078.       mov [Line.y1],ebx
  2079.       mov [Line.y2],ebx
  2080.       add [Line.x1],6
  2081.       add [Line.x2],9
  2082.       add [Line.y1],8
  2083.       add [Line.y2],5
  2084.       call DrawLine
  2085.  
  2086.       xor eax,eax
  2087.       xor ebx,ebx
  2088.       mov ax,[Scroller.x]
  2089.       mov bx,[Scroller.y]
  2090.       mov [Line.x1],eax
  2091.       mov [Line.x2],eax
  2092.       mov [Line.y1],ebx
  2093.       mov [Line.y2],ebx
  2094.       add [Line.x1],5
  2095.       add [Line.x2],9
  2096.       add [Line.y1],8
  2097.       add [Line.y2],12
  2098.       call DrawLine
  2099.  
  2100.       xor eax,eax
  2101.       xor ebx,ebx
  2102.       mov ax,[Scroller.x]
  2103.       mov bx,[Scroller.y]
  2104.       mov [Line.x1],eax
  2105.       mov [Line.x2],eax
  2106.       mov [Line.y1],ebx
  2107.       mov [Line.y2],ebx
  2108.       add [Line.x1],6
  2109.       add [Line.x2],9
  2110.       add [Line.y1],8
  2111.       add [Line.y2],11
  2112.       call DrawLine
  2113.  
  2114.       ;draw vertical down rectangle
  2115.       xor ebx,ebx
  2116.       xor ecx,ecx
  2117.       mov eax,13
  2118.       mov edx,[Color]
  2119.       mov bx,[Scroller.x]
  2120.       mov cx,[Scroller.y]
  2121.       add bx,[Scroller.length]
  2122.       sub bx,16
  2123.       shl ebx,16
  2124.       shl ecx,16
  2125.       add ebx,16
  2126.       add ecx,16
  2127.       and edx,0xffffff
  2128.       mcall
  2129.  
  2130.       mov eax,[colors_table1+15*3]
  2131.       and eax,0xffffff
  2132.       mov [Line.color],eax
  2133.  
  2134.       ;draw horizontal up light line
  2135.       xor eax,eax
  2136.       xor ebx,ebx
  2137.       mov ax,[Scroller.x]
  2138.       mov bx,[Scroller.y]
  2139.       add ax,[Scroller.length]
  2140.       sub eax,15
  2141.       mov [Line.x1],eax
  2142.       mov [Line.x2],eax
  2143.       mov [Line.y1],ebx
  2144.       mov [Line.y2],ebx
  2145.       add [Line.x2],15
  2146.       call DrawLine
  2147.  
  2148.       ;draw vertical up light line
  2149.       xor eax,eax
  2150.       xor ebx,ebx
  2151.       mov ax,[Scroller.x]
  2152.       mov bx,[Scroller.y]
  2153.       add ax,[Scroller.length]
  2154.       sub eax,16
  2155.       mov [Line.x1],eax
  2156.       mov [Line.x2],eax
  2157.       mov [Line.y1],ebx
  2158.       mov [Line.y2],ebx
  2159.       add [Line.y2],15
  2160.       call DrawLine
  2161.  
  2162.       mov eax,[colors_table2+8*3]
  2163.       and eax,0xffffff
  2164.       mov [Line.color],eax
  2165.  
  2166.       ;draw vertical up dark line
  2167.       xor eax,eax
  2168.       xor ebx,ebx
  2169.       mov ax,[Scroller.x]
  2170.       mov bx,[Scroller.y]
  2171.       add ax,[Scroller.length]
  2172.       mov [Line.x1],eax
  2173.       mov [Line.x2],eax
  2174.       mov [Line.y1],ebx
  2175.       mov [Line.y2],ebx
  2176.       add [Line.y2],15
  2177.       call DrawLine
  2178.  
  2179.       ;draw horizontal up dark line
  2180.       xor eax,eax
  2181.       xor ebx,ebx
  2182.       mov ax,[Scroller.x]
  2183.       mov bx,[Scroller.y]
  2184.       add ax,[Scroller.length]
  2185.       sub eax,15
  2186.       add ebx,15
  2187.       mov [Line.x1],eax
  2188.       mov [Line.x2],eax
  2189.       mov [Line.y1],ebx
  2190.       mov [Line.y2],ebx
  2191.       add [Line.x2],15
  2192.       call DrawLine
  2193.  
  2194.       xor eax,eax
  2195.       mov ax,[Scroller.length]
  2196.       sub eax,16
  2197.       mov [length],eax
  2198.  
  2199.       and [Line.color],0
  2200.  
  2201.       xor eax,eax
  2202.       xor ebx,ebx
  2203.       mov ax,[Scroller.x]
  2204.       mov bx,[Scroller.y]
  2205.       add eax,[length]
  2206.       mov [Line.x1],eax
  2207.       mov [Line.x2],eax
  2208.       mov [Line.y1],ebx
  2209.       mov [Line.y2],ebx
  2210.       add [Line.x1],12
  2211.       add [Line.x2],8
  2212.       add [Line.y1],8
  2213.       add [Line.y2],4
  2214.       call DrawLine
  2215.  
  2216.       xor eax,eax
  2217.       xor ebx,ebx
  2218.       mov ax,[Scroller.x]
  2219.       mov bx,[Scroller.y]
  2220.       add eax,[length]
  2221.       mov [Line.x1],eax
  2222.       mov [Line.x2],eax
  2223.       mov [Line.y1],ebx
  2224.       mov [Line.y2],ebx
  2225.       add [Line.x1],11
  2226.       add [Line.x2],8
  2227.       add [Line.y1],8
  2228.       add [Line.y2],5
  2229.       call DrawLine
  2230.  
  2231.       xor eax,eax
  2232.       xor ebx,ebx
  2233.       mov ax,[Scroller.x]
  2234.       mov bx,[Scroller.y]
  2235.       add eax,[length]
  2236.       mov [Line.x1],eax
  2237.       mov [Line.x2],eax
  2238.       mov [Line.y1],ebx
  2239.       mov [Line.y2],ebx
  2240.       add [Line.x1],12
  2241.       add [Line.x2],8
  2242.       add [Line.y1],8
  2243.       add [Line.y2],12
  2244.       call DrawLine
  2245.  
  2246.       xor eax,eax
  2247.       xor ebx,ebx
  2248.       mov ax,[Scroller.x]
  2249.       mov bx,[Scroller.y]
  2250.       add eax,[length]
  2251.       mov [Line.x1],eax
  2252.       mov [Line.x2],eax
  2253.       mov [Line.y1],ebx
  2254.       mov [Line.y2],ebx
  2255.       add [Line.x1],11
  2256.       add [Line.x2],8
  2257.       add [Line.y1],8
  2258.       add [Line.y2],11
  2259.       call DrawLine
  2260.  
  2261.       ret
  2262.  
  2263. DrawButtonsOf2DVerticalScroller:
  2264.  
  2265.       ;generate colors tables
  2266.       mov eax,[Scroller.color1]
  2267.       mov ebx,0xffffff
  2268.       mov ecx,20
  2269.       mov edx,dword colors_table1
  2270.       call gradient
  2271.  
  2272.       xor eax,eax
  2273.       mov ebx,[Scroller.color1]
  2274.       mov ecx,20
  2275.       mov edx,dword colors_table2
  2276.       call gradient
  2277.  
  2278.       ;draw vertical up rectangle
  2279.       mov eax,13
  2280.       mov edx,[Color]
  2281.       xor ebx,ebx
  2282.       xor ecx,ecx
  2283.       mov bx,[Scroller.x]
  2284.       mov cx,[Scroller.y]
  2285.       shl ebx,16
  2286.       shl ecx,16
  2287.       add ebx,16
  2288.       add ecx,16
  2289.       and edx,0xffffff
  2290.       mcall
  2291.  
  2292.       mov eax,[colors_table1+15*3]
  2293.       and eax,0xffffff
  2294.       mov [Line.color],eax
  2295.  
  2296.       ;draw horizontal up light line
  2297.       xor eax,eax
  2298.       xor ebx,ebx
  2299.       mov ax,[Scroller.x]
  2300.       mov bx,[Scroller.y]
  2301.       mov [Line.x1],eax
  2302.       mov [Line.x2],eax
  2303.       mov [Line.y1],ebx
  2304.       mov [Line.y2],ebx
  2305.       add [Line.x2],14
  2306.       call DrawLine
  2307.  
  2308.       ;draw vertical up light line
  2309.       xor eax,eax
  2310.       xor ebx,ebx
  2311.       mov ax,[Scroller.x]
  2312.       mov bx,[Scroller.y]
  2313.       mov [Line.x1],eax
  2314.       mov [Line.x2],eax
  2315.       mov [Line.y1],ebx
  2316.       mov [Line.y2],ebx
  2317.       add [Line.y2],14
  2318.       call DrawLine
  2319.  
  2320.       mov eax,[colors_table2+8*3];[pointer]
  2321.       and eax,0xffffff
  2322.       mov [Line.color],eax
  2323.  
  2324.       ;draw vertical up dark line
  2325.       xor eax,eax
  2326.       xor ebx,ebx
  2327.       mov ax,[Scroller.x]
  2328.       mov bx,[Scroller.y]
  2329.       add eax,15
  2330.       mov [Line.x1],eax
  2331.       mov [Line.x2],eax
  2332.       mov [Line.y1],ebx
  2333.       mov [Line.y2],ebx
  2334.       add [Line.y2],15
  2335.       call DrawLine
  2336.  
  2337.       ;draw horizontal up dark line
  2338.       xor eax,eax
  2339.       xor ebx,ebx
  2340.       mov ax,[Scroller.x]
  2341.       mov bx,[Scroller.y]
  2342.       add ebx,15
  2343.       mov [Line.x1],eax
  2344.       mov [Line.x2],eax
  2345.       mov [Line.y1],ebx
  2346.       mov [Line.y2],ebx
  2347.       add [Line.x2],15
  2348.       call DrawLine
  2349.  
  2350.       and [Line.color],0
  2351.  
  2352.       xor eax,eax
  2353.       xor ebx,ebx
  2354.       mov ax,[Scroller.x]
  2355.       mov bx,[Scroller.y]
  2356.       mov [Line.x1],eax
  2357.       mov [Line.x2],eax
  2358.       mov [Line.y1],ebx
  2359.       mov [Line.y2],ebx
  2360.       add [Line.x1],4
  2361.       add [Line.x2],8
  2362.       add [Line.y1],9
  2363.       add [Line.y2],5
  2364.       call DrawLine
  2365.  
  2366.       xor eax,eax
  2367.       xor ebx,ebx
  2368.       mov ax,[Scroller.x]
  2369.       mov bx,[Scroller.y]
  2370.       mov [Line.x1],eax
  2371.       mov [Line.x2],eax
  2372.       mov [Line.y1],ebx
  2373.       mov [Line.y2],ebx
  2374.       add [Line.x1],4
  2375.       add [Line.x2],8
  2376.       add [Line.y1],10
  2377.       add [Line.y2],6
  2378.       call DrawLine
  2379.  
  2380.       xor eax,eax
  2381.       xor ebx,ebx
  2382.       mov ax,[Scroller.x]
  2383.       mov bx,[Scroller.y]
  2384.       mov [Line.x1],eax
  2385.       mov [Line.x2],eax
  2386.       mov [Line.y1],ebx
  2387.       mov [Line.y2],ebx
  2388.       add [Line.x1],8
  2389.       add [Line.x2],12
  2390.       add [Line.y1],5
  2391.       add [Line.y2],9
  2392.       call DrawLine
  2393.  
  2394.       xor eax,eax
  2395.       xor ebx,ebx
  2396.       mov ax,[Scroller.x]
  2397.       mov bx,[Scroller.y]
  2398.       mov [Line.x1],eax
  2399.       mov [Line.x2],eax
  2400.       mov [Line.y1],ebx
  2401.       mov [Line.y2],ebx
  2402.       add [Line.x1],8
  2403.       add [Line.x2],12
  2404.       add [Line.y1],6
  2405.       add [Line.y2],10
  2406.       call DrawLine
  2407.  
  2408.       ;draw vertical down rectangle
  2409.       xor ebx,ebx
  2410.       xor ecx,ecx
  2411.       mov eax,13
  2412.       mov edx,[Color]
  2413.       and edx,0xffffff
  2414.       mov bx,[Scroller.x]
  2415.       mov cx,[Scroller.y]
  2416.       add cx,[Scroller.length]
  2417.       sub cx,16
  2418.       shl ebx,16
  2419.       shl ecx,16
  2420.       add ebx,16
  2421.       add ecx,16
  2422.       mcall
  2423.  
  2424.       mov eax,[colors_table1+15*3]
  2425.       and eax,0xffffff
  2426.       mov [Line.color],eax
  2427.  
  2428.       ;draw horizontal up light line
  2429.       xor eax,eax
  2430.       xor ebx,ebx
  2431.       mov ax,[Scroller.x]
  2432.       mov bx,[Scroller.y]
  2433.       add bx,[Scroller.length]
  2434.       sub ebx,16
  2435.       mov [Line.x1],eax
  2436.       mov [Line.x2],eax
  2437.       mov [Line.y1],ebx
  2438.       mov [Line.y2],ebx
  2439.       add [Line.x2],15
  2440.       call DrawLine
  2441.  
  2442.       ;draw vertical up light line
  2443.       xor eax,eax
  2444.       xor ebx,ebx
  2445.       mov ax,[Scroller.x]
  2446.       mov bx,[Scroller.y]
  2447.       add bx,[Scroller.length]
  2448.       sub ebx,16
  2449.       mov [Line.x1],eax
  2450.       mov [Line.x2],eax
  2451.       mov [Line.y1],ebx
  2452.       mov [Line.y2],ebx
  2453.       add [Line.y2],15
  2454.       call DrawLine
  2455.  
  2456.       mov eax,[colors_table2+8*3];[pointer]
  2457.       and eax,0xffffff
  2458.       mov [Line.color],eax
  2459.  
  2460.       ;draw vertical up dark line
  2461.       xor eax,eax
  2462.       xor ebx,ebx
  2463.       mov ax,[Scroller.x]
  2464.       mov bx,[Scroller.y]
  2465.       add bx,[Scroller.length]
  2466.       sub ebx,16
  2467.       add eax,15
  2468.       mov [Line.x1],eax
  2469.       mov [Line.x2],eax
  2470.       mov [Line.y1],ebx
  2471.       mov [Line.y2],ebx
  2472.       add [Line.y2],15
  2473.       call DrawLine
  2474.  
  2475.       ;draw horizontal up dark line
  2476.       xor eax,eax
  2477.       xor ebx,ebx
  2478.       mov ax,[Scroller.x]
  2479.       mov bx,[Scroller.y]
  2480.       add bx,[Scroller.length]
  2481.       mov [Line.x1],eax
  2482.       mov [Line.x2],eax
  2483.       mov [Line.y1],ebx
  2484.       mov [Line.y2],ebx
  2485.       add [Line.x2],15
  2486.       call DrawLine
  2487.  
  2488.       xor eax,eax
  2489.       mov ax,[Scroller.length]
  2490.       sub eax,16
  2491.       mov [length],eax
  2492.  
  2493.       and [Line.color],0
  2494.  
  2495.       xor eax,eax
  2496.       xor ebx,ebx
  2497.       mov ax,[Scroller.x]
  2498.       mov bx,[Scroller.y]
  2499.       add ebx,[length]
  2500.       mov [Line.x1],eax
  2501.       mov [Line.x2],eax
  2502.       mov [Line.y1],ebx
  2503.       mov [Line.y2],ebx
  2504.       add [Line.x1],4
  2505.       add [Line.x2],8
  2506.       add [Line.y1],7
  2507.       add [Line.y2],11
  2508.       call DrawLine
  2509.  
  2510.       xor eax,eax
  2511.       xor ebx,ebx
  2512.       mov ax,[Scroller.x]
  2513.       mov bx,[Scroller.y]
  2514.       add ebx,[length]
  2515.       mov [Line.x1],eax
  2516.       mov [Line.x2],eax
  2517.       mov [Line.y1],ebx
  2518.       mov [Line.y2],ebx
  2519.       add [Line.x1],4
  2520.       add [Line.x2],8
  2521.       add [Line.y1],6
  2522.       add [Line.y2],10
  2523.       call DrawLine
  2524.  
  2525.       xor eax,eax
  2526.       xor ebx,ebx
  2527.       mov ax,[Scroller.x]
  2528.       mov bx,[Scroller.y]
  2529.       add ebx,[length]
  2530.       mov [Line.x1],eax
  2531.       mov [Line.x2],eax
  2532.       mov [Line.y1],ebx
  2533.       mov [Line.y2],ebx
  2534.       add [Line.x1],12
  2535.       add [Line.x2],8
  2536.       add [Line.y1],7
  2537.       add [Line.y2],11
  2538.       call DrawLine
  2539.  
  2540.       xor eax,eax
  2541.       xor ebx,ebx
  2542.       mov ax,[Scroller.x]
  2543.       mov bx,[Scroller.y]
  2544.       add ebx,[length]
  2545.       mov [Line.x1],eax
  2546.       mov [Line.x2],eax
  2547.       mov [Line.y1],ebx
  2548.       mov [Line.y2],ebx
  2549.       add [Line.x1],12
  2550.       add [Line.x2],8
  2551.       add [Line.y1],6
  2552.       add [Line.y2],10
  2553.       call DrawLine
  2554.  
  2555.       ret
  2556.  
  2557. DrawButtonsOfHorizontal3DScroller:
  2558.  
  2559.        ;draw vertical up rectangle
  2560.       xor eax,eax
  2561.       xor ebx,ebx
  2562.       mov ax,[Scroller.x]
  2563.       mov bx,[Scroller.y]
  2564.       mov [Rectangle.x],eax
  2565.       mov [Rectangle.y],ebx
  2566.       mov [Rectangle.width],16
  2567.       mov [Rectangle.height],16
  2568.  
  2569.       mov eax,[pointer]
  2570.       and eax,0xffffff
  2571.       mov [Rectangle.color],eax
  2572.       call RectangleContour
  2573.  
  2574.       ;draw gradient right
  2575.       mov eax,[Scroller.color1]
  2576.       mov ebx,dword 0xffffff
  2577.       and eax,0xffffff
  2578.       xor ecx,ecx
  2579.       xor edx,edx
  2580.       xor esi,esi
  2581.       xor edi,edi
  2582.       mov cx,[Scroller.x]
  2583.       mov dx,[Scroller.y]
  2584.       mov si,(16-1)
  2585.       mov di,(16-2)
  2586.       add cx,1
  2587.       add dx,1
  2588.       call rectangle_gradient_up
  2589.  
  2590.       mov eax,[pointer+10*3]
  2591.       and eax,0xffffff
  2592.       mov [Line.color],eax
  2593.  
  2594.       ;draw horizontal up light line
  2595.       xor eax,eax
  2596.       xor ebx,ebx
  2597.       mov ax,[Scroller.x]
  2598.       mov bx,[Scroller.y]
  2599.       add eax,1
  2600.       add ebx,1
  2601.       mov [Line.x1],eax
  2602.       mov [Line.x2],eax
  2603.       mov [Line.y1],ebx
  2604.       mov [Line.y2],ebx
  2605.       add [Line.x2],14
  2606.       call DrawLine
  2607.  
  2608.       ;draw vertical up light line
  2609.       xor eax,eax
  2610.       xor ebx,ebx
  2611.       mov ax,[Scroller.x]
  2612.       mov bx,[Scroller.y]
  2613.       add eax,1
  2614.       add ebx,1
  2615.       mov [Line.x1],eax
  2616.       mov [Line.x2],eax
  2617.       mov [Line.y1],ebx
  2618.       mov [Line.y2],ebx
  2619.       add [Line.y2],14
  2620.       call DrawLine
  2621.  
  2622.       mov eax,[Color]
  2623.       mov [Line.color],eax
  2624.  
  2625.       ;draw vertical up dark line
  2626.       xor eax,eax
  2627.       xor ebx,ebx
  2628.       mov ax,[Scroller.x]
  2629.       mov bx,[Scroller.y]
  2630.       add eax,16
  2631.       mov [Line.x1],eax
  2632.       mov [Line.x2],eax
  2633.       mov [Line.y1],ebx
  2634.       mov [Line.y2],ebx
  2635.       add [Line.y1],1
  2636.       add [Line.y2],14
  2637.       call DrawLine
  2638.  
  2639.       ;draw horizontal up dark line
  2640.       xor eax,eax
  2641.       xor ebx,ebx
  2642.       mov ax,[Scroller.x]
  2643.       mov bx,[Scroller.y]
  2644.       add eax,1
  2645.       add ebx,15
  2646.       mov [Line.x1],eax
  2647.       mov [Line.x2],eax
  2648.       mov [Line.y1],ebx
  2649.       mov [Line.y2],ebx
  2650.       add [Line.x2],14
  2651.       call DrawLine
  2652.  
  2653.       xor eax,eax
  2654.       mov eax,[AveregeColor]
  2655.       mov [Pixel.color],eax
  2656.  
  2657.       xor eax,eax
  2658.       xor ebx,ebx
  2659.       mov ax,[Scroller.x]
  2660.       mov bx,[Scroller.y]
  2661.       mov [Pixel.x],eax
  2662.       mov [Pixel.y],ebx
  2663.       call DrawPixel
  2664.  
  2665.       xor eax,eax
  2666.       mov ax,[Scroller.x]
  2667.       add eax,16
  2668.       mov [Pixel.x],eax
  2669.       call DrawPixel
  2670.  
  2671.       xor eax,eax
  2672.       mov ax,[Scroller.x]
  2673.       mov [Pixel.x],eax
  2674.       add [Pixel.y],16
  2675.       call DrawPixel
  2676.  
  2677.       xor eax,eax
  2678.       xor ebx,ebx
  2679.       mov ax,[Scroller.x]
  2680.       mov bx,[Scroller.y]
  2681.       add eax,16
  2682.       add ebx,16
  2683.       mov [Pixel.x],eax
  2684.       mov [Pixel.y],ebx
  2685.       call DrawPixel
  2686.  
  2687.       ;----------------
  2688.       xor eax,eax
  2689.       xor ebx,ebx
  2690.       mov ax,[Scroller.x]
  2691.       mov bx,[Scroller.y]
  2692.       add eax,1
  2693.       add ebx,1
  2694.       mov [Pixel.x],eax
  2695.       mov [Pixel.y],ebx
  2696.       call DrawPixel
  2697.  
  2698.       xor eax,eax
  2699.       xor ebx,ebx
  2700.       mov ax,[Scroller.x]
  2701.       mov bx,[Scroller.y]
  2702.       add eax,15
  2703.       add ebx,1
  2704.       mov [Pixel.x],eax
  2705.       mov [Pixel.y],ebx
  2706.       call DrawPixel
  2707.  
  2708.       xor eax,eax
  2709.       xor ebx,ebx
  2710.       mov ax,[Scroller.x]
  2711.       mov bx,[Scroller.y]
  2712.       add eax,1
  2713.       add ebx,15
  2714.       mov [Pixel.x],eax
  2715.       mov [Pixel.y],ebx
  2716.       call DrawPixel
  2717.  
  2718.       xor eax,eax
  2719.       xor ebx,ebx
  2720.       mov ax,[Scroller.x]
  2721.       mov bx,[Scroller.y]
  2722.       add eax,15
  2723.       add ebx,15
  2724.       mov [Pixel.x],eax
  2725.       mov [Pixel.y],ebx
  2726.       call DrawPixel
  2727.  
  2728.       mov [Line.color],0
  2729.  
  2730.       xor eax,eax
  2731.       xor ebx,ebx
  2732.       mov ax,[Scroller.x]
  2733.       mov bx,[Scroller.y]
  2734.       mov [Line.x1],eax
  2735.       mov [Line.x2],eax
  2736.       mov [Line.y1],ebx
  2737.       mov [Line.y2],ebx
  2738.       add [Line.x1],5
  2739.       add [Line.x2],9
  2740.       add [Line.y1],8
  2741.       add [Line.y2],4
  2742.       call DrawLine
  2743.  
  2744.       xor eax,eax
  2745.       xor ebx,ebx
  2746.       mov ax,[Scroller.x]
  2747.       mov bx,[Scroller.y]
  2748.       mov [Line.x1],eax
  2749.       mov [Line.x2],eax
  2750.       mov [Line.y1],ebx
  2751.       mov [Line.y2],ebx
  2752.       add [Line.x1],6
  2753.       add [Line.x2],9
  2754.       add [Line.y1],8
  2755.       add [Line.y2],5
  2756.       call DrawLine
  2757.  
  2758.       xor eax,eax
  2759.       xor ebx,ebx
  2760.       mov ax,[Scroller.x]
  2761.       mov bx,[Scroller.y]
  2762.       mov [Line.x1],eax
  2763.       mov [Line.x2],eax
  2764.       mov [Line.y1],ebx
  2765.       mov [Line.y2],ebx
  2766.       add [Line.x1],5
  2767.       add [Line.x2],9
  2768.       add [Line.y1],8
  2769.       add [Line.y2],12
  2770.       call DrawLine
  2771.  
  2772.       xor eax,eax
  2773.       xor ebx,ebx
  2774.       mov ax,[Scroller.x]
  2775.       mov bx,[Scroller.y]
  2776.       mov [Line.x1],eax
  2777.       mov [Line.x2],eax
  2778.       mov [Line.y1],ebx
  2779.       mov [Line.y2],ebx
  2780.       add [Line.x1],6
  2781.       add [Line.x2],9
  2782.       add [Line.y1],8
  2783.       add [Line.y2],11
  2784.       call DrawLine
  2785.  
  2786.       ;draw vertical down rectangle
  2787.       xor eax,eax
  2788.       xor ebx,ebx
  2789.       mov ax,[Scroller.x]
  2790.       mov bx,[Scroller.y]
  2791.       add ax,[Scroller.length]
  2792.       sub ax,16
  2793.       mov [Rectangle.x],eax
  2794.       mov [Rectangle.y],ebx
  2795.       mov [Rectangle.width],16
  2796.       mov [Rectangle.height],16
  2797.  
  2798.       mov eax,[pointer]
  2799.       and eax,0xffffff
  2800.       mov [Rectangle.color],eax
  2801.       call RectangleContour
  2802.  
  2803.       ;draw gradient right
  2804.       mov eax,[Scroller.color1]
  2805.       mov ebx,dword 0xffffff
  2806.       and eax,0xffffff
  2807.       xor ecx,ecx
  2808.       xor edx,edx
  2809.       xor esi,esi
  2810.       xor edi,edi
  2811.       mov cx,[Scroller.x]
  2812.       mov dx,[Scroller.y]
  2813.       add cx,[Scroller.length]
  2814.       sub cx,16
  2815.       mov si,(16-1)
  2816.       mov di,(16-2)
  2817.       add cx,1
  2818.       add dx,1
  2819.       call rectangle_gradient_up
  2820.  
  2821.       mov eax,[pointer+10*3]
  2822.       and eax,0xffffff
  2823.       mov [Line.color],eax
  2824.  
  2825.       ;draw horizontal up light line
  2826.       xor eax,eax
  2827.       xor ebx,ebx
  2828.       mov ax,[Scroller.x]
  2829.       mov bx,[Scroller.y]
  2830.       add ax,[Scroller.length]
  2831.       sub eax,15
  2832.       add ebx,1
  2833.       mov [Line.x1],eax
  2834.       mov [Line.x2],eax
  2835.       mov [Line.y1],ebx
  2836.       mov [Line.y2],ebx
  2837.       add [Line.x2],15
  2838.       call DrawLine
  2839.  
  2840.       ;draw vertical up light line
  2841.       xor eax,eax
  2842.       xor ebx,ebx
  2843.       mov ax,[Scroller.x]
  2844.       mov bx,[Scroller.y]
  2845.       add ebx,1
  2846.       add ax,[Scroller.length]
  2847.       sub eax,15
  2848.       mov [Line.x1],eax
  2849.       mov [Line.x2],eax
  2850.       mov [Line.y1],ebx
  2851.       mov [Line.y2],ebx
  2852.       add [Line.y2],14
  2853.       call DrawLine
  2854.  
  2855.       mov eax,[Color];[pointer]
  2856.       mov [Line.color],eax
  2857.  
  2858.       ;draw vertical up dark line
  2859.       xor eax,eax
  2860.       xor ebx,ebx
  2861.       mov ax,[Scroller.x]
  2862.       mov bx,[Scroller.y]
  2863.       add ax,[Scroller.length]
  2864.       mov [Line.x1],eax
  2865.       mov [Line.x2],eax
  2866.       mov [Line.y1],ebx
  2867.       mov [Line.y2],ebx
  2868.       add [Line.y2],15
  2869.       call DrawLine
  2870.  
  2871.       ;draw horizontal up dark line
  2872.       xor eax,eax
  2873.       xor ebx,ebx
  2874.       mov ax,[Scroller.x]
  2875.       mov bx,[Scroller.y]
  2876.       add ax,[Scroller.length]
  2877.       sub eax,15
  2878.       add ebx,15
  2879.       mov [Line.x1],eax
  2880.       mov [Line.x2],eax
  2881.       mov [Line.y1],ebx
  2882.       mov [Line.y2],ebx
  2883.       add [Line.x2],14
  2884.       call DrawLine
  2885.  
  2886.       xor eax,eax
  2887.       mov ax,[Scroller.length]
  2888.       sub eax,16
  2889.       mov [length],eax
  2890.  
  2891.       xor eax,eax
  2892.       xor ebx,ebx
  2893.       mov ax,[Scroller.x]
  2894.       mov bx,[Scroller.y]
  2895.       add eax,[length]
  2896.       mov [Pixel.x],eax
  2897.       mov [Pixel.y],ebx
  2898.       call DrawPixel
  2899.  
  2900.       add [Pixel.x],16
  2901.       call DrawPixel
  2902.  
  2903.       xor eax,eax
  2904.       xor ebx,ebx
  2905.       mov ax,[Scroller.x]
  2906.       mov bx,[Scroller.y]
  2907.       add ebx,16
  2908.       add eax,[length]
  2909.       mov [Pixel.x],eax
  2910.       mov [Pixel.y],ebx
  2911.       call DrawPixel
  2912.  
  2913.       xor eax,eax
  2914.       xor ebx,ebx
  2915.       mov ax,[Scroller.x]
  2916.       mov bx,[Scroller.y]
  2917.       add eax,16
  2918.       add ebx,16
  2919.       add eax,[length]
  2920.       mov [Pixel.x],eax
  2921.       mov [Pixel.y],ebx
  2922.       call DrawPixel
  2923.  
  2924.       ;----------------
  2925.       xor eax,eax
  2926.       xor ebx,ebx
  2927.       mov ax,[Scroller.x]
  2928.       mov bx,[Scroller.y]
  2929.       add eax,1
  2930.       add ebx,1
  2931.       add eax,[length]
  2932.       mov [Pixel.x],eax
  2933.       mov [Pixel.y],ebx
  2934.       call DrawPixel
  2935.  
  2936.       xor eax,eax
  2937.       xor ebx,ebx
  2938.       mov ax,[Scroller.x]
  2939.       mov bx,[Scroller.y]
  2940.       add eax,15
  2941.       add ebx,1
  2942.       add eax,[length]
  2943.       mov [Pixel.x],eax
  2944.       mov [Pixel.y],ebx
  2945.       call DrawPixel
  2946.  
  2947.       xor eax,eax
  2948.       xor ebx,ebx
  2949.       mov ax,[Scroller.x]
  2950.       mov bx,[Scroller.y]
  2951.       add eax,1
  2952.       add ebx,15
  2953.       add eax,[length]
  2954.       mov [Pixel.x],eax
  2955.       mov [Pixel.y],ebx
  2956.       call DrawPixel
  2957.  
  2958.       xor eax,eax
  2959.       xor ebx,ebx
  2960.       mov ax,[Scroller.x]
  2961.       mov bx,[Scroller.y]
  2962.       add eax,15
  2963.       add ebx,15
  2964.       add eax,[length]
  2965.       mov [Pixel.x],eax
  2966.       mov [Pixel.y],ebx
  2967.       call DrawPixel
  2968.  
  2969.       xor eax,eax
  2970.       mov ax,[Scroller.length]
  2971.       sub eax,16
  2972.       mov [length],eax
  2973.  
  2974.       and [Line.color],0
  2975.  
  2976.       xor eax,eax
  2977.       xor ebx,ebx
  2978.       mov ax,[Scroller.x]
  2979.       mov bx,[Scroller.y]
  2980.       add eax,[length]
  2981.       mov [Line.x1],eax
  2982.       mov [Line.x2],eax
  2983.       mov [Line.y1],ebx
  2984.       mov [Line.y2],ebx
  2985.       add [Line.x1],12
  2986.       add [Line.x2],8
  2987.       add [Line.y1],8
  2988.       add [Line.y2],4
  2989.       call DrawLine
  2990.  
  2991.       xor eax,eax
  2992.       xor ebx,ebx
  2993.       mov ax,[Scroller.x]
  2994.       mov bx,[Scroller.y]
  2995.       add eax,[length]
  2996.       mov [Line.x1],eax
  2997.       mov [Line.x2],eax
  2998.       mov [Line.y1],ebx
  2999.       mov [Line.y2],ebx
  3000.       add [Line.x1],11
  3001.       add [Line.x2],8
  3002.       add [Line.y1],8
  3003.       add [Line.y2],5
  3004.       call DrawLine
  3005.  
  3006.       xor eax,eax
  3007.       xor ebx,ebx
  3008.       mov ax,[Scroller.x]
  3009.       mov bx,[Scroller.y]
  3010.       add eax,[length]
  3011.       mov [Line.x1],eax
  3012.       mov [Line.x2],eax
  3013.       mov [Line.y1],ebx
  3014.       mov [Line.y2],ebx
  3015.       add [Line.x1],12
  3016.       add [Line.x2],8
  3017.       add [Line.y1],8
  3018.       add [Line.y2],12
  3019.       call DrawLine
  3020.  
  3021.       xor eax,eax
  3022.       xor ebx,ebx
  3023.       mov ax,[Scroller.x]
  3024.       mov bx,[Scroller.y]
  3025.       add eax,[length]
  3026.       mov [Line.x1],eax
  3027.       mov [Line.x2],eax
  3028.       mov [Line.y1],ebx
  3029.       mov [Line.y2],ebx
  3030.       add [Line.x1],11
  3031.       add [Line.x2],8
  3032.       add [Line.y1],8
  3033.       add [Line.y2],11
  3034.       call DrawLine
  3035.  
  3036.       ret
  3037.  
  3038. DrawButtonsOfVertical3DScroller:
  3039.  
  3040.        ;draw vertical up rectangle
  3041.       xor eax,eax
  3042.       xor ebx,ebx
  3043.       mov ax,[Scroller.x]
  3044.       mov bx,[Scroller.y]
  3045.       mov [Rectangle.x],eax
  3046.       mov [Rectangle.y],ebx
  3047.       mov [Rectangle.width],16
  3048.       mov [Rectangle.height],16
  3049.  
  3050.       mov eax,[pointer]
  3051.       and eax,0xffffff
  3052.       mov [Rectangle.color],eax
  3053.       call RectangleContour
  3054.  
  3055.       ;draw gradient right
  3056.       mov eax,[Scroller.color1]
  3057.       mov ebx,dword 0xffffff
  3058.       and eax,0xffffff
  3059.       xor ecx,ecx
  3060.       xor edx,edx
  3061.       xor esi,esi
  3062.       xor edi,edi
  3063.       mov cx,[Scroller.x]
  3064.       mov dx,[Scroller.y]
  3065.       mov si,(16-1)
  3066.       mov di,(16-2)
  3067.       add cx,1
  3068.       add dx,1
  3069.       call rectangle_gradient_right
  3070.  
  3071.       mov eax,[pointer+10*3]
  3072.       and eax,0xffffff
  3073.       mov [Line.color],eax
  3074.  
  3075.       ;draw horizontal up light line
  3076.       xor eax,eax
  3077.       xor ebx,ebx
  3078.       mov ax,[Scroller.x]
  3079.       mov bx,[Scroller.y]
  3080.       add eax,1
  3081.       add ebx,1
  3082.       mov [Line.x1],eax
  3083.       mov [Line.x2],eax
  3084.       mov [Line.y1],ebx
  3085.       mov [Line.y2],ebx
  3086.       add [Line.x2],14
  3087.       call DrawLine
  3088.  
  3089.       ;draw vertical up light line
  3090.       xor eax,eax
  3091.       xor ebx,ebx
  3092.       mov ax,[Scroller.x]
  3093.       mov bx,[Scroller.y]
  3094.       add eax,1
  3095.       add ebx,1
  3096.       mov [Line.x1],eax
  3097.       mov [Line.x2],eax
  3098.       mov [Line.y1],ebx
  3099.       mov [Line.y2],ebx
  3100.       add [Line.y2],14
  3101.       call DrawLine
  3102.  
  3103.       mov eax,[Color]
  3104.       mov [Line.color],eax
  3105.  
  3106.       ;draw vertical up dark line
  3107.       xor eax,eax
  3108.       xor ebx,ebx
  3109.       mov ax,[Scroller.x]
  3110.       mov bx,[Scroller.y]
  3111.       add eax,15
  3112.       mov [Line.x1],eax
  3113.       mov [Line.x2],eax
  3114.       mov [Line.y1],ebx
  3115.       mov [Line.y2],ebx
  3116.       add [Line.y1],1
  3117.       add [Line.y2],14
  3118.       call DrawLine
  3119.  
  3120.       ;draw horizontal up dark line
  3121.       xor eax,eax
  3122.       xor ebx,ebx
  3123.       mov ax,[Scroller.x]
  3124.       mov bx,[Scroller.y]
  3125.       add eax,1
  3126.       add ebx,15
  3127.       mov [Line.x1],eax
  3128.       mov [Line.x2],eax
  3129.       mov [Line.y1],ebx
  3130.       mov [Line.y2],ebx
  3131.       add [Line.x2],14
  3132.       call DrawLine
  3133.  
  3134.       xor eax,eax
  3135.       mov eax,[AveregeColor]
  3136.       mov [Pixel.color],eax
  3137.  
  3138.       xor eax,eax
  3139.       xor ebx,ebx
  3140.       mov ax,[Scroller.x]
  3141.       mov bx,[Scroller.y]
  3142.       mov [Pixel.x],eax
  3143.       mov [Pixel.y],ebx
  3144.       call DrawPixel
  3145.  
  3146.       xor eax,eax
  3147.       mov ax,[Scroller.x]
  3148.       add eax,16
  3149.       mov [Pixel.x],eax
  3150.       call DrawPixel
  3151.  
  3152.       xor eax,eax
  3153.       xor ebx,ebx
  3154.       mov ax,[Scroller.x]
  3155.       mov bx,[Scroller.y]
  3156.       add ebx,16
  3157.       mov [Pixel.x],eax
  3158.       mov [Pixel.y],ebx
  3159.       call DrawPixel
  3160.  
  3161.       xor eax,eax
  3162.       xor ebx,ebx
  3163.       mov ax,[Scroller.x]
  3164.       mov bx,[Scroller.y]
  3165.       add eax,16
  3166.       add ebx,16
  3167.       mov [Pixel.x],eax
  3168.       mov [Pixel.y],ebx
  3169.       call DrawPixel
  3170.  
  3171.       ;----------------
  3172.       xor eax,eax
  3173.       xor ebx,ebx
  3174.       mov ax,[Scroller.x]
  3175.       mov bx,[Scroller.y]
  3176.       add eax,1
  3177.       add ebx,1
  3178.       mov [Pixel.x],eax
  3179.       mov [Pixel.y],ebx
  3180.       call DrawPixel
  3181.  
  3182.       xor eax,eax
  3183.       xor ebx,ebx
  3184.       mov ax,[Scroller.x]
  3185.       mov bx,[Scroller.y]
  3186.       add eax,15
  3187.       add ebx,1
  3188.       mov [Pixel.x],eax
  3189.       mov [Pixel.y],ebx
  3190.       call DrawPixel
  3191.  
  3192.       xor eax,eax
  3193.       xor ebx,ebx
  3194.       mov ax,[Scroller.x]
  3195.       mov bx,[Scroller.y]
  3196.       add eax,1
  3197.       add ebx,15
  3198.       mov [Pixel.x],eax
  3199.       mov [Pixel.y],ebx
  3200.       call DrawPixel
  3201.  
  3202.       xor eax,eax
  3203.       xor ebx,ebx
  3204.       mov ax,[Scroller.x]
  3205.       mov bx,[Scroller.y]
  3206.       add eax,15
  3207.       add ebx,15
  3208.       mov [Pixel.x],eax
  3209.       mov [Pixel.y],ebx
  3210.       call DrawPixel
  3211.  
  3212.       and [Line.color],0
  3213.  
  3214.       xor eax,eax
  3215.       xor ebx,ebx
  3216.       mov ax,[Scroller.x]
  3217.       mov bx,[Scroller.y]
  3218.       mov [Line.x1],eax
  3219.       mov [Line.x2],eax
  3220.       mov [Line.y1],ebx
  3221.       mov [Line.y2],ebx
  3222.       add [Line.x1],4
  3223.       add [Line.x2],8
  3224.       add [Line.y1],9
  3225.       add [Line.y2],5
  3226.       call DrawLine
  3227.  
  3228.       xor eax,eax
  3229.       xor ebx,ebx
  3230.       mov ax,[Scroller.x]
  3231.       mov bx,[Scroller.y]
  3232.       mov [Line.x1],eax
  3233.       mov [Line.x2],eax
  3234.       mov [Line.y1],ebx
  3235.       mov [Line.y2],ebx
  3236.       add [Line.x1],4
  3237.       add [Line.x2],8
  3238.       add [Line.y1],10
  3239.       add [Line.y2],6
  3240.       call DrawLine
  3241.  
  3242.       xor eax,eax
  3243.       xor ebx,ebx
  3244.       mov ax,[Scroller.x]
  3245.       mov bx,[Scroller.y]
  3246.       mov [Line.x1],eax
  3247.       mov [Line.x2],eax
  3248.       mov [Line.y1],ebx
  3249.       mov [Line.y2],ebx
  3250.       add [Line.x1],8
  3251.       add [Line.x2],12
  3252.       add [Line.y1],5
  3253.       add [Line.y2],9
  3254.       call DrawLine
  3255.  
  3256.       xor eax,eax
  3257.       xor ebx,ebx
  3258.       mov ax,[Scroller.x]
  3259.       mov bx,[Scroller.y]
  3260.       mov [Line.x1],eax
  3261.       mov [Line.x2],eax
  3262.       mov [Line.y1],ebx
  3263.       mov [Line.y2],ebx
  3264.       add [Line.x1],8
  3265.       add [Line.x2],12
  3266.       add [Line.y1],6
  3267.       add [Line.y2],10
  3268.       call DrawLine
  3269.  
  3270.       ;draw vertical down rectangle
  3271.       xor eax,eax
  3272.       xor ebx,ebx
  3273.       mov ax,[Scroller.x]
  3274.       mov bx,[Scroller.y]
  3275.       add bx,[Scroller.length]
  3276.       sub bx,16
  3277.       mov [Rectangle.x],eax
  3278.       mov [Rectangle.y],ebx
  3279.       mov [Rectangle.width],16
  3280.       mov [Rectangle.height],16
  3281.  
  3282.       mov eax,[pointer]
  3283.       and eax,0xffffff
  3284.       mov [Rectangle.color],eax
  3285.       call RectangleContour
  3286.  
  3287.       ;draw gradient right
  3288.       mov eax,[Scroller.color1]
  3289.       mov ebx,dword 0xffffff
  3290.       and eax,0xffffff
  3291.       xor ecx,ecx
  3292.       xor edx,edx
  3293.       xor esi,esi
  3294.       xor edi,edi
  3295.       mov cx,[Scroller.x]
  3296.       mov dx,[Scroller.y]
  3297.       add dx,[Scroller.length]
  3298.       sub dx,(16-1)
  3299.       mov si,(16-1)
  3300.       mov di,(16-2)
  3301.       add cx,1
  3302.       call rectangle_gradient_right
  3303.  
  3304.       mov eax,[pointer+10*3]
  3305.       and eax,0xffffff
  3306.       mov [Line.color],eax
  3307.  
  3308.       ;draw horizontal up light line
  3309.       xor eax,eax
  3310.       xor ebx,ebx
  3311.       mov ax,[Scroller.x]
  3312.       mov bx,[Scroller.y]
  3313.       add bx,[Scroller.length]
  3314.       sub ebx,15
  3315.       mov [Line.x1],eax
  3316.       mov [Line.x2],eax
  3317.       mov [Line.y1],ebx
  3318.       mov [Line.y2],ebx
  3319.       add [Line.x1],1
  3320.       add [Line.x2],15
  3321.       call DrawLine
  3322.  
  3323.       ;draw vertical up light line
  3324.       xor eax,eax
  3325.       xor ebx,ebx
  3326.       mov ax,[Scroller.x]
  3327.       mov bx,[Scroller.y]
  3328.       add eax,1
  3329.       add bx,[Scroller.length]
  3330.       sub ebx,15
  3331.       mov [Line.x1],eax
  3332.       mov [Line.x2],eax
  3333.       mov [Line.y1],ebx
  3334.       mov [Line.y2],ebx
  3335.       add [Line.y2],14
  3336.       call DrawLine
  3337.  
  3338.       mov eax,[Color];[pointer]
  3339.       mov [Line.color],eax
  3340.  
  3341.       ;draw vertical up dark line
  3342.       xor eax,eax
  3343.       xor ebx,ebx
  3344.       mov ax,[Scroller.x]
  3345.       mov bx,[Scroller.y]
  3346.       add bx,[Scroller.length]
  3347.       sub ebx,15
  3348.       add eax,15
  3349.       mov [Line.x1],eax
  3350.       mov [Line.x2],eax
  3351.       mov [Line.y1],ebx
  3352.       mov [Line.y2],ebx
  3353.       add [Line.y2],14
  3354.       call DrawLine
  3355.  
  3356.       ;draw horizontal up dark line
  3357.       xor eax,eax
  3358.       xor ebx,ebx
  3359.       mov ax,[Scroller.x]
  3360.       mov bx,[Scroller.y]
  3361.       add bx,[Scroller.length]
  3362.       add eax,1
  3363.       sub ebx,1
  3364.       mov [Line.x1],eax
  3365.       mov [Line.x2],eax
  3366.       mov [Line.y1],ebx
  3367.       mov [Line.y2],ebx
  3368.       add [Line.x2],14
  3369.       call DrawLine
  3370.  
  3371.       xor eax,eax
  3372.       mov ax,[Scroller.length]
  3373.       sub eax,16
  3374.       mov [length],eax
  3375.  
  3376.       xor eax,eax
  3377.       xor ebx,ebx
  3378.       mov ax,[Scroller.x]
  3379.       mov bx,[Scroller.y]
  3380.       add ebx,[length]
  3381.       mov [Pixel.x],eax
  3382.       mov [Pixel.y],ebx
  3383.       call DrawPixel
  3384.  
  3385.       xor eax,eax
  3386.       mov ax,[Scroller.x]
  3387.       add eax,16
  3388.       mov [Pixel.x],eax
  3389.       call DrawPixel
  3390.  
  3391.       xor eax,eax
  3392.       mov ax,[Scroller.x]
  3393.       mov [Pixel.x],eax
  3394.       add [Pixel.y],16
  3395.       call DrawPixel
  3396.  
  3397.       xor eax,eax
  3398.       xor ebx,ebx
  3399.       mov ax,[Scroller.x]
  3400.       mov bx,[Scroller.y]
  3401.       add eax,16
  3402.       add ebx,16
  3403.       add ebx,[length]
  3404.       mov [Pixel.x],eax
  3405.       mov [Pixel.y],ebx
  3406.       call DrawPixel
  3407.  
  3408.       ;----------------
  3409.       xor eax,eax
  3410.       xor ebx,ebx
  3411.       mov ax,[Scroller.x]
  3412.       mov bx,[Scroller.y]
  3413.       add eax,1
  3414.       add ebx,1
  3415.       add ebx,[length]
  3416.       mov [Pixel.x],eax
  3417.       mov [Pixel.y],ebx
  3418.       call DrawPixel
  3419.  
  3420.       xor eax,eax
  3421.       xor ebx,ebx
  3422.       mov ax,[Scroller.x]
  3423.       mov bx,[Scroller.y]
  3424.       add eax,15
  3425.       add ebx,1
  3426.       add ebx,[length]
  3427.       mov [Pixel.x],eax
  3428.       mov [Pixel.y],ebx
  3429.       call DrawPixel
  3430.  
  3431.       xor eax,eax
  3432.       xor ebx,ebx
  3433.       mov ax,[Scroller.x]
  3434.       mov bx,[Scroller.y]
  3435.       add eax,1
  3436.       add ebx,15
  3437.       add ebx,[length]
  3438.       mov [Pixel.x],eax
  3439.       mov [Pixel.y],ebx
  3440.       call DrawPixel
  3441.  
  3442.       xor eax,eax
  3443.       xor ebx,ebx
  3444.       mov ax,[Scroller.x]
  3445.       mov bx,[Scroller.y]
  3446.       add eax,15
  3447.       add ebx,15
  3448.       add ebx,[length]
  3449.       mov [Pixel.x],eax
  3450.       mov [Pixel.y],ebx
  3451.       call DrawPixel
  3452.  
  3453.       xor eax,eax
  3454.       mov ax,[Scroller.length]
  3455.       sub eax,16
  3456.       mov [length],eax
  3457.  
  3458.       and [Line.color],0
  3459.  
  3460.       xor eax,eax
  3461.       xor ebx,ebx
  3462.       mov ax,[Scroller.x]
  3463.       mov bx,[Scroller.y]
  3464.       add ebx,[length]
  3465.       mov [Line.x1],eax
  3466.       mov [Line.x2],eax
  3467.       mov [Line.y1],ebx
  3468.       mov [Line.y2],ebx
  3469.       add [Line.x1],4
  3470.       add [Line.x2],8
  3471.       add [Line.y1],7
  3472.       add [Line.y2],11
  3473.       call DrawLine
  3474.  
  3475.       xor eax,eax
  3476.       xor ebx,ebx
  3477.       mov ax,[Scroller.x]
  3478.       mov bx,[Scroller.y]
  3479.       add ebx,[length]
  3480.       mov [Line.x1],eax
  3481.       mov [Line.x2],eax
  3482.       mov [Line.y1],ebx
  3483.       mov [Line.y2],ebx
  3484.       add [Line.x1],4
  3485.       add [Line.x2],8
  3486.       add [Line.y1],6
  3487.       add [Line.y2],10
  3488.       call DrawLine
  3489.  
  3490.       xor eax,eax
  3491.       xor ebx,ebx
  3492.       mov ax,[Scroller.x]
  3493.       mov bx,[Scroller.y]
  3494.       add ebx,[length]
  3495.       mov [Line.x1],eax
  3496.       mov [Line.x2],eax
  3497.       mov [Line.y1],ebx
  3498.       mov [Line.y2],ebx
  3499.       add [Line.x1],12
  3500.       add [Line.x2],8
  3501.       add [Line.y1],7
  3502.       add [Line.y2],11
  3503.       call DrawLine
  3504.  
  3505.       xor eax,eax
  3506.       xor ebx,ebx
  3507.       mov ax,[Scroller.x]
  3508.       mov bx,[Scroller.y]
  3509.       add ebx,[length]
  3510.       mov [Line.x1],eax
  3511.       mov [Line.x2],eax
  3512.       mov [Line.y1],ebx
  3513.       mov [Line.y2],ebx
  3514.       add [Line.x1],12
  3515.       add [Line.x2],8
  3516.       add [Line.y1],6
  3517.       add [Line.y2],10
  3518.       call DrawLine
  3519.  
  3520.       ret
  3521.  
  3522. ;eax - x
  3523. ;ebx - y
  3524. ;ecx - size y in pixels
  3525. DrawVertical3DScrollBar:
  3526.  
  3527.       mov [x],eax
  3528.       mov [y],ebx
  3529.       mov [length2],ecx
  3530.  
  3531.       mov eax,[x]
  3532.       mov ebx,[y]
  3533.       mov ecx,[length2]
  3534.       mov edx,[pointer]
  3535.       and edx,0xffffff
  3536.       mov [Rectangle.x],eax
  3537.       mov [Rectangle.y],ebx
  3538.       mov [Rectangle.width],16
  3539.       mov [Rectangle.height],ecx
  3540.       mov [Rectangle.color],edx
  3541.       call RectangleContour
  3542.  
  3543.       ;draw gradient right
  3544.       mov eax,[Scroller.color1]
  3545.       mov ebx,dword 0xffffff
  3546.       and eax,0xffffff
  3547.       xor esi,esi
  3548.       xor edi,edi
  3549.       mov ecx,[x]
  3550.       mov edx,[y]
  3551.       add edx,1
  3552.       mov si,(16-1)
  3553.       mov edi,[length2]
  3554.       sub edi,2
  3555.       call rectangle_gradient_right
  3556.  
  3557.       ;------------------
  3558.       xor eax,eax
  3559.       mov eax,[AveregeColor]
  3560.       mov [Pixel.color],eax
  3561.  
  3562.       mov eax,[x]
  3563.       mov ebx,[y]
  3564.       mov [Pixel.x],eax
  3565.       mov [Pixel.y],ebx
  3566.       call DrawPixel
  3567.  
  3568.       mov eax,[x]
  3569.       add eax,16
  3570.       mov [Pixel.x],eax
  3571.       call DrawPixel
  3572.  
  3573.       mov eax,[x]
  3574.       mov ebx,[y]
  3575.       add ebx,[length2]
  3576.       mov [Pixel.x],eax
  3577.       mov [Pixel.y],ebx
  3578.       call DrawPixel
  3579.  
  3580.       mov eax,[x]
  3581.       mov ebx,[y]
  3582.       add eax,16
  3583.       add ebx,[length2]
  3584.       mov [Pixel.x],eax
  3585.       mov [Pixel.y],ebx
  3586.       call DrawPixel
  3587.  
  3588.       mov eax,[x]
  3589.       mov ebx,[y]
  3590.       add eax,1
  3591.       add ebx,1
  3592.       mov [Pixel.x],eax
  3593.       mov [Pixel.y],ebx
  3594.       call DrawPixel
  3595.  
  3596.       mov eax,[x]
  3597.       mov ebx,[y]
  3598.       add eax,15
  3599.       add ebx,1
  3600.       mov [Pixel.x],eax
  3601.       mov [Pixel.y],ebx
  3602.       call DrawPixel
  3603.  
  3604.       mov eax,[x]
  3605.       mov ebx,[y]
  3606.       add eax,1
  3607.       add ebx,[length2]
  3608.       sub ebx,1
  3609.       mov [Pixel.x],eax
  3610.       mov [Pixel.y],ebx
  3611.       call DrawPixel
  3612.  
  3613.       mov eax,[x]
  3614.       mov ebx,[y]
  3615.       add eax,16
  3616.       add ebx,[length2]
  3617.       sub eax,1
  3618.       sub ebx,1
  3619.       mov [Pixel.x],eax
  3620.       mov [Pixel.y],ebx
  3621.       call DrawPixel
  3622.  
  3623.       cmp [length2],12
  3624.       jl no_draw_reliev_vertical_3D
  3625.  
  3626.        mov ebx,[x]
  3627.        mov eax,[length2]
  3628.        shr eax,1
  3629.        add eax,[y]
  3630.        add ebx,5
  3631.        sub eax,3
  3632.  
  3633.        mov [Line.x1],ebx
  3634.        mov [Line.x2],ebx
  3635.        mov [Line.y1],eax
  3636.        mov [Line.y2],eax
  3637.        mov [Line.color],0xffffff
  3638.        add [Line.x2],6
  3639.  
  3640.        mov esi,4
  3641.        next_light_line_draw_r_vertical_3D:
  3642.  
  3643.          call DrawLine
  3644.          add [Line.y1],2
  3645.          add [Line.y2],2
  3646.  
  3647.        dec esi
  3648.        jnz  next_light_line_draw_r_vertical_3D
  3649.  
  3650.        mov ebx,[x]
  3651.        mov eax,[length2]
  3652.        shr eax,1
  3653.        add eax,[y]
  3654.        add ebx,6
  3655.        sub eax,2
  3656.  
  3657.        mov ecx,[Scroller.color1]
  3658.        mov [Line.x1],ebx
  3659.        mov [Line.x2],ebx
  3660.        mov [Line.y1],eax
  3661.        mov [Line.y2],eax
  3662.        mov [Line.color],ecx
  3663.        add [Line.x2],6
  3664.  
  3665.        mov esi,4
  3666.        next_dark_line_draw_r_vertical_3D:
  3667.  
  3668.          call DrawLine
  3669.          add [Line.y1],2
  3670.          add [Line.y2],2
  3671.  
  3672.        dec esi
  3673.        jnz  next_dark_line_draw_r_vertical_3D
  3674.  
  3675.       no_draw_reliev_vertical_3D:
  3676.  
  3677.  
  3678.       xor eax,eax
  3679.       mov ax,[Scroller.y]
  3680.       mov ebx,[y]
  3681.       add eax,17
  3682.  
  3683.       sub ebx,eax
  3684.       jz no_draw_up_rectangle_vertical_3D
  3685.       js no_draw_up_rectangle_vertical_3D
  3686.  
  3687.       sub ebx,1
  3688.  
  3689.       mov edi,ebx
  3690.  
  3691.       mov eax,0xe4e4e4
  3692.       mov ebx,0xffffff
  3693.       xor edx,edx
  3694.       mov ecx,[x]
  3695.       mov dx,[Scroller.y]
  3696.       add edx,17
  3697.       sub ecx,1
  3698.       mov esi,17
  3699.       call rectangle_gradient_right
  3700.       no_draw_up_rectangle_vertical_3D:
  3701.  
  3702.       xor eax,eax
  3703.       mov ax,[Scroller.y]
  3704.       add ax,[Scroller.length]
  3705.       mov ebx,[y]
  3706.       add ebx,[length2]
  3707.       sub eax,17
  3708.  
  3709.       sub eax,ebx
  3710.       jz no_draw_down_rectangle_vertical_3D
  3711.       js no_draw_down_rectangle_vertical_3D
  3712.  
  3713.       sub eax,1
  3714.       mov edi,eax
  3715.  
  3716.       mov eax,0xe4e4e4
  3717.       mov ebx,0xffffff
  3718.       mov ecx,[x]
  3719.       xor edx,edx
  3720.       mov edx,[y]
  3721.       add edx,[length2]
  3722.       add edx,1
  3723.       sub ecx,1
  3724.       mov esi,17
  3725.       call rectangle_gradient_right
  3726.  
  3727.       no_draw_down_rectangle_vertical_3D:
  3728.  
  3729.       ret
  3730.  
  3731. ;eax - x
  3732. ;ebx - y
  3733. ;ecx - size y in pixels
  3734. DrawHorizontal3DScrollBar:
  3735.  
  3736.       mov [x],eax
  3737.       mov [y],ebx
  3738.       mov [length2],ecx
  3739.  
  3740.       mov eax,[x]
  3741.       mov ebx,[y]
  3742.       mov ecx,[length2]
  3743.       mov edx,[pointer]
  3744.       and edx,0xffffff
  3745.       mov [Rectangle.x],eax
  3746.       mov [Rectangle.y],ebx
  3747.       mov [Rectangle.width],ecx
  3748.       mov [Rectangle.height],16
  3749.       mov [Rectangle.color],edx
  3750.       call RectangleContour
  3751.  
  3752.       ;draw gradient right
  3753.       mov eax,[Scroller.color1]
  3754.       mov ebx,dword 0xffffff
  3755.       and eax,0xffffff
  3756.       xor esi,esi
  3757.       xor edi,edi
  3758.       mov ecx,[x]
  3759.       mov edx,[y]
  3760.       add ecx,1
  3761.       mov edi,(16-1)
  3762.       mov esi,[length2]
  3763.       sub esi,2
  3764.       call rectangle_gradient_up
  3765.  
  3766.       ;------------------
  3767.       xor eax,eax
  3768.       mov eax,[AveregeColor]
  3769.       mov [Pixel.color],eax
  3770.  
  3771.       mov eax,[x]
  3772.       mov ebx,[y]
  3773.       mov [Pixel.x],eax
  3774.       mov [Pixel.y],ebx
  3775.       call DrawPixel
  3776.  
  3777.       mov ebx,[y]
  3778.       add ebx,16
  3779.       mov [Pixel.y],ebx
  3780.       call DrawPixel
  3781.  
  3782.       mov eax,[x]
  3783.       mov ebx,[y]
  3784.       add eax,[length2]
  3785.       mov [Pixel.x],eax
  3786.       mov [Pixel.y],ebx
  3787.       call DrawPixel
  3788.  
  3789.       mov eax,[x]
  3790.       mov ebx,[y]
  3791.       add ebx,16
  3792.       add eax,[length2]
  3793.       mov [Pixel.x],eax
  3794.       mov [Pixel.y],ebx
  3795.       call DrawPixel
  3796.  
  3797.       mov eax,[x]
  3798.       mov ebx,[y]
  3799.       add eax,1
  3800.       add ebx,1
  3801.       mov [Pixel.x],eax
  3802.       mov [Pixel.y],ebx
  3803.       call DrawPixel
  3804.  
  3805.       mov eax,[x]
  3806.       mov ebx,[y]
  3807.       add ebx,15
  3808.       add eax,1
  3809.       mov [Pixel.x],eax
  3810.       mov [Pixel.y],ebx
  3811.       call DrawPixel
  3812.  
  3813.       mov eax,[x]
  3814.       mov ebx,[y]
  3815.       add ebx,1
  3816.       add eax,[length2]
  3817.       sub eax,1
  3818.       mov [Pixel.x],eax
  3819.       mov [Pixel.y],ebx
  3820.       call DrawPixel
  3821.  
  3822.       mov eax,[x]
  3823.       mov ebx,[y]
  3824.       add ebx,15
  3825.       add eax,[length2]
  3826.       sub eax,1
  3827.       mov [Pixel.x],eax
  3828.       mov [Pixel.y],ebx
  3829.       call DrawPixel
  3830.  
  3831.       cmp [length2],12
  3832.       jl no_draw_reliev_horizontal_3D
  3833.  
  3834.        mov ebx,[y]
  3835.        mov eax,[length2]
  3836.        shr eax,1
  3837.        add eax,[x]
  3838.        add ebx,5
  3839.        sub eax,3
  3840.  
  3841.        mov [Line.x1],eax
  3842.        mov [Line.x2],eax
  3843.        mov [Line.y1],ebx
  3844.        mov [Line.y2],ebx
  3845.        mov [Line.color],0xffffff
  3846.        add [Line.y2],6
  3847.  
  3848.        mov esi,4
  3849.        next_light_line_draw_r_horizontal_3D:
  3850.  
  3851.          call DrawLine
  3852.          add [Line.x1],2
  3853.          add [Line.x2],2
  3854.  
  3855.        dec esi
  3856.        jnz  next_light_line_draw_r_horizontal_3D
  3857.  
  3858.        mov ebx,[y]
  3859.        mov eax,[length2]
  3860.        shr eax,1
  3861.        add eax,[x]
  3862.        add ebx,6
  3863.        sub eax,2
  3864.  
  3865.        mov ecx,[Scroller.color1]
  3866.        mov [Line.x1],eax
  3867.        mov [Line.x2],eax
  3868.        mov [Line.y1],ebx
  3869.        mov [Line.y2],ebx
  3870.        mov [Line.color],ecx
  3871.        add [Line.y2],6
  3872.  
  3873.        mov esi,4
  3874.        next_dark_line_draw_r_horizontal_3D:
  3875.  
  3876.          call DrawLine
  3877.          add [Line.x1],2
  3878.          add [Line.x2],2
  3879.  
  3880.        dec esi
  3881.        jnz  next_dark_line_draw_r_horizontal_3D
  3882.  
  3883.       no_draw_reliev_horizontal_3D:
  3884.  
  3885.  
  3886.       xor eax,eax
  3887.       mov ax,[Scroller.x]
  3888.       mov ebx,[x]
  3889.       add eax,17
  3890.  
  3891.       sub ebx,eax
  3892.       jz no_draw_up_rectangle_horizontal_3D
  3893.       js no_draw_up_rectangle_horizontal_3D
  3894.  
  3895.       sub ebx,1
  3896.  
  3897.       mov esi,ebx
  3898.  
  3899.       mov eax,0xe4e4e4
  3900.       mov ebx,0xffffff
  3901.       xor ecx,ecx
  3902.       mov edx,[y]
  3903.       mov cx,[Scroller.x]
  3904.       add ecx,17
  3905.       sub edx,1
  3906.       mov edi,17
  3907.       call rectangle_gradient_up
  3908.       no_draw_up_rectangle_horizontal_3D:
  3909.  
  3910.       xor eax,eax
  3911.       mov ax,[Scroller.x]
  3912.       add ax,[Scroller.length]
  3913.       mov ebx,[x]
  3914.       add ebx,[length2]
  3915.       sub eax,17
  3916.  
  3917.       sub eax,ebx
  3918.       jz no_draw_down_rectangle_horizontal_3D
  3919.       js no_draw_down_rectangle_horizontal_3D
  3920.  
  3921.       sub eax,1
  3922.       mov esi,eax
  3923.  
  3924.       mov eax,0xe4e4e4
  3925.       mov ebx,0xffffff
  3926.       mov edx,[y]
  3927.       xor ecx,ecx
  3928.       mov ecx,[x]
  3929.       add ecx,[length2]
  3930.       add ecx,1
  3931.       sub edx,1
  3932.       mov edi,17
  3933.       call rectangle_gradient_up
  3934.  
  3935.       no_draw_down_rectangle_horizontal_3D:
  3936.  
  3937.       ret
  3938.  
  3939. ;eax - x
  3940. ;ebx - y
  3941. ;ecx - size y in pixels
  3942. DrawVertical2DScrollBar:
  3943.  
  3944.       mov [x],eax
  3945.       mov [y],ebx
  3946.       mov [length2],ecx
  3947.  
  3948.       mov eax,13
  3949.       mov edx,[Color]
  3950.       mov ebx,[x]
  3951.       mov ecx,[y]
  3952.       shl ebx,16
  3953.       shl ecx,16
  3954.       add ebx,16
  3955.       add ecx,[length2]
  3956.       and edx,0xffffff
  3957.       mcall
  3958.  
  3959.      ;draw horizontal up light line
  3960.       mov eax,[x]
  3961.       mov ebx,[y]
  3962.       mov [Line.x1],eax
  3963.       mov [Line.x2],eax
  3964.       mov [Line.y1],ebx
  3965.       mov [Line.y2],ebx
  3966.       add [Line.x2],15
  3967.       mov ecx,[colors_table1+15*3]
  3968.       and ecx,0xffffff
  3969.       mov [Line.color],ecx
  3970.       call DrawLine
  3971.  
  3972.       ;draw vertical up light line
  3973.       mov eax,[x]
  3974.       mov ebx,[y]
  3975.       mov ecx,[length2]
  3976.       mov [Line.x1],eax
  3977.       mov [Line.x2],eax
  3978.       mov [Line.y1],ebx
  3979.       add [Line.y2],ecx
  3980.       call DrawLine
  3981.  
  3982.       ;draw vertical up dark line
  3983.       mov eax,[x]
  3984.       mov ebx,[y]
  3985.       add eax,15
  3986.       mov ecx,[length2]
  3987.       sub ecx,1
  3988.       mov [Line.x1],eax
  3989.       mov [Line.x2],eax
  3990.       mov [Line.y1],ebx
  3991.       mov [Line.y2],ebx
  3992.       add [Line.y2],ecx
  3993.       mov ecx,[colors_table2+8*3];[pointer]
  3994.       and ecx,0xffffff
  3995.       mov [Line.color],ecx
  3996.       call DrawLine
  3997.  
  3998.       ;draw horizontal up dark line
  3999.       mov eax,[x]
  4000.       mov ebx,[y]
  4001.       mov ecx,[length2]
  4002.       add ebx,ecx
  4003.       sub ebx,1
  4004.       mov [Line.x1],eax
  4005.       mov [Line.x2],eax
  4006.       mov [Line.y1],ebx
  4007.       mov [Line.y2],ebx
  4008.       add [Line.x2],15
  4009.       call DrawLine
  4010.  
  4011.  
  4012.       xor eax,eax
  4013.       mov ax,[Scroller.y]
  4014.       mov ebx,[y]
  4015.       add eax,16
  4016.  
  4017.       sub ebx,eax
  4018.       jz no_draw_up_rectangle_vertical_2D
  4019.       js no_draw_up_rectangle_vertical_2D
  4020.  
  4021.       mov edi,ebx
  4022.  
  4023.       xor ecx,ecx
  4024.       mov eax,13
  4025.       mov edx,0xe4e4e4
  4026.       mov ebx,[x]
  4027.       mov cx,[Scroller.y]
  4028.       add ecx,16
  4029.       shl ebx,16
  4030.       shl ecx,16
  4031.       add ebx,16
  4032.       add ecx,edi
  4033.       mcall
  4034.  
  4035.       no_draw_up_rectangle_vertical_2D:
  4036.  
  4037.       xor eax,eax
  4038.       mov ax,[Scroller.y]
  4039.       add ax,[Scroller.length]
  4040.       mov ebx,[y]
  4041.       add ebx,[length2]
  4042.       sub eax,16
  4043.  
  4044.       sub eax,ebx
  4045.       jz no_draw_down_rectangle_vertical_2D
  4046.       js no_draw_down_rectangle_vertical_2D
  4047.  
  4048.       ;sub eax,1
  4049.       mov edi,eax
  4050.  
  4051.       xor ecx,ecx
  4052.       mov eax,13
  4053.       mov edx,0xe4e4e4
  4054.       mov ebx,[x]
  4055.       mov ecx,[y]
  4056.       add ecx,[length2]
  4057.       shl ebx,16
  4058.       shl ecx,16
  4059.       add ebx,16
  4060.       add ecx,edi
  4061.       mcall
  4062.  
  4063.       no_draw_down_rectangle_vertical_2D:
  4064.  
  4065.       ret
  4066.  
  4067. ;eax - x
  4068. ;ebx - y
  4069. ;ecx - size x in pixels
  4070. DrawHorizontal2DScrollBar:
  4071.  
  4072.       mov [x],eax
  4073.       mov [y],ebx
  4074.       mov [length2],ecx
  4075.  
  4076.       mov eax,13
  4077.       mov edx,[Color]
  4078.       mov ebx,[x]
  4079.       mov ecx,[y]
  4080.       shl ebx,16
  4081.       shl ecx,16
  4082.       add ebx,[length2]
  4083.       add ecx,16
  4084.       and edx,0xffffff
  4085.       mcall
  4086.  
  4087.      ;draw horizontal up light line
  4088.       mov eax,[x]
  4089.       mov ebx,[y]
  4090.       mov ecx,[length2]
  4091.       mov [Line.x1],eax
  4092.       mov [Line.x2],eax
  4093.       mov [Line.y1],ebx
  4094.       mov [Line.y2],ebx
  4095.       sub ecx,1
  4096.       add [Line.x2],ecx
  4097.       mov ecx,[colors_table1+15*3]
  4098.       and ecx,0xffffff
  4099.       mov [Line.color],ecx
  4100.       call DrawLine
  4101.  
  4102.       ;draw vertical up light line
  4103.       mov eax,[x]
  4104.       mov ebx,[y]
  4105.       mov [Line.x1],eax
  4106.       mov [Line.x2],eax
  4107.       mov [Line.y1],ebx
  4108.       mov [Line.y2],ebx
  4109.       add [Line.y2],15
  4110.       call DrawLine
  4111.  
  4112.       ;draw vertical up dark line
  4113.       mov eax,[x]
  4114.       mov ebx,[y]
  4115.       mov ecx,[length2]
  4116.       sub ecx,1
  4117.       add eax,ecx
  4118.       mov [Line.x1],eax
  4119.       mov [Line.x2],eax
  4120.       mov [Line.y1],ebx
  4121.       mov [Line.y2],ebx
  4122.       add [Line.y2],15
  4123.       mov ecx,[colors_table2+8*3];[pointer]
  4124.       and ecx,0xffffff
  4125.       mov [Line.color],ecx
  4126.       call DrawLine
  4127.  
  4128.       ;draw horizontal up dark line
  4129.       mov eax,[x]
  4130.       mov ebx,[y]
  4131.       mov ecx,[length2]
  4132.       sub ecx,1
  4133.       add ebx,15
  4134.       mov [Line.x1],eax
  4135.       mov [Line.x2],eax
  4136.       mov [Line.y1],ebx
  4137.       mov [Line.y2],ebx
  4138.       add [Line.x2],ecx
  4139.       call DrawLine
  4140.  
  4141.  
  4142.       xor eax,eax
  4143.       mov ax,[Scroller.x]
  4144.       mov ebx,[x]
  4145.       add eax,16
  4146.  
  4147.       sub ebx,eax
  4148.       jz no_draw_up_rectangle_horizontal_2D
  4149.       js no_draw_up_rectangle_horizontal_2D
  4150.  
  4151.       mov edi,ebx
  4152.  
  4153.       xor ecx,ecx
  4154.       xor ebx,ebx
  4155.       mov eax,13
  4156.       mov edx,0xe4e4e4
  4157.       mov bx,[Scroller.x]
  4158.       mov cx,[Scroller.y]
  4159.       add ebx,16
  4160.       shl ebx,16
  4161.       shl ecx,16
  4162.       add ecx,16
  4163.       add ebx,edi
  4164.       mcall
  4165.  
  4166.       no_draw_up_rectangle_horizontal_2D:
  4167.  
  4168.       xor eax,eax
  4169.       mov ax,[Scroller.x]
  4170.       add ax,[Scroller.length]
  4171.       mov ebx,[x]
  4172.       add ebx,[length2]
  4173.       sub eax,16
  4174.  
  4175.       sub eax,ebx
  4176.       jz no_draw_down_rectangle_horizontal_2D
  4177.       js no_draw_down_rectangle_horizontal_2D
  4178.  
  4179.       ;sub eax,1
  4180.       mov edi,eax
  4181.  
  4182.       xor ecx,ecx
  4183.       mov eax,13
  4184.       mov edx,0xe4e4e4
  4185.       mov ebx,[x]
  4186.       mov ecx,[y]
  4187.       add ebx,[length2]
  4188.       shl ebx,16
  4189.       shl ecx,16
  4190.       add ebx,edi
  4191.       add ecx,16
  4192.       mcall
  4193.  
  4194.       no_draw_down_rectangle_horizontal_2D:
  4195.  
  4196.       ret
  4197.