Mercurial > projects > doodle
diff canvas.d @ 10:71ca82e0eb76
Checkpoint
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Sat, 11 Jul 2009 22:49:41 +0930 |
parents | 66b47e122b31 |
children | fb571a3b1f0d |
line wrap: on
line diff
--- a/canvas.d Sat Jul 11 22:06:09 2009 +0930 +++ b/canvas.d Sat Jul 11 22:49:41 2009 +0930 @@ -32,13 +32,13 @@ // x and y run right and up respectively -class Canvas : Table, ICanvas { +class Canvas : Table, Viewport { static this() { ORIGIN = Point(0.0, 0.0); INITIAL_PAGE_SIZE = Vector(210.0, 297.0); // A4 } - this(ICanvasEventHandler event_handler) { + this(EventHandler event_handler) { super(3, 3, 0); mEventHandler = event_handler; @@ -134,6 +134,13 @@ queueDraw(); } + override Point model_to_screen(Point model) const { return ORIGIN + mViewSize / 2.0 + mZoom * (model - mViewCentre); } + override Point screen_to_model(Point screen) const { return mViewCentre + (screen - mViewSize / 2.0 - ORIGIN) / mZoom; } + override Vector model_to_screen(Vector model) const { return mZoom * model; } + override Vector screen_to_model(Vector screen) const { return screen / mZoom; } + override double model_to_screen(double model) const { return mZoom * model; } + override double screen_to_model(double screen) const { return screen / mZoom; } + private { void onRealize(Widget widget) { @@ -185,11 +192,11 @@ Point screen_page_right_top = model_to_screen(mPageRightTop); cr.setSourceRgba(1.0, 1.0, 1.0, 1.0); - rectangle(cr, screen_page_left_bottom, screen_page_right_top); + draw_rectangle(cr, Rectangle(screen_page_left_bottom, screen_page_right_top)); cr.fill(); cr.setSourceRgba(0.0, 0.0, 0.0, 1.0); - rectangle(cr, screen_page_left_bottom, screen_page_right_top); + draw_rectangle(cr, Rectangle(screen_page_left_bottom, screen_page_right_top)); cr.stroke(); } @@ -346,24 +353,17 @@ mVAdjustment.valueChanged(); } - Point model_to_screen(Point model) { return ORIGIN + mViewSize / 2.0 + mZoom * (model - mViewCentre); } - Point screen_to_model(Point screen) { return mViewCentre + (screen - mViewSize / 2.0 - ORIGIN) / mZoom; } - Vector model_to_screen(Vector model) { return mZoom * model; } - Vector screen_to_model(Vector screen) { return screen / mZoom; } - double model_to_screen(double model) { return mZoom * model; } - double screen_to_model(double screen) { return screen / mZoom; } - double clamp_zoom(double zoom) { return clamp(zoom, 0.02, 50.0); } static const Point ORIGIN; static const Vector INITIAL_PAGE_SIZE; - ICanvasEventHandler mEventHandler; + EventHandler mEventHandler; // Model units are in millimetres // Screen units are in pixels - double mZoom; // pixels-per-mm + double mZoom; // pixels-per-mm Point mViewCentre; // model: where in the model is the centre of our view Point mCanvasLeftBottom; // model: bottom left corner of canvas @@ -373,6 +373,7 @@ Vector mViewSize; // screen: size of view window in pixels + // Child widgets: HRuler mHRuler; VRuler mVRuler; DrawingArea mDrawingArea;