# HG changeset patch # User David Bryant # Date 1247470712 -34200 # Node ID df8d81d9f499edf9cb2d6806428462be9d1a2f2b # Parent c643c04e3f5eb1f7766791f3f225591534ae9a17 Lasso fiddling diff -r c643c04e3f5e -r df8d81d9f499 canvas.d --- a/canvas.d Mon Jul 13 16:46:21 2009 +0930 +++ b/canvas.d Mon Jul 13 17:08:32 2009 +0930 @@ -135,6 +135,10 @@ mDamage = mDamage | model_to_pixel(area); } + override void damage_pixel(Rectangle area) { + mDamage = mDamage | area; + } + override double zoom() const { return mZoom; } @@ -231,10 +235,12 @@ Vector(cast(double)event.area.width, cast(double)event.area.height)); model_cr.save; pixel_cr.save; { + // FIXME restore clipping + // Setup model context - rectangle(model_cr, damage); - model_cr.clip; + //rectangle(model_cr, damage); + //model_cr.clip; GtkAdjustment * h_gtkAdjustment = mHAdjustment.getAdjustmentStruct; GtkAdjustment * v_gtkAdjustment = mVAdjustment.getAdjustmentStruct; @@ -247,14 +253,14 @@ pixel_cr.translate(0.0, mViewSize.y); pixel_cr.scale(1.0, -1.0); - rectangle(pixel_cr, damage); - pixel_cr.clip; + //rectangle(pixel_cr, damage); + //pixel_cr.clip; // Fill the background pixel_cr.save; { // Make the window light grey - pixel_cr.setSourceRgba(1.0, 1.0, 1.0, 0.7); + pixel_cr.setSourceRgba(0.6, 0.6, 0.6, 1.0); rectangle(pixel_cr, damage); pixel_cr.fill; } pixel_cr.restore; @@ -442,14 +448,19 @@ void process_damage() { if (mDamage.valid) { - writefln("Damage: %s", mDamage); + //writefln("Damage: %s", mDamage); int x, y, w, h; mDamage.get_quantised(x, y, w, h); - mDrawingArea.queueDrawArea(x, cast(int)mViewSize.y - y, w, h); + //writefln("Quantised damage: %d %d %d %d", x, y, w, h); + y = cast(int)mViewSize.y - (y + h); + //writefln("Flipped Quantised damage: %d %d %d %d", x, y, w, h); + // FIXME only redraw the damaged area + //mDrawingArea.queueDrawArea(x, y, w, h); + mDrawingArea.queueDraw(); mDamage = Rectangle.DEFAULT; } else { - writefln("No damage"); + //writefln("No damage"); } } diff -r c643c04e3f5e -r df8d81d9f499 icanvas.d --- a/icanvas.d Mon Jul 13 16:46:21 2009 +0930 +++ b/icanvas.d Mon Jul 13 17:08:32 2009 +0930 @@ -8,6 +8,7 @@ void rel_zoom(Point pixel_datum, double factor); void rel_pan(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 // FIXME not sure about these: double zoom() const; @@ -26,7 +27,6 @@ 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_expose(Viewport viewport, ExposeEvent event); //bool handle_enter(Viewport viewport, CrossingEvent event); //bool handle_leave(Viewport viewport, CrossingEvent event); //bool handle_focus_in(Viewport viewport, FocusEvent event); diff -r c643c04e3f5e -r df8d81d9f499 page_layer.d --- a/page_layer.d Mon Jul 13 16:46:21 2009 +0930 +++ b/page_layer.d Mon Jul 13 17:08:32 2009 +0930 @@ -26,24 +26,17 @@ Context model_cr, Context pixel_cr) const { // Make the paper white, with a border - model_cr.setSourceRgba(1.0, 0.5, 1.0, 0.5); - rectangle(model_cr, mPageGeometry); - model_cr.fill(); - - model_cr.setSourceRgba(0.3, 0.0, 0.0, 0.5); - rectangle(model_cr, mPageGeometry); - model_cr.stroke(); + model_cr.save; { + model_cr.setSourceRgba(1.0, 1.0, 1.0, 1.0); + rectangle(model_cr, mPageGeometry); + model_cr.fill; + } model_cr.restore; - /* - pixel_cr.setSourceRgba(1.0, 1.0, 0.5, 0.4); - rectangle(pixel_cr, viewport.model_to_pixel(mPageGeometry)); - pixel_cr.fill(); - - pixel_cr.setSourceRgba(0.0, 0.3, 0.0, 0.4); - rectangle(pixel_cr, viewport.model_to_pixel(mPageGeometry)); - //rectangle(pixel_cr, viewport.model_to_pixel(Rectangle(mPageGeometry.position, mPageGeometry.size / 2.0))); - pixel_cr.stroke(); - */ + model_cr.save; { + model_cr.setSourceRgba(0.0, 0.0, 0.0, 1.0); + rectangle(model_cr, mPageGeometry); + model_cr.stroke; + } model_cr.restore; } private { diff -r c643c04e3f5e -r df8d81d9f499 standard_tools.d --- a/standard_tools.d Mon Jul 13 16:46:21 2009 +0930 +++ b/standard_tools.d Mon Jul 13 17:08:32 2009 +0930 @@ -5,6 +5,7 @@ } private { + import cairo_support; import std.math; import std.stdio; } @@ -20,10 +21,6 @@ } } - override bool handle_button_release(Viewport viewport, in ButtonEvent event) { - return true; - } - override bool handle_motion(Viewport viewport, in MotionEvent event) { if (event.mask.is_set(Modifier.MIDDLE_BUTTON)) { viewport.rel_pan(mLastPosition - event.pixel_point); @@ -61,14 +58,6 @@ return true; } - override bool handle_key_press(Viewport viewport, in KeyEvent event) { - return false; - } - - override bool handle_key_release(Viewport viewport, in KeyEvent event) { - return false; - } - private { Point mLastPosition; static invariant double AMOUNT = 60.0; @@ -76,18 +65,6 @@ } final class ZoomTool : Tool { - override bool handle_button_press(Viewport viewport, in ButtonEvent event) { - return false; - } - - override bool handle_button_release(Viewport viewport, in ButtonEvent event) { - return false; - } - - override bool handle_motion(Viewport viewport, in MotionEvent event) { - return false; - } - override bool handle_scroll(Viewport viewport, in ScrollEvent event) { if (event.mask.is_set(Modifier.CONTROL)) { if (event.scroll_direction == ScrollDirection.DOWN) { @@ -107,14 +84,6 @@ } } - override bool handle_key_press(Viewport viewport, in KeyEvent event) { - return false; - } - - override bool handle_key_release(Viewport viewport, in KeyEvent event) { - return false; - } - private { static invariant double ZOOM = sqrt(2.0); } @@ -125,7 +94,7 @@ if (event.button_name == ButtonName.LEFT) { writefln("Start lasso"); mActive = true; - mAnchorPoint = event.pixel_point; + mAnchorPoint = mCurrentPoint = event.pixel_point; return true; } else { @@ -137,6 +106,7 @@ if (event.button_name == ButtonName.LEFT && mActive) { writefln("End lasso"); mActive = false; + viewport.damage_pixel(Rectangle(mAnchorPoint, mCurrentPoint)); return true; } else { @@ -144,28 +114,32 @@ } } + // FIXME account for the line width... + override bool handle_motion(Viewport viewport, in MotionEvent event) { if (mActive) { - writefln("lassooing"); + viewport.damage_pixel(Rectangle(mAnchorPoint, mCurrentPoint)); + mCurrentPoint = event.pixel_point; + viewport.damage_pixel(Rectangle(mAnchorPoint, mCurrentPoint)); } return false; } - override bool handle_scroll(Viewport viewport, in ScrollEvent event) { - return false; - } - - override bool handle_key_press(Viewport viewport, in KeyEvent event) { - return false; - } - - override bool handle_key_release(Viewport viewport, in KeyEvent event) { - return false; + override void draw(const Viewport viewport, in Rectangle damage, Context model_cr, Context pixel_cr) const { + if (mActive) { + pixel_cr.save; { + pixel_cr.setSourceRgba(1.0, 0.0, 0.0, 1.0); + //writefln("Drawing rectangle: %s", Rectangle(mCurrentPoint, mAnchorPoint)); + rectangle(pixel_cr, Rectangle(mCurrentPoint, mAnchorPoint)); + pixel_cr.stroke; + } pixel_cr.restore; + } } private { bool mActive; + Point mCurrentPoint; Point mAnchorPoint; // Pixel } } diff -r c643c04e3f5e -r df8d81d9f499 tool.d --- a/tool.d Mon Jul 13 16:46:21 2009 +0930 +++ b/tool.d Mon Jul 13 17:08:32 2009 +0930 @@ -32,19 +32,16 @@ abstract void stop(IToolStack tool_stack); */ - void draw(const Viewport viewport, in Rectangle damage, Context model_cr, Context pixel_cr) const { - } + 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(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_expose(Viewport viewport, ExposeEvent 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); + void draw(const Viewport viewport, in Rectangle damage, Context model_cr, Context pixel_cr) const { } } - diff -r c643c04e3f5e -r df8d81d9f499 tool_layer.d --- a/tool_layer.d Mon Jul 13 16:46:21 2009 +0930 +++ b/tool_layer.d Mon Jul 13 17:08:32 2009 +0930 @@ -100,6 +100,10 @@ override void draw(const Viewport viewport, in Rectangle damage, Context model_cr, Context screen_cr) const { + // FIXME this isn't how we will really draw the tools... + foreach (const Tool tool; mTools) { + tool.draw(viewport, damage, model_cr, screen_cr); + } } /*