comparison doodle/dia/tool_layer.d @ 58:c63719604adb

Beginnings of creating a rectangle...
author "David Bryant <bagnose@gmail.com>"
date Mon, 09 Aug 2010 21:43:24 +0930
parents 9960c4fbd0dd
children e64baac3efb2
comparison
equal deleted inserted replaced
57:9960c4fbd0dd 58:c63719604adb
3 public { 3 public {
4 import doodle.dia.tool; 4 import doodle.dia.tool;
5 } 5 }
6 6
7 private { 7 private {
8 import std.stdio;
9 import doodle.cairo.routines; 8 import doodle.cairo.routines;
9 import doodle.core.logging;
10 } 10 }
11 11
12 // This interface is used by the palette
12 interface IToolStack { 13 interface IToolStack {
14 void use(Tool tool);
13 } 15 }
14 16
15 class ToolLayer : Layer, IEventHandler, IToolStack { 17 interface IToolStackObserver {
16 this(in Tool[] tools, in string name) { 18 void toolChanged(int index);
19 }
20
21 final class ToolLayer : Layer, IEventHandler, IToolStack {
22 this(in Tool[] tools, IToolStackObserver observer, in string name = "Tool") {
17 super(name); 23 super(name);
18 _tools = tools.dup; 24 _tools = tools.dup;
25 _observer = observer;
26 }
27
28 // IToolStack overrides:
29
30 void use(Tool tool) {
31 assert(_grabbedTool is null);
32 message("using new tool: %s", tool.name);
33 _tools ~= tool;
34 //_observer.toolChanged(_tools.length - 1);
19 } 35 }
20 36
21 // Layer overrides: 37 // Layer overrides:
22 38
23 override Rectangle bounds() const { 39 override Rectangle bounds() const {
32 } 48 }
33 } 49 }
34 50
35 // EventHandler overrides: 51 // EventHandler overrides:
36 52
37 override bool handleButtonPress(scope IViewport viewport, in ButtonEvent event) { 53 bool handleButtonPress(scope IViewport viewport, in ButtonEvent event) {
38 // writefln("%s", event); 54 // writefln("%s", event);
39 55
40 if (_grabbedTool is null) { 56 if (_grabbedTool is null) {
41 foreach_reverse(ref tool; _tools) { 57 foreach_reverse(ref tool; _tools) {
42 if (tool.handleButtonPress(viewport, event)) { 58 if (tool.handleButtonPress(viewport, event)) {
43 _grabbedTool = &tool; 59 _grabbedTool = &tool;
44 _grabbedButton = event.button_name; 60 _grabbedButton = event.buttonName;
45 break; 61 break;
46 } 62 }
47 } 63 }
48 } 64 }
49 else { 65 else {
51 } 67 }
52 68
53 return true; 69 return true;
54 } 70 }
55 71
56 override bool handleButtonRelease(scope IViewport viewport, in ButtonEvent event) { 72 bool handleButtonRelease(scope IViewport viewport, in ButtonEvent event) {
57 // writefln("%s", event); 73 // writefln("%s", event);
58 74
59 if (_grabbedTool !is null) { 75 if (_grabbedTool !is null) {
60 _grabbedTool.handleButtonRelease(viewport, event); 76 _grabbedTool.handleButtonRelease(viewport, event);
61 77
62 if (_grabbedButton == event.button_name) { 78 if (_grabbedButton == event.buttonName) {
63 _grabbedTool = null; 79 _grabbedTool = null;
64 } 80 }
65 } 81 }
66 82
67 return true; 83 return true;
68 } 84 }
69 85
70 override bool handleKeyPress(scope IViewport viewport, in KeyEvent event) { 86 bool handleKeyPress(scope IViewport viewport, in KeyEvent event) {
71 // writefln("%s", event); 87 // writefln("%s", event);
72 88
73 return true; 89 return true;
74 } 90 }
75 91
76 override bool handleKeyRelease(scope IViewport viewport, in KeyEvent event) { 92 bool handleKeyRelease(scope IViewport viewport, in KeyEvent event) {
77 // writefln("%s", event); 93 // writefln("%s", event);
78 94
79 return true; 95 return true;
80 } 96 }
81 97
82 override bool handleMotion(scope IViewport viewport, in MotionEvent event) { 98 bool handleMotion(scope IViewport viewport, in MotionEvent event) {
83 //writefln("%s", event); 99 //writefln("%s", event);
84 100
85 if (_grabbedTool is null) { 101 if (_grabbedTool is null) {
86 foreach_reverse(ref tool; _tools) { 102 foreach_reverse(ref tool; _tools) {
87 if (tool.handleMotion(viewport, event)) { 103 if (tool.handleMotion(viewport, event)) {
94 } 110 }
95 111
96 return true; 112 return true;
97 } 113 }
98 114
99 override bool handleScroll(scope IViewport viewport, in ScrollEvent event) { 115 bool handleScroll(scope IViewport viewport, in ScrollEvent event) {
100 // writefln("%s", event); 116 // writefln("%s", event);
101 117
102 if (_grabbedTool is null) { 118 if (_grabbedTool is null) {
103 foreach_reverse(ref tool; _tools) { 119 foreach_reverse(ref tool; _tools) {
104 if (tool.handleScroll(viewport, event)) { 120 if (tool.handleScroll(viewport, event)) {
111 } 127 }
112 128
113 return true; 129 return true;
114 } 130 }
115 131
116 /*
117 override void push(Tool tool) {
118 }
119
120 override void pop() {
121 }
122
123 override void replace(Tool tool) {
124 }
125 */
126
127 private { 132 private {
128 Tool[] _tools; 133 Tool[] _tools;
134 IToolStackObserver _observer;
135
129 Tool * _grabbedTool; 136 Tool * _grabbedTool;
130 ButtonName _grabbedButton; 137 ButtonName _grabbedButton;
131 } 138 }
132 } 139 }