Mercurial > projects > doodle
changeset 5:8a39b13cd3e6
Checkpoint
author | David Bryant <daveb@acres.com.au> |
---|---|
date | Fri, 10 Jul 2009 18:19:16 +0930 |
parents | 58a8ad20b228 |
children | a27d2093991c |
files | canvas.d icanvas.d tk/events.d tk/types.d tool_stack.d |
diffstat | 5 files changed, 172 insertions(+), 46 deletions(-) [+] |
line wrap: on
line diff
--- a/canvas.d Fri Jul 10 15:26:07 2009 +0930 +++ b/canvas.d Fri Jul 10 18:19:16 2009 +0930 @@ -74,8 +74,8 @@ mDrawingArea.addOnRealize(&onRealize); mDrawingArea.addOnConfigure(&onConfigure); mDrawingArea.addOnExpose(&onExpose); - mDrawingArea.addOnButtonPress(&onButtonEvent); - mDrawingArea.addOnButtonRelease(&onButtonEvent); + mDrawingArea.addOnButtonPress(&onButtonPress); + mDrawingArea.addOnButtonRelease(&onButtonRelease); mDrawingArea.addOnKeyPress(&onKeyEvent); mDrawingArea.addOnKeyRelease(&onKeyEvent); mDrawingArea.addOnMotionNotify(&onMotionNotify); @@ -161,7 +161,7 @@ dr.getSize(width, height); //writefln("Got expose %dx%d\n", width, height); - scope auto cr = new Context(dr); + scope cr = new Context(dr); if (event) { cr.rectangle(event.area.x, event.area.y, event.area.width, event.area.height); @@ -196,7 +196,7 @@ return true; } - bool onButtonEvent(GdkEventButton * event, Widget widget) { + bool onButtonPress(GdkEventButton * event, Widget widget) { assert(widget is mDrawingArea); //writefln("Got button event\n"); @@ -209,7 +209,25 @@ model_point, gtk2tk_mask(event.state)); - //mEventHandle.handle_button_press + mEventHandler.handle_button_press(this, button_event); + + return true; + } + + bool onButtonRelease(GdkEventButton * event, Widget widget) { + assert(widget is mDrawingArea); + //writefln("Got button event\n"); + + Point screen_point = Point(event.x + 0.5, event.y + 0.5); + Point model_point = screen_to_model(screen_point); + + auto button_event = new ButtonEvent(gtk2tk_click(event.type), + gtk2tk_button(event.button), + screen_point, + model_point, + gtk2tk_mask(event.state)); + + mEventHandler.handle_button_release(this, button_event); return true; }
--- a/icanvas.d Fri Jul 10 15:26:07 2009 +0930 +++ b/icanvas.d Fri Jul 10 18:19:16 2009 +0930 @@ -11,12 +11,12 @@ import tk.events; interface ICanvasEventHandler { - bool handle_button_press(ICanvas canvas, ButtonEvent event); - bool handle_button_release(ICanvas canvas, ButtonEvent event); - bool handle_key_press(ICanvas canvas, KeyEvent event); - bool handle_key_release(ICanvas canvas, KeyEvent event); - bool handle_motion(ICanvas canvas, MotionEvent event); - bool handle_scroll(ICanvas canvas, ScrollEvent event); + bool handle_button_press(ICanvas canvas, in ButtonEvent event); + bool handle_button_release(ICanvas canvas, in ButtonEvent event); + bool handle_key_press(ICanvas canvas, in KeyEvent event); + bool handle_key_release(ICanvas canvas, in KeyEvent event); + bool handle_motion(ICanvas canvas, in MotionEvent event); + bool handle_scroll(ICanvas canvas, in ScrollEvent event); //bool handle_expose(ICanvas canvas, ExposeEvent event); //bool handle_enter(ICanvas, CrossingEvent event); //bool handle_leave(ICanvas, CrossingEvent event);
--- a/tk/events.d Fri Jul 10 15:26:07 2009 +0930 +++ b/tk/events.d Fri Jul 10 18:19:16 2009 +0930 @@ -26,11 +26,11 @@ } abstract class InputEvent : Event { - this(Mask mask) { - mMask = mask; + this(in Mask mask) { + mMask = new Mask(mask); } - Mask mask() { return mMask; } + const(Mask) mask() const { return mMask; } private { Mask mMask; @@ -53,9 +53,9 @@ mValue = value; } - string str() { return mStr; } + string str() const { return mStr; } - override string toString() { + override string toString() const { return std.string.format("Key event: %s, %d", mStr, mValue); } @@ -66,14 +66,14 @@ } abstract class PointerEvent : InputEvent { - this(Point screen_point, Point model_point, Mask mask) { + this(in Point screen_point, in Point model_point, in Mask mask) { super(mask); mScreenPoint = screen_point; mModelPoint = model_point; } - Point screen_point() { return mScreenPoint; } - Point model_point() { return mModelPoint; } + Point screen_point() const { return mScreenPoint; } + Point model_point() const { return mModelPoint; } private { Point mScreenPoint; @@ -92,12 +92,12 @@ mButtonNumber = button_number; } - override string toString() { + override string toString() const { return std.string.format("Button event: %s, %s, %s, %s, %s", mButtonPress, mButtonNumber, mScreenPoint, mModelPoint, mMask); } - ButtonPress button_press() { return mButtonPress; } - ButtonNumber button_number() { return mButtonNumber; } + ButtonPress button_press() const { return mButtonPress; } + ButtonNumber button_number() const { return mButtonNumber; } private { ButtonPress mButtonPress; @@ -106,31 +106,31 @@ } final class MotionEvent : PointerEvent { - this(Point screen_point, - Point model_point, - Mask mask) { + this(in Point screen_point, + in Point model_point, + in Mask mask) { super(screen_point, model_point, mask); } - override string toString() { + override string toString() const { return std.string.format("Motion event: %s, %s, %s", mScreenPoint, mModelPoint, mMask); } } final class ScrollEvent : PointerEvent { - this(ScrollDirection scroll_direction, - Point screen_point, - Point model_point, - Mask mask) { + this(in ScrollDirection scroll_direction, + in Point screen_point, + in Point model_point, + in Mask mask) { super(screen_point, model_point, mask); mScrollDirection = scroll_direction; } - override string toString() { + override string toString() const { return std.string.format("Scroll event: %s, %s, %s, %s", mScrollDirection, mScreenPoint, mModelPoint, mMask); } - ScrollDirection scroll_direction() { return mScrollDirection; } + ScrollDirection scroll_direction() const { return mScrollDirection; } private { ScrollDirection mScrollDirection;
--- a/tk/types.d Fri Jul 10 15:26:07 2009 +0930 +++ b/tk/types.d Fri Jul 10 18:19:16 2009 +0930 @@ -1,7 +1,10 @@ module tk.types; private import std.string; +private import std.typecons; +private import std.algorithm; + /* enum ButtonPress { SINGLE, DOUBLE, @@ -9,6 +12,16 @@ RELEASE } +string toString(in ButtonPress bp) { + switch (bp) { + case ButtonPress.SINGLE: return "SINGLE"; + case ButtonPress.DOUBLE: return "DOUBLE"; + case ButtonPress.TRIPLE: return "TRIPLE"; + case ButtonPress.RELEASE: return "RELEASE"; + default: return std.string.format("<UNKNOWN ButtonPress: %s>", bp); + } +} + enum ButtonNumber { BUTTON_1, BUTTON_2, @@ -17,6 +30,17 @@ BUTTON_5, } +string toString(in ButtonNumber bn) { + switch (bn) { + case ButtonNumber.BUTTON_1: return "BUTTON_1"; + case ButtonNumber.BUTTON_2: return "BUTTON_2"; + case ButtonNumber.BUTTON_3: return "BUTTON_3"; + case ButtonNumber.BUTTON_4: return "BUTTON_4"; + case ButtonNumber.BUTTON_5: return "BUTTON_5"; + default: return std.string.format("<UNKNOWN ButtonNumber: %s>", bn); + } +} + enum ScrollDirection { UP, DOWN, @@ -24,6 +48,16 @@ RIGHT } +string toString(in ScrollDirection sd) { + switch (sd) { + case ScrollDirection.UP: return "UP"; + case ScrollDirection.DOWN: return "DOWN"; + case ScrollDirection.LEFT: return "LEFT"; + case ScrollDirection.RIGHT: return "RIGHT"; + default: return std.string.format("<UNKNOWN ScrollDirection: %s>", sd); + } +} + enum Modifier { SHIFT, CAPS_LOCK, @@ -39,18 +73,92 @@ BUTTON_5 } -class Mask { - void add(Modifier modifier) { mBits |= bit(modifier); } - void remove(Modifier modifier) { mBits &= ~bit(modifier); } - bool query(Modifier modifier) { return cast(bool)(mBits & bit(modifier)); } +string toString(in Modifier m) { + switch (m) { + case Modifier.SHIFT: return "SHIFT"; + case Modifier.CAPS_LOCK: return "CAPS_LOCK"; + case Modifier.CONTROL: return "CONTROL"; + case Modifier.ALT: return "ALT"; + case Modifier.NUM_LOCK: return "NUM_LOCK"; + case Modifier.META: return "META"; + case Modifier.SCROLL_LOCK: return "SCROLL_LOCK"; + case Modifier.BUTTON_1: return "BUTTON_1"; + case Modifier.BUTTON_2: return "BUTTON_2"; + case Modifier.BUTTON_3: return "BUTTON_3"; + case Modifier.BUTTON_4: return "BUTTON_4"; + case Modifier.BUTTON_5: return "BUTTON_5"; + default: return std.string.format("<UNKNOWN Modifier: %s>", m); + } +} +*/ - override string toString() { - return format("%d", mBits); +mixin(defineEnum!("ButtonPress", + "SINGLE", "DOUBLE", "TRIPLE", "RELEASE")); +mixin(defineEnum!("ButtonNumber", + "BUTTON_1", "BUTTON_2", "BUTTON_3", "BUTTON_4", "BUTTON_5")); +mixin(defineEnum!("ScrollDirection", + "UP", "DOWN", "LEFT", "RIGHT")); +mixin(defineEnum!("Modifier", + "SHIFT", "CAPS_LOCK", "CONTROL", "ALT", "NUM_LOCK", "META", + "SCROLL_LOCK", "BUTTON_1", "BUTTON_2", "BUTTON_3", "BUTTON_4", "BUTTON_5")); + +struct Mask2 { + this(in Modifier[] modifiers) { + _modifiers = modifiers.dup; + } + + string toString() const { + string s; + + foreach (Modifier m; _modifiers) { + s ~= enumToString(m); + } + + return s; + } + + bool is_set(Modifier m) const { + foreach (Modifier m2; _modifiers) { + if (m == m2) { + return true; + } + } + + return false; + } + + bool is_unset(Modifier m) const { + return !is_set(m); } private { - static int bit(Modifier modifier) { return 1 << cast(int)modifier; } + Modifier[] _modifiers; + } +} + +class Mask { + this() { + } + + this(in Mask other) { + mBits = other.mBits; + } + + void add(Modifier modifier) { mBits |= to_bit(modifier); } + void remove(Modifier modifier) { mBits &= ~to_bit(modifier); } + bool query(Modifier modifier) const { return cast(bool)(mBits & to_bit(modifier)); } + + override string toString() const { + Modifier m = Modifier.SHIFT; + return enumToString(m); + /* + return format("Mask: %s", m); + */ + //return format("%d", mBits); + } + + private { + static int to_bit(Modifier modifier) { return 1 << cast(int)modifier; } int mBits; } } -
--- a/tool_stack.d Fri Jul 10 15:26:07 2009 +0930 +++ b/tool_stack.d Fri Jul 10 18:19:16 2009 +0930 @@ -11,32 +11,32 @@ //IToolStack class ToolStack : ICanvasEventHandler { - override bool handle_button_press(ICanvas canvas, ButtonEvent event) { + override bool handle_button_press(ICanvas canvas, in ButtonEvent event) { writefln("%s", event); return true; } - override bool handle_button_release(ICanvas canvas, ButtonEvent event) { + override bool handle_button_release(ICanvas canvas, in ButtonEvent event) { writefln("%s", event); return true; } - override bool handle_key_press(ICanvas canvas, KeyEvent event) { + override bool handle_key_press(ICanvas canvas, in KeyEvent event) { writefln("%s", event); return true; } - override bool handle_key_release(ICanvas canvas, KeyEvent event) { + override bool handle_key_release(ICanvas canvas, in KeyEvent event) { writefln("%s", event); return true; } - override bool handle_motion(ICanvas canvas, MotionEvent event) { + override bool handle_motion(ICanvas canvas, in MotionEvent event) { writefln("%s", event); return true; } - override bool handle_scroll(ICanvas canvas, ScrollEvent event) { + override bool handle_scroll(ICanvas canvas, in ScrollEvent event) { writefln("%s", event); if (event.mask.query(Modifier.CONTROL)) {