Subversion Repositories Kolibri OS

Rev

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