Subject:
Timer in TinyWidgets
From:
Sunil Soman ####@####.####
Date:
12 Jun 2001 06:23:11 -0000
Message-Id: <01061211522000.03833@soman.com>
Hi,
I've used Gary James' Timer patch to add :
* timeout to the scrollbar, for the lineup/down, pageup/down events (so that
the position is updated when the user clicks & holds).
* the rawwidget now gets a timer event.
I will put this in the main tree when (and if) the GR_EVENT_TYPE_TIMER goes
into the microwindows tree.
Regards,
Sunil
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;