annotate doodle/gtk/canvas.d @ 74:c03ed75c0f8e

Icky
author "David Bryant <bagnose@gmail.com>"
date Sun, 15 Aug 2010 01:11:58 +0930
parents 6f2525e170f2
children 3cac0ee8ca35
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28
1754cb773d41 Part-way through getting to compile with configure/builder.
Graham St Jack <graham.stjack@internode.on.net>
parents: 27
diff changeset
1 module doodle.gtk.canvas;
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
2
16
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
3 public {
28
1754cb773d41 Part-way through getting to compile with configure/builder.
Graham St Jack <graham.stjack@internode.on.net>
parents: 27
diff changeset
4 import doodle.dia.icanvas;
72
5cc2de64f6d0 Cautious Saturday night commits
"David Bryant <bagnose@gmail.com>"
parents: 71
diff changeset
5 import doodle.gtk.events;
16
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
6 }
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
7
16
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
8 private {
67
31d10176415d Checkpoint
daveb
parents: 64
diff changeset
9 import doodle.core.misc;
40
1f97022e5c6d Checkpoint. Development continues...
daveb
parents: 35
diff changeset
10 import doodle.core.logging;
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
11 import doodle.tk.cairo;
28
1754cb773d41 Part-way through getting to compile with configure/builder.
Graham St Jack <graham.stjack@internode.on.net>
parents: 27
diff changeset
12 import doodle.gtk.conversions;
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
13 import doodle.tk.pixel_model;
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
14
16
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
15 import cairo.Surface;
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
16
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
17 import gtk.Widget;
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
18 import gtk.Toolbar;
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
19 import gtk.Table;
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
20 import gtk.HRuler;
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
21 import gtk.VRuler;
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
22 import gtk.Range;
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
23 import gtk.HScrollbar;
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
24 import gtk.VScrollbar;
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
25 import gtk.DrawingArea;
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
26 import gtk.Adjustment;
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
27
16
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
28 import gdk.Drawable;
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
29
16
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
30 import gtkc.gtk;
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
31 import gtkc.gtktypes;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
32 //import gtkc.gdktypes;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
33
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
34 import std.math;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
35 import std.stdio;
16
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
36 }
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
37
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
38 //
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
39 // TODO
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
40 // Pass out a scope Drawing reference to the layers for drawing on instead of cairo context.
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
41 // Create a class called LayerStack so we don't have to provide that non-gtk behaviour here.
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
42 //
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
43
68
daveb
parents: 67
diff changeset
44 final class Canvas : Table, private IViewport {
69
d540f7e4af9e Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 68
diff changeset
45 this(in Layer[] layers, IEventHandler eventHandler, IGrid grid, in double pixelsPerMillimetre) {
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
46 super(3, 3, 0);
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
47
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
48 _damageScreen = Rectangle.DEFAULT;
17
c643c04e3f5e Checkpoint
David Bryant <daveb@acres.com.au>
parents: 16
diff changeset
49
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
50 _layers = layers.dup;
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
51 _eventHandler = eventHandler;
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
52 _grid = grid;
69
d540f7e4af9e Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 68
diff changeset
53 _pixelsPerMillimetre = pixelsPerMillimetre;
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
54
13
f0ade1b49fe7 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 12
diff changeset
55 // Create our child widgets and register callbacks
f0ade1b49fe7 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 12
diff changeset
56
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
57 _hRuler = new HRuler;
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
58 attach(_hRuler,
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
59 1, 2,
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
60 0, 1,
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
61 AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.SHRINK,
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
62 0, 0);
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
63 _hRuler.setMetric(MetricType.PIXELS);
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
64
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
65 _vRuler = new VRuler;
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
66 attach(_vRuler,
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
67 0, 1,
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
68 1, 2,
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
69 AttachOptions.SHRINK, AttachOptions.FILL | AttachOptions.EXPAND,
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
70 0, 0);
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
71 _vRuler.setMetric(MetricType.PIXELS);
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
72
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
73 _drawingArea = new DrawingArea;
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
74 _drawingArea.addOnRealize(&onRealize);
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
75 _drawingArea.addOnConfigure(&onConfigure);
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
76 _drawingArea.addOnExpose(&onExpose);
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
77 _drawingArea.addOnButtonPress(&onButtonPress); // FIXME merge delegate with next
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
78 _drawingArea.addOnButtonRelease(&onButtonRelease);
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
79 _drawingArea.addOnKeyPress(&onKeyPressEvent); // FIXME merge delegate with next
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
80 _drawingArea.addOnKeyRelease(&onKeyReleaseEvent);
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
81 _drawingArea.addOnMotionNotify(&onMotionNotify);
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
82 _drawingArea.addOnScroll(&onScroll);
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
83 _drawingArea.addOnEnterNotify(&onEnterNotify); // FIXME merge delegate with next
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
84 _drawingArea.addOnLeaveNotify(&onLeaveNotify);
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
85
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
86 _drawingArea.addOnFocusIn(&onFocusIn);
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
87 _drawingArea.addOnFocusOut(&onFocusOut);
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
88 _drawingArea.addOnMoveFocus(&onMoveFocus);
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
89 _drawingArea.addOnGrabBroken(&onGrabBroken);
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
90 _drawingArea.addOnGrabFocus(&onGrabFocus);
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
91 _drawingArea.addOnGrabNotify(&onGrabNotify);
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
92 // addOnPopupMenu
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
93 // addOnQueryTooltip
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
94 // addOnSelection*
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
95 _drawingArea.setEvents(EventMask.EXPOSURE_MASK |
20
d6e7a5a6f008 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 19
diff changeset
96 EventMask.POINTER_MOTION_MASK |
d6e7a5a6f008 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 19
diff changeset
97 EventMask.POINTER_MOTION_HINT_MASK |
d6e7a5a6f008 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 19
diff changeset
98 EventMask.BUTTON_MOTION_MASK |
d6e7a5a6f008 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 19
diff changeset
99 EventMask.BUTTON_PRESS_MASK |
d6e7a5a6f008 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 19
diff changeset
100 EventMask.BUTTON_RELEASE_MASK |
d6e7a5a6f008 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 19
diff changeset
101 EventMask.KEY_PRESS_MASK |
d6e7a5a6f008 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 19
diff changeset
102 EventMask.KEY_RELEASE_MASK |
d6e7a5a6f008 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 19
diff changeset
103 EventMask.ENTER_NOTIFY_MASK |
d6e7a5a6f008 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 19
diff changeset
104 EventMask.LEAVE_NOTIFY_MASK |
d6e7a5a6f008 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 19
diff changeset
105 EventMask.FOCUS_CHANGE_MASK |
d6e7a5a6f008 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 19
diff changeset
106 EventMask.SCROLL_MASK);
d6e7a5a6f008 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 19
diff changeset
107
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
108 _drawingArea.setCanFocus(true);
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
109
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
110 attach(_drawingArea,
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
111 1, 2,
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
112 1, 2,
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
113 AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL | AttachOptions.EXPAND,
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
114 0, 0);
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
115
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
116 // value, lower, upper, step-inc, page-inc, page-size
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
117 // Give the adjustments dummy values until we receive a configure
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
118 _hAdjustment = new Adjustment(0.0, 0.0, 1.0, 0.2, 0.5, 0.5);
67
31d10176415d Checkpoint
daveb
parents: 64
diff changeset
119 _hAdjustment.addOnValueChanged(&onAdjustmentValueChanged);
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
120 _hScrollbar = new HScrollbar(_hAdjustment);
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
121 _hScrollbar.setInverted(false);
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
122 attach(_hScrollbar,
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
123 1, 2,
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
124 2, 3,
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
125 AttachOptions.FILL | AttachOptions.EXPAND,
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
126 AttachOptions.SHRINK,
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
127 0, 0);
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
128
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
129 _vAdjustment = new Adjustment(0.0, 0.0, 1.0, 0.2, 0.5, 0.5);
67
31d10176415d Checkpoint
daveb
parents: 64
diff changeset
130 _vAdjustment.addOnValueChanged(&onAdjustmentValueChanged);
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
131 _vScrollbar = new VScrollbar(_vAdjustment);
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
132 _vScrollbar.setInverted(true);
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
133 attach(_vScrollbar,
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
134 2, 3,
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
135 1, 2,
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
136 AttachOptions.SHRINK,
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
137 AttachOptions.FILL | AttachOptions.EXPAND,
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
138 0, 0);
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
139 }
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
140
68
daveb
parents: 67
diff changeset
141 protected { // XXX the compiler complains about unimplemented methods if this is private
62
6c3993f4c3eb Checkpoint
daveb
parents: 58
diff changeset
142
68
daveb
parents: 67
diff changeset
143 // IViewport overrides:
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
144
72
5cc2de64f6d0 Cautious Saturday night commits
"David Bryant <bagnose@gmail.com>"
parents: 71
diff changeset
145 void zoomRelative(in Point screenDatum, in double factor) {
5cc2de64f6d0 Cautious Saturday night commits
"David Bryant <bagnose@gmail.com>"
parents: 71
diff changeset
146 _pixelModel.zoomRelative(factor, screenDatum);
27
f3d91579bb28 Checkpoint
David Bryant <daveb@acres.com.au>
parents: 26
diff changeset
147
68
daveb
parents: 67
diff changeset
148 consolidateBounds;
daveb
parents: 67
diff changeset
149
daveb
parents: 67
diff changeset
150 updateAdjustments;
daveb
parents: 67
diff changeset
151 updateRulers;
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
152 _grid.zoomChanged(_pixelModel.zoom);
68
daveb
parents: 67
diff changeset
153 queueDraw;
27
f3d91579bb28 Checkpoint
David Bryant <daveb@acres.com.au>
parents: 26
diff changeset
154 }
f3d91579bb28 Checkpoint
David Bryant <daveb@acres.com.au>
parents: 26
diff changeset
155
72
5cc2de64f6d0 Cautious Saturday night commits
"David Bryant <bagnose@gmail.com>"
parents: 71
diff changeset
156 void panRelative(in Vector screenDisplacement) {
5cc2de64f6d0 Cautious Saturday night commits
"David Bryant <bagnose@gmail.com>"
parents: 71
diff changeset
157 _pixelModel.panRelativePixel(screenDisplacement);
68
daveb
parents: 67
diff changeset
158
daveb
parents: 67
diff changeset
159 consolidateBounds;
daveb
parents: 67
diff changeset
160
daveb
parents: 67
diff changeset
161 updateAdjustments;
daveb
parents: 67
diff changeset
162 updateRulers;
daveb
parents: 67
diff changeset
163 queueDraw;
daveb
parents: 67
diff changeset
164 }
daveb
parents: 67
diff changeset
165
daveb
parents: 67
diff changeset
166 void setCursor(in Cursor cursor) {
daveb
parents: 67
diff changeset
167 CursorType cursorType;
27
f3d91579bb28 Checkpoint
David Bryant <daveb@acres.com.au>
parents: 26
diff changeset
168
68
daveb
parents: 67
diff changeset
169 switch (cursor) {
daveb
parents: 67
diff changeset
170 case Cursor.DEFAULT:
daveb
parents: 67
diff changeset
171 cursorType = CursorType.ARROW;
daveb
parents: 67
diff changeset
172 break;
daveb
parents: 67
diff changeset
173 case Cursor.HAND:
daveb
parents: 67
diff changeset
174 cursorType = CursorType.HAND1;
daveb
parents: 67
diff changeset
175 break;
daveb
parents: 67
diff changeset
176 case Cursor.CROSSHAIR:
daveb
parents: 67
diff changeset
177 cursorType = CursorType.CROSSHAIR;
daveb
parents: 67
diff changeset
178 break;
daveb
parents: 67
diff changeset
179 case Cursor.PENCIL:
daveb
parents: 67
diff changeset
180 cursorType = CursorType.PENCIL;
daveb
parents: 67
diff changeset
181 break;
daveb
parents: 67
diff changeset
182 default:
daveb
parents: 67
diff changeset
183 assert(0);
daveb
parents: 67
diff changeset
184 }
17
c643c04e3f5e Checkpoint
David Bryant <daveb@acres.com.au>
parents: 16
diff changeset
185
68
daveb
parents: 67
diff changeset
186 _drawingArea.setCursor(new gdk.Cursor.Cursor(cursorType));
daveb
parents: 67
diff changeset
187 }
daveb
parents: 67
diff changeset
188
daveb
parents: 67
diff changeset
189 void damageModel(in Rectangle area) {
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
190 _damageScreen = _damageScreen | _pixelModel.modelToPixel(area);
68
daveb
parents: 67
diff changeset
191 }
daveb
parents: 67
diff changeset
192
daveb
parents: 67
diff changeset
193 void damagePixel(in Rectangle area) {
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
194 _damageScreen = _damageScreen | area;
68
daveb
parents: 67
diff changeset
195 }
18
df8d81d9f499 Lasso fiddling
David Bryant <daveb@acres.com.au>
parents: 17
diff changeset
196 }
df8d81d9f499 Lasso fiddling
David Bryant <daveb@acres.com.au>
parents: 17
diff changeset
197
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
198 private {
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
199
74
"David Bryant <bagnose@gmail.com>"
parents: 73
diff changeset
200 Rectangle layerBounds() const {
70
0e61702c6ea6 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 69
diff changeset
201 Rectangle bounds = Rectangle.DEFAULT;
0e61702c6ea6 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 69
diff changeset
202 foreach (layer; _layers) { bounds = bounds | layer.bounds; }
0e61702c6ea6 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 69
diff changeset
203 assert(bounds.valid);
0e61702c6ea6 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 69
diff changeset
204 return bounds;
0e61702c6ea6 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 69
diff changeset
205 }
41
daveb
parents: 40
diff changeset
206
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
207 void initialiseBounds(in Rectangle viewBounds) {
70
0e61702c6ea6 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 69
diff changeset
208 Rectangle lb = layerBounds;
41
daveb
parents: 40
diff changeset
209
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
210 // FIXME use a function that grows a rectangle about its centre
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
211 // and change 2.0 to a class-level constant
70
0e61702c6ea6 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 69
diff changeset
212 Rectangle paddedLayerBounds = expand(move(lb, - lb.size), 2.0 * lb.size);
41
daveb
parents: 40
diff changeset
213
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
214 _pixelModel = new PixelModel(0.25 * _pixelsPerMillimetre, paddedLayerBounds, viewBounds);
62
6c3993f4c3eb Checkpoint
daveb
parents: 58
diff changeset
215
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
216 _grid.zoomChanged(_pixelModel.zoom);
62
6c3993f4c3eb Checkpoint
daveb
parents: 58
diff changeset
217
6c3993f4c3eb Checkpoint
daveb
parents: 58
diff changeset
218 updateAdjustments;
6c3993f4c3eb Checkpoint
daveb
parents: 58
diff changeset
219 updateRulers;
6c3993f4c3eb Checkpoint
daveb
parents: 58
diff changeset
220 }
6c3993f4c3eb Checkpoint
daveb
parents: 58
diff changeset
221
6c3993f4c3eb Checkpoint
daveb
parents: 58
diff changeset
222 void consolidateBounds() {
70
0e61702c6ea6 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 69
diff changeset
223 Rectangle lb = layerBounds;
16
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
224
70
0e61702c6ea6 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 69
diff changeset
225 // FIXME likewise as above
0e61702c6ea6 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 69
diff changeset
226 Rectangle paddedLayerBounds = expand(move(lb, - lb.size), 2.0 * lb.size);
62
6c3993f4c3eb Checkpoint
daveb
parents: 58
diff changeset
227
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
228 _pixelModel.consolidateCanvasBounds(paddedLayerBounds);
16
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
229
62
6c3993f4c3eb Checkpoint
daveb
parents: 58
diff changeset
230 updateAdjustments;
6c3993f4c3eb Checkpoint
daveb
parents: 58
diff changeset
231 updateRulers;
6c3993f4c3eb Checkpoint
daveb
parents: 58
diff changeset
232 }
35
3f6bb0bb22dc Beginnings of grid
David Bryant <bagnose@gmail.com>
parents: 34
diff changeset
233
62
6c3993f4c3eb Checkpoint
daveb
parents: 58
diff changeset
234 bool onConfigure(GdkEventConfigure * event, Widget widget) {
6c3993f4c3eb Checkpoint
daveb
parents: 58
diff changeset
235 assert(widget is _drawingArea);
6c3993f4c3eb Checkpoint
daveb
parents: 58
diff changeset
236
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
237 Rectangle viewBounds = Rectangle(Point(0.0, 0.0), Vector(cast(double)event.width, cast(double)event.height));
62
6c3993f4c3eb Checkpoint
daveb
parents: 58
diff changeset
238
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
239 if (_pixelModel is null) {
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
240 initialiseBounds(viewBounds);
16
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
241 }
41
daveb
parents: 40
diff changeset
242 else {
62
6c3993f4c3eb Checkpoint
daveb
parents: 58
diff changeset
243 consolidateBounds;
41
daveb
parents: 40
diff changeset
244 }
16
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
245
2
d6f44347373d * Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents: 0
diff changeset
246 return true;
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
247 }
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
248
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
249 bool onExpose(GdkEventExpose * event, Widget widget) {
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
250 assert(widget is _drawingArea);
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
251
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
252 Drawable dr = _drawingArea.getWindow;
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
253
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
254 int width, height;
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
255 dr.getSize(width, height);
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
256 //trace("Got expose %dx%d\n", width, height);
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
257
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
258 scope modelCr = new Context(dr);
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
259 scope pixelCr = new Context(dr);
12
a093c4fbdd43 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 11
diff changeset
260
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
261 Rectangle pixelDamage =
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
262 event is null ? _pixelModel.viewBounds :
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
263 // FIXME next line sucks
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
264 Rectangle(_pixelModel.viewBounds.position + Vector(cast(double)event.area.x, _pixelModel.viewBounds.h - cast(double)(event.area.y + event.area.height)),
11
fb571a3b1f0d Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 10
diff changeset
265 Vector(cast(double)event.area.width, cast(double)event.area.height));
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
266
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
267 Rectangle modelDamage = _pixelModel.pixelToModel(pixelDamage);
19
22abbf4cde96 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 18
diff changeset
268
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
269 //trace("Pixel damage: %s, model damage: %s", pixelDamage, modelDamage);
19
22abbf4cde96 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 18
diff changeset
270
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
271 modelCr.save; pixelCr.save; {
67
31d10176415d Checkpoint
daveb
parents: 64
diff changeset
272 {
31d10176415d Checkpoint
daveb
parents: 64
diff changeset
273 // Setup model context and clip
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
274 modelCr.translate(0.0, _pixelModel.viewBounds.h);
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
275 modelCr.scale(_pixelModel.zoom, -_pixelModel.zoom);
12
a093c4fbdd43 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 11
diff changeset
276
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
277 immutable Point viewLeftBottom = _pixelModel.pixelToModel(Point(0.0, 0.0));
67
31d10176415d Checkpoint
daveb
parents: 64
diff changeset
278 modelCr.translate(-viewLeftBottom.x, -viewLeftBottom.y);
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
279
67
31d10176415d Checkpoint
daveb
parents: 64
diff changeset
280 rectangle(modelCr, modelDamage);
31d10176415d Checkpoint
daveb
parents: 64
diff changeset
281 modelCr.clip;
31d10176415d Checkpoint
daveb
parents: 64
diff changeset
282 }
12
a093c4fbdd43 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 11
diff changeset
283
67
31d10176415d Checkpoint
daveb
parents: 64
diff changeset
284 {
31d10176415d Checkpoint
daveb
parents: 64
diff changeset
285 // Setup pixel context and clip
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
286 pixelCr.translate(0.0, _pixelModel.viewBounds.h);
67
31d10176415d Checkpoint
daveb
parents: 64
diff changeset
287 pixelCr.scale(1.0, -1.0);
19
22abbf4cde96 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 18
diff changeset
288
67
31d10176415d Checkpoint
daveb
parents: 64
diff changeset
289 rectangle(pixelCr, pixelDamage);
31d10176415d Checkpoint
daveb
parents: 64
diff changeset
290 pixelCr.clip;
31d10176415d Checkpoint
daveb
parents: 64
diff changeset
291 }
12
a093c4fbdd43 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 11
diff changeset
292
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
293 pixelCr.save; {
67
31d10176415d Checkpoint
daveb
parents: 64
diff changeset
294 // Fill the background with light grey
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
295 pixelCr.setSourceRgba(0.9, 0.9, 0.9, 1.0);
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
296 rectangle(pixelCr, pixelDamage);
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
297 pixelCr.fill;
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
298 } pixelCr.restore;
12
a093c4fbdd43 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 11
diff changeset
299
a093c4fbdd43 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 11
diff changeset
300 // Draw each layer
67
31d10176415d Checkpoint
daveb
parents: 64
diff changeset
301 foreach(layer; _layers) {
74
"David Bryant <bagnose@gmail.com>"
parents: 73
diff changeset
302 layer.draw(pixelDamage, pixelCr, modelDamage, modelCr);
11
fb571a3b1f0d Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 10
diff changeset
303 }
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
304 } pixelCr.restore; modelCr.restore;
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
305
2
d6f44347373d * Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents: 0
diff changeset
306 return true;
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
307 }
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
308
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
309 bool onButtonPress(GdkEventButton * event, Widget widget) {
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
310 assert(widget is _drawingArea);
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
311
72
5cc2de64f6d0 Cautious Saturday night commits
"David Bryant <bagnose@gmail.com>"
parents: 71
diff changeset
312 auto buttonEvent = makeButtonEvent(event, _pixelModel);
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
313 _eventHandler.handleButtonPress(this, buttonEvent);
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
314 fixDamage;
5
8a39b13cd3e6 Checkpoint
David Bryant <daveb@acres.com.au>
parents: 3
diff changeset
315 return true;
8a39b13cd3e6 Checkpoint
David Bryant <daveb@acres.com.au>
parents: 3
diff changeset
316 }
8a39b13cd3e6 Checkpoint
David Bryant <daveb@acres.com.au>
parents: 3
diff changeset
317
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
318 bool onButtonRelease(GdkEventButton * event, Widget widget) {
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
319 assert(widget is _drawingArea);
5
8a39b13cd3e6 Checkpoint
David Bryant <daveb@acres.com.au>
parents: 3
diff changeset
320
72
5cc2de64f6d0 Cautious Saturday night commits
"David Bryant <bagnose@gmail.com>"
parents: 71
diff changeset
321 auto buttonEvent = makeButtonEvent(event, _pixelModel);
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
322 _eventHandler.handleButtonRelease(this, buttonEvent);
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
323 fixDamage;
2
d6f44347373d * Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents: 0
diff changeset
324 return true;
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
325 }
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
326
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
327 bool onKeyPressEvent(GdkEventKey * event, Widget widget) {
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
328 assert(widget is _drawingArea);
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
329
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
330 auto keyEvent = new KeyEvent(event.string[0..strlen(event.string)].idup,
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
331 event.keyval,
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
332 gtk2tkMask(event.state));
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
333 message("Got key press %s", keyEvent);
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
334 _eventHandler.handleKeyPress(this, keyEvent);
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
335
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
336 fixDamage;
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
337
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
338 return true;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
339 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
340
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
341 bool onKeyReleaseEvent(GdkEventKey * event, Widget widget) {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
342 assert(widget is _drawingArea);
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
343
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
344 _eventHandler.handleKeyRelease(this, makeKeyEvent(event, _pixelModel));
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
345 fixDamage;
2
d6f44347373d * Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents: 0
diff changeset
346 return true;
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
347 }
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
348
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
349 bool onMotionNotify(GdkEventMotion * event, Widget widget) {
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
350 assert(widget is _drawingArea);
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
351
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
352 {
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
353 // Pass the events on to the rulers so that they update
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
354 gtk_widget_event(_hRuler.getWidgetStruct(), cast(GdkEvent *)event);
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
355 gtk_widget_event(_vRuler.getWidgetStruct(), cast(GdkEvent *)event);
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
356 }
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
357
72
5cc2de64f6d0 Cautious Saturday night commits
"David Bryant <bagnose@gmail.com>"
parents: 71
diff changeset
358 _eventHandler.handleMotion(this, makeMotionEvent(event, _pixelModel));
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
359 fixDamage;
2
d6f44347373d * Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents: 0
diff changeset
360 return true;
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
361 }
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
362
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
363 bool onScroll(GdkEventScroll * event, Widget widget) {
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
364 assert(widget is _drawingArea);
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
365
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
366 _eventHandler.handleScroll(this, makeScrollEvent(event, _pixelModel));
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
367 fixDamage;
2
d6f44347373d * Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents: 0
diff changeset
368 return true;
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
369 }
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
370
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
371 bool onEnterNotify(GdkEventCrossing * event, Widget widget) {
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
372 assert(widget is _drawingArea);
64
eb5436b47d13 Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents: 63
diff changeset
373
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
374 _eventHandler.handleEnter(this, makeCrossingEvent(event, _pixelModel));
64
eb5436b47d13 Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents: 63
diff changeset
375 fixDamage;
20
d6e7a5a6f008 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 19
diff changeset
376 return true;
d6e7a5a6f008 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 19
diff changeset
377 }
d6e7a5a6f008 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 19
diff changeset
378
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
379 bool onLeaveNotify(GdkEventCrossing * event, Widget widget) {
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
380 assert(widget is _drawingArea);
64
eb5436b47d13 Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents: 63
diff changeset
381
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
382 _eventHandler.handleLeave(this, makeCrossingEvent(event, _pixelModel));
64
eb5436b47d13 Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents: 63
diff changeset
383 fixDamage;
20
d6e7a5a6f008 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 19
diff changeset
384 return true;
d6e7a5a6f008 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 19
diff changeset
385 }
d6e7a5a6f008 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 19
diff changeset
386
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
387 bool onFocusIn(GdkEventFocus * event, Widget widget) {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
388 trace("onFocusIn");
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
389 return true;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
390 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
391
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
392 bool onFocusOut(GdkEventFocus * event, Widget widget) {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
393 trace("onFocusOut");
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
394 return true;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
395 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
396
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
397 void onMoveFocus(GtkDirectionType direction, Widget widget) {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
398 trace("onMoveFocus");
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
399 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
400
64
eb5436b47d13 Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents: 63
diff changeset
401 bool onGrabBroken(gdk.Event.Event event, Widget widget) {
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
402 trace("onGrabBroken");
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
403 return true;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
404 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
405
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
406 void onGrabFocus(Widget widget) {
64
eb5436b47d13 Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents: 63
diff changeset
407 //trace("onGrabFocus");
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
408 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
409
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
410 void onGrabNotify(gboolean what, Widget widget){
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
411 trace("onGrabNotify");
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
412 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
413
67
31d10176415d Checkpoint
daveb
parents: 64
diff changeset
414 void onAdjustmentValueChanged(Adjustment adjustment) {
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
415 GtkAdjustment * hGtkAdjustment = _hAdjustment.getAdjustmentStruct;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
416 GtkAdjustment * vGtkAdjustment = _vAdjustment.getAdjustmentStruct;
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
417
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
418 Point oldViewLeftBottom = _pixelModel.pixelToModel(Point(0.0, 0.0));
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
419 Point newViewLeftBottom = Point(gtk_adjustment_get_value(hGtkAdjustment),
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
420 gtk_adjustment_get_value(vGtkAdjustment));
16
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
421
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
422 _pixelModel.panRelativeModel(newViewLeftBottom - oldViewLeftBottom);
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
423
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
424 updateRulers;
13
f0ade1b49fe7 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 12
diff changeset
425 queueDraw;
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
426 }
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
427
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
428 void updateRulers() {
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
429 immutable Point viewLeftBottom = _pixelModel.pixelToModel(Point(0.0, 0.0));
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
430 immutable Point viewRightTop = _pixelModel.pixelToModel(_pixelModel.viewBounds.corner1);
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
431
16
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
432 // Define these just to obtain the position
9e63308b749c * Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents: 15
diff changeset
433 // below and we can preserve it
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
434 double lower, upper, position, maxSize;
12
a093c4fbdd43 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 11
diff changeset
435
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
436 _hRuler.getRange(lower, upper, position, maxSize);
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
437 _hRuler.setRange(viewLeftBottom.x,
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
438 viewRightTop.x,
12
a093c4fbdd43 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 11
diff changeset
439 position,
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
440 _pixelModel.zoom * 50.0);
12
a093c4fbdd43 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 11
diff changeset
441
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
442 _vRuler.getRange(lower, upper, position, maxSize);
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
443 _vRuler.setRange(viewRightTop.y,
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
444 viewLeftBottom.y,
14
0b7e7d43a79d Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 13
diff changeset
445 position,
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
446 _pixelModel.zoom * 50.0);
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
447 }
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
448
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
449 void updateAdjustments() {
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
450 immutable Point viewLeftBottom = _pixelModel.pixelToModel(Point(0.0, 0.0));
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
451 immutable Point viewRightTop = _pixelModel.pixelToModel(_pixelModel.viewBounds.corner1);
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
452
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
453 // Adjust the canvas size if necessary FIXME is this required??
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
454 _pixelModel.canvasAccommodate(Rectangle(viewLeftBottom, viewRightTop));
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
455
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
456 // FIXME
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
457 Rectangle modelSize = _pixelModel.pixelToModel(_pixelModel.viewBounds);
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
458
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
459 // Update the adjustments
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
460
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
461 GtkAdjustment * hGtkAdjustment = _hAdjustment.getAdjustmentStruct;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
462 GtkAdjustment * vGtkAdjustment = _vAdjustment.getAdjustmentStruct;
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
463
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
464 gtk_adjustment_set_lower(hGtkAdjustment, _pixelModel.canvasBounds.x0);
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
465 gtk_adjustment_set_upper(hGtkAdjustment, _pixelModel.canvasBounds.x1);
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
466 gtk_adjustment_set_value(hGtkAdjustment, viewLeftBottom.x);
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
467 gtk_adjustment_set_step_increment(hGtkAdjustment, _pixelModel.canvasBounds.w / 16.0);
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
468 gtk_adjustment_set_page_increment(hGtkAdjustment, _pixelModel.canvasBounds.w / 4.0);
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
469 gtk_adjustment_set_page_size(hGtkAdjustment, modelSize.w);
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
470
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
471 gtk_adjustment_set_lower(vGtkAdjustment, _pixelModel.canvasBounds.y0);
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
472 gtk_adjustment_set_upper(vGtkAdjustment, _pixelModel.canvasBounds.y1);
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
473 gtk_adjustment_set_value(vGtkAdjustment, viewLeftBottom.y);
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
474 gtk_adjustment_set_step_increment(vGtkAdjustment, _pixelModel.canvasBounds.h / 16.0);
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
475 gtk_adjustment_set_page_increment(vGtkAdjustment, _pixelModel.canvasBounds.h / 4.0);
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
476 gtk_adjustment_set_page_size(vGtkAdjustment, modelSize.h);
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
477
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
478 _hAdjustment.changed;
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
479 _hAdjustment.valueChanged;
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
480 _vAdjustment.changed;
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
481 _vAdjustment.valueChanged;
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
482 }
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
483
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
484 void fixDamage() {
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
485 if (_damageScreen.valid) {
17
c643c04e3f5e Checkpoint
David Bryant <daveb@acres.com.au>
parents: 16
diff changeset
486 int x, y, w, h;
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
487 _damageScreen.getQuantised(x, y, w, h);
71
0f7cf6c6f206 Reimplemented gtk.canvas in terms of tk.pixel_model but
"David Bryant <bagnose@gmail.com>"
parents: 70
diff changeset
488 _drawingArea.queueDrawArea(x, cast(int)_pixelModel.viewBounds.h - (y + h), w, h);
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
489 _damageScreen = Rectangle.DEFAULT;
17
c643c04e3f5e Checkpoint
David Bryant <daveb@acres.com.au>
parents: 16
diff changeset
490 }
c643c04e3f5e Checkpoint
David Bryant <daveb@acres.com.au>
parents: 16
diff changeset
491 }
c643c04e3f5e Checkpoint
David Bryant <daveb@acres.com.au>
parents: 16
diff changeset
492
48
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
493 void onRealize(Widget widget) {
1b4c9ba58673 Stylistic overhaul.
daveb
parents: 41
diff changeset
494 assert(widget is _drawingArea);
27
f3d91579bb28 Checkpoint
David Bryant <daveb@acres.com.au>
parents: 26
diff changeset
495 //writefln("Got realize\n");
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents: 62
diff changeset
496 _drawingArea.grabFocus();
27
f3d91579bb28 Checkpoint
David Bryant <daveb@acres.com.au>
parents: 26
diff changeset
497 }
f3d91579bb28 Checkpoint
David Bryant <daveb@acres.com.au>
parents: 26
diff changeset
498
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
499 Layer[] _layers;
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
500 IEventHandler _eventHandler;
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
501 IGrid _grid;
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
502 double _pixelsPerMillimetre;
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
503
10
71ca82e0eb76 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 9
diff changeset
504 // Child widgets:
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
505 HRuler _hRuler;
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
506 VRuler _vRuler;
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
507 DrawingArea _drawingArea;
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
508 Adjustment _hAdjustment;
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
509 HScrollbar _hScrollbar;
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
510 Adjustment _vAdjustment;
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
511 VScrollbar _vScrollbar;
11
fb571a3b1f0d Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 10
diff changeset
512
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
513 Rectangle _damageScreen; // in pixels
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 72
diff changeset
514 PixelModel _pixelModel;
0
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
515 }
e907d2c54ec3 Initial import
David Bryant <daveb@acres.com.au>
parents:
diff changeset
516 }