nanogui: Timer in TinyWidgets


Previous by date: 12 Jun 2001 06:23:11 -0000 Re: Problem in repaint, Sridharan Subramanian
Next by date: 12 Jun 2001 06:23:11 -0000 Re: Screen Driver ans Subdriver, Greg Haerr
Previous in thread:
Next in thread:

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;

Previous by date: 12 Jun 2001 06:23:11 -0000 Re: Problem in repaint, Sridharan Subramanian
Next by date: 12 Jun 2001 06:23:11 -0000 Re: Screen Driver ans Subdriver, Greg Haerr
Previous in thread:
Next in thread:


Powered by ezmlm-browse 0.20.