mirror of
https://github.com/KolibriOS/kolibrios.git
synced 2024-12-15 11:22:34 +03:00
802 lines
31 KiB
PHP
802 lines
31 KiB
PHP
|
/*
|
||
|
control ScrollBar
|
||
|
*/
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// Draw Ruller
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void DrawRuller(struct ControlScrollBar *ScrollBar)
|
||
|
{
|
||
|
int x,y,sizex,sizey;
|
||
|
int scrollbar_size,ruller_size,ruller_pos;
|
||
|
struct FINITION *fin;
|
||
|
|
||
|
x=ScrollBar->ctrl_x;
|
||
|
y=ScrollBar->ctrl_y;
|
||
|
sizex=ScrollBar->ctrl_sizex;
|
||
|
sizey=ScrollBar->ctrl_sizey;
|
||
|
fin=(struct FINITION*)ScrollBar->finition;
|
||
|
|
||
|
if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_HORIZONTAL_ON)
|
||
|
{
|
||
|
scrollbar_size=sizex-sizey*2;
|
||
|
ruller_size=(int)(scrollbar_size*ScrollBar->ruller_size);
|
||
|
if (ruller_size<5) ruller_size=5;
|
||
|
if (ruller_size>sizex) ruller_size=sizex-2*sizey;
|
||
|
|
||
|
ruller_pos=x+sizey+(int)((scrollbar_size-ruller_size)*ScrollBar->ruller_pos);
|
||
|
//left bar
|
||
|
Draw(fin,TOOL_FILLED_RECTANGLE,x+sizey,y+1,ruller_pos-x-sizey,sizey-2,COLOR_FON);
|
||
|
//right bar
|
||
|
Draw(fin,TOOL_FILLED_RECTANGLE,ruller_pos+ruller_size,y+1,x+sizex-sizey-ruller_pos-ruller_size,sizey-2,COLOR_FON);
|
||
|
//roller
|
||
|
Draw(fin,TOOL_RECTANGLE,ruller_pos,y,ruller_size,sizey,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_FILLED_RECTANGLE,ruller_pos+1,y+1,ruller_size-2,sizey-2,COLOR_MIDDLE_LIGHT);
|
||
|
Draw(fin,TOOL_VERTICAL_LINE,ruller_pos+(ruller_size/2)-2,y+sizey/4,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_VERTICAL_LINE,ruller_pos+(ruller_size/2),y+sizey/4,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_VERTICAL_LINE,ruller_pos+(ruller_size/2)+2,y+sizey/4,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
|
||
|
}
|
||
|
|
||
|
if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_VERTICAL_ON)
|
||
|
{
|
||
|
scrollbar_size=sizey-sizex*2;
|
||
|
ruller_size=(int)(scrollbar_size*ScrollBar->ruller_size);
|
||
|
if (ruller_size<5) ruller_size=5;
|
||
|
if (ruller_size>sizey) ruller_size=sizey-2*sizex;
|
||
|
|
||
|
ruller_pos=y+sizex+(int)((scrollbar_size-ruller_size)*ScrollBar->ruller_pos);
|
||
|
//up bar
|
||
|
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+sizex,sizex-2,ruller_pos-y-sizex,COLOR_FON);
|
||
|
//down bar
|
||
|
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,ruller_pos+ruller_size,sizex-2,y+sizey-sizex-ruller_pos-ruller_size,COLOR_FON);
|
||
|
//roller
|
||
|
Draw(fin,TOOL_RECTANGLE,x,ruller_pos,sizex,ruller_size,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,ruller_pos+1,sizex-2,ruller_size-2,COLOR_MIDDLE_LIGHT);
|
||
|
Draw(fin,TOOL_HORIZONTAL_LINE,x+sizex/4,x+(3*sizex)/4,ruller_pos+(ruller_size/2)-2,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_HORIZONTAL_LINE,x+sizex/4,x+(3*sizex)/4,ruller_pos+(ruller_size/2),COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_HORIZONTAL_LINE,x+sizex/4,x+(3*sizex)/4,ruller_pos+(ruller_size/2)+2,COLOR_ABSOLUTE_DARK);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// Draw full Scroll Bar
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void DrawScrollBar(struct ControlScrollBar *ScrollBar)
|
||
|
{
|
||
|
int x,y,sizex,sizey;
|
||
|
struct FINITION *fin;
|
||
|
|
||
|
x=ScrollBar->ctrl_x;
|
||
|
y=ScrollBar->ctrl_y;
|
||
|
sizex=ScrollBar->ctrl_sizex;
|
||
|
sizey=ScrollBar->ctrl_sizey;
|
||
|
fin=(struct FINITION*)ScrollBar->finition;
|
||
|
|
||
|
if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_HORIZONTAL_ON)
|
||
|
{
|
||
|
|
||
|
//draw child buttons and roller
|
||
|
Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizey,COLOR_ABSOLUTE_DARK);
|
||
|
//left button
|
||
|
Draw(fin,TOOL_RECTANGLE,x,y,sizey,sizey,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizey-2,sizey-2,COLOR_MIDDLE_LIGHT);
|
||
|
//left arrow of left button
|
||
|
Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
|
||
|
//right button
|
||
|
Draw(fin,TOOL_RECTANGLE,x+sizex-sizey,y,sizey,sizey,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_FILLED_RECTANGLE,x+sizex-sizey+1,y+1,sizey-2,sizey-2,COLOR_MIDDLE_LIGHT);
|
||
|
//right arrow of right button
|
||
|
Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
|
||
|
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);
|
||
|
//roller
|
||
|
DrawRuller(ScrollBar);
|
||
|
}
|
||
|
|
||
|
if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_VERTICAL_ON)
|
||
|
{
|
||
|
//draw child buttons and roller
|
||
|
Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizey,COLOR_ABSOLUTE_DARK);
|
||
|
//up button
|
||
|
Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizex,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizex-2,sizex-2,COLOR_MIDDLE_LIGHT);
|
||
|
//up arrow of up button
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+sizex/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+(3*sizex)/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+sizex/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+(3*sizex)/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
//down button
|
||
|
Draw(fin,TOOL_RECTANGLE,x,y+sizey-sizex,sizex,sizex,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+sizey-sizex+1,sizex-2,sizex-2,COLOR_MIDDLE_LIGHT);
|
||
|
//down arrow of down button
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+sizex/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+(3*sizex)/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+sizex/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
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);
|
||
|
//roller
|
||
|
DrawRuller(ScrollBar);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// Vertical Scroll Bar
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// animation of up button of Scroll Bar
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void ScrollBar_DrawPressedUpButton(struct ControlScrollBar *ScrollBar)
|
||
|
{
|
||
|
int x,y,sizex,sizey;
|
||
|
struct FINITION *fin;
|
||
|
|
||
|
x=ScrollBar->ctrl_x;
|
||
|
y=ScrollBar->ctrl_y;
|
||
|
sizex=ScrollBar->ctrl_sizex;
|
||
|
sizey=ScrollBar->ctrl_sizey;
|
||
|
fin=(struct FINITION*)ScrollBar->finition;
|
||
|
|
||
|
//up button
|
||
|
Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizex,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizex-2,sizex-2,COLOR_FON);
|
||
|
//up arrow of up button
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+sizex/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+(3*sizex)/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+sizex/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+(3*sizex)/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
}
|
||
|
|
||
|
void ScrollBar_DrawReleasedUpButton(struct ControlScrollBar *ScrollBar)
|
||
|
{
|
||
|
int x,y,sizex,sizey;
|
||
|
struct FINITION *fin;
|
||
|
|
||
|
x=ScrollBar->ctrl_x;
|
||
|
y=ScrollBar->ctrl_y;
|
||
|
sizex=ScrollBar->ctrl_sizex;
|
||
|
sizey=ScrollBar->ctrl_sizey;
|
||
|
fin=(struct FINITION*)ScrollBar->finition;
|
||
|
|
||
|
//up button
|
||
|
Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizex,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizex-2,sizex-2,COLOR_MIDDLE_LIGHT);
|
||
|
//up arrow of up button
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+sizex/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+(3*sizex)/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+sizex/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+(3*sizex)/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// animation of down button of Scroll Bar
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void ScrollBar_DrawPressedDownButton(struct ControlScrollBar *ScrollBar)
|
||
|
{
|
||
|
int x,y,sizex,sizey;
|
||
|
struct FINITION *fin;
|
||
|
|
||
|
x=ScrollBar->ctrl_x;
|
||
|
y=ScrollBar->ctrl_y;
|
||
|
sizex=ScrollBar->ctrl_sizex;
|
||
|
sizey=ScrollBar->ctrl_sizey;
|
||
|
fin=(struct FINITION*)ScrollBar->finition;
|
||
|
|
||
|
//down button
|
||
|
Draw(fin,TOOL_RECTANGLE,x,y+sizey-sizex,sizex,sizex,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+sizey-sizex+1,sizex-2,sizex-2,COLOR_FON);
|
||
|
//down arrow of down button
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+sizex/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+(3*sizex)/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+sizex/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
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);
|
||
|
}
|
||
|
|
||
|
void ScrollBar_DrawReleasedDownButton(struct ControlScrollBar *ScrollBar)
|
||
|
{
|
||
|
int x,y,sizex,sizey;
|
||
|
struct FINITION *fin;
|
||
|
|
||
|
x=ScrollBar->ctrl_x;
|
||
|
y=ScrollBar->ctrl_y;
|
||
|
sizex=ScrollBar->ctrl_sizex;
|
||
|
sizey=ScrollBar->ctrl_sizey;
|
||
|
fin=(struct FINITION*)ScrollBar->finition;
|
||
|
|
||
|
//down button
|
||
|
Draw(fin,TOOL_RECTANGLE,x,y+sizey-sizex,sizex,sizex,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+sizey-sizex+1,sizex-2,sizex-2,COLOR_MIDDLE_LIGHT);
|
||
|
//down arrow of down button
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+sizex/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+(3*sizex)/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+sizex/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
|
||
|
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);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// callback function for up button of Scroll Bar
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void ScrollBar_FuncCallbackForUpButton_Pressed(struct HEADER *control,void *data)
|
||
|
{
|
||
|
struct ControlScrollBar *ScrollBar;
|
||
|
struct HEADERPARENT *main_parent;
|
||
|
|
||
|
ScrollBar=(struct ControlScrollBar*)data;
|
||
|
if (ScrollBar->ruller_size!=1.0)
|
||
|
{
|
||
|
ScrollBar->ruller_pos=ScrollBar->ruller_pos-ScrollBar->ruller_step;
|
||
|
}
|
||
|
if (ScrollBar->ruller_pos<0.0) ScrollBar->ruller_pos=0.0;
|
||
|
ScrollBar_DrawPressedUpButton(ScrollBar);
|
||
|
|
||
|
if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
|
||
|
{
|
||
|
main_parent=(struct HEADERPARENT*)ScrollBar->main_parent;
|
||
|
ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
|
||
|
main_parent->control_for_callback_function[main_parent->number_callbacks]=
|
||
|
(DWORD*)ScrollBar;
|
||
|
main_parent->callback_for_control_callback[main_parent->number_callbacks]=
|
||
|
(DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
|
||
|
main_parent->number_callbacks++;
|
||
|
}
|
||
|
DrawRuller(ScrollBar);
|
||
|
}
|
||
|
|
||
|
void ScrollBar_FuncCallbackForUpButton_Released(struct HEADER *control,void *data)
|
||
|
{
|
||
|
struct ControlScrollBar *ScrollBar;
|
||
|
|
||
|
ScrollBar=(struct ControlScrollBar*)data;
|
||
|
ScrollBar_DrawReleasedUpButton(ScrollBar);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// callback function for down button of Scroll Bar
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void ScrollBar_FuncCallbackForDownButton_Pressed(struct HEADER *control,void *data)
|
||
|
{
|
||
|
struct ControlScrollBar *ScrollBar;
|
||
|
struct HEADERPARENT *main_parent;
|
||
|
|
||
|
ScrollBar=(struct ControlScrollBar*)data;
|
||
|
if (ScrollBar->ruller_size!=1.0)
|
||
|
{
|
||
|
ScrollBar->ruller_pos=ScrollBar->ruller_pos+ScrollBar->ruller_step;
|
||
|
}
|
||
|
if (ScrollBar->ruller_pos>1.0) ScrollBar->ruller_pos=1.0;
|
||
|
ScrollBar_DrawPressedDownButton(ScrollBar);
|
||
|
|
||
|
if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
|
||
|
{
|
||
|
main_parent=(struct HEADERPARENT*)ScrollBar->main_parent;
|
||
|
ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
|
||
|
main_parent->control_for_callback_function[main_parent->number_callbacks]=
|
||
|
(DWORD*)ScrollBar;
|
||
|
main_parent->callback_for_control_callback[main_parent->number_callbacks]=
|
||
|
(DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
|
||
|
main_parent->number_callbacks++;
|
||
|
}
|
||
|
DrawRuller(ScrollBar);
|
||
|
}
|
||
|
|
||
|
void ScrollBar_FuncCallbackForDownButton_Released(struct HEADER *control,void *data)
|
||
|
{
|
||
|
struct ControlScrollBar *ScrollBar;
|
||
|
|
||
|
ScrollBar=(struct ControlScrollBar*)data;
|
||
|
ScrollBar_DrawReleasedDownButton(ScrollBar);
|
||
|
DrawRuller(ScrollBar);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// Horizontal Scroll Bar
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// animation of left button of Scroll Bar
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void ScrollBar_DrawPressedLeftButton(struct ControlScrollBar *ScrollBar)
|
||
|
{
|
||
|
int x,y,sizex,sizey;
|
||
|
struct FINITION *fin;
|
||
|
|
||
|
x=ScrollBar->ctrl_x;
|
||
|
y=ScrollBar->ctrl_y;
|
||
|
sizex=ScrollBar->ctrl_sizex;
|
||
|
sizey=ScrollBar->ctrl_sizey;
|
||
|
fin=(struct FINITION*)ScrollBar->finition;
|
||
|
|
||
|
//left button
|
||
|
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizey-2,sizey-2,COLOR_FON);
|
||
|
//left arrow of left button
|
||
|
Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
|
||
|
}
|
||
|
|
||
|
void ScrollBar_DrawReleasedLeftButton(struct ControlScrollBar *ScrollBar)
|
||
|
{
|
||
|
int x,y,sizex,sizey;
|
||
|
struct FINITION *fin;
|
||
|
|
||
|
x=ScrollBar->ctrl_x;
|
||
|
y=ScrollBar->ctrl_y;
|
||
|
sizex=ScrollBar->ctrl_sizex;
|
||
|
sizey=ScrollBar->ctrl_sizey;
|
||
|
fin=(struct FINITION*)ScrollBar->finition;
|
||
|
|
||
|
//left button
|
||
|
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizey-2,sizey-2,COLOR_MIDDLE_LIGHT);
|
||
|
//left arrow of left button
|
||
|
Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// animation of right button of Scroll Bar
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void ScrollBar_DrawPressedRightButton(struct ControlScrollBar *ScrollBar)
|
||
|
{
|
||
|
int x,y,sizex,sizey;
|
||
|
struct FINITION *fin;
|
||
|
|
||
|
x=ScrollBar->ctrl_x;
|
||
|
y=ScrollBar->ctrl_y;
|
||
|
sizex=ScrollBar->ctrl_sizex;
|
||
|
sizey=ScrollBar->ctrl_sizey;
|
||
|
fin=(struct FINITION*)ScrollBar->finition;
|
||
|
|
||
|
//right button
|
||
|
Draw(fin,TOOL_FILLED_RECTANGLE,x+sizex-sizey+1,y+1,sizey-2,sizey-2,COLOR_FON);
|
||
|
//right arrow of right button
|
||
|
Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
|
||
|
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);
|
||
|
}
|
||
|
|
||
|
void ScrollBar_DrawReleasedRightButton(struct ControlScrollBar *ScrollBar)
|
||
|
{
|
||
|
int x,y,sizex,sizey;
|
||
|
struct FINITION *fin;
|
||
|
|
||
|
x=ScrollBar->ctrl_x;
|
||
|
y=ScrollBar->ctrl_y;
|
||
|
sizex=ScrollBar->ctrl_sizex;
|
||
|
sizey=ScrollBar->ctrl_sizey;
|
||
|
fin=(struct FINITION*)ScrollBar->finition;
|
||
|
|
||
|
//right button
|
||
|
Draw(fin,TOOL_FILLED_RECTANGLE,x+sizex-sizey+1,y+1,sizey-2,sizey-2,COLOR_MIDDLE_LIGHT);
|
||
|
//right arrow of right button
|
||
|
Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
|
||
|
Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
|
||
|
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);
|
||
|
}
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// callback function for left button of Scroll Bar
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void ScrollBar_FuncCallbackForLeftButton_Pressed(struct HEADER *control,void *data)
|
||
|
{
|
||
|
struct ControlScrollBar *ScrollBar;
|
||
|
struct HEADERPARENT *main_parent;
|
||
|
|
||
|
ScrollBar=(struct ControlScrollBar*)data;
|
||
|
if (ScrollBar->ruller_size!=1.0)
|
||
|
{
|
||
|
ScrollBar->ruller_pos=ScrollBar->ruller_pos-ScrollBar->ruller_step;
|
||
|
}
|
||
|
if (ScrollBar->ruller_pos<0.0) ScrollBar->ruller_pos=0.0;
|
||
|
ScrollBar_DrawPressedLeftButton(ScrollBar);
|
||
|
|
||
|
if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
|
||
|
{
|
||
|
main_parent=(struct HEADERPARENT*)ScrollBar->main_parent;
|
||
|
ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
|
||
|
main_parent->control_for_callback_function[main_parent->number_callbacks]=
|
||
|
(DWORD*)ScrollBar;
|
||
|
main_parent->callback_for_control_callback[main_parent->number_callbacks]=
|
||
|
(DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
|
||
|
main_parent->number_callbacks++;
|
||
|
}
|
||
|
DrawRuller(ScrollBar);
|
||
|
}
|
||
|
|
||
|
void ScrollBar_FuncCallbackForLeftButton_Released(struct HEADER *control,void *data)
|
||
|
{
|
||
|
struct ControlScrollBar *ScrollBar;
|
||
|
|
||
|
ScrollBar=(struct ControlScrollBar*)data;
|
||
|
ScrollBar_DrawReleasedLeftButton(ScrollBar);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// callback function for right button of Scroll Bar
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void ScrollBar_FuncCallbackForRightButton_Pressed(struct HEADER *control,void *data)
|
||
|
{
|
||
|
struct ControlScrollBar *ScrollBar;
|
||
|
struct HEADERPARENT *main_parent;
|
||
|
|
||
|
ScrollBar=(struct ControlScrollBar*)data;
|
||
|
if (ScrollBar->ruller_size!=1.0)
|
||
|
{
|
||
|
ScrollBar->ruller_pos=ScrollBar->ruller_pos+ScrollBar->ruller_step;
|
||
|
}
|
||
|
if (ScrollBar->ruller_pos>1.0) ScrollBar->ruller_pos=1.0;
|
||
|
ScrollBar_DrawPressedRightButton(ScrollBar);
|
||
|
|
||
|
if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
|
||
|
{
|
||
|
main_parent=(struct HEADERPARENT*)ScrollBar->main_parent;
|
||
|
ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
|
||
|
main_parent->control_for_callback_function[main_parent->number_callbacks]=
|
||
|
(DWORD*)ScrollBar;
|
||
|
main_parent->callback_for_control_callback[main_parent->number_callbacks]=
|
||
|
(DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
|
||
|
main_parent->number_callbacks++;
|
||
|
}
|
||
|
DrawRuller(ScrollBar);
|
||
|
}
|
||
|
|
||
|
void ScrollBar_FuncCallbackForRightButton_Released(struct HEADER *control,void *data)
|
||
|
{
|
||
|
struct ControlScrollBar *ScrollBar;
|
||
|
|
||
|
ScrollBar=(struct ControlScrollBar*)data;
|
||
|
ScrollBar_DrawReleasedRightButton(ScrollBar);
|
||
|
DrawRuller(ScrollBar);
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
// callback function for ruller bar button of Scroll Bar
|
||
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
void ScrollBar_FuncCallbackForScrollRullerPressed(struct HEADER *control,void *data)
|
||
|
{
|
||
|
struct ControlScrollBar *ScrollBar;
|
||
|
|
||
|
ScrollBar=(struct ControlScrollBar*)data;
|
||
|
ScrollBar->scb_flags=ScrollBar->scb_flags | FLAG_SCROLL_RULLER_PRESSED;
|
||
|
}
|
||
|
|
||
|
void ScrollBar_FuncCallbackForScrollRullerReleased(struct HEADER *control,void *data)
|
||
|
{
|
||
|
struct ControlScrollBar *ScrollBar;
|
||
|
|
||
|
ScrollBar=(struct ControlScrollBar*)data;
|
||
|
ScrollBar->scb_flags=ScrollBar->scb_flags & FLAG_SCROLL_RULLER_RELEASED;
|
||
|
}
|
||
|
|
||
|
//---------------------------------------------------------------------------------
|
||
|
// control ScrollBar
|
||
|
//---------------------------------------------------------------------------------
|
||
|
void ScrollBarProc(struct ControlScrollBar *ScrollBar,struct MESSAGE *message)
|
||
|
{
|
||
|
int mx,my;
|
||
|
char mouse_buttons_state;
|
||
|
int x,y,sizex,sizey;
|
||
|
int scrollbar_size,ruller_size,ruller_pos;
|
||
|
int ruller_min,ruller_max;
|
||
|
float max_pos,current_pos,last_ruller_pos;
|
||
|
struct FINITION *fin;
|
||
|
struct TIMER *timer;
|
||
|
struct HEADERPARENT *main_parent;
|
||
|
|
||
|
x=ScrollBar->ctrl_x;
|
||
|
y=ScrollBar->ctrl_y;
|
||
|
sizex=ScrollBar->ctrl_sizex;
|
||
|
sizey=ScrollBar->ctrl_sizey;
|
||
|
|
||
|
switch(message->type)
|
||
|
{
|
||
|
case MESSAGE_FULL_REDRAW_ALL:
|
||
|
{
|
||
|
//draw ScrollBar
|
||
|
if (ScrollBar->flags & FLAG_SHOW_CONTROL) DrawScrollBar(ScrollBar);
|
||
|
break;
|
||
|
}
|
||
|
case MESSAGE_FULL_REDRAW_ALL_WITH_FINITION:
|
||
|
{
|
||
|
fin=(struct FINITION*)ScrollBar->finition;
|
||
|
fin->flags=fin->flags | FINITION_ON;
|
||
|
fin->x=message->arg1;
|
||
|
fin->y=message->arg2;
|
||
|
fin->sizex=message->arg3;
|
||
|
fin->sizey=message->arg4;
|
||
|
DrawScrollBar(ScrollBar);
|
||
|
break;
|
||
|
}
|
||
|
case MESSAGE_SPECIALIZED:
|
||
|
{
|
||
|
if (ScrollBar->flags & FLAG_GET_SPECIALIZED_MESSAGE_ON)
|
||
|
{
|
||
|
if (ScrollBar->flags & FLAG_SHOW_CONTROL) DrawScrollBar(ScrollBar);
|
||
|
ScrollBar->flags=ScrollBar->flags & FLAG_GET_SPECIALIZED_MESSAGE_OFF;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case MESSAGE_MOUSE_EVENT:
|
||
|
{
|
||
|
mx=message->arg1;
|
||
|
my=message->arg2;
|
||
|
mouse_buttons_state=message->arg3;
|
||
|
main_parent=(struct HEADERPARENT*)ScrollBar->main_parent;
|
||
|
|
||
|
//check ruller state
|
||
|
if (ScrollBar->scb_flags & FLAG_SCROLL_RULLER_PRESSED)
|
||
|
{ // horizontal ScrollBar
|
||
|
if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_HORIZONTAL_ON)
|
||
|
{
|
||
|
scrollbar_size=sizex-sizey*2;
|
||
|
ruller_size=scrollbar_size*ScrollBar->ruller_size;
|
||
|
if (ruller_size<5) ruller_size=5;
|
||
|
|
||
|
ruller_min=x+sizey; //minimum x
|
||
|
ruller_max=ruller_min+scrollbar_size-ruller_size;
|
||
|
ruller_pos=mx-(ruller_size/2);//ruller centred under mouse pointer
|
||
|
|
||
|
if (ruller_pos<ruller_min) ruller_pos=ruller_min;
|
||
|
if (ruller_pos>ruller_max) ruller_pos=ruller_max;
|
||
|
|
||
|
if (ruller_max!=ruller_min)
|
||
|
{
|
||
|
max_pos=(float)(ruller_max-ruller_min);
|
||
|
current_pos=(float)(ruller_pos-ruller_min);
|
||
|
last_ruller_pos=ScrollBar->ruller_pos;
|
||
|
ScrollBar->ruller_pos=current_pos/max_pos;
|
||
|
}
|
||
|
else {ScrollBar->ruller_pos=0.0;}
|
||
|
|
||
|
if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
|
||
|
{
|
||
|
if (ScrollBar->ruller_pos!=last_ruller_pos)
|
||
|
{
|
||
|
ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
|
||
|
main_parent->control_for_callback_function[main_parent->number_callbacks]=
|
||
|
(DWORD*)ScrollBar;
|
||
|
main_parent->callback_for_control_callback[main_parent->number_callbacks]=
|
||
|
(DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
|
||
|
main_parent->number_callbacks++;
|
||
|
}
|
||
|
}
|
||
|
if (ScrollBar->ruller_pos!=last_ruller_pos) DrawRuller(ScrollBar);
|
||
|
break;
|
||
|
}
|
||
|
// vertical ScrollBar
|
||
|
if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_VERTICAL_ON)
|
||
|
{
|
||
|
scrollbar_size=sizey-sizex*2;
|
||
|
ruller_size=scrollbar_size*ScrollBar->ruller_size;
|
||
|
if (ruller_size<5) ruller_size=5;
|
||
|
|
||
|
ruller_min=y+sizex; //minimum x
|
||
|
ruller_max=ruller_min+scrollbar_size-ruller_size;
|
||
|
ruller_pos=my-(ruller_size/2);//ruller centred under mouse pointer
|
||
|
|
||
|
if (ruller_pos<ruller_min) ruller_pos=ruller_min;
|
||
|
if (ruller_pos>ruller_max) ruller_pos=ruller_max;
|
||
|
|
||
|
if (ruller_max!=ruller_min)
|
||
|
{
|
||
|
max_pos=(float)(ruller_max-ruller_min);
|
||
|
current_pos=(float)(ruller_pos-ruller_min);
|
||
|
last_ruller_pos=ScrollBar->ruller_pos;
|
||
|
ScrollBar->ruller_pos=current_pos/max_pos;
|
||
|
}
|
||
|
else {ScrollBar->ruller_pos=0.0;}
|
||
|
|
||
|
if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
|
||
|
{
|
||
|
if (ScrollBar->ruller_pos!=last_ruller_pos)
|
||
|
{
|
||
|
ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
|
||
|
main_parent->control_for_callback_function[main_parent->number_callbacks]=
|
||
|
(DWORD*)ScrollBar;
|
||
|
main_parent->callback_for_control_callback[main_parent->number_callbacks]=
|
||
|
(DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
|
||
|
main_parent->number_callbacks++;
|
||
|
}
|
||
|
}
|
||
|
if (ScrollBar->ruller_pos!=last_ruller_pos) DrawRuller(ScrollBar);
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case MESSAGE_CHANGE_POSITION_EVENT:
|
||
|
{
|
||
|
ScrollBar->ctrl_x=ScrollBar->ctrl_x+message->arg1;
|
||
|
ScrollBar->ctrl_y=ScrollBar->ctrl_y+message->arg2;
|
||
|
break;
|
||
|
}
|
||
|
case MESSAGE_CALL_TIMER_EVENT:
|
||
|
{
|
||
|
if (ScrollBar->timer!=(DWORD*)NULL)
|
||
|
{
|
||
|
timer=(struct TIMER*)ScrollBar->timer;
|
||
|
if (timer->flags & FLAG_TIMER_ON) Timer(timer);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case MESSAGE_DESTROY_CONTROL:
|
||
|
{
|
||
|
if (ScrollBar->timer!=(DWORD*)NULL) free(ScrollBar->timer);
|
||
|
free(ScrollBar->finition);
|
||
|
break;
|
||
|
}
|
||
|
case MESSAGE_SET_MAIN_PARENT:
|
||
|
{
|
||
|
SendMessage((struct HEADER*)ScrollBar,message);
|
||
|
ScrollBar->main_parent=(DWORD*)message->arg1;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
default: break;
|
||
|
}
|
||
|
//send message to child controls(if there is)
|
||
|
SendMessage((struct HEADER*)ScrollBar,message);
|
||
|
}
|
||
|
|
||
|
//---------------------------------------------------------------------------------
|
||
|
// create control ScrollBar
|
||
|
//---------------------------------------------------------------------------------
|
||
|
void* CreateScrollBar(struct ScrollBarData *info_for_control)
|
||
|
{
|
||
|
struct ControlScrollBar *ScrollBar;
|
||
|
struct FINITION *fin;
|
||
|
|
||
|
ScrollBar=malloc(sizeof(struct ControlScrollBar));
|
||
|
ScrollBar->finition=malloc(sizeof(struct FINITION));
|
||
|
fin=(struct FINITION*)ScrollBar->finition;
|
||
|
fin->flags=0;
|
||
|
|
||
|
ID++;
|
||
|
#ifdef DEBUG
|
||
|
printf("\ncreated scroll bar with ID=%d",(int)ID);
|
||
|
#endif
|
||
|
ScrollBar->child_bk=(DWORD*)NULL;
|
||
|
ScrollBar->child_fd=(DWORD*)NULL;
|
||
|
ScrollBar->active_control_for_keys=(DWORD*)NULL;
|
||
|
ScrollBar->active_control_for_mouse=(DWORD*)NULL;
|
||
|
ScrollBar->callback=(DWORD*)NULL;
|
||
|
ScrollBar->timer=(DWORD*)NULL;
|
||
|
|
||
|
ScrollBar->ctrl_proc=(DWORD*)&ScrollBarProc;
|
||
|
ScrollBar->ctrl_x=(DWORD)info_for_control->x;
|
||
|
ScrollBar->ctrl_y=(DWORD)info_for_control->y;
|
||
|
ScrollBar->ctrl_sizex=(DWORD)info_for_control->width;
|
||
|
ScrollBar->ctrl_sizey=(DWORD)info_for_control->height;
|
||
|
ScrollBar->ctrl_ID=ID;
|
||
|
ScrollBar->ruller_size=info_for_control->ruller_size;
|
||
|
ScrollBar->ruller_pos=info_for_control->ruller_pos;
|
||
|
ScrollBar->ruller_step=info_for_control->ruller_step;
|
||
|
ScrollBar->flags=0;
|
||
|
ScrollBar->flags=ScrollBar->flags | FLAG_SHOW_CONTROL;
|
||
|
|
||
|
return(ScrollBar);
|
||
|
}
|
||
|
|
||
|
void* CreateHorizontalScrollBar(struct ScrollBarData *info_for_control)
|
||
|
{
|
||
|
struct ControlScrollBar *ScrollBar;
|
||
|
struct ControlButton *ChildButton1;
|
||
|
struct ControlButton *ChildButton2;
|
||
|
struct ControlButton *ScrollRuller;
|
||
|
struct ButtonData ChildButton1Data;
|
||
|
struct ButtonData ChildButton2Data;
|
||
|
struct ButtonData ScrollRullerData;
|
||
|
|
||
|
ScrollBar=CreateScrollBar(info_for_control);
|
||
|
//set horizontal orientation
|
||
|
ScrollBar->scb_flags=0;
|
||
|
ScrollBar->scb_flags=ScrollBar->scb_flags | FLAG_SCROLL_BAR_ORIENTATION_HORIZONTAL_ON;
|
||
|
|
||
|
//fill data for first child button of scroller
|
||
|
ChildButton1Data.x=0;
|
||
|
ChildButton1Data.y=0;
|
||
|
ChildButton1Data.width=ScrollBar->ctrl_sizey;
|
||
|
ChildButton1Data.height=ChildButton1Data.width;
|
||
|
|
||
|
//fill data for second child button of scroller
|
||
|
ChildButton2Data.x=ScrollBar->ctrl_sizex-ScrollBar->ctrl_sizey;
|
||
|
ChildButton2Data.y=0;
|
||
|
ChildButton2Data.width=ScrollBar->ctrl_sizey;
|
||
|
ChildButton2Data.height=ChildButton2Data.width;
|
||
|
|
||
|
//fill data for scroll ruller button of scroller
|
||
|
ScrollRullerData.x=ScrollBar->ctrl_sizey;
|
||
|
ScrollRullerData.y=0;
|
||
|
ScrollRullerData.width=ScrollBar->ctrl_sizex-2*ScrollBar->ctrl_sizey;
|
||
|
ScrollRullerData.height=ScrollBar->ctrl_sizey;
|
||
|
|
||
|
ChildButton1=CreateButton(&ChildButton1Data);
|
||
|
ChildButton2=CreateButton(&ChildButton2Data);
|
||
|
ScrollRuller=CreateButton(&ScrollRullerData);
|
||
|
|
||
|
ChildButton1->flags=ChildButton1->flags & FLAG_HIDE_CONTROL;
|
||
|
ChildButton2->flags=ChildButton2->flags & FLAG_HIDE_CONTROL;
|
||
|
ScrollRuller->flags=ScrollRuller->flags & FLAG_HIDE_CONTROL;
|
||
|
|
||
|
SetCallbackFunction(ChildButton1,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForLeftButton_Pressed,ScrollBar);
|
||
|
SetCallbackFunction(ChildButton1,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForLeftButton_Released,ScrollBar);
|
||
|
|
||
|
SetCallbackFunction(ChildButton2,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForRightButton_Pressed,ScrollBar);
|
||
|
SetCallbackFunction(ChildButton2,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForRightButton_Released,ScrollBar);
|
||
|
|
||
|
SetCallbackFunction(ScrollRuller,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForScrollRullerPressed,ScrollBar);
|
||
|
SetCallbackFunction(ScrollRuller,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForScrollRullerReleased,ScrollBar);
|
||
|
|
||
|
//pack button in control ScrollBar
|
||
|
PackControls(ScrollBar,ChildButton1);
|
||
|
PackControls(ScrollBar,ChildButton2);
|
||
|
PackControls(ScrollBar,ScrollRuller);
|
||
|
|
||
|
return(ScrollBar);
|
||
|
}
|
||
|
|
||
|
void* CreateVerticalScrollBar(struct ScrollBarData *info_for_control)
|
||
|
{
|
||
|
struct ControlScrollBar *ScrollBar;
|
||
|
struct ControlButton *ChildButton1;
|
||
|
struct ControlButton *ChildButton2;
|
||
|
struct ControlButton *ScrollRuller;
|
||
|
struct ButtonData ChildButton1Data;
|
||
|
struct ButtonData ChildButton2Data;
|
||
|
struct ButtonData ScrollRullerData;
|
||
|
|
||
|
ScrollBar=CreateScrollBar(info_for_control);
|
||
|
//set vertical orientation
|
||
|
ScrollBar->scb_flags=0;
|
||
|
ScrollBar->scb_flags=ScrollBar->scb_flags | FLAG_SCROLL_BAR_ORIENTATION_VERTICAL_ON;
|
||
|
|
||
|
//fill data for first child button of scroller
|
||
|
ChildButton1Data.x=0;
|
||
|
ChildButton1Data.y=0;
|
||
|
ChildButton1Data.width=ScrollBar->ctrl_sizex;
|
||
|
ChildButton1Data.height=ChildButton1Data.width;
|
||
|
|
||
|
//fill data for second child button of scroller
|
||
|
ChildButton2Data.x=0;
|
||
|
ChildButton2Data.y=ScrollBar->ctrl_sizey-ScrollBar->ctrl_sizex;
|
||
|
ChildButton2Data.width=ScrollBar->ctrl_sizex;
|
||
|
ChildButton2Data.height=ChildButton2Data.width;
|
||
|
|
||
|
//fill data for scroll ruller button of scroller
|
||
|
ScrollRullerData.x=0;
|
||
|
ScrollRullerData.y=ScrollBar->ctrl_sizex;
|
||
|
ScrollRullerData.width=ScrollBar->ctrl_sizex;
|
||
|
ScrollRullerData.height=ScrollBar->ctrl_sizey-2*ScrollBar->ctrl_sizex;
|
||
|
|
||
|
ChildButton1=CreateButton(&ChildButton1Data);
|
||
|
ChildButton2=CreateButton(&ChildButton2Data);
|
||
|
ScrollRuller=CreateButton(&ScrollRullerData);
|
||
|
|
||
|
ChildButton1->flags=ChildButton1->flags & FLAG_HIDE_CONTROL;
|
||
|
ChildButton2->flags=ChildButton2->flags & FLAG_HIDE_CONTROL;
|
||
|
ScrollRuller->flags=ScrollRuller->flags & FLAG_HIDE_CONTROL;
|
||
|
|
||
|
SetCallbackFunction(ChildButton1,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForUpButton_Pressed,ScrollBar);
|
||
|
SetCallbackFunction(ChildButton1,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForUpButton_Released,ScrollBar);
|
||
|
|
||
|
SetCallbackFunction(ChildButton2,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForDownButton_Pressed,ScrollBar);
|
||
|
SetCallbackFunction(ChildButton2,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForDownButton_Released,ScrollBar);
|
||
|
|
||
|
SetCallbackFunction(ScrollRuller,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForScrollRullerPressed,ScrollBar);
|
||
|
SetCallbackFunction(ScrollRuller,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForScrollRullerReleased,ScrollBar);
|
||
|
|
||
|
//pack button in control ScrollBar
|
||
|
PackControls(ScrollBar,ChildButton1);
|
||
|
PackControls(ScrollBar,ChildButton2);
|
||
|
PackControls(ScrollBar,ScrollRuller);
|
||
|
|
||
|
return(ScrollBar);
|
||
|
}
|
||
|
|