annotate doodle/gtk/opengl_canvas.d @ 86:8a491b67bc46

Checkpoint
author daveb
date Mon, 16 Aug 2010 18:37:56 +0930
parents 98980cee8c5b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
85
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
1 module doodle.gtk.opengl_canvas;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
2
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
3 public {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
4 import doodle.dia.icanvas;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
5 import doodle.gtk.events;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
6 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
7
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
8 private {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
9 import doodle.core.logging;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
10 import doodle.tk.screen_model;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
11 import doodle.dia.layer_stack;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
12 import doodle.gtk.cairo_renderer;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
13
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
14 import cairo.Surface;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
15 import cairo.Context;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
16
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
17 import gtk.Widget;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
18 import gtk.Toolbar;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
19 import gtk.Table;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
20 import gtk.HRuler;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
21 import gtk.VRuler;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
22 import gtk.Range;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
23 import gtk.HScrollbar;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
24 import gtk.VScrollbar;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
25 import gtk.DrawingArea;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
26 import gtk.Adjustment;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
27
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
28 import gdk.Drawable;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
29
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
30 import gtkc.gtk;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
31 import gtkc.gtktypes;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
32 //import gtkc.gdktypes;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
33
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
34 import std.math;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
35 import std.stdio;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
36 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
37
86
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
38 private {
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
39 import gtk.DrawingArea;
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
40 import glgtk.GLCapability;
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
41 import glgdk.GLDrawable;
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
42 import glgdk.GLConfig;
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
43 import glgdk.GLContext;
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
44 import gtkglc.glgdktypes;
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
45
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
46 import gtkglc.gl;
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
47 import gtkglc.glu;
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
48
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
49 import gdk.Event;
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
50
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
51 import gtk.Widget;
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
52
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
53 import gtk.Main;
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
54 import gtk.MainWindow;
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
55 }
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
56
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
57
85
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
58 final class OpenGLCanvas : Table, private IViewport {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
59 this(in Layer[] layers, IEventHandler eventHandler, IGrid grid, in double pixelsPerMillimetre) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
60 super(3, 3, 0);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
61
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
62 _damageScreen = Rectangle.DEFAULT;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
63
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
64 _eventHandler = eventHandler;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
65 _grid = grid;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
66 _pixelsPerMillimetre = pixelsPerMillimetre;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
67
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
68 _layerStack = new LayerStack(layers);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
69
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
70 // Create our child widgets and register callbacks
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
71
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
72 _hRuler = new HRuler;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
73 attach(_hRuler,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
74 1, 2,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
75 0, 1,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
76 AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.SHRINK,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
77 0, 0);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
78 _hRuler.setMetric(MetricType.PIXELS);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
79
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
80 _vRuler = new VRuler;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
81 attach(_vRuler,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
82 0, 1,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
83 1, 2,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
84 AttachOptions.SHRINK, AttachOptions.FILL | AttachOptions.EXPAND,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
85 0, 0);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
86 _vRuler.setMetric(MetricType.PIXELS);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
87
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
88 _drawingArea = new GLDrawingArea;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
89 _drawingArea.addOnRealize(&onRealize);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
90 _drawingArea.addOnConfigure(&onConfigure);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
91 _drawingArea.addOnExpose(&onExpose);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
92 _drawingArea.addOnButtonPress(&onButtonPress);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
93 _drawingArea.addOnButtonRelease(&onButtonRelease);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
94 _drawingArea.addOnKeyPress(&onKeyPressEvent);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
95 _drawingArea.addOnKeyRelease(&onKeyReleaseEvent);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
96 _drawingArea.addOnMotionNotify(&onMotionNotify);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
97 _drawingArea.addOnScroll(&onScroll);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
98 _drawingArea.addOnEnterNotify(&onEnterNotify);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
99 _drawingArea.addOnLeaveNotify(&onLeaveNotify);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
100
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
101 _drawingArea.addOnFocusIn(&onFocusIn);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
102 _drawingArea.addOnFocusOut(&onFocusOut);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
103 _drawingArea.addOnMoveFocus(&onMoveFocus);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
104 _drawingArea.addOnGrabBroken(&onGrabBroken);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
105 _drawingArea.addOnGrabFocus(&onGrabFocus);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
106 _drawingArea.addOnGrabNotify(&onGrabNotify);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
107 // addOnPopupMenu
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
108 // addOnQueryTooltip
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
109 // addOnSelection*
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
110 _drawingArea.setEvents(EventMask.EXPOSURE_MASK |
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
111 EventMask.POINTER_MOTION_MASK |
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
112 EventMask.POINTER_MOTION_HINT_MASK |
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
113 EventMask.BUTTON_MOTION_MASK |
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
114 EventMask.BUTTON_PRESS_MASK |
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
115 EventMask.BUTTON_RELEASE_MASK |
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
116 EventMask.KEY_PRESS_MASK |
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
117 EventMask.KEY_RELEASE_MASK |
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
118 EventMask.ENTER_NOTIFY_MASK |
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
119 EventMask.LEAVE_NOTIFY_MASK |
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
120 EventMask.FOCUS_CHANGE_MASK |
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
121 EventMask.SCROLL_MASK);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
122
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
123 _drawingArea.setCanFocus(true);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
124
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
125 attach(_drawingArea,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
126 1, 2,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
127 1, 2,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
128 AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.FILL | AttachOptions.EXPAND,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
129 0, 0);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
130
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
131 // value, lower, upper, step-inc, page-inc, page-size
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
132 // Give the adjustments dummy values until we receive a configure
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
133 _hAdjustment = new Adjustment(0.0, 0.0, 1.0, 0.2, 0.5, 0.5);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
134 _hAdjustment.addOnValueChanged(&onAdjustmentValueChanged);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
135 _hScrollbar = new HScrollbar(_hAdjustment);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
136 _hScrollbar.setInverted(false);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
137 attach(_hScrollbar,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
138 1, 2,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
139 2, 3,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
140 AttachOptions.FILL | AttachOptions.EXPAND,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
141 AttachOptions.SHRINK,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
142 0, 0);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
143
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
144 _vAdjustment = new Adjustment(0.0, 0.0, 1.0, 0.2, 0.5, 0.5);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
145 _vAdjustment.addOnValueChanged(&onAdjustmentValueChanged);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
146 _vScrollbar = new VScrollbar(_vAdjustment);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
147 _vScrollbar.setInverted(true);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
148 attach(_vScrollbar,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
149 2, 3,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
150 1, 2,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
151 AttachOptions.SHRINK,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
152 AttachOptions.FILL | AttachOptions.EXPAND,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
153 0, 0);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
154
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
155 _cursors = [
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
156 Cursor.DEFAULT : CursorType.ARROW,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
157 Cursor.HAND : CursorType.HAND1,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
158 Cursor.CROSSHAIR : CursorType.CROSSHAIR,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
159 Cursor.PENCIL : CursorType.PENCIL
86
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
160 ];
85
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
161 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
162
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
163 protected { // XXX the compiler complains about unimplemented methods if this is private
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
164
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
165 // IViewport overrides:
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
166
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
167 void zoomRelative(in Point screenDatum, in double factor) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
168 _screenModel.zoomRelative(factor, screenDatum);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
169 consolidateBounds;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
170 updateAdjustments;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
171 updateRulers;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
172 _grid.zoomChanged(_screenModel.zoom);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
173 queueDraw;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
174 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
175
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
176 void panRelative(in Vector screenDisplacement) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
177 _screenModel.panRelativeScreen(screenDisplacement);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
178 consolidateBounds;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
179 updateAdjustments;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
180 updateRulers;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
181 queueDraw;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
182 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
183
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
184 void setCursor(in Cursor cursor) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
185 _drawingArea.setCursor(new gdk.Cursor.Cursor(_cursors[cursor]));
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
186 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
187
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
188 void damageModel(in Rectangle area) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
189 _damageScreen = _damageScreen | _screenModel.modelToScreen(area);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
190 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
191
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
192 void damageScreen(in Rectangle area) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
193 _damageScreen = _damageScreen | area;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
194 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
195 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
196
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
197 private {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
198
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
199 void initialiseBounds(in Rectangle viewBoundsScreen) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
200 Rectangle layerBounds = _layerStack.bounds;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
201 Rectangle paddedLayerBounds = growCentre(layerBounds, 2 * layerBounds.size);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
202 _screenModel = new ScreenModel(0.25 * _pixelsPerMillimetre, paddedLayerBounds, viewBoundsScreen);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
203 _grid.zoomChanged(_screenModel.zoom);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
204
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
205 updateAdjustments;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
206 updateRulers;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
207 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
208
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
209 void consolidateBounds() {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
210 Rectangle layerBounds = _layerStack.bounds;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
211 Rectangle paddedLayerBounds = growCentre(layerBounds, 2 * layerBounds.size);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
212 _screenModel.consolidateCanvasBounds(paddedLayerBounds);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
213
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
214 updateAdjustments;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
215 updateRulers;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
216 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
217
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
218 bool onConfigure(GdkEventConfigure * event, Widget widget) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
219 assert(widget is _drawingArea);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
220 assert(event);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
221
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
222 trace("onConfigure %sx%s", event.width, event.height);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
223
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
224 Rectangle viewBoundsScreen = Rectangle(Point(0.0, 0.0), Vector(cast(double)event.width, cast(double)event.height));
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
225 if (_screenModel is null) { initialiseBounds(viewBoundsScreen); }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
226 else { consolidateBounds; }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
227
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
228 return true;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
229 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
230
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
231 bool onExpose(GdkEventExpose * event, Widget widget) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
232 assert(widget is _drawingArea);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
233 assert(event);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
234
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
235 trace("onExpose %sx%s", event.area.width, event.area.height);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
236
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
237 /+
86
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
238 Drawable dr = _drawingArea.getWindow;
85
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
239
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
240 int width, height;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
241 dr.getSize(width, height);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
242 //trace("Got expose %dx%d\n", width, height);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
243
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
244 scope modelCr = new Context(dr);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
245 scope screenCr = new Context(dr);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
246
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
247 Rectangle screenDamage =
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
248 event is null ? _screenModel.viewBoundsScreen :
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
249 Rectangle(_screenModel.viewBoundsScreen.position + Vector(cast(double)event.area.x, _screenModel.viewBoundsScreen.h - cast(double)(event.area.y + event.area.height)),
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
250 Vector(cast(double)event.area.width, cast(double)event.area.height));
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
251
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
252 Rectangle modelDamage = _screenModel.screenToModel(screenDamage);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
253
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
254 modelCr.save; screenCr.save; {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
255 {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
256 // Setup model context and clip
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
257 modelCr.translate(0.0, _screenModel.viewBoundsScreen.h);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
258 modelCr.scale(_screenModel.zoom, -_screenModel.zoom);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
259
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
260 immutable Point viewLeftBottom = _screenModel.screenToModel(Point(0.0, 0.0));
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
261 modelCr.translate(-viewLeftBottom.x, -viewLeftBottom.y);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
262
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
263 modelCr.rectangle(modelDamage.x0, modelDamage.y0, modelDamage.w, modelDamage.h);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
264 modelCr.clip;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
265 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
266
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
267 {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
268 // Setup screen context and clip
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
269 screenCr.translate(0.0, _screenModel.viewBoundsScreen.h);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
270 screenCr.scale(1.0, -1.0);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
271
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
272 screenCr.rectangle(screenDamage.x0, screenDamage.y0, screenDamage.w, screenDamage.h);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
273 screenCr.clip;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
274 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
275
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
276 screenCr.save; {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
277 // Fill the background with light grey
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
278 screenCr.setSourceRgba(0.9, 0.9, 0.9, 1.0);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
279 screenCr.rectangle(screenDamage.x0, screenDamage.y0, screenDamage.w, screenDamage.h);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
280 screenCr.fill;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
281 } screenCr.restore;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
282
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
283 _layerStack.draw(screenDamage, new CairoRenderer(screenCr),
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
284 modelDamage, new CairoRenderer(modelCr));
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
285 } screenCr.restore; modelCr.restore;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
286
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
287 return true;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
288 +/
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
289
86
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
290 return false;
85
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
291 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
292
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
293 bool onButtonPress(GdkEventButton * event, Widget widget) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
294 assert(widget is _drawingArea);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
295 _eventHandler.handleButtonPress(this, makeButtonEvent(event, _screenModel));
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
296 fixDamage;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
297 return true;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
298 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
299
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
300 bool onButtonRelease(GdkEventButton * event, Widget widget) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
301 assert(widget is _drawingArea);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
302 _eventHandler.handleButtonRelease(this, makeButtonEvent(event, _screenModel));
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
303 fixDamage;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
304 return true;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
305 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
306
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
307 bool onKeyPressEvent(GdkEventKey * event, Widget widget) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
308 assert(widget is _drawingArea);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
309 _eventHandler.handleKeyPress(this, makeKeyEvent(event, _screenModel));
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
310 fixDamage;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
311 return true;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
312 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
313
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
314 bool onKeyReleaseEvent(GdkEventKey * event, Widget widget) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
315 assert(widget is _drawingArea);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
316 _eventHandler.handleKeyRelease(this, makeKeyEvent(event, _screenModel));
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
317 fixDamage;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
318 return true;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
319 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
320
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
321 bool onMotionNotify(GdkEventMotion * event, Widget widget) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
322 assert(widget is _drawingArea);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
323
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
324 // Pass the events on to the rulers so that they update
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
325 gtk_widget_event(_hRuler.getWidgetStruct(), cast(GdkEvent *)event);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
326 gtk_widget_event(_vRuler.getWidgetStruct(), cast(GdkEvent *)event);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
327
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
328 _eventHandler.handleMotion(this, makeMotionEvent(event, _screenModel));
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
329 fixDamage;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
330 return true;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
331 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
332
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
333 bool onScroll(GdkEventScroll * event, Widget widget) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
334 assert(widget is _drawingArea);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
335 _eventHandler.handleScroll(this, makeScrollEvent(event, _screenModel));
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
336 fixDamage;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
337 return true;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
338 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
339
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
340 bool onEnterNotify(GdkEventCrossing * event, Widget widget) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
341 trace("1");
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
342 assert(widget is _drawingArea);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
343 trace("2");
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
344 _eventHandler.handleEnter(this, makeCrossingEvent(event, _screenModel));
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
345 trace("3");
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
346 fixDamage;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
347 trace("4");
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
348 return true;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
349 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
350
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
351 bool onLeaveNotify(GdkEventCrossing * event, Widget widget) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
352 assert(widget is _drawingArea);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
353 _eventHandler.handleLeave(this, makeCrossingEvent(event, _screenModel));
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
354 fixDamage;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
355 return true;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
356 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
357
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
358 bool onFocusIn(GdkEventFocus * event, Widget widget) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
359 trace("onFocusIn");
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
360 return true;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
361 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
362
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
363 bool onFocusOut(GdkEventFocus * event, Widget widget) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
364 trace("onFocusOut");
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
365 return true;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
366 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
367
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
368 void onMoveFocus(GtkDirectionType direction, Widget widget) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
369 trace("onMoveFocus");
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
370 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
371
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
372 bool onGrabBroken(gdk.Event.Event event, Widget widget) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
373 trace("onGrabBroken");
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
374 return true;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
375 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
376
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
377 void onGrabFocus(Widget widget) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
378 //trace("onGrabFocus");
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
379 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
380
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
381 void onGrabNotify(gboolean what, Widget widget){
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
382 trace("onGrabNotify");
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
383 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
384
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
385 void onAdjustmentValueChanged(Adjustment adjustment) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
386 GtkAdjustment * hGtkAdjustment = _hAdjustment.getAdjustmentStruct;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
387 GtkAdjustment * vGtkAdjustment = _vAdjustment.getAdjustmentStruct;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
388
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
389 Point oldViewLeftBottom = _screenModel.screenToModel(Point(0.0, 0.0));
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
390 Point newViewLeftBottom = Point(gtk_adjustment_get_value(hGtkAdjustment),
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
391 gtk_adjustment_get_value(vGtkAdjustment));
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
392
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
393 _screenModel.panRelativeModel(newViewLeftBottom - oldViewLeftBottom);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
394
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
395 updateRulers;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
396 queueDraw;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
397 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
398
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
399 void updateRulers() {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
400 immutable Point viewLeftBottom = _screenModel.screenToModel(_screenModel.viewBoundsScreen.corner0);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
401 immutable Point viewRightTop = _screenModel.screenToModel(_screenModel.viewBoundsScreen.corner1);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
402
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
403 // Define these just to obtain the position
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
404 // below so we can preserve it
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
405 double lower, upper, position, maxSize;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
406
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
407 _hRuler.getRange(lower, upper, position, maxSize);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
408 _hRuler.setRange(viewLeftBottom.x,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
409 viewRightTop.x,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
410 position,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
411 _screenModel.zoom * 50.0);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
412
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
413 _vRuler.getRange(lower, upper, position, maxSize);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
414 _vRuler.setRange(viewRightTop.y,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
415 viewLeftBottom.y,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
416 position,
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
417 _screenModel.zoom * 50.0);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
418 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
419
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
420 void updateAdjustments() {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
421 immutable Point viewLeftBottom = _screenModel.screenToModel(Point(0.0, 0.0));
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
422 immutable Point viewRightTop = _screenModel.screenToModel(_screenModel.viewBoundsScreen.corner1);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
423
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
424 // Adjust the canvas size if necessary
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
425 _screenModel.canvasAccommodate(Rectangle(viewLeftBottom, viewRightTop));
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
426
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
427 Rectangle viewBoundsModel = _screenModel.viewBoundsModel;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
428
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
429 // Update the adjustments
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
430
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
431 GtkAdjustment * hGtkAdjustment = _hAdjustment.getAdjustmentStruct;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
432 GtkAdjustment * vGtkAdjustment = _vAdjustment.getAdjustmentStruct;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
433
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
434 gtk_adjustment_set_lower(hGtkAdjustment, _screenModel.canvasBoundsModel.x0);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
435 gtk_adjustment_set_upper(hGtkAdjustment, _screenModel.canvasBoundsModel.x1);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
436 gtk_adjustment_set_value(hGtkAdjustment, viewLeftBottom.x);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
437 gtk_adjustment_set_step_increment(hGtkAdjustment, _screenModel.canvasBoundsModel.w / 16.0);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
438 gtk_adjustment_set_page_increment(hGtkAdjustment, _screenModel.canvasBoundsModel.w / 4.0);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
439 gtk_adjustment_set_page_size(hGtkAdjustment, viewBoundsModel.w);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
440
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
441 gtk_adjustment_set_lower(vGtkAdjustment, _screenModel.canvasBoundsModel.y0);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
442 gtk_adjustment_set_upper(vGtkAdjustment, _screenModel.canvasBoundsModel.y1);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
443 gtk_adjustment_set_value(vGtkAdjustment, viewLeftBottom.y);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
444 gtk_adjustment_set_step_increment(vGtkAdjustment, _screenModel.canvasBoundsModel.h / 16.0);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
445 gtk_adjustment_set_page_increment(vGtkAdjustment, _screenModel.canvasBoundsModel.h / 4.0);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
446 gtk_adjustment_set_page_size(vGtkAdjustment, viewBoundsModel.h);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
447
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
448 _hAdjustment.changed;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
449 _hAdjustment.valueChanged;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
450 _vAdjustment.changed;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
451 _vAdjustment.valueChanged;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
452 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
453
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
454 void fixDamage() {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
455 if (_damageScreen.valid) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
456 int x, y, w, h;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
457 _damageScreen.getQuantised(x, y, w, h);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
458 _drawingArea.queueDrawArea(x, cast(int)_screenModel.viewBoundsScreen.h - (y + h), w, h);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
459 _damageScreen = Rectangle.DEFAULT;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
460 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
461 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
462
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
463 void onRealize(Widget widget) {
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
464 assert(widget is _drawingArea);
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
465 _drawingArea.grabFocus();
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
466 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
467
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
468 IEventHandler _eventHandler;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
469 IGrid _grid;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
470 double _pixelsPerMillimetre;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
471 LayerStack _layerStack;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
472
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
473 // Child widgets:
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
474 HRuler _hRuler;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
475 VRuler _vRuler;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
476 DrawingArea _drawingArea;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
477 Adjustment _hAdjustment;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
478 HScrollbar _hScrollbar;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
479 Adjustment _vAdjustment;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
480 VScrollbar _vScrollbar;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
481
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
482 Rectangle _damageScreen;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
483 ScreenModel _screenModel;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
484
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
485 immutable CursorType[Cursor] _cursors;
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
486 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
487
86
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
488 private {
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
489 class GLDrawingArea : DrawingArea {
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
490 GLfloat width;
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
491 GLfloat height;
85
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
492
86
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
493 /** need to include the mixin to add GL capabilities to this widget */
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
494 mixin GLCapability;
85
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
495
86
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
496 /**
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
497 * Construct a simple DrawingArea and sets the GLCapabilities
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
498 */
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
499 this() {
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
500 setGLCapability(); // set the GL capabilities for this widget
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
501 }
85
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
502
86
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
503 /**
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
504 * put any gl initializations here
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
505 * returns true to consume the event
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
506 */
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
507 bool initGL() {
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
508 trace("initGL");
85
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
509
86
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
510 //resizeGL(null);
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
511 return false;
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
512 }
85
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
513
86
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
514 /**
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
515 * This method is called every time the window must be paint or repaint
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
516 * This is where you put the OpenGL call to draw something.
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
517 * This method call be called directly by the application without an event object
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
518 * to force redrawing of the scene.
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
519 * returns true to consume the event
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
520 */
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
521 bool drawGL(GdkEventExpose* event = null) {
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
522 trace("drawGL");
85
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
523
86
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
524 glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
525 glLoadIdentity ();
85
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
526
86
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
527 gluLookAt(0, 0, 10, 0, 0, 0, 0, 1,0); //Set the camera position
85
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
528
86
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
529 //Just Draw a tri-colored triangle
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
530 glBegin(GL_TRIANGLES);
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
531 glColor3f(1.0f,0.0f,0.0f);
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
532 glVertex3f( 0.0f, 1.0f, 0.0f);
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
533 glColor3f(0.0f,1.0f,0.0f);
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
534 glVertex3f(-1.0f,-1.0f, 0.0f);
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
535 glColor3f(0.0f,0.0f,1.0f);
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
536 glVertex3f( 1.0f,-1.0f, 0.0f);
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
537 glEnd();
85
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
538
86
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
539 return false;
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
540 }
85
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
541
86
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
542 /**
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
543 * This method is called when the window is resized
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
544 * returns true to consume the event
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
545 */
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
546 bool resizeGL(GdkEventConfigure* event = null) {
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
547 trace("resizeGL");
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
548 assert(event);
85
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
549
86
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
550 if (event == null) {
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
551 width = getWidth();
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
552 height = getHeight();
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
553 }
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
554 else {
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
555 width = event.width;
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
556 height = event.height;
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
557 }
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
558
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
559 trace("Size %sx%s", width, height);
85
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
560
86
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
561 glViewport(0, 0, cast(int)width, cast(int)height); //Adjust the viewport according to new window dimensions
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
562
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
563 /*
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
564 * Update the projection Matrix accoding to the new dimension
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
565 * and reset the OpenGL state to MODELVIEW
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
566 */
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
567 glMatrixMode(GL_PROJECTION);
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
568 glLoadIdentity();
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
569 gluPerspective(20, width/height, 0.1, 10);
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
570 glMatrixMode(GL_MODELVIEW);
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
571
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
572 return false;
8a491b67bc46 Checkpoint
daveb
parents: 85
diff changeset
573 }
85
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
574 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
575 }
98980cee8c5b More work trying to support OpenGL as a renderer
daveb
parents:
diff changeset
576 }