Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.                 control ScrollBar
  3. */
  4.  
  5. ////////////////////////////////////////////////////////////////////////////////
  6. //                              Draw Ruller
  7. ////////////////////////////////////////////////////////////////////////////////
  8. void DrawRuller(struct ControlScrollBar *ScrollBar)
  9. {
  10.         int                     x,y,sizex,sizey;
  11.         int                     scrollbar_size,ruller_size,ruller_pos;
  12.         struct FINITION         *fin;
  13.  
  14.         x=ScrollBar->ctrl_x;
  15.         y=ScrollBar->ctrl_y;
  16.         sizex=ScrollBar->ctrl_sizex;
  17.         sizey=ScrollBar->ctrl_sizey;
  18.         fin=(struct FINITION*)ScrollBar->finition;
  19.  
  20.         if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_HORIZONTAL_ON)
  21.         {
  22.                 scrollbar_size=sizex-sizey*2;
  23.                 ruller_size=(int)(scrollbar_size*ScrollBar->ruller_size);
  24.                 if (ruller_size<5) ruller_size=5;
  25.                 if (ruller_size>sizex) ruller_size=sizex-2*sizey;
  26.  
  27.                 ruller_pos=x+sizey+(int)((scrollbar_size-ruller_size)*ScrollBar->ruller_pos);
  28.                 //left bar
  29.                 Draw(fin,TOOL_FILLED_RECTANGLE,x+sizey,y+1,ruller_pos-x-sizey,sizey-2,COLOR_FON);
  30.                 //right bar
  31.                 Draw(fin,TOOL_FILLED_RECTANGLE,ruller_pos+ruller_size,y+1,x+sizex-sizey-ruller_pos-ruller_size,sizey-2,COLOR_FON);
  32.                 //roller
  33.                 Draw(fin,TOOL_RECTANGLE,ruller_pos,y,ruller_size,sizey,COLOR_ABSOLUTE_DARK);
  34.                 Draw(fin,TOOL_FILLED_RECTANGLE,ruller_pos+1,y+1,ruller_size-2,sizey-2,COLOR_MIDDLE_LIGHT);
  35.                 Draw(fin,TOOL_VERTICAL_LINE,ruller_pos+(ruller_size/2)-2,y+sizey/4,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
  36.                 Draw(fin,TOOL_VERTICAL_LINE,ruller_pos+(ruller_size/2),y+sizey/4,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
  37.                 Draw(fin,TOOL_VERTICAL_LINE,ruller_pos+(ruller_size/2)+2,y+sizey/4,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
  38.         }
  39.  
  40.         if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_VERTICAL_ON)
  41.         {
  42.                 scrollbar_size=sizey-sizex*2;
  43.                 ruller_size=(int)(scrollbar_size*ScrollBar->ruller_size);
  44.                 if (ruller_size<5) ruller_size=5;
  45.                 if (ruller_size>sizey) ruller_size=sizey-2*sizex;
  46.  
  47.                 ruller_pos=y+sizex+(int)((scrollbar_size-ruller_size)*ScrollBar->ruller_pos);
  48.                 //up bar
  49.                 Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+sizex,sizex-2,ruller_pos-y-sizex,COLOR_FON);
  50.                 //down bar
  51.                 Draw(fin,TOOL_FILLED_RECTANGLE,x+1,ruller_pos+ruller_size,sizex-2,y+sizey-sizex-ruller_pos-ruller_size,COLOR_FON);
  52.                 //roller
  53.                 Draw(fin,TOOL_RECTANGLE,x,ruller_pos,sizex,ruller_size,COLOR_ABSOLUTE_DARK);
  54.                 Draw(fin,TOOL_FILLED_RECTANGLE,x+1,ruller_pos+1,sizex-2,ruller_size-2,COLOR_MIDDLE_LIGHT);
  55.                 Draw(fin,TOOL_HORIZONTAL_LINE,x+sizex/4,x+(3*sizex)/4,ruller_pos+(ruller_size/2)-2,COLOR_ABSOLUTE_DARK);
  56.                 Draw(fin,TOOL_HORIZONTAL_LINE,x+sizex/4,x+(3*sizex)/4,ruller_pos+(ruller_size/2),COLOR_ABSOLUTE_DARK);
  57.                 Draw(fin,TOOL_HORIZONTAL_LINE,x+sizex/4,x+(3*sizex)/4,ruller_pos+(ruller_size/2)+2,COLOR_ABSOLUTE_DARK);
  58.         }
  59.  
  60. }
  61.  
  62. ////////////////////////////////////////////////////////////////////////////////
  63. //                              Draw full Scroll Bar
  64. ////////////////////////////////////////////////////////////////////////////////
  65. void DrawScrollBar(struct ControlScrollBar *ScrollBar)
  66. {
  67.         int                     x,y,sizex,sizey;
  68.         struct FINITION         *fin;
  69.  
  70.         x=ScrollBar->ctrl_x;
  71.         y=ScrollBar->ctrl_y;
  72.         sizex=ScrollBar->ctrl_sizex;
  73.         sizey=ScrollBar->ctrl_sizey;
  74.         fin=(struct FINITION*)ScrollBar->finition;
  75.  
  76.         if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_HORIZONTAL_ON)
  77.         {
  78.  
  79.                 //draw child buttons and roller
  80.                 Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizey,COLOR_ABSOLUTE_DARK);
  81.                 //left button
  82.                 Draw(fin,TOOL_RECTANGLE,x,y,sizey,sizey,COLOR_ABSOLUTE_DARK);
  83.                 Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizey-2,sizey-2,COLOR_MIDDLE_LIGHT);
  84.                 //left arrow of left button
  85.                 Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
  86.                 Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
  87.                 Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
  88.                 Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
  89.                 //right button
  90.                 Draw(fin,TOOL_RECTANGLE,x+sizex-sizey,y,sizey,sizey,COLOR_ABSOLUTE_DARK);
  91.                 Draw(fin,TOOL_FILLED_RECTANGLE,x+sizex-sizey+1,y+1,sizey-2,sizey-2,COLOR_MIDDLE_LIGHT);
  92.                 //right arrow of right button
  93.                 Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
  94.                 Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
  95.                 Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
  96.                 Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
  97.                 //roller
  98.                 DrawRuller(ScrollBar);
  99.         }
  100.  
  101.         if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_VERTICAL_ON)
  102.         {
  103.                 //draw child buttons and roller
  104.                 Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizey,COLOR_ABSOLUTE_DARK);
  105.                 //up button
  106.                 Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizex,COLOR_ABSOLUTE_DARK);
  107.                 Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizex-2,sizex-2,COLOR_MIDDLE_LIGHT);
  108.                 //up arrow of up button
  109.                 Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+sizex/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  110.                 Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+(3*sizex)/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  111.                 Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+sizex/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  112.                 Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+(3*sizex)/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  113.                 //down button
  114.                 Draw(fin,TOOL_RECTANGLE,x,y+sizey-sizex,sizex,sizex,COLOR_ABSOLUTE_DARK);
  115.                 Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+sizey-sizex+1,sizex-2,sizex-2,COLOR_MIDDLE_LIGHT);
  116.                 //down arrow of down button
  117.                 Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+sizex/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  118.                 Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+(3*sizex)/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  119.                 Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+sizex/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  120.                 Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+(3*sizex)/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  121.                 //roller
  122.                 DrawRuller(ScrollBar);
  123.         }
  124. }
  125.  
  126. ////////////////////////////////////////////////////////////////////////////////
  127. //                              Vertical Scroll Bar
  128. ////////////////////////////////////////////////////////////////////////////////
  129.  
  130. ////////////////////////////////////////////////////////////////////////////////
  131. //              animation of up button of Scroll Bar
  132. ////////////////////////////////////////////////////////////////////////////////
  133. void ScrollBar_DrawPressedUpButton(struct ControlScrollBar *ScrollBar)
  134. {
  135.         int                     x,y,sizex,sizey;
  136.         struct FINITION         *fin;
  137.  
  138.         x=ScrollBar->ctrl_x;
  139.         y=ScrollBar->ctrl_y;
  140.         sizex=ScrollBar->ctrl_sizex;
  141.         sizey=ScrollBar->ctrl_sizey;
  142.         fin=(struct FINITION*)ScrollBar->finition;
  143.  
  144.         //up button
  145.         Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizex,COLOR_ABSOLUTE_DARK);
  146.         Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizex-2,sizex-2,COLOR_FON);
  147.         //up arrow of up button
  148.         Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+sizex/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  149.         Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+(3*sizex)/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  150.         Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+sizex/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  151.         Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+(3*sizex)/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  152. }
  153.  
  154. void ScrollBar_DrawReleasedUpButton(struct ControlScrollBar *ScrollBar)
  155. {
  156.         int                     x,y,sizex,sizey;
  157.         struct FINITION         *fin;
  158.  
  159.         x=ScrollBar->ctrl_x;
  160.         y=ScrollBar->ctrl_y;
  161.         sizex=ScrollBar->ctrl_sizex;
  162.         sizey=ScrollBar->ctrl_sizey;
  163.         fin=(struct FINITION*)ScrollBar->finition;
  164.  
  165.         //up button
  166.         Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizex,COLOR_ABSOLUTE_DARK);
  167.         Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizex-2,sizex-2,COLOR_MIDDLE_LIGHT);
  168.         //up arrow of up button
  169.         Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+sizex/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  170.         Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+(3*sizex)/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  171.         Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+sizex/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  172.         Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+(3*sizex)/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  173. }
  174.  
  175. ////////////////////////////////////////////////////////////////////////////////
  176. //              animation of down button of Scroll Bar
  177. ////////////////////////////////////////////////////////////////////////////////
  178. void ScrollBar_DrawPressedDownButton(struct ControlScrollBar *ScrollBar)
  179. {
  180.         int                     x,y,sizex,sizey;
  181.         struct FINITION         *fin;
  182.  
  183.         x=ScrollBar->ctrl_x;
  184.         y=ScrollBar->ctrl_y;
  185.         sizex=ScrollBar->ctrl_sizex;
  186.         sizey=ScrollBar->ctrl_sizey;
  187.         fin=(struct FINITION*)ScrollBar->finition;
  188.  
  189.         //down button
  190.         Draw(fin,TOOL_RECTANGLE,x,y+sizey-sizex,sizex,sizex,COLOR_ABSOLUTE_DARK);
  191.         Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+sizey-sizex+1,sizex-2,sizex-2,COLOR_FON);
  192.         //down arrow of down button
  193.         Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+sizex/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  194.         Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+(3*sizex)/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  195.         Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+sizex/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  196.         Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+(3*sizex)/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  197. }
  198.  
  199. void ScrollBar_DrawReleasedDownButton(struct ControlScrollBar *ScrollBar)
  200. {
  201.         int                     x,y,sizex,sizey;
  202.         struct FINITION         *fin;
  203.  
  204.         x=ScrollBar->ctrl_x;
  205.         y=ScrollBar->ctrl_y;
  206.         sizex=ScrollBar->ctrl_sizex;
  207.         sizey=ScrollBar->ctrl_sizey;
  208.         fin=(struct FINITION*)ScrollBar->finition;
  209.  
  210.         //down button
  211.         Draw(fin,TOOL_RECTANGLE,x,y+sizey-sizex,sizex,sizex,COLOR_ABSOLUTE_DARK);
  212.         Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+sizey-sizex+1,sizex-2,sizex-2,COLOR_MIDDLE_LIGHT);
  213.         //down arrow of down button
  214.         Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+sizex/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  215.         Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+(3*sizex)/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  216.         Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+sizex/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  217.         Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+(3*sizex)/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
  218. }
  219.  
  220. ////////////////////////////////////////////////////////////////////////////////
  221. //              callback function for up button of Scroll Bar
  222. ////////////////////////////////////////////////////////////////////////////////
  223. void ScrollBar_FuncCallbackForUpButton_Pressed(struct HEADER *control,void *data)
  224. {
  225.         struct ControlScrollBar *ScrollBar;
  226.         struct  HEADERPARENT    *main_parent;
  227.  
  228.         ScrollBar=(struct ControlScrollBar*)data;
  229.         if (ScrollBar->ruller_size!=1.0)
  230.         {
  231.                 ScrollBar->ruller_pos=ScrollBar->ruller_pos-ScrollBar->ruller_step;
  232.         }
  233.         if (ScrollBar->ruller_pos<0.0) ScrollBar->ruller_pos=0.0;
  234.         ScrollBar_DrawPressedUpButton(ScrollBar);
  235.  
  236.         if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
  237.         {
  238.                 main_parent=(struct     HEADERPARENT*)ScrollBar->main_parent;
  239.                 ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
  240.                 main_parent->control_for_callback_function[main_parent->number_callbacks]=
  241.                 (DWORD*)ScrollBar;
  242.                 main_parent->callback_for_control_callback[main_parent->number_callbacks]=
  243.                 (DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
  244.                 main_parent->number_callbacks++;
  245.         }
  246.         DrawRuller(ScrollBar);
  247. }
  248.  
  249. void ScrollBar_FuncCallbackForUpButton_Released(struct HEADER *control,void *data)
  250. {
  251.         struct ControlScrollBar *ScrollBar;
  252.  
  253.         ScrollBar=(struct ControlScrollBar*)data;
  254.         ScrollBar_DrawReleasedUpButton(ScrollBar);
  255. }
  256.  
  257. ////////////////////////////////////////////////////////////////////////////////
  258. //              callback function for down button of Scroll Bar
  259. ////////////////////////////////////////////////////////////////////////////////
  260. void ScrollBar_FuncCallbackForDownButton_Pressed(struct HEADER *control,void *data)
  261. {
  262.         struct ControlScrollBar *ScrollBar;
  263.         struct  HEADERPARENT    *main_parent;
  264.  
  265.         ScrollBar=(struct ControlScrollBar*)data;
  266.         if (ScrollBar->ruller_size!=1.0)
  267.         {
  268.                 ScrollBar->ruller_pos=ScrollBar->ruller_pos+ScrollBar->ruller_step;
  269.         }
  270.         if (ScrollBar->ruller_pos>1.0) ScrollBar->ruller_pos=1.0;
  271.         ScrollBar_DrawPressedDownButton(ScrollBar);
  272.  
  273.         if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
  274.         {
  275.                 main_parent=(struct     HEADERPARENT*)ScrollBar->main_parent;
  276.                 ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
  277.                 main_parent->control_for_callback_function[main_parent->number_callbacks]=
  278.                 (DWORD*)ScrollBar;
  279.                 main_parent->callback_for_control_callback[main_parent->number_callbacks]=
  280.                 (DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
  281.                 main_parent->number_callbacks++;
  282.         }
  283.         DrawRuller(ScrollBar);
  284. }
  285.  
  286. void ScrollBar_FuncCallbackForDownButton_Released(struct HEADER *control,void *data)
  287. {
  288.         struct ControlScrollBar *ScrollBar;
  289.  
  290.         ScrollBar=(struct ControlScrollBar*)data;
  291.         ScrollBar_DrawReleasedDownButton(ScrollBar);
  292.         DrawRuller(ScrollBar);
  293. }
  294.  
  295. ////////////////////////////////////////////////////////////////////////////////
  296. //              Horizontal Scroll Bar
  297. ////////////////////////////////////////////////////////////////////////////////
  298.  
  299. ////////////////////////////////////////////////////////////////////////////////
  300. //              animation of left button of Scroll Bar
  301. ////////////////////////////////////////////////////////////////////////////////
  302. void ScrollBar_DrawPressedLeftButton(struct ControlScrollBar *ScrollBar)
  303. {
  304.         int                     x,y,sizex,sizey;
  305.         struct FINITION         *fin;
  306.  
  307.         x=ScrollBar->ctrl_x;
  308.         y=ScrollBar->ctrl_y;
  309.         sizex=ScrollBar->ctrl_sizex;
  310.         sizey=ScrollBar->ctrl_sizey;
  311.         fin=(struct FINITION*)ScrollBar->finition;
  312.  
  313.         //left button
  314.         Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizey-2,sizey-2,COLOR_FON);
  315.         //left arrow of left button
  316.         Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
  317.         Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
  318.         Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
  319.         Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
  320. }
  321.  
  322. void ScrollBar_DrawReleasedLeftButton(struct ControlScrollBar *ScrollBar)
  323. {
  324.         int                     x,y,sizex,sizey;
  325.         struct FINITION         *fin;
  326.  
  327.         x=ScrollBar->ctrl_x;
  328.         y=ScrollBar->ctrl_y;
  329.         sizex=ScrollBar->ctrl_sizex;
  330.         sizey=ScrollBar->ctrl_sizey;
  331.         fin=(struct FINITION*)ScrollBar->finition;
  332.  
  333.         //left button
  334.         Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizey-2,sizey-2,COLOR_MIDDLE_LIGHT);
  335.         //left arrow of left button
  336.         Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
  337.         Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
  338.         Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
  339.         Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
  340. }
  341.  
  342. ////////////////////////////////////////////////////////////////////////////////
  343. //              animation of right button of Scroll Bar
  344. ////////////////////////////////////////////////////////////////////////////////
  345. void ScrollBar_DrawPressedRightButton(struct ControlScrollBar *ScrollBar)
  346. {
  347.         int                     x,y,sizex,sizey;
  348.         struct FINITION         *fin;
  349.  
  350.         x=ScrollBar->ctrl_x;
  351.         y=ScrollBar->ctrl_y;
  352.         sizex=ScrollBar->ctrl_sizex;
  353.         sizey=ScrollBar->ctrl_sizey;
  354.         fin=(struct FINITION*)ScrollBar->finition;
  355.  
  356.         //right button
  357.         Draw(fin,TOOL_FILLED_RECTANGLE,x+sizex-sizey+1,y+1,sizey-2,sizey-2,COLOR_FON);
  358.         //right arrow of right button
  359.         Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
  360.         Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
  361.         Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
  362.         Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
  363. }
  364.  
  365. void ScrollBar_DrawReleasedRightButton(struct ControlScrollBar *ScrollBar)
  366. {
  367.         int                     x,y,sizex,sizey;
  368.         struct FINITION         *fin;
  369.  
  370.         x=ScrollBar->ctrl_x;
  371.         y=ScrollBar->ctrl_y;
  372.         sizex=ScrollBar->ctrl_sizex;
  373.         sizey=ScrollBar->ctrl_sizey;
  374.         fin=(struct FINITION*)ScrollBar->finition;
  375.  
  376.         //right button
  377.         Draw(fin,TOOL_FILLED_RECTANGLE,x+sizex-sizey+1,y+1,sizey-2,sizey-2,COLOR_MIDDLE_LIGHT);
  378.         //right arrow of right button
  379.         Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
  380.         Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
  381.         Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
  382.         Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
  383. }
  384. ////////////////////////////////////////////////////////////////////////////////
  385. //              callback function for left button of Scroll Bar
  386. ////////////////////////////////////////////////////////////////////////////////
  387. void ScrollBar_FuncCallbackForLeftButton_Pressed(struct HEADER *control,void *data)
  388. {
  389.         struct ControlScrollBar *ScrollBar;
  390.         struct  HEADERPARENT    *main_parent;
  391.  
  392.         ScrollBar=(struct ControlScrollBar*)data;
  393.         if (ScrollBar->ruller_size!=1.0)
  394.         {
  395.                 ScrollBar->ruller_pos=ScrollBar->ruller_pos-ScrollBar->ruller_step;
  396.         }
  397.         if (ScrollBar->ruller_pos<0.0) ScrollBar->ruller_pos=0.0;
  398.         ScrollBar_DrawPressedLeftButton(ScrollBar);
  399.  
  400.         if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
  401.         {
  402.                 main_parent=(struct     HEADERPARENT*)ScrollBar->main_parent;
  403.                 ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
  404.                 main_parent->control_for_callback_function[main_parent->number_callbacks]=
  405.                 (DWORD*)ScrollBar;
  406.                 main_parent->callback_for_control_callback[main_parent->number_callbacks]=
  407.                 (DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
  408.                 main_parent->number_callbacks++;
  409.         }
  410.         DrawRuller(ScrollBar);
  411. }
  412.  
  413. void ScrollBar_FuncCallbackForLeftButton_Released(struct HEADER *control,void *data)
  414. {
  415.         struct ControlScrollBar *ScrollBar;
  416.  
  417.         ScrollBar=(struct ControlScrollBar*)data;
  418.         ScrollBar_DrawReleasedLeftButton(ScrollBar);
  419. }
  420.  
  421. ////////////////////////////////////////////////////////////////////////////////
  422. //              callback function for right button of Scroll Bar
  423. ////////////////////////////////////////////////////////////////////////////////
  424. void ScrollBar_FuncCallbackForRightButton_Pressed(struct HEADER *control,void *data)
  425. {
  426.         struct ControlScrollBar *ScrollBar;
  427.         struct  HEADERPARENT    *main_parent;
  428.  
  429.         ScrollBar=(struct ControlScrollBar*)data;
  430.         if (ScrollBar->ruller_size!=1.0)
  431.         {
  432.                 ScrollBar->ruller_pos=ScrollBar->ruller_pos+ScrollBar->ruller_step;
  433.         }
  434.         if (ScrollBar->ruller_pos>1.0) ScrollBar->ruller_pos=1.0;
  435.         ScrollBar_DrawPressedRightButton(ScrollBar);
  436.  
  437.         if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
  438.         {
  439.                 main_parent=(struct     HEADERPARENT*)ScrollBar->main_parent;
  440.                 ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
  441.                 main_parent->control_for_callback_function[main_parent->number_callbacks]=
  442.                 (DWORD*)ScrollBar;
  443.                 main_parent->callback_for_control_callback[main_parent->number_callbacks]=
  444.                 (DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
  445.                 main_parent->number_callbacks++;
  446.         }
  447.         DrawRuller(ScrollBar);
  448. }
  449.  
  450. void ScrollBar_FuncCallbackForRightButton_Released(struct HEADER *control,void *data)
  451. {
  452.         struct ControlScrollBar *ScrollBar;
  453.  
  454.         ScrollBar=(struct ControlScrollBar*)data;
  455.         ScrollBar_DrawReleasedRightButton(ScrollBar);
  456.         DrawRuller(ScrollBar);
  457. }
  458.  
  459. ////////////////////////////////////////////////////////////////////////////////
  460. //              callback function for ruller bar button of Scroll Bar
  461. ////////////////////////////////////////////////////////////////////////////////
  462. void ScrollBar_FuncCallbackForScrollRullerPressed(struct HEADER *control,void *data)
  463. {
  464.         struct ControlScrollBar *ScrollBar;
  465.  
  466.         ScrollBar=(struct ControlScrollBar*)data;
  467.         ScrollBar->scb_flags=ScrollBar->scb_flags | FLAG_SCROLL_RULLER_PRESSED;
  468. }
  469.  
  470. void ScrollBar_FuncCallbackForScrollRullerReleased(struct HEADER *control,void *data)
  471. {
  472.         struct ControlScrollBar *ScrollBar;
  473.  
  474.         ScrollBar=(struct ControlScrollBar*)data;
  475.         ScrollBar->scb_flags=ScrollBar->scb_flags & FLAG_SCROLL_RULLER_RELEASED;
  476. }
  477.  
  478. //---------------------------------------------------------------------------------
  479. //                       control ScrollBar
  480. //---------------------------------------------------------------------------------
  481. void ScrollBarProc(struct ControlScrollBar *ScrollBar,struct MESSAGE *message)
  482. {
  483.         int                     mx,my;
  484.         char                    mouse_buttons_state;
  485.         int                     x,y,sizex,sizey;
  486.         int                     scrollbar_size,ruller_size,ruller_pos;
  487.         int                     ruller_min,ruller_max;
  488.         float                   max_pos,current_pos,last_ruller_pos;
  489.         struct  FINITION        *fin;
  490.         struct TIMER            *timer;
  491.         struct  HEADERPARENT    *main_parent;
  492.  
  493.         x=ScrollBar->ctrl_x;
  494.         y=ScrollBar->ctrl_y;
  495.         sizex=ScrollBar->ctrl_sizex;
  496.         sizey=ScrollBar->ctrl_sizey;
  497.  
  498.         switch(message->type)
  499.         {
  500.                 case MESSAGE_FULL_REDRAW_ALL:
  501.                 {
  502.                         //draw ScrollBar
  503.                         if (ScrollBar->flags & FLAG_SHOW_CONTROL)       DrawScrollBar(ScrollBar);
  504.                         break;
  505.                 }
  506.                 case MESSAGE_FULL_REDRAW_ALL_WITH_FINITION:
  507.                 {
  508.                         fin=(struct FINITION*)ScrollBar->finition;
  509.                         fin->flags=fin->flags | FINITION_ON;
  510.                         fin->x=message->arg1;
  511.                         fin->y=message->arg2;
  512.                         fin->sizex=message->arg3;
  513.                         fin->sizey=message->arg4;
  514.                         DrawScrollBar(ScrollBar);
  515.                         break;
  516.                 }
  517.                 case MESSAGE_SPECIALIZED:
  518.                 {
  519.                         if (ScrollBar->flags & FLAG_GET_SPECIALIZED_MESSAGE_ON)
  520.                         {
  521.                                 if (ScrollBar->flags & FLAG_SHOW_CONTROL)       DrawScrollBar(ScrollBar);
  522.                                 ScrollBar->flags=ScrollBar->flags & FLAG_GET_SPECIALIZED_MESSAGE_OFF;
  523.                         }
  524.                         break;
  525.                 }
  526.                 case MESSAGE_MOUSE_EVENT:
  527.                 {
  528.                         mx=message->arg1;
  529.                         my=message->arg2;
  530.                         mouse_buttons_state=message->arg3;
  531.                         main_parent=(struct     HEADERPARENT*)ScrollBar->main_parent;
  532.  
  533.                         //check ruller state
  534.                         if (ScrollBar->scb_flags & FLAG_SCROLL_RULLER_PRESSED)
  535.                         {       //              horizontal ScrollBar
  536.                                 if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_HORIZONTAL_ON)
  537.                                 {
  538.                                         scrollbar_size=sizex-sizey*2;
  539.                                         ruller_size=scrollbar_size*ScrollBar->ruller_size;
  540.                                         if (ruller_size<5) ruller_size=5;
  541.  
  542.                                         ruller_min=x+sizey;     //minimum x
  543.                                         ruller_max=ruller_min+scrollbar_size-ruller_size;
  544.                                         ruller_pos=mx-(ruller_size/2);//ruller centred under mouse pointer
  545.  
  546.                                         if (ruller_pos<ruller_min) ruller_pos=ruller_min;
  547.                                         if (ruller_pos>ruller_max) ruller_pos=ruller_max;
  548.  
  549.                                         if (ruller_max!=ruller_min)
  550.                                         {
  551.                                                 max_pos=(float)(ruller_max-ruller_min);
  552.                                                 current_pos=(float)(ruller_pos-ruller_min);
  553.                                                 last_ruller_pos=ScrollBar->ruller_pos;
  554.                                                 ScrollBar->ruller_pos=current_pos/max_pos;
  555.                                         }
  556.                                         else {ScrollBar->ruller_pos=0.0;}
  557.  
  558.                                         if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
  559.                                         {
  560.                                                 if (ScrollBar->ruller_pos!=last_ruller_pos)
  561.                                                 {
  562.                                                         ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
  563.                                                         main_parent->control_for_callback_function[main_parent->number_callbacks]=
  564.                                                         (DWORD*)ScrollBar;
  565.                                                         main_parent->callback_for_control_callback[main_parent->number_callbacks]=
  566.                                                         (DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
  567.                                                         main_parent->number_callbacks++;
  568.                                                 }
  569.                                         }
  570.                                         if (ScrollBar->ruller_pos!=last_ruller_pos)     DrawRuller(ScrollBar);
  571.                                         break;
  572.                                 }
  573.                                 //              vertical ScrollBar
  574.                                 if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_VERTICAL_ON)
  575.                                 {
  576.                                         scrollbar_size=sizey-sizex*2;
  577.                                         ruller_size=scrollbar_size*ScrollBar->ruller_size;
  578.                                         if (ruller_size<5) ruller_size=5;
  579.  
  580.                                         ruller_min=y+sizex;     //minimum x
  581.                                         ruller_max=ruller_min+scrollbar_size-ruller_size;
  582.                                         ruller_pos=my-(ruller_size/2);//ruller centred under mouse pointer
  583.  
  584.                                         if (ruller_pos<ruller_min) ruller_pos=ruller_min;
  585.                                         if (ruller_pos>ruller_max) ruller_pos=ruller_max;
  586.  
  587.                                         if (ruller_max!=ruller_min)
  588.                                         {
  589.                                                 max_pos=(float)(ruller_max-ruller_min);
  590.                                                 current_pos=(float)(ruller_pos-ruller_min);
  591.                                                 last_ruller_pos=ScrollBar->ruller_pos;
  592.                                                 ScrollBar->ruller_pos=current_pos/max_pos;
  593.                                         }
  594.                                         else {ScrollBar->ruller_pos=0.0;}
  595.  
  596.                                         if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
  597.                                         {
  598.                                                 if (ScrollBar->ruller_pos!=last_ruller_pos)
  599.                                                 {
  600.                                                         ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
  601.                                                         main_parent->control_for_callback_function[main_parent->number_callbacks]=
  602.                                                         (DWORD*)ScrollBar;
  603.                                                         main_parent->callback_for_control_callback[main_parent->number_callbacks]=
  604.                                                         (DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
  605.                                                         main_parent->number_callbacks++;
  606.                                                 }
  607.                                         }
  608.                                         if (ScrollBar->ruller_pos!=last_ruller_pos)     DrawRuller(ScrollBar);
  609.                                 }
  610.                         }
  611.                         break;
  612.                 }
  613.                 case MESSAGE_CHANGE_POSITION_EVENT:
  614.                 {
  615.                         ScrollBar->ctrl_x=ScrollBar->ctrl_x+message->arg1;
  616.                         ScrollBar->ctrl_y=ScrollBar->ctrl_y+message->arg2;
  617.                         break;
  618.                 }
  619.                 case MESSAGE_CALL_TIMER_EVENT:
  620.                 {
  621.                         if (ScrollBar->timer!=(DWORD*)NULL)
  622.                         {
  623.                                 timer=(struct TIMER*)ScrollBar->timer;
  624.                                 if (timer->flags & FLAG_TIMER_ON)       Timer(timer);
  625.                         }
  626.                         break;
  627.                 }
  628.                 case MESSAGE_DESTROY_CONTROL:
  629.                 {
  630.                         if (ScrollBar->timer!=(DWORD*)NULL)     free(ScrollBar->timer);
  631.                         free(ScrollBar->finition);
  632.                         break;
  633.                 }
  634.                 case MESSAGE_SET_MAIN_PARENT:
  635.                 {
  636.                         SendMessage((struct HEADER*)ScrollBar,message);
  637.                         ScrollBar->main_parent=(DWORD*)message->arg1;
  638.                         break;
  639.                 }
  640.  
  641.                 default: break;
  642.         }
  643.         //send message to child controls(if there is)
  644.         SendMessage((struct HEADER*)ScrollBar,message);
  645. }
  646.  
  647. //---------------------------------------------------------------------------------
  648. //                              create control ScrollBar
  649. //---------------------------------------------------------------------------------
  650. void* CreateScrollBar(struct ScrollBarData *info_for_control)
  651. {
  652.         struct ControlScrollBar *ScrollBar;
  653.         struct FINITION         *fin;
  654.  
  655.         ScrollBar=malloc(sizeof(struct ControlScrollBar));
  656.         ScrollBar->finition=malloc(sizeof(struct FINITION));
  657.         fin=(struct FINITION*)ScrollBar->finition;
  658.         fin->flags=0;
  659.  
  660.         ID++;
  661. #ifdef  DEBUG
  662.         printf("\ncreated scroll bar with ID=%d",(int)ID);
  663. #endif
  664.         ScrollBar->child_bk=(DWORD*)NULL;
  665.         ScrollBar->child_fd=(DWORD*)NULL;
  666.         ScrollBar->active_control_for_keys=(DWORD*)NULL;
  667.         ScrollBar->active_control_for_mouse=(DWORD*)NULL;
  668.         ScrollBar->callback=(DWORD*)NULL;
  669.         ScrollBar->timer=(DWORD*)NULL;
  670.  
  671.         ScrollBar->ctrl_proc=(DWORD*)&ScrollBarProc;
  672.         ScrollBar->ctrl_x=(DWORD)info_for_control->x;
  673.         ScrollBar->ctrl_y=(DWORD)info_for_control->y;
  674.         ScrollBar->ctrl_sizex=(DWORD)info_for_control->width;
  675.         ScrollBar->ctrl_sizey=(DWORD)info_for_control->height;
  676.         ScrollBar->ctrl_ID=ID;
  677.         ScrollBar->ruller_size=info_for_control->ruller_size;
  678.         ScrollBar->ruller_pos=info_for_control->ruller_pos;
  679.         ScrollBar->ruller_step=info_for_control->ruller_step;
  680.         ScrollBar->flags=0;
  681.         ScrollBar->flags=ScrollBar->flags | FLAG_SHOW_CONTROL;
  682.  
  683.         return(ScrollBar);
  684. }
  685.  
  686. void* CreateHorizontalScrollBar(struct ScrollBarData *info_for_control)
  687. {
  688.         struct ControlScrollBar *ScrollBar;
  689.         struct ControlButton    *ChildButton1;
  690.         struct ControlButton    *ChildButton2;
  691.         struct ControlButton    *ScrollRuller;
  692.         struct ButtonData               ChildButton1Data;
  693.         struct ButtonData               ChildButton2Data;
  694.         struct ButtonData               ScrollRullerData;
  695.  
  696.         ScrollBar=CreateScrollBar(info_for_control);
  697.         //set horizontal orientation
  698.         ScrollBar->scb_flags=0;
  699.         ScrollBar->scb_flags=ScrollBar->scb_flags | FLAG_SCROLL_BAR_ORIENTATION_HORIZONTAL_ON;
  700.  
  701.         //fill data for first child button of scroller
  702.         ChildButton1Data.x=0;
  703.         ChildButton1Data.y=0;
  704.         ChildButton1Data.width=ScrollBar->ctrl_sizey;
  705.         ChildButton1Data.height=ChildButton1Data.width;
  706.  
  707.         //fill data for second child button of scroller
  708.         ChildButton2Data.x=ScrollBar->ctrl_sizex-ScrollBar->ctrl_sizey;
  709.         ChildButton2Data.y=0;
  710.         ChildButton2Data.width=ScrollBar->ctrl_sizey;
  711.         ChildButton2Data.height=ChildButton2Data.width;
  712.  
  713.         //fill data for scroll ruller button of scroller
  714.         ScrollRullerData.x=ScrollBar->ctrl_sizey;
  715.         ScrollRullerData.y=0;
  716.         ScrollRullerData.width=ScrollBar->ctrl_sizex-2*ScrollBar->ctrl_sizey;
  717.         ScrollRullerData.height=ScrollBar->ctrl_sizey;
  718.  
  719.         ChildButton1=CreateButton(&ChildButton1Data);
  720.         ChildButton2=CreateButton(&ChildButton2Data);
  721.         ScrollRuller=CreateButton(&ScrollRullerData);
  722.  
  723.         ChildButton1->flags=ChildButton1->flags &  FLAG_HIDE_CONTROL;
  724.         ChildButton2->flags=ChildButton2->flags &  FLAG_HIDE_CONTROL;
  725.         ScrollRuller->flags=ScrollRuller->flags &  FLAG_HIDE_CONTROL;
  726.  
  727.         SetCallbackFunction(ChildButton1,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForLeftButton_Pressed,ScrollBar);
  728.         SetCallbackFunction(ChildButton1,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForLeftButton_Released,ScrollBar);
  729.  
  730.         SetCallbackFunction(ChildButton2,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForRightButton_Pressed,ScrollBar);
  731.         SetCallbackFunction(ChildButton2,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForRightButton_Released,ScrollBar);
  732.  
  733.         SetCallbackFunction(ScrollRuller,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForScrollRullerPressed,ScrollBar);
  734.         SetCallbackFunction(ScrollRuller,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForScrollRullerReleased,ScrollBar);
  735.  
  736.         //pack button in control ScrollBar
  737.         PackControls(ScrollBar,ChildButton1);
  738.         PackControls(ScrollBar,ChildButton2);
  739.         PackControls(ScrollBar,ScrollRuller);
  740.  
  741.         return(ScrollBar);
  742. }
  743.  
  744. void* CreateVerticalScrollBar(struct ScrollBarData *info_for_control)
  745. {
  746.         struct ControlScrollBar *ScrollBar;
  747.         struct ControlButton    *ChildButton1;
  748.         struct ControlButton    *ChildButton2;
  749.         struct ControlButton    *ScrollRuller;
  750.         struct ButtonData               ChildButton1Data;
  751.         struct ButtonData               ChildButton2Data;
  752.         struct ButtonData               ScrollRullerData;
  753.  
  754.         ScrollBar=CreateScrollBar(info_for_control);
  755.         //set vertical orientation
  756.         ScrollBar->scb_flags=0;
  757.         ScrollBar->scb_flags=ScrollBar->scb_flags | FLAG_SCROLL_BAR_ORIENTATION_VERTICAL_ON;
  758.  
  759.         //fill data for first child button of scroller
  760.         ChildButton1Data.x=0;
  761.         ChildButton1Data.y=0;
  762.         ChildButton1Data.width=ScrollBar->ctrl_sizex;
  763.         ChildButton1Data.height=ChildButton1Data.width;
  764.  
  765.         //fill data for second child button of scroller
  766.         ChildButton2Data.x=0;
  767.         ChildButton2Data.y=ScrollBar->ctrl_sizey-ScrollBar->ctrl_sizex;
  768.         ChildButton2Data.width=ScrollBar->ctrl_sizex;
  769.         ChildButton2Data.height=ChildButton2Data.width;
  770.  
  771.         //fill data for scroll ruller button of scroller
  772.         ScrollRullerData.x=0;
  773.         ScrollRullerData.y=ScrollBar->ctrl_sizex;
  774.         ScrollRullerData.width=ScrollBar->ctrl_sizex;
  775.         ScrollRullerData.height=ScrollBar->ctrl_sizey-2*ScrollBar->ctrl_sizex;
  776.  
  777.         ChildButton1=CreateButton(&ChildButton1Data);
  778.         ChildButton2=CreateButton(&ChildButton2Data);
  779.         ScrollRuller=CreateButton(&ScrollRullerData);
  780.  
  781.         ChildButton1->flags=ChildButton1->flags &  FLAG_HIDE_CONTROL;
  782.         ChildButton2->flags=ChildButton2->flags &  FLAG_HIDE_CONTROL;
  783.         ScrollRuller->flags=ScrollRuller->flags &  FLAG_HIDE_CONTROL;
  784.  
  785.         SetCallbackFunction(ChildButton1,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForUpButton_Pressed,ScrollBar);
  786.         SetCallbackFunction(ChildButton1,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForUpButton_Released,ScrollBar);
  787.  
  788.         SetCallbackFunction(ChildButton2,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForDownButton_Pressed,ScrollBar);
  789.         SetCallbackFunction(ChildButton2,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForDownButton_Released,ScrollBar);
  790.  
  791.         SetCallbackFunction(ScrollRuller,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForScrollRullerPressed,ScrollBar);
  792.         SetCallbackFunction(ScrollRuller,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForScrollRullerReleased,ScrollBar);
  793.  
  794.         //pack button in control ScrollBar
  795.         PackControls(ScrollBar,ChildButton1);
  796.         PackControls(ScrollBar,ChildButton2);
  797.         PackControls(ScrollBar,ScrollRuller);
  798.  
  799.         return(ScrollBar);
  800. }
  801.  
  802.