Mercurial > projects > doodle
changeset 20:d6e7a5a6f008
Checkpoint
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Wed, 15 Jul 2009 23:23:02 +0930 |
parents | 22abbf4cde96 |
children | 993ac3a183c8 |
files | .hgignore build.sh canvas.d doodle.d gui.d icanvas.d standard_tools.d |
diffstat | 7 files changed, 113 insertions(+), 61 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgignore Mon Jul 13 22:08:18 2009 +0930 +++ b/.hgignore Wed Jul 15 23:23:02 2009 +0930 @@ -1,2 +1,2 @@ -gui +doodle .obj
--- a/build.sh Mon Jul 13 22:08:18 2009 +0930 +++ b/build.sh Wed Jul 15 23:23:02 2009 +0930 @@ -1,8 +1,8 @@ #!/bin/sh dmd \ - -ofgui \ - gui.d tool_layer.d tool.d icanvas.d canvas.d \ + -ofdoodle \ + doodle.d tool_layer.d tool.d icanvas.d canvas.d \ tk/geometry.d tk/gtk_support.d tk/misc.d tk/types.d tk/events.d \ cairo_support.d standard_tools.d \ page_layer.d \
--- a/canvas.d Mon Jul 13 22:08:18 2009 +0930 +++ b/canvas.d Wed Jul 15 23:23:02 2009 +0930 @@ -58,7 +58,7 @@ 0, 1, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.SHRINK, 0, 0); - mHRuler.setMetric(GtkMetricType.PIXELS); + mHRuler.setMetric(MetricType.PIXELS); mVRuler = new VRuler; attach(mVRuler, @@ -66,7 +66,7 @@ 1, 2, AttachOptions.SHRINK, AttachOptions.FILL | AttachOptions.EXPAND, 0, 0); - mVRuler.setMetric(GtkMetricType.PIXELS); + mVRuler.setMetric(MetricType.PIXELS); mDrawingArea = new DrawingArea; mDrawingArea.addOnRealize(&onRealize); @@ -78,6 +78,21 @@ mDrawingArea.addOnKeyRelease(&onKeyEvent); mDrawingArea.addOnMotionNotify(&onMotionNotify); mDrawingArea.addOnScroll(&onScroll); + mDrawingArea.addOnEnterNotify(&onEnterNotify); + mDrawingArea.addOnLeaveNotify(&onLeaveNotify); + mDrawingArea.setEvents(EventMask.EXPOSURE_MASK | + EventMask.POINTER_MOTION_MASK | + EventMask.POINTER_MOTION_HINT_MASK | + EventMask.BUTTON_MOTION_MASK | + EventMask.BUTTON_PRESS_MASK | + EventMask.BUTTON_RELEASE_MASK | + EventMask.KEY_PRESS_MASK | + EventMask.KEY_RELEASE_MASK | + EventMask.ENTER_NOTIFY_MASK | + EventMask.LEAVE_NOTIFY_MASK | + EventMask.FOCUS_CHANGE_MASK | + EventMask.SCROLL_MASK); + attach(mDrawingArea, 1, 2, 1, 2, @@ -108,7 +123,7 @@ 0, 0); } - override void rel_zoom(Point pixel_datum, double factor) { + override void zoom_relative(Point pixel_datum, double factor) { // Work out pixel distance from current centre to datum, // Do the zoom, then work out the new centre that keeps the // pixel distance the same @@ -123,7 +138,7 @@ queueDraw; } - override void rel_pan(Vector pixel_displacement) { + override void pan_relative(Vector pixel_displacement) { mViewCentre = mViewCentre + pixel_to_model(pixel_displacement); update_adjustments; @@ -371,6 +386,45 @@ return true; } + /* + public enum GdkCrossingMode { + NORMAL, + GRAB, + UNGRAB, + GTK_GRAB, + GTK_UNGRAB, + STATE_CHANGED + } + + public struct GdkEventCrossing { + GdkEventType type; + GdkWindow *window; + byte sendEvent; + GdkWindow *subwindow; + uint time; + double x; + double y; + double xRoot; + double yRoot; + GdkCrossingMode mode; + GdkNotifyType detail; + int focus; + uint state; + } + */ + + bool onEnterNotify(GdkEventCrossing * event, Widget widget) { + assert(widget is mDrawingArea); + writefln("Enter %d %d %d", cast(int)event.mode, event.focus, event.state); + return true; + } + + bool onLeaveNotify(GdkEventCrossing * event, Widget widget) { + assert(widget is mDrawingArea); + writefln("Leave %d %d %d", cast(int)event.mode, event.focus, event.state); + return true; + } + void onValueChanged(Adjustment adjustment) { GtkAdjustment * h_gtkAdjustment = mHAdjustment.getAdjustmentStruct; GtkAdjustment * v_gtkAdjustment = mVAdjustment.getAdjustmentStruct;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doodle.d Wed Jul 15 23:23:02 2009 +0930 @@ -0,0 +1,46 @@ +module doodle; + +private { + import canvas; + import tool_layer; + import standard_tools; + import page_layer; + + import gtk.Main; + import gtk.MainWindow; + + import std.stdio; +} + +void main(string[] args) { + Main.init(args); + auto window = new MainWindow("Doodle"); + Tool[] tools; + tools ~= new PanTool; + tools ~= new ZoomTool; + tools ~= new LassoTool; + auto tool_layer = new ToolLayer(tools, "Tools"); + Layer[] layers; + layers ~= new PageLayer("Page"); + layers ~= tool_layer; + auto canvas = new Canvas(layers, tool_layer, 120.0); + window.add(canvas); + window.setDefaultSize(380, 380); + window.showAll(); + Main.run(); + + /* + Point p3 = Point.DEFAULT; + + Point p1 = Point(3.0, 5.0); + writefln("%s", p1); + + Point p2 = Point(1.0, 2.0); + writefln("%s", p2); + + writefln("%s", p1 - p2); + + Rectangle r = Rectangle(p1, p2); + writefln("%s", r); + */ +}
--- a/gui.d Mon Jul 13 22:08:18 2009 +0930 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -module gui; - -private { - import canvas; - import tool_layer; - import standard_tools; - import page_layer; - - import gtk.Main; - import gtk.MainWindow; - - import std.stdio; -} - -void main(string[] args) { - Main.init(args); - auto window = new MainWindow("Doodle"); - Tool[] tools; - tools ~= new PanTool; - tools ~= new ZoomTool; - tools ~= new LassoTool; - auto tool_layer = new ToolLayer(tools, "Tools"); - Layer[] layers; - layers ~= new PageLayer("Page"); - layers ~= tool_layer; - auto canvas = new Canvas(layers, tool_layer, 120.0); - window.add(canvas); - window.setDefaultSize(380, 380); - window.showAll(); - Main.run(); - - /* - Point p3 = Point.DEFAULT; - - Point p1 = Point(3.0, 5.0); - writefln("%s", p1); - - Point p2 = Point(1.0, 2.0); - writefln("%s", p2); - - writefln("%s", p1 - p2); - - Rectangle r = Rectangle(p1, p2); - writefln("%s", r); - */ -}
--- a/icanvas.d Mon Jul 13 22:08:18 2009 +0930 +++ b/icanvas.d Wed Jul 15 23:23:02 2009 +0930 @@ -5,8 +5,8 @@ import cairo.Context; interface Viewport { - void rel_zoom(Point pixel_datum, double factor); - void rel_pan(Vector pixel_displacement); + void zoom_relative(Point pixel_datum, double factor); + void pan_relative(Vector pixel_displacement); void damage_model(Rectangle area); // FIXME could be an inout parameter of the event handling, or a special scope Damage object that supports growth only void damage_pixel(Rectangle area); // FIXME as above
--- a/standard_tools.d Mon Jul 13 22:08:18 2009 +0930 +++ b/standard_tools.d Wed Jul 15 23:23:02 2009 +0930 @@ -23,7 +23,7 @@ override bool handle_motion(Viewport viewport, in MotionEvent event) { if (event.mask.is_set(Modifier.MIDDLE_BUTTON)) { - viewport.rel_pan(mLastPosition - event.pixel_point); + viewport.pan_relative(mLastPosition - event.pixel_point); mLastPosition = event.pixel_point; return true; @@ -52,7 +52,7 @@ break; } - viewport.rel_pan(delta); + viewport.pan_relative(delta); } return true; @@ -68,11 +68,11 @@ override bool handle_scroll(Viewport viewport, in ScrollEvent event) { if (event.mask.is_set(Modifier.CONTROL)) { if (event.scroll_direction == ScrollDirection.DOWN) { - viewport.rel_zoom(event.pixel_point, 1.0 / ZOOM); + viewport.zoom_relative(event.pixel_point, 1.0 / ZOOM); return true; } else if (event.scroll_direction == ScrollDirection.UP) { - viewport.rel_zoom(event.pixel_point, ZOOM); + viewport.zoom_relative(event.pixel_point, ZOOM); return true; } else { @@ -112,8 +112,6 @@ } } - // FIXME account for the line width... - override bool handle_motion(Viewport viewport, in MotionEvent event) { if (mActive) { viewport.damage_pixel(Rectangle(mAnchorPoint, mCurrentPoint).feathered(LINE_WIDTH / 2.0));