diff -urN TinyWidgetsold/include/tnRawWidget.h TinyWidgets/include/tnRawWidget.h --- TinyWidgetsold/include/tnRawWidget.h Mon Jun 11 12:39:28 2001 +++ TinyWidgets/include/tnRawWidget.h Tue Jun 12 11:39:29 2001 @@ -43,6 +43,7 @@ #define TN_SYSTEM_EVENT_UPDATE 11 #define TN_SYSTEM_EVENT_CHILD_UPDATE 12 #define TN_SYSTEM_EVENT_CLOSE_REQ 13 +#define TN_SYSTEM_EVENT_TIMER 14 diff -urN TinyWidgetsold/include/tnScrollBar.h TinyWidgets/include/tnScrollBar.h --- TinyWidgetsold/include/tnScrollBar.h Mon Jun 11 12:39:28 2001 +++ TinyWidgets/include/tnScrollBar.h Tue Jun 12 11:27:35 2001 @@ -24,6 +24,8 @@ #ifndef _TNSCROLLBAR_H_ #define _TNSCROLLBAR_H_ #define SCROLLBAR_CALLBACKS 1 +#define SCROLLBAR_TIMEOUT 50 + #define TN_SCROLLBAR_PAGESTEP 5 #define TN_SCROLLBAR_LINESTEP 1 #define TN_SCROLLBAR_MINVAL 0 @@ -65,6 +67,8 @@ GR_BOOL st_upleft_down; GR_BOOL st_downright_down; GR_BOOL st_thumb_down; + GR_BOOL st_pageup; + GR_TIMER_ID tid; CallBackStruct CallBack[SCROLLBAR_CALLBACKS]; /*ScrollBar CLICKED Callbacks*/ } diff -urN TinyWidgetsold/src/tnRawWidget.c TinyWidgets/src/tnRawWidget.c --- TinyWidgetsold/src/tnRawWidget.c Mon Jun 11 12:39:28 2001 +++ TinyWidgets/src/tnRawWidget.c Tue Jun 12 11:39:04 2001 @@ -72,6 +72,7 @@ GR_EVENT_MASK_UPDATE | GR_EVENT_MASK_CHLD_UPDATE | GR_EVENT_MASK_CLOSE_REQ | + GR_EVENT_MASK_TIMER | GR_EVENT_MASK_EXPOSURE ); return; @@ -123,6 +124,8 @@ case GR_EVENT_TYPE_CHLD_UPDATE: InvokeCallBack(widget,TN_SYSTEM_EVENT_CHILD_UPDATE); break; + case GR_EVENT_TYPE_TIMER: + InvokeCallBack(widget,TN_SYSTEM_EVENT_TIMER); case GR_EVENT_TYPE_CLOSE_REQ: InvokeCallBack(widget,TN_SYSTEM_EVENT_CLOSE_REQ); break; diff -urN TinyWidgetsold/src/tnScrollBar.c TinyWidgets/src/tnScrollBar.c --- TinyWidgetsold/src/tnScrollBar.c Mon Jun 11 12:39:28 2001 +++ TinyWidgets/src/tnScrollBar.c Tue Jun 12 11:28:59 2001 @@ -114,7 +114,7 @@ GrSelectEvents (widget->wid, GR_EVENT_MASK_BUTTON_UP | GR_EVENT_MASK_BUTTON_DOWN | - GR_EVENT_MASK_EXPOSURE); + GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_TIMER ); GrSelectEvents (widget->WSpec.scrollbar.upleft,0); GrSelectEvents (widget->WSpec.scrollbar.downright,0); GrSelectEvents (widget->WSpec.scrollbar.thumb,0); @@ -150,6 +150,7 @@ widget->WSpec.scrollbar.thumbpos-=widget->WSpec.scrollbar.linestep; else widget->WSpec.scrollbar.thumbpos = widget->WSpec.scrollbar.minval; + widget->WSpec.scrollbar.tid=GrCreateTimer(widget->wid,SCROLLBAR_TIMEOUT); } else if(event->button.subwid == widget->WSpec.scrollbar.downright) @@ -160,6 +161,7 @@ widget->WSpec.scrollbar.thumbpos+=widget->WSpec.scrollbar.linestep; else widget->WSpec.scrollbar.thumbpos = widget->WSpec.scrollbar.maxval; + widget->WSpec.scrollbar.tid=GrCreateTimer(widget->wid,SCROLLBAR_TIMEOUT); } else if(event->button.subwid==widget->WSpec.scrollbar.thumb) { @@ -180,6 +182,7 @@ widget->WSpec.scrollbar.thumbpos-=widget->WSpec.scrollbar.pagestep; else widget->WSpec.scrollbar.thumbpos = min; + widget->WSpec.scrollbar.st_pageup=GR_FALSE; } else { @@ -188,7 +191,9 @@ widget->WSpec.scrollbar.thumbpos+=widget->WSpec.scrollbar.pagestep; else widget->WSpec.scrollbar.thumbpos = max; + widget->WSpec.scrollbar.st_pageup=GR_TRUE; } + widget->WSpec.scrollbar.tid=GrCreateTimer(widget->wid,SCROLLBAR_TIMEOUT); } if(range!=0) @@ -209,6 +214,8 @@ break; widget->WSpec.scrollbar.st_upleft_down=GR_FALSE; widget->WSpec.scrollbar.st_downright_down=GR_FALSE; + widget->WSpec.scrollbar.st_pageup=GR_FALSE; + GrDestroyTimer(widget->WSpec.scrollbar.tid); if(widget->WSpec.scrollbar.st_thumb_down&&event->button.subwid!=widget->WSpec.scrollbar.thumb) { /*Calculate new thumbpos based on released location*/ @@ -244,10 +251,64 @@ widget->WSpec.scrollbar. CallBack[CLICKED].dptr); } break; + case GR_EVENT_TYPE_TIMER: + if(widget->WSpec.scrollbar.st_upleft_down==GR_TRUE) + { + widget->WSpec.scrollbar.LastScrollEvent=TN_SCROLL_LINEDOWN; + if((widget->WSpec.scrollbar.thumbpos - widget->WSpec.scrollbar.linestep) >= min) + widget->WSpec.scrollbar.thumbpos-=widget->WSpec.scrollbar.linestep; + else + widget->WSpec.scrollbar.thumbpos = widget->WSpec.scrollbar.minval; + + } + + else if(widget->WSpec.scrollbar.st_downright_down==GR_TRUE) + { + /*st_downright_down==GR_TRUE*/ + widget->WSpec.scrollbar.LastScrollEvent=TN_SCROLL_LINEUP; + if( (widget->WSpec.scrollbar.thumbpos + widget->WSpec.scrollbar.linestep) <= max) + widget->WSpec.scrollbar.thumbpos+=widget->WSpec.scrollbar.linestep; + else + widget->WSpec.scrollbar.thumbpos = widget->WSpec.scrollbar.maxval; + } + + else + { + /*pageup or pagedown*/ + if(widget->WSpec.scrollbar.st_pageup==GR_FALSE) + { + widget->WSpec.scrollbar.LastScrollEvent=TN_SCROLL_PAGEDOWN; + if( (widget->WSpec.scrollbar.thumbpos - widget->WSpec.scrollbar.pagestep) >= min) + widget->WSpec.scrollbar.thumbpos-=widget->WSpec.scrollbar.pagestep; + else + widget->WSpec.scrollbar.thumbpos = min; + } + else + { + widget->WSpec.scrollbar.LastScrollEvent=TN_SCROLL_PAGEUP; + if( (widget->WSpec.scrollbar.thumbpos + widget->WSpec.scrollbar.pagestep) <= max) + widget->WSpec.scrollbar.thumbpos+=widget->WSpec.scrollbar.pagestep; + else + widget->WSpec.scrollbar.thumbpos = max; + } + + } + + if(range!=0) + { + GrClearWindow (widget->wid, GR_FALSE); + DrawScrollBar(widget); + } + + if (widget->WSpec.scrollbar.CallBack[CLICKED].fp) + (*(widget->WSpec.scrollbar.CallBack[CLICKED].fp)) (widget, + widget->WSpec.scrollbar.CallBack[CLICKED].dptr); + break; + case GR_EVENT_TYPE_EXPOSURE: - if(widget->visible) - DrawScrollBar(widget); - break; + if(widget->visible) + DrawScrollBar(widget); + break; } } diff -urN TinyWidgetsold/src/tnWidgets.c TinyWidgets/src/tnWidgets.c --- TinyWidgetsold/src/tnWidgets.c Mon Jun 11 12:39:28 2001 +++ TinyWidgets/src/tnWidgets.c Tue Jun 12 10:49:33 2001 @@ -59,7 +59,8 @@ case GR_EVENT_TYPE_FOCUS_OUT: case GR_EVENT_TYPE_UPDATE: case GR_EVENT_TYPE_CHLD_UPDATE: - case GR_EVENT_TYPE_CLOSE_REQ*/ + case GR_EVENT_TYPE_CLOSE_REQ: + case GR_EVENT_TYPE_TIMER:*/ default: wid = event->general.wid;