Mercurial > projects > doodle
annotate doodle/main/prog/doodler.d @ 87:c825e6db57c1
Added a flag for OpenGL/Cairo
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Mon, 16 Aug 2010 22:54:16 +0930 |
parents | 98980cee8c5b |
children | a98116479793 |
rev | line source |
---|---|
83
06b4504cbcb0
Checkpoint of trying to get a different renderer going (OpenGL)
daveb
parents:
69
diff
changeset
|
1 module main.prog.doodler; |
06b4504cbcb0
Checkpoint of trying to get a different renderer going (OpenGL)
daveb
parents:
69
diff
changeset
|
2 |
87
c825e6db57c1
Added a flag for OpenGL/Cairo
"David Bryant <bagnose@gmail.com>"
parents:
85
diff
changeset
|
3 immutable useOpenGL = false; |
c825e6db57c1
Added a flag for OpenGL/Cairo
"David Bryant <bagnose@gmail.com>"
parents:
85
diff
changeset
|
4 |
28
1754cb773d41
Part-way through getting to compile with configure/builder.
Graham St Jack <graham.stjack@internode.on.net>
parents:
27
diff
changeset
|
5 private { |
44 | 6 import doodle.core.backtrace; |
38
452915ecd1f4
Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
35
diff
changeset
|
7 import doodle.core.logging; |
45 | 8 import doodle.core.backtrace; |
38
452915ecd1f4
Basic logging functionality
David Bryant <bagnose@gmail.com>
parents:
35
diff
changeset
|
9 |
58
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
57
diff
changeset
|
10 import doodle.dia.standard_tools; |
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
57
diff
changeset
|
11 import doodle.dia.page_layer; |
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
57
diff
changeset
|
12 import doodle.dia.grid_layer; |
63
20d6327c4a75
Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
61
diff
changeset
|
13 import doodle.dia.tool_layer; |
20d6327c4a75
Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
61
diff
changeset
|
14 |
58
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
57
diff
changeset
|
15 import doodle.fig.diagram_layer; |
63
20d6327c4a75
Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
61
diff
changeset
|
16 import doodle.fig.select_tool; |
58
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
57
diff
changeset
|
17 |
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
57
diff
changeset
|
18 import doodle.fig.tools; |
20 | 19 |
61 | 20 import doodle.gtk.palette; |
87
c825e6db57c1
Added a flag for OpenGL/Cairo
"David Bryant <bagnose@gmail.com>"
parents:
85
diff
changeset
|
21 |
c825e6db57c1
Added a flag for OpenGL/Cairo
"David Bryant <bagnose@gmail.com>"
parents:
85
diff
changeset
|
22 static if (useOpenGL) { |
c825e6db57c1
Added a flag for OpenGL/Cairo
"David Bryant <bagnose@gmail.com>"
parents:
85
diff
changeset
|
23 import doodle.gtk.opengl_canvas; |
c825e6db57c1
Added a flag for OpenGL/Cairo
"David Bryant <bagnose@gmail.com>"
parents:
85
diff
changeset
|
24 import glgdk.GLdInit; |
c825e6db57c1
Added a flag for OpenGL/Cairo
"David Bryant <bagnose@gmail.com>"
parents:
85
diff
changeset
|
25 } |
c825e6db57c1
Added a flag for OpenGL/Cairo
"David Bryant <bagnose@gmail.com>"
parents:
85
diff
changeset
|
26 else { |
c825e6db57c1
Added a flag for OpenGL/Cairo
"David Bryant <bagnose@gmail.com>"
parents:
85
diff
changeset
|
27 import doodle.gtk.cairo_canvas; |
c825e6db57c1
Added a flag for OpenGL/Cairo
"David Bryant <bagnose@gmail.com>"
parents:
85
diff
changeset
|
28 } |
27 | 29 |
20 | 30 import gtk.Main; |
31 import gtk.MainWindow; | |
27 | 32 import gtk.VBox; |
20 | 33 |
34 import std.stdio; | |
35 } | |
36 | |
58
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
57
diff
changeset
|
37 final class TopLevel : private IToolStackObserver { |
56 | 38 this(string[] args) { |
39 Main.init(args); | |
87
c825e6db57c1
Added a flag for OpenGL/Cairo
"David Bryant <bagnose@gmail.com>"
parents:
85
diff
changeset
|
40 static if (useOpenGL) { GLdInit.init(args); } |
56 | 41 auto window = new MainWindow("Doodle"); |
42 auto vbox = new VBox(false, 0); | |
54 | 43 |
61 | 44 auto palette = new Palette!Tool; |
58
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
57
diff
changeset
|
45 _palette = palette; |
60
e64baac3efb2
Attempt at a templatised palette
David Bryant <bagnose@gmail.com>
parents:
58
diff
changeset
|
46 |
56 | 47 vbox.packStart(palette, false, false, 0); |
48 | |
49 Tool[] tools; | |
50 tools ~= new PanTool; | |
51 tools ~= new ZoomTool; | |
52 tools ~= new SelectTool; | |
58
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
57
diff
changeset
|
53 auto toolLayer = new ToolLayer(tools, this); |
56 | 54 _toolStack = toolLayer; |
55 | |
60
e64baac3efb2
Attempt at a templatised palette
David Bryant <bagnose@gmail.com>
parents:
58
diff
changeset
|
56 auto gridLayer = new GridLayer; |
e64baac3efb2
Attempt at a templatised palette
David Bryant <bagnose@gmail.com>
parents:
58
diff
changeset
|
57 |
58
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
57
diff
changeset
|
58 auto diagramLayer = new DiagramLayer; |
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
57
diff
changeset
|
59 _diagram = diagramLayer; |
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
57
diff
changeset
|
60 |
56 | 61 Layer[] layers; |
58
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
57
diff
changeset
|
62 layers ~= new PageLayer; |
56 | 63 layers ~= gridLayer; |
64 layers ~= toolLayer; | |
69 | 65 |
66 // assume the screen has PPI of 120.0 | |
67 immutable millimetersPerInch = 25.4; | |
68 immutable pixelsPerMillimetre = 120.0 / millimetersPerInch; | |
87
c825e6db57c1
Added a flag for OpenGL/Cairo
"David Bryant <bagnose@gmail.com>"
parents:
85
diff
changeset
|
69 static if (useOpenGL) { |
c825e6db57c1
Added a flag for OpenGL/Cairo
"David Bryant <bagnose@gmail.com>"
parents:
85
diff
changeset
|
70 auto canvas = new OpenGLCanvas(layers, toolLayer, gridLayer, pixelsPerMillimetre); |
c825e6db57c1
Added a flag for OpenGL/Cairo
"David Bryant <bagnose@gmail.com>"
parents:
85
diff
changeset
|
71 } |
c825e6db57c1
Added a flag for OpenGL/Cairo
"David Bryant <bagnose@gmail.com>"
parents:
85
diff
changeset
|
72 else { |
c825e6db57c1
Added a flag for OpenGL/Cairo
"David Bryant <bagnose@gmail.com>"
parents:
85
diff
changeset
|
73 auto canvas = new CairoCanvas(layers, toolLayer, gridLayer, pixelsPerMillimetre); |
c825e6db57c1
Added a flag for OpenGL/Cairo
"David Bryant <bagnose@gmail.com>"
parents:
85
diff
changeset
|
74 } |
51 | 75 |
56 | 76 vbox.packStart(canvas, true, true, 0); |
60
e64baac3efb2
Attempt at a templatised palette
David Bryant <bagnose@gmail.com>
parents:
58
diff
changeset
|
77 |
61 | 78 Palette!Tool.Item[] items = [ |
60
e64baac3efb2
Attempt at a templatised palette
David Bryant <bagnose@gmail.com>
parents:
58
diff
changeset
|
79 { "select.svg", "Select", "Select and modify elements", new SelectTool }, |
e64baac3efb2
Attempt at a templatised palette
David Bryant <bagnose@gmail.com>
parents:
58
diff
changeset
|
80 { "rectangle.svg", "Rectangle", "Create rectangle", new CreateRectangleTool(_diagram) }, |
e64baac3efb2
Attempt at a templatised palette
David Bryant <bagnose@gmail.com>
parents:
58
diff
changeset
|
81 { "ellipse.svg", "Ellipse", "Create ellipse", new CreateRectangleTool(_diagram) }, |
e64baac3efb2
Attempt at a templatised palette
David Bryant <bagnose@gmail.com>
parents:
58
diff
changeset
|
82 { "polyline.svg", "Polyline", "Create polyline", new CreateRectangleTool(_diagram) } |
e64baac3efb2
Attempt at a templatised palette
David Bryant <bagnose@gmail.com>
parents:
58
diff
changeset
|
83 ]; |
e64baac3efb2
Attempt at a templatised palette
David Bryant <bagnose@gmail.com>
parents:
58
diff
changeset
|
84 |
61 | 85 palette.configure(items, &_toolStack.use); |
56 | 86 window.add(vbox); |
87 window.setDefaultSize(640, 580); | |
88 window.showAll(); | |
89 Main.run(); | |
90 } | |
51 | 91 |
60
e64baac3efb2
Attempt at a templatised palette
David Bryant <bagnose@gmail.com>
parents:
58
diff
changeset
|
92 void toolChanged(Tool tool) { |
e64baac3efb2
Attempt at a templatised palette
David Bryant <bagnose@gmail.com>
parents:
58
diff
changeset
|
93 message("Tool changed %s", tool.name); |
e64baac3efb2
Attempt at a templatised palette
David Bryant <bagnose@gmail.com>
parents:
58
diff
changeset
|
94 _palette.activate(tool); |
58
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
57
diff
changeset
|
95 } |
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
57
diff
changeset
|
96 |
56 | 97 private { |
57 | 98 IToolStack _toolStack; |
61 | 99 IPalette!Tool _palette; |
58
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
57
diff
changeset
|
100 IDiagram _diagram; |
56 | 101 } |
20 | 102 } |
56 | 103 |
104 void main(string[] args) { | |
105 new TopLevel(args); | |
106 } |