comparison canvas.d @ 10:71ca82e0eb76

Checkpoint
author "David Bryant <bagnose@gmail.com>"
date Sat, 11 Jul 2009 22:49:41 +0930
parents 66b47e122b31
children fb571a3b1f0d
comparison
equal deleted inserted replaced
9:66b47e122b31 10:71ca82e0eb76
30 import icanvas; 30 import icanvas;
31 import cairo_support; 31 import cairo_support;
32 32
33 // x and y run right and up respectively 33 // x and y run right and up respectively
34 34
35 class Canvas : Table, ICanvas { 35 class Canvas : Table, Viewport {
36 static this() { 36 static this() {
37 ORIGIN = Point(0.0, 0.0); 37 ORIGIN = Point(0.0, 0.0);
38 INITIAL_PAGE_SIZE = Vector(210.0, 297.0); // A4 38 INITIAL_PAGE_SIZE = Vector(210.0, 297.0); // A4
39 } 39 }
40 40
41 this(ICanvasEventHandler event_handler) { 41 this(EventHandler event_handler) {
42 super(3, 3, 0); 42 super(3, 3, 0);
43 43
44 mEventHandler = event_handler; 44 mEventHandler = event_handler;
45 45
46 const double PPI = 120.0; 46 const double PPI = 120.0;
132 update_adjustments(); 132 update_adjustments();
133 update_rulers(); 133 update_rulers();
134 queueDraw(); 134 queueDraw();
135 } 135 }
136 136
137 override Point model_to_screen(Point model) const { return ORIGIN + mViewSize / 2.0 + mZoom * (model - mViewCentre); }
138 override Point screen_to_model(Point screen) const { return mViewCentre + (screen - mViewSize / 2.0 - ORIGIN) / mZoom; }
139 override Vector model_to_screen(Vector model) const { return mZoom * model; }
140 override Vector screen_to_model(Vector screen) const { return screen / mZoom; }
141 override double model_to_screen(double model) const { return mZoom * model; }
142 override double screen_to_model(double screen) const { return screen / mZoom; }
143
137 private { 144 private {
138 145
139 void onRealize(Widget widget) { 146 void onRealize(Widget widget) {
140 assert(widget is mDrawingArea); 147 assert(widget is mDrawingArea);
141 //writefln("Got realize\n"); 148 //writefln("Got realize\n");
183 190
184 Point screen_page_left_bottom = model_to_screen(mPageLeftBottom); 191 Point screen_page_left_bottom = model_to_screen(mPageLeftBottom);
185 Point screen_page_right_top = model_to_screen(mPageRightTop); 192 Point screen_page_right_top = model_to_screen(mPageRightTop);
186 193
187 cr.setSourceRgba(1.0, 1.0, 1.0, 1.0); 194 cr.setSourceRgba(1.0, 1.0, 1.0, 1.0);
188 rectangle(cr, screen_page_left_bottom, screen_page_right_top); 195 draw_rectangle(cr, Rectangle(screen_page_left_bottom, screen_page_right_top));
189 cr.fill(); 196 cr.fill();
190 197
191 cr.setSourceRgba(0.0, 0.0, 0.0, 1.0); 198 cr.setSourceRgba(0.0, 0.0, 0.0, 1.0);
192 rectangle(cr, screen_page_left_bottom, screen_page_right_top); 199 draw_rectangle(cr, Rectangle(screen_page_left_bottom, screen_page_right_top));
193 cr.stroke(); 200 cr.stroke();
194 } 201 }
195 202
196 return true; 203 return true;
197 } 204 }
344 mHAdjustment.valueChanged(); 351 mHAdjustment.valueChanged();
345 mVAdjustment.changed(); 352 mVAdjustment.changed();
346 mVAdjustment.valueChanged(); 353 mVAdjustment.valueChanged();
347 } 354 }
348 355
349 Point model_to_screen(Point model) { return ORIGIN + mViewSize / 2.0 + mZoom * (model - mViewCentre); }
350 Point screen_to_model(Point screen) { return mViewCentre + (screen - mViewSize / 2.0 - ORIGIN) / mZoom; }
351 Vector model_to_screen(Vector model) { return mZoom * model; }
352 Vector screen_to_model(Vector screen) { return screen / mZoom; }
353 double model_to_screen(double model) { return mZoom * model; }
354 double screen_to_model(double screen) { return screen / mZoom; }
355
356 double clamp_zoom(double zoom) { return clamp(zoom, 0.02, 50.0); } 356 double clamp_zoom(double zoom) { return clamp(zoom, 0.02, 50.0); }
357 357
358 static const Point ORIGIN; 358 static const Point ORIGIN;
359 static const Vector INITIAL_PAGE_SIZE; 359 static const Vector INITIAL_PAGE_SIZE;
360 360
361 ICanvasEventHandler mEventHandler; 361 EventHandler mEventHandler;
362 362
363 // Model units are in millimetres 363 // Model units are in millimetres
364 // Screen units are in pixels 364 // Screen units are in pixels
365 365
366 double mZoom; // pixels-per-mm 366 double mZoom; // pixels-per-mm
367 Point mViewCentre; // model: where in the model is the centre of our view 367 Point mViewCentre; // model: where in the model is the centre of our view
368 368
369 Point mCanvasLeftBottom; // model: bottom left corner of canvas 369 Point mCanvasLeftBottom; // model: bottom left corner of canvas
370 Point mCanvasRightTop; // model: top right corner of canvas 370 Point mCanvasRightTop; // model: top right corner of canvas
371 Point mPageLeftBottom; // model: bottom left corner of page 371 Point mPageLeftBottom; // model: bottom left corner of page
372 Point mPageRightTop; // model: top right corner of page 372 Point mPageRightTop; // model: top right corner of page
373 373
374 Vector mViewSize; // screen: size of view window in pixels 374 Vector mViewSize; // screen: size of view window in pixels
375 375
376 // Child widgets:
376 HRuler mHRuler; 377 HRuler mHRuler;
377 VRuler mVRuler; 378 VRuler mVRuler;
378 DrawingArea mDrawingArea; 379 DrawingArea mDrawingArea;
379 Adjustment mHAdjustment; 380 Adjustment mHAdjustment;
380 HScrollbar mHScrollbar; 381 HScrollbar mHScrollbar;