changeset 132:a45406361e44

Fixed the Caret blinking
author Jacob Carlborg <doob@me.com>
date Sun, 22 Mar 2009 20:22:57 +0100
parents 03fac5984741
children 6541b60caf79
files dwt/widgets/Display.d
diffstat 1 files changed, 29 insertions(+), 39 deletions(-) [+]
line wrap: on
line diff
--- a/dwt/widgets/Display.d	Mon Mar 16 22:38:50 2009 +0100
+++ b/dwt/widgets/Display.d	Sun Mar 22 20:22:57 2009 +0100
@@ -331,7 +331,7 @@
     Object data;
     String [] keys;
     Object [] values;
-    
+
     /*
      * TEMPORARY CODE.  Install the runnable that
      * gets the current display. This code will
@@ -347,7 +347,7 @@
                 }
                 setDevice (device);
             }
-            };
+        };
     }
     
     /*
@@ -625,42 +625,8 @@
         cursors = new Cursor [DWT.CURSOR_HAND + 1];
         timerDelegate = cast(SWTWindowDelegate)(new SWTWindowDelegate()).alloc().init();
         
-        caretTimer = new class(currentCaret) Runnable {
-            Caret currentCaret;
-            
-            this (Caret currentCaret)
-            {
-                this.currentCaret = currentCaret;
-            }
-            
-            public void run () {
-                if (currentCaret !is null) {
-                    if (currentCaret is null || currentCaret.isDisposed()) return;
-                    if (currentCaret.blinkCaret ()) {
-                        int blinkRate = currentCaret.blinkRate;
-                        if (blinkRate !is 0) timerExec (blinkRate, this);
-                    } else {
-                        currentCaret = null;
-                    }
-                }
-                
-            }
-        };
-        
-        hoverTimer = new class(currentControl) Runnable {
-            Control currentControl;
-            
-            this (Control currentControl)
-            {
-                this.currentControl = currentControl;
-            }
-            
-            public void run () {
-                if (currentControl !is null && !currentControl.isDisposed()) {
-                    currentControl.sendMouseEvent (null, DWT.MouseHover, trackingControl !is null);
-                }
-            }
-        };
+        caretTimer = new CaretTimer;
+        hoverTimer = new HoverTimer;
     }
     
     static void checkDisplay (Thread thread, bool multiple) {
@@ -3104,14 +3070,38 @@
     
     //TODO use custom timer instead of timerExec
     Runnable hoverTimer;
+
+    class HoverTimer : Runnable
+    {
+        public void run () {
+            if (currentControl !is null && !currentControl.isDisposed()) {
+                currentControl.sendMouseEvent (null, DWT.MouseHover, trackingControl !is null);
+            }
+        }
+    }
     
     //TODO - use custom timer instead of timerExec
     Runnable caretTimer;
+
+    class CaretTimer : Runnable
+    {
+        public void run () {
+            if (currentCaret !is null) {
+                if (this.outer.currentCaret is null || this.outer.currentCaret.isDisposed()) return;
+                if (currentCaret.blinkCaret ()) {
+                    int blinkRate = currentCaret.blinkRate;
+                    if (blinkRate !is 0) timerExec (blinkRate, this);
+                } else {
+                    currentCaret = null;
+                }
+            }
+        }
+    }
     
     void setCurrentCaret (Caret caret) {
         //  if (caretID !is 0) OS.RemoveEventLoopTimer (caretID);
         //  caretID = 0;
-        currentCaret = caret;
+        currentCaret = caret;        
         if (currentCaret !is null) {
             int blinkRate = currentCaret.blinkRate;
             timerExec (blinkRate, caretTimer);