Mercurial > projects > doodle
changeset 26:06c30d250c0a
Cleanup
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Thu, 16 Jul 2009 00:12:02 +0930 |
parents | 8f58a8f88735 |
children | f3d91579bb28 |
files | build.sh cairo/routines.d dia/grid_layer.d dia/icanvas.d dia/page_layer.d dia/standard_tools.d dia/tool.d dia/tool_layer.d fig/fig.d fig/layer.d gtk/canvas.d tk/misc.d tk/types.d |
diffstat | 13 files changed, 124 insertions(+), 83 deletions(-) [+] |
line wrap: on
line diff
--- a/build.sh Wed Jul 15 23:49:02 2009 +0930 +++ b/build.sh Thu Jul 16 00:12:02 2009 +0930 @@ -6,6 +6,7 @@ doodle.d \ cairo/routines.d \ dia/grid_layer.d dia/icanvas.d dia/page_layer.d dia/standard_tools.d dia/tool.d dia/tool_layer.d \ + fig/layer.d \ gtk/canvas.d gtk/conversions.d \ tk/events.d tk/geometry.d tk/misc.d tk/types.d \ -I"${DMD_BASE}/include/d" \
--- a/cairo/routines.d Wed Jul 15 23:49:02 2009 +0930 +++ b/cairo/routines.d Thu Jul 16 00:12:02 2009 +0930 @@ -5,7 +5,7 @@ import cairo.Context; } -void rectangle(Context cr, Rectangle rectangle) { +void rectangle(scope Context cr, in Rectangle rectangle) { cr.rectangle(rectangle.position.x, rectangle.position.y, rectangle.size.x, rectangle.size.y); }
--- a/dia/grid_layer.d Wed Jul 15 23:49:02 2009 +0930 +++ b/dia/grid_layer.d Thu Jul 16 00:12:02 2009 +0930 @@ -22,7 +22,7 @@ return Rectangle(); } - override void draw(const Viewport viewport, + override void draw(in Viewport viewport, in Rectangle pixel_damage, scope Context pixel_cr, in Rectangle model_damage, scope Context model_cr) const { double zoom = viewport.zoom;
--- a/dia/icanvas.d Wed Jul 15 23:49:02 2009 +0930 +++ b/dia/icanvas.d Thu Jul 16 00:12:02 2009 +0930 @@ -1,38 +1,40 @@ module dia.icanvas; -import tk.geometry; -import tk.events; -import cairo.Context; +public { + import tk.geometry; + import tk.events; + import cairo.Context; +} interface Viewport { - 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 + void zoom_relative(in Point pixel_datum, in double factor); + void pan_relative(in Vector pixel_displacement); + void damage_model(in 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(in Rectangle area); // FIXME as above // FIXME not sure about these: double zoom() const; - Point model_to_pixel(Point model) const; - Point pixel_to_model(Point pixel) const; - Vector model_to_pixel(Vector model) const; - Vector pixel_to_model(Vector pixel) const; - Rectangle model_to_pixel(Rectangle model) const; - Rectangle pixel_to_model(Rectangle model) const; - double model_to_pixel(double model) const; - double pixel_to_model(double pixel) const; + Point model_to_pixel(in Point model) const; + Point pixel_to_model(in Point pixel) const; + Vector model_to_pixel(in Vector model) const; + Vector pixel_to_model(in Vector pixel) const; + Rectangle model_to_pixel(in Rectangle model) const; + Rectangle pixel_to_model(in Rectangle model) const; + double model_to_pixel(in double model) const; + double pixel_to_model(in double pixel) const; } interface EventHandler { - bool handle_button_press(Viewport viewport, in ButtonEvent event); - bool handle_button_release(Viewport viewport, in ButtonEvent event); - bool handle_motion(Viewport viewport, in MotionEvent event); - bool handle_scroll(Viewport viewport, in ScrollEvent event); - //bool handle_enter(Viewport viewport, CrossingEvent event); - //bool handle_leave(Viewport viewport, CrossingEvent event); - //bool handle_focus_in(Viewport viewport, FocusEvent event); - //bool handle_focus_out(Viewport viewport, FocusEvent event); - bool handle_key_press(Viewport viewport, in KeyEvent event); - bool handle_key_release(Viewport viewport, in KeyEvent event); + bool handle_button_press(scope Viewport viewport, in ButtonEvent event); + bool handle_button_release(scope Viewport viewport, in ButtonEvent event); + bool handle_motion(scope Viewport viewport, in MotionEvent event); + bool handle_scroll(scope Viewport viewport, in ScrollEvent event); + //bool handle_enter(scope Viewport viewport, CrossingEvent event); + //bool handle_leave(scope Viewport viewport, CrossingEvent event); + //bool handle_focus_in(scope Viewport viewport, FocusEvent event); + //bool handle_focus_out(scope Viewport viewport, FocusEvent event); + bool handle_key_press(scope Viewport viewport, in KeyEvent event); + bool handle_key_release(scope Viewport viewport, in KeyEvent event); } abstract class Layer { @@ -44,7 +46,7 @@ Rectangle bounds() const; //void zoom_changed - void draw(const Viewport viewport, + void draw(in Viewport viewport, in Rectangle pixel_damage, scope Context pixel_cr, in Rectangle model_damage, scope Context model_cr) const;
--- a/dia/page_layer.d Wed Jul 15 23:49:02 2009 +0930 +++ b/dia/page_layer.d Thu Jul 16 00:12:02 2009 +0930 @@ -22,7 +22,7 @@ return mPageGeometry; } - override void draw(const Viewport viewport, + override void draw(in Viewport viewport, in Rectangle pixel_damage, scope Context pixel_cr, in Rectangle model_damage, scope Context model_cr) const { // Make the paper white, with a border
--- a/dia/standard_tools.d Wed Jul 15 23:49:02 2009 +0930 +++ b/dia/standard_tools.d Thu Jul 16 00:12:02 2009 +0930 @@ -11,7 +11,7 @@ } final class PanTool : Tool { - override bool handle_button_press(Viewport viewport, in ButtonEvent event) { + override bool handle_button_press(scope Viewport viewport, in ButtonEvent event) { if (event.button_name == ButtonName.MIDDLE) { mLastPosition = event.pixel_point; return true; @@ -21,7 +21,7 @@ } } - override bool handle_motion(Viewport viewport, in MotionEvent event) { + override bool handle_motion(scope Viewport viewport, in MotionEvent event) { if (event.mask.is_set(Modifier.MIDDLE_BUTTON)) { viewport.pan_relative(mLastPosition - event.pixel_point); mLastPosition = event.pixel_point; @@ -33,7 +33,7 @@ } } - override bool handle_scroll(Viewport viewport, in ScrollEvent event) { + override bool handle_scroll(scope Viewport viewport, in ScrollEvent event) { if (event.mask.is_unset(Modifier.MIDDLE_BUTTON)) { Vector delta; @@ -65,7 +65,7 @@ } final class ZoomTool : Tool { - override bool handle_scroll(Viewport viewport, in ScrollEvent event) { + override bool handle_scroll(scope Viewport viewport, in ScrollEvent event) { if (event.mask.is_set(Modifier.CONTROL)) { if (event.scroll_direction == ScrollDirection.DOWN) { viewport.zoom_relative(event.pixel_point, 1.0 / ZOOM); @@ -90,7 +90,7 @@ } final class LassoTool : Tool { - override bool handle_button_press(Viewport viewport, in ButtonEvent event) { + override bool handle_button_press(scope Viewport viewport, in ButtonEvent event) { if (event.button_name == ButtonName.LEFT) { mActive = true; mAnchorPoint = mCurrentPoint = event.pixel_point; @@ -101,7 +101,7 @@ } } - override bool handle_button_release(Viewport viewport, in ButtonEvent event) { + override bool handle_button_release(scope Viewport viewport, in ButtonEvent event) { if (event.button_name == ButtonName.LEFT && mActive) { mActive = false; viewport.damage_pixel(Rectangle(mAnchorPoint, mCurrentPoint).feathered(LINE_WIDTH / 2.0)); @@ -112,7 +112,7 @@ } } - override bool handle_motion(Viewport viewport, in MotionEvent event) { + override bool handle_motion(scope Viewport viewport, in MotionEvent event) { if (mActive) { viewport.damage_pixel(Rectangle(mAnchorPoint, mCurrentPoint).feathered(LINE_WIDTH / 2.0)); mCurrentPoint = event.pixel_point; @@ -122,13 +122,19 @@ return false; } - override void draw(const Viewport viewport, + override void draw(in Viewport viewport, in Rectangle pixel_damage, scope Context pixel_cr, in Rectangle model_damage, scope Context model_cr) const { if (mActive) { pixel_cr.save; { - double[] dashes = [ 4.0, 4.0 ]; - pixel_cr.setDash(dashes, 0.0); + pixel_cr.setSourceRgba(0.0, 0.0, 0.8, 0.3); + rectangle(pixel_cr, Rectangle(mCurrentPoint, mAnchorPoint)); + pixel_cr.fill(); + } pixel_cr.restore(); + + pixel_cr.save(); { + //double[] dashes = [ 4.0, 4.0 ]; + //pixel_cr.setDash(dashes, 0.0); pixel_cr.setSourceRgba(0.0, 0.0, 0.5, 1.0); pixel_cr.setLineWidth(LINE_WIDTH); //writefln("Drawing rectangle: %s", Rectangle(mCurrentPoint, mAnchorPoint));
--- a/dia/tool.d Wed Jul 15 23:49:02 2009 +0930 +++ b/dia/tool.d Thu Jul 16 00:12:02 2009 +0930 @@ -32,18 +32,18 @@ abstract void stop(IToolStack tool_stack); */ - bool handle_button_press(Viewport viewport, in ButtonEvent event) { return false; } - bool handle_button_release(Viewport viewport, in ButtonEvent event) { return false; } - bool handle_motion(Viewport viewport, in MotionEvent event) { return false; } - bool handle_scroll(Viewport viewport, in ScrollEvent event) { return false; } - //bool handle_enter(Viewport viewport, CrossingEvent event) { return false; } - //bool handle_leave(Viewport viewport, CrossingEvent event) { return false; } - //bool handle_focus_in(Viewport viewport, FocusEvent event) { return false; } - //bool handle_focus_out(Viewport viewport, FocusEvent event) { return false; } - bool handle_key_press(Viewport viewport, in KeyEvent event) { return false; } - bool handle_key_release(Viewport viewport, in KeyEvent event) { return false; } + bool handle_button_press(scope Viewport viewport, in ButtonEvent event) { return false; } + bool handle_button_release(scope Viewport viewport, in ButtonEvent event) { return false; } + bool handle_motion(scope Viewport viewport, in MotionEvent event) { return false; } + bool handle_scroll(scope Viewport viewport, in ScrollEvent event) { return false; } + //bool handle_enter(scope viewport, CrossingEvent event) { return false; } + //bool handle_leave(scope viewport, CrossingEvent event) { return false; } + //bool handle_focus_in(scope viewport, FocusEvent event) { return false; } + //bool handle_focus_out(scope viewport, FocusEvent event) { return false; } + bool handle_key_press(scope Viewport viewport, in KeyEvent event) { return false; } + bool handle_key_release(scope Viewport viewport, in KeyEvent event) { return false; } - void draw(const Viewport viewport, + void draw(in Viewport viewport, in Rectangle pixel_damage, scope Context pixel_cr, in Rectangle model_damage, scope Context model_cr) const { } }
--- a/dia/tool_layer.d Wed Jul 15 23:49:02 2009 +0930 +++ b/dia/tool_layer.d Thu Jul 16 00:12:02 2009 +0930 @@ -15,7 +15,7 @@ mTools = tools.dup; } - override bool handle_button_press(Viewport viewport, in ButtonEvent event) { + override bool handle_button_press(scope Viewport viewport, in ButtonEvent event) { // writefln("%s", event); if (mGrabbedTool is null) { @@ -34,7 +34,7 @@ return true; } - override bool handle_button_release(Viewport viewport, in ButtonEvent event) { + override bool handle_button_release(scope Viewport viewport, in ButtonEvent event) { // writefln("%s", event); if (mGrabbedTool !is null) { @@ -48,19 +48,19 @@ return true; } - override bool handle_key_press(Viewport viewport, in KeyEvent event) { + override bool handle_key_press(scope Viewport viewport, in KeyEvent event) { // writefln("%s", event); return true; } - override bool handle_key_release(Viewport viewport, in KeyEvent event) { + override bool handle_key_release(scope Viewport viewport, in KeyEvent event) { // writefln("%s", event); return true; } - override bool handle_motion(Viewport viewport, in MotionEvent event) { + override bool handle_motion(scope Viewport viewport, in MotionEvent event) { //writefln("%s", event); if (mGrabbedTool is null) { @@ -77,7 +77,7 @@ return true; } - override bool handle_scroll(Viewport viewport, in ScrollEvent event) { + override bool handle_scroll(scope Viewport viewport, in ScrollEvent event) { // writefln("%s", event); if (mGrabbedTool is null) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fig/fig.d Thu Jul 16 00:12:02 2009 +0930 @@ -0,0 +1,5 @@ +module fig.fig; + +abstract class Fig { + abstract void draw(); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fig/layer.d Thu Jul 16 00:12:02 2009 +0930 @@ -0,0 +1,23 @@ +module fig.layer; + +public { + import dia.icanvas; +} + +class Layer : dia.icanvas.Layer { + this(in string name) { + super(name); + } + + override Rectangle bounds() const { + return Rectangle.DEFAULT; + } + + void draw(in Viewport viewport, + in Rectangle pixel_damage, scope Context pixel_cr, + in Rectangle model_damage, scope Context model_cr) const { + } + + private { + } +}
--- a/gtk/canvas.d Wed Jul 15 23:49:02 2009 +0930 +++ b/gtk/canvas.d Thu Jul 16 00:12:02 2009 +0930 @@ -122,7 +122,7 @@ 0, 0); } - override void zoom_relative(Point pixel_datum, double factor) { + override void zoom_relative(in Point pixel_datum, in 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 @@ -137,7 +137,7 @@ queueDraw; } - override void pan_relative(Vector pixel_displacement) { + override void pan_relative(in Vector pixel_displacement) { mViewCentre = mViewCentre + pixel_to_model(pixel_displacement); update_adjustments; @@ -145,11 +145,11 @@ queueDraw; } - override void damage_model(Rectangle area) { + override void damage_model(in Rectangle area) { mDamage = mDamage | model_to_pixel(area); } - override void damage_pixel(Rectangle area) { + override void damage_pixel(in Rectangle area) { mDamage = mDamage | area; } @@ -157,35 +157,35 @@ return mZoom; } - override Point model_to_pixel(Point model) const { + override Point model_to_pixel(in Point model) const { return Point.DEFAULT + mViewSize / 2.0 + mZoom * (model - mViewCentre); } - override Point pixel_to_model(Point pixel) const { + override Point pixel_to_model(in Point pixel) const { return mViewCentre + (pixel - mViewSize / 2.0 - Point.DEFAULT) / mZoom; } - override Vector model_to_pixel(Vector model) const { + override Vector model_to_pixel(in Vector model) const { return mZoom * model; } - override Vector pixel_to_model(Vector pixel) const { + override Vector pixel_to_model(in Vector pixel) const { return pixel / mZoom; } - override double model_to_pixel(double model) const { + override double model_to_pixel(in double model) const { return mZoom * model; } - override double pixel_to_model(double pixel) const { + override double pixel_to_model(in double pixel) const { return pixel / mZoom; } - override Rectangle model_to_pixel(Rectangle model) const { + override Rectangle model_to_pixel(in Rectangle model) const { return Rectangle(model_to_pixel(model.position), model_to_pixel(model.size)); } - override Rectangle pixel_to_model(Rectangle model) const { + override Rectangle pixel_to_model(in Rectangle model) const { return Rectangle(pixel_to_model(model.position), pixel_to_model(model.size)); } @@ -443,16 +443,15 @@ } void update_rulers() { - Vector model_size = pixel_to_model(mViewSize); + invariant Vector model_size = pixel_to_model(mViewSize); - Point view_left_bottom = mViewCentre - model_size / 2.0; - Point view_right_top = mViewCentre + model_size / 2.0; + invariant Point view_left_bottom = mViewCentre - model_size / 2.0; + invariant Point view_right_top = mViewCentre + model_size / 2.0; // Define these just to obtain the position // below and we can preserve it double lower, upper, position, max_size; - mHRuler.getRange(lower, upper, position, max_size); mHRuler.setRange(view_left_bottom.x, view_right_top.x, @@ -467,10 +466,10 @@ } void update_adjustments() { - Vector model_size = pixel_to_model(mViewSize); + invariant Vector model_size = pixel_to_model(mViewSize); - Point view_left_bottom = mViewCentre - model_size / 2.0; - Point view_right_top = mViewCentre + model_size / 2.0; + invariant Point view_left_bottom = mViewCentre - model_size / 2.0; + invariant Point view_right_top = mViewCentre + model_size / 2.0; // Adjust the canvas size if necessary mCanvasBounds = Rectangle(min_extents(mCanvasBounds.min_corner, view_left_bottom), @@ -507,7 +506,7 @@ int x, y, w, h; mDamage.get_quantised(x, y, w, h); //writefln("Quantised damage: %d %d %d %d", x, y, w, h); - y = cast(int)mViewSize.y - (y + h); + y = cast(int)mViewSize.y - (y + h); // Flip vertical axis //writefln("Flipped Quantised damage: %d %d %d %d", x, y, w, h); mDrawingArea.queueDrawArea(x, y, w, h); //mDrawingArea.queueDraw(); @@ -518,7 +517,7 @@ } } - double clamp_zoom(double zoom) { return clamp(zoom, 0.2, 10.0); } + double clamp_zoom(in double zoom) { return clamp(zoom, 0.2, 10.0); } bool mHadConfigure; Rectangle mDamage; // pixels
--- a/tk/misc.d Wed Jul 15 23:49:02 2009 +0930 +++ b/tk/misc.d Thu Jul 16 00:12:02 2009 +0930 @@ -1,14 +1,14 @@ module tk.misc; -double min(double a, double b) { +double min(in double a, in double b) { return a < b ? a : b; } -double max(double a, double b) { +double max(in double a, in double b) { return a > b ? a : b; } -double clamp(double v, double min, double max) { +double clamp(in double v, in double min, in double max) { assert(min < max); if (v < min) { return min; }
--- a/tk/types.d Wed Jul 15 23:49:02 2009 +0930 +++ b/tk/types.d Thu Jul 16 00:12:02 2009 +0930 @@ -11,13 +11,17 @@ mixin(defineEnum!("ButtonAction", "SINGLE_PRESS", "DOUBLE_PRESS", "TRIPLE_PRESS", "RELEASE")); + mixin(defineEnum!("ButtonName", "LEFT", "MIDDLE", "RIGHT", "FOUR", "FIVE")); + mixin(defineEnum!("ScrollDirection", "UP", "DOWN", "LEFT", "RIGHT")); + mixin(defineEnum!("Modifier", "SHIFT", "CAPS_LOCK", "CONTROL", "ALT", "NUM_LOCK", "META", - "SCROLL_LOCK", "LEFT_BUTTON", "MIDDLE_BUTTON", "RIGHT_BUTTON", "UNUSED_BUTTON_1", "UNUSED_BUTTON_2")); + "SCROLL_LOCK", "LEFT_BUTTON", "MIDDLE_BUTTON", "RIGHT_BUTTON", + "UNUSED_BUTTON_1", "UNUSED_BUTTON_2")); struct Mask { this(in Modifier[] modifiers) { @@ -29,6 +33,7 @@ string toString() { string s; + // FIXME this is terrible for (int i = 0; i < uint.sizeof * 8; ++i) { if (_bits & (1 << i)) { if (s != "") s ~= "|"; @@ -39,11 +44,11 @@ return s; } - bool is_set(Modifier m) const { + bool is_set(in Modifier m) const { return _bits & (1 << m); } - bool is_unset(Modifier m) const { + bool is_unset(in Modifier m) const { return !is_set(m); }