Mercurial > projects > doodle
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; |