comparison doodle/gtk/canvas.d @ 81:d92b9f04b1e8

Bed time
author "David Bryant <bagnose@gmail.com>"
date Mon, 16 Aug 2010 00:04:27 +0930
parents b759414d2b72
children 0314b2e03f9b
comparison
equal deleted inserted replaced
80:b759414d2b72 81:d92b9f04b1e8
1 module doodle.gtk.canvas; 1 module doodle.gtk.canvas;
2 2
3 public { 3 public {
4 import doodle.dia.icanvas; 4 import doodle.dia.icanvas;
5 import doodle.gtk.events; 5 import doodle.gtk.events;
6 import doodle.gtk.cairo;
7 } 6 }
8 7
9 private { 8 private {
10 import doodle.core.logging; 9 import doodle.core.logging;
11 import doodle.tk.pixel_model; 10 import doodle.tk.screen_model;
12 import doodle.tk.cairo;
13 import doodle.dia.layer_stack; 11 import doodle.dia.layer_stack;
14 import doodle.gtk.conversions; 12 import doodle.gtk.conversions;
13 import doodle.gtk.cairo;
15 14
16 import cairo.Surface; 15 import cairo.Surface;
16 import cairo.Context;
17 17
18 import gtk.Widget; 18 import gtk.Widget;
19 import gtk.Toolbar; 19 import gtk.Toolbar;
20 import gtk.Table; 20 import gtk.Table;
21 import gtk.HRuler; 21 import gtk.HRuler;
68 68
69 _drawingArea = new DrawingArea; 69 _drawingArea = new DrawingArea;
70 _drawingArea.addOnRealize(&onRealize); 70 _drawingArea.addOnRealize(&onRealize);
71 _drawingArea.addOnConfigure(&onConfigure); 71 _drawingArea.addOnConfigure(&onConfigure);
72 _drawingArea.addOnExpose(&onExpose); 72 _drawingArea.addOnExpose(&onExpose);
73 _drawingArea.addOnButtonPress(&onButtonPress); // FIXME merge delegate with next 73 _drawingArea.addOnButtonPress(&onButtonPress);
74 _drawingArea.addOnButtonRelease(&onButtonRelease); 74 _drawingArea.addOnButtonRelease(&onButtonRelease);
75 _drawingArea.addOnKeyPress(&onKeyPressEvent); // FIXME merge delegate with next 75 _drawingArea.addOnKeyPress(&onKeyPressEvent);
76 _drawingArea.addOnKeyRelease(&onKeyReleaseEvent); 76 _drawingArea.addOnKeyRelease(&onKeyReleaseEvent);
77 _drawingArea.addOnMotionNotify(&onMotionNotify); 77 _drawingArea.addOnMotionNotify(&onMotionNotify);
78 _drawingArea.addOnScroll(&onScroll); 78 _drawingArea.addOnScroll(&onScroll);
79 _drawingArea.addOnEnterNotify(&onEnterNotify); // FIXME merge delegate with next 79 _drawingArea.addOnEnterNotify(&onEnterNotify);
80 _drawingArea.addOnLeaveNotify(&onLeaveNotify); 80 _drawingArea.addOnLeaveNotify(&onLeaveNotify);
81 81
82 _drawingArea.addOnFocusIn(&onFocusIn); 82 _drawingArea.addOnFocusIn(&onFocusIn);
83 _drawingArea.addOnFocusOut(&onFocusOut); 83 _drawingArea.addOnFocusOut(&onFocusOut);
84 _drawingArea.addOnMoveFocus(&onMoveFocus); 84 _drawingArea.addOnMoveFocus(&onMoveFocus);
232 modelCr.scale(_screenModel.zoom, -_screenModel.zoom); 232 modelCr.scale(_screenModel.zoom, -_screenModel.zoom);
233 233
234 immutable Point viewLeftBottom = _screenModel.screenToModel(Point(0.0, 0.0)); 234 immutable Point viewLeftBottom = _screenModel.screenToModel(Point(0.0, 0.0));
235 modelCr.translate(-viewLeftBottom.x, -viewLeftBottom.y); 235 modelCr.translate(-viewLeftBottom.x, -viewLeftBottom.y);
236 236
237 rectangle(modelCr, modelDamage); 237 modelCr.rectangle(modelDamage.x0, modelDamage.y0, modelDamage.w, modelDamage.h);
238 modelCr.clip; 238 modelCr.clip;
239 } 239 }
240 240
241 { 241 {
242 // Setup screen context and clip 242 // Setup screen context and clip
243 screenCr.translate(0.0, _screenModel.viewBoundsScreen.h); 243 screenCr.translate(0.0, _screenModel.viewBoundsScreen.h);
244 screenCr.scale(1.0, -1.0); 244 screenCr.scale(1.0, -1.0);
245 245
246 rectangle(screenCr, screenDamage); 246 screenCr.rectangle(screenDamage.x0, screenDamage.y0, screenDamage.w, screenDamage.h);
247 screenCr.clip; 247 screenCr.clip;
248 } 248 }
249 249
250 screenCr.save; { 250 screenCr.save; {
251 // Fill the background with light grey 251 // Fill the background with light grey
252 screenCr.setSourceRgba(0.9, 0.9, 0.9, 1.0); 252 screenCr.setSourceRgba(0.9, 0.9, 0.9, 1.0);
253 rectangle(screenCr, screenDamage); 253 screenCr.rectangle(screenDamage.x0, screenDamage.y0, screenDamage.w, screenDamage.h);
254 screenCr.fill; 254 screenCr.fill;
255 } screenCr.restore; 255 } screenCr.restore;
256 256
257 _layerStack.draw(screenDamage, new CairoDrawable(screenCr), 257 _layerStack.draw(screenDamage, new CairoDrawable(screenCr),
258 modelDamage, new CairoDrawable(modelCr)); 258 modelDamage, new CairoDrawable(modelCr));
366 void updateRulers() { 366 void updateRulers() {
367 immutable Point viewLeftBottom = _screenModel.screenToModel(_screenModel.viewBoundsScreen.corner0); 367 immutable Point viewLeftBottom = _screenModel.screenToModel(_screenModel.viewBoundsScreen.corner0);
368 immutable Point viewRightTop = _screenModel.screenToModel(_screenModel.viewBoundsScreen.corner1); 368 immutable Point viewRightTop = _screenModel.screenToModel(_screenModel.viewBoundsScreen.corner1);
369 369
370 // Define these just to obtain the position 370 // Define these just to obtain the position
371 // below and we can preserve it 371 // below so we can preserve it
372 double lower, upper, position, maxSize; 372 double lower, upper, position, maxSize;
373 373
374 _hRuler.getRange(lower, upper, position, maxSize); 374 _hRuler.getRange(lower, upper, position, maxSize);
375 _hRuler.setRange(viewLeftBottom.x, 375 _hRuler.setRange(viewLeftBottom.x,
376 viewRightTop.x, 376 viewRightTop.x,
434 434
435 IEventHandler _eventHandler; 435 IEventHandler _eventHandler;
436 IGrid _grid; 436 IGrid _grid;
437 double _pixelsPerMillimetre; 437 double _pixelsPerMillimetre;
438 LayerStack _layerStack; 438 LayerStack _layerStack;
439
440 immutable CursorType[Cursor] _cursors;
441 439
442 // Child widgets: 440 // Child widgets:
443 HRuler _hRuler; 441 HRuler _hRuler;
444 VRuler _vRuler; 442 VRuler _vRuler;
445 DrawingArea _drawingArea; 443 DrawingArea _drawingArea;
448 Adjustment _vAdjustment; 446 Adjustment _vAdjustment;
449 VScrollbar _vScrollbar; 447 VScrollbar _vScrollbar;
450 448
451 Rectangle _damageScreen; 449 Rectangle _damageScreen;
452 ScreenModel _screenModel; 450 ScreenModel _screenModel;
451
452 immutable CursorType[Cursor] _cursors;
453 } 453 }
454 } 454 }