changeset 8:bf7903435f58

Checkpoint
author "David Bryant <bagnose@gmail.com>"
date Sat, 11 Jul 2009 21:49:04 +0930
parents 936feb16eed4
children 66b47e122b31
files gui.d standard_tools.d tk/events.d tk/gtk_support.d tk/types.d
diffstat 5 files changed, 49 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/gui.d	Sat Jul 11 21:29:03 2009 +0930
+++ b/gui.d	Sat Jul 11 21:49:04 2009 +0930
@@ -24,6 +24,7 @@
     auto event_handler = new ToolStack(tools);
     auto canvas = new Canvas(event_handler);
     window.add(canvas);
+    window.setDefaultSize(420, 340);
     window.showAll();
     Main.run();
 
--- a/standard_tools.d	Sat Jul 11 21:29:03 2009 +0930
+++ b/standard_tools.d	Sat Jul 11 21:49:04 2009 +0930
@@ -5,10 +5,12 @@
 import tk.types;
 import tk.events;
 import tk.geometry;
+import std.math;
 
 final class PanTool : Tool {
     bool handle_button_press(ICanvas canvas, in ButtonEvent event) {
         if (event.button_name == ButtonName.MIDDLE) {
+            mLastPosition = event.screen_point;
             return true;
         }
         else {
@@ -17,31 +19,43 @@
     }
 
     bool handle_button_release(ICanvas canvas, in ButtonEvent event) {
-        return false;
+        return true;
     }
 
     bool handle_motion(ICanvas canvas, in MotionEvent event) {
-        return false;
+        if (event.mask.is_set(Modifier.BUTTON_MIDDLE)) {
+            canvas.rel_pan(mLastPosition - event.screen_point);
+            mLastPosition = event.screen_point;
+
+            return true;
+        }
+        else {
+            return false;
+        }
     }
 
     bool handle_scroll(ICanvas canvas, in ScrollEvent event) {
-        const double AMOUNT = 30.0;
-        Vector v;
+        if (event.mask.is_unset(Modifier.BUTTON_MIDDLE)) {
+            const double AMOUNT = 60.0;
+            Vector v;
 
-        if (event.mask.is_set(Modifier.SHIFT)) {
-            // left to right
-            v = Vector(AMOUNT, 0.0);
+            switch (event.scroll_direction) {
+            case ScrollDirection.UP:
+                v = event.mask.is_set(Modifier.SHIFT) ? Vector(-AMOUNT, 0.0) : Vector(0.0, -AMOUNT);
+                break;
+            case ScrollDirection.DOWN:
+                v = event.mask.is_set(Modifier.SHIFT) ? Vector(AMOUNT, 0.0) : Vector(0.0, AMOUNT);
+                break;
+            case ScrollDirection.LEFT:
+                v = Vector(-AMOUNT, 0.0);
+                break;
+            case ScrollDirection.RIGHT:
+                v = Vector(AMOUNT, 0.0);
+                break;
+            }
+
+            canvas.rel_pan(v);
         }
-        else {
-            // down to up
-            v = Vector(0.0, AMOUNT);
-        }
-
-        if (event.scroll_direction == ScrollDirection.UP) {
-            v = -v;
-        }
-
-        canvas.rel_pan(v);
 
         return true;
     }
@@ -53,10 +67,14 @@
     bool handle_key_release(ICanvas canvas, in KeyEvent event) {
         return false;
     }
+
+    private {
+        Point mLastPosition;
+    }
 }
 
 final class ZoomTool : Tool {
-    static invariant double ZOOM = 1.44;
+    static invariant double ZOOM = sqrt(2.0);
 
     bool handle_button_press(ICanvas canvas, in ButtonEvent event) {
         return false;
--- a/tk/events.d	Sat Jul 11 21:29:03 2009 +0930
+++ b/tk/events.d	Sat Jul 11 21:49:04 2009 +0930
@@ -56,7 +56,7 @@
     string str() const { return mStr; }
 
     override string toString() const {
-        return std.string.format("Key event: %s, %d", mStr, mValue);
+        return std.string.format("Key event: %s, %d, %s", mStr, mValue, mMask);
     }
 
     private {
@@ -93,7 +93,9 @@
     }
 
     override string toString() const {
-        return std.string.format("Button event: %s, %s, %s, %s, %s", mButtonAction, mButtonName, mScreenPoint, mModelPoint, mMask);
+        return std.string.format("Button event: %s, %s, %s, %s, %s",
+                                 enumToString(mButtonAction), enumToString(mButtonName),
+                                 mScreenPoint, mModelPoint, mMask);
     }
 
     ButtonAction button_action() const { return mButtonAction; }
@@ -113,7 +115,8 @@
     }
 
     override string toString() const {
-        return std.string.format("Motion event: %s, %s, %s", mScreenPoint, mModelPoint, mMask);
+        return std.string.format("Motion event: %s, %s, %s",
+                                 mScreenPoint, mModelPoint, mMask);
     }
 }
 
@@ -127,7 +130,8 @@
     }
 
     override string toString() const {
-        return std.string.format("Scroll event: %s, %s, %s, %s", mScrollDirection, mScreenPoint, mModelPoint, mMask);
+        return std.string.format("Scroll event: %s, %s, %s, %s",
+                                 enumToString(mScrollDirection), mScreenPoint, mModelPoint, mMask);
     }
 
     ScrollDirection scroll_direction() const { return mScrollDirection; }
--- a/tk/gtk_support.d	Sat Jul 11 21:29:03 2009 +0930
+++ b/tk/gtk_support.d	Sat Jul 11 21:49:04 2009 +0930
@@ -7,11 +7,11 @@
 ButtonAction gtk2tk_button_action(gdk.Event.EventType event_type) {
     switch (event_type) {
     case gdk.Event.EventType.BUTTON_PRESS:
-        return ButtonAction.PRESS_SINGLE;
+        return ButtonAction.SINGLE_PRESS;
     case gdk.Event.EventType.DOUBLE_BUTTON_PRESS:
-        return ButtonAction.PRESS_DOUBLE;
+        return ButtonAction.DOUBLE_PRESS;
     case gdk.Event.EventType.TRIPLE_BUTTON_PRESS:
-        return ButtonAction.PRESS_TRIPLE;
+        return ButtonAction.TRIPLE_PRESS;
     case gdk.Event.EventType.BUTTON_RELEASE:
         return ButtonAction.RELEASE;
     default:
--- a/tk/types.d	Sat Jul 11 21:29:03 2009 +0930
+++ b/tk/types.d	Sat Jul 11 21:49:04 2009 +0930
@@ -5,7 +5,7 @@
 private import std.algorithm;
 
 mixin(defineEnum!("ButtonAction",
-                  "PRESS_SINGLE", "PRESS_DOUBLE", "PRESS_TRIPLE", "RELEASE"));
+                  "SINGLE_PRESS", "DOUBLE_PRESS", "TRIPLE_PRESS", "RELEASE"));
 mixin(defineEnum!("ButtonName",
                   "LEFT", "MIDDLE", "RIGHT", "FOUR", "FIVE"));
 mixin(defineEnum!("ScrollDirection",