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;