|
@@ -38,9 +38,34 @@
|
38
|
38
|
var selectorState = selectorStates.pointing;
|
39
|
39
|
var last_sent = 0;
|
40
|
40
|
|
|
41
|
+ var deleteButton = createButton("delete", "delete", 22, 22,
|
|
42
|
+ function(me, bbox, s) {
|
|
43
|
+ me.width.baseVal.value = me.origWidth / s;
|
|
44
|
+ me.height.baseVal.value = me.origHeight / s;
|
|
45
|
+ me.x.baseVal.value = bbox.r[0];
|
|
46
|
+ me.y.baseVal.value = bbox.r[1] - (me.origHeight + 3) / s;
|
|
47
|
+ me.style.display = "";
|
|
48
|
+ },
|
|
49
|
+ deleteSelection);
|
|
50
|
+
|
|
51
|
+ var duplicateButton = createButton("duplicate", "duplicate", 22, 22,
|
|
52
|
+ function(me, bbox, s) {
|
|
53
|
+ me.width.baseVal.value = me.origWidth / s;
|
|
54
|
+ me.height.baseVal.value = me.origHeight / s;
|
|
55
|
+ me.x.baseVal.value = bbox.r[0] + (me.origWidth + 2) / s;
|
|
56
|
+ me.y.baseVal.value = bbox.r[1] - (me.origHeight + 3) / s;
|
|
57
|
+ me.style.display = "";
|
|
58
|
+ },
|
|
59
|
+ duplicateSelection);
|
|
60
|
+ var selectionButtons = [deleteButton, duplicateButton];
|
|
61
|
+
|
|
62
|
+ function getScale() {
|
|
63
|
+ return Tools.drawingArea.getCTM().a;
|
|
64
|
+ }
|
|
65
|
+
|
41
|
66
|
function getParentMathematics(el) {
|
42
|
|
- var target
|
43
|
|
- var a = el
|
|
67
|
+ var target;
|
|
68
|
+ var a = el;
|
44
|
69
|
var els = [];
|
45
|
70
|
while (a) {
|
46
|
71
|
els.unshift(a);
|
|
@@ -67,6 +92,7 @@
|
67
|
92
|
}
|
68
|
93
|
Tools.drawAndSend(data);
|
69
|
94
|
selected_els = [];
|
|
95
|
+ hideSelectionUI();
|
70
|
96
|
}
|
71
|
97
|
|
72
|
98
|
function duplicateSelection() {
|
|
@@ -106,6 +132,43 @@
|
106
|
132
|
return shape;
|
107
|
133
|
}
|
108
|
134
|
|
|
135
|
+ function createButton(name, icon , width, height, drawCallback, clickCallback) {
|
|
136
|
+ var shape = Tools.createSVGElement("image", {
|
|
137
|
+ id: name + "Icon",
|
|
138
|
+ href: "tools/hand/" + icon + ".svg",
|
|
139
|
+ width: width,
|
|
140
|
+ height: height,
|
|
141
|
+ });
|
|
142
|
+ shape.style.display = "none";
|
|
143
|
+ shape.origWidth = width;
|
|
144
|
+ shape.origHeight = height;
|
|
145
|
+ shape.drawCallback = drawCallback;
|
|
146
|
+ shape.clickCallback = clickCallback;
|
|
147
|
+ Tools.svg.appendChild(shape);
|
|
148
|
+ return shape;
|
|
149
|
+ }
|
|
150
|
+
|
|
151
|
+ function showSelectionButtons() {
|
|
152
|
+ var scale = getScale();
|
|
153
|
+ var selectionBBox = selectionRect.transformedBBox(scale);
|
|
154
|
+ for (var i = 0; i < selectionButtons.length; i++) {
|
|
155
|
+ selectionButtons[i].drawCallback(selectionButtons[i],
|
|
156
|
+ selectionBBox,
|
|
157
|
+ scale);
|
|
158
|
+ }
|
|
159
|
+ }
|
|
160
|
+
|
|
161
|
+ function hideSelectionButtons() {
|
|
162
|
+ for (var i = 0; i < selectionButtons.length; i++) {
|
|
163
|
+ selectionButtons[i].style.display = "none";
|
|
164
|
+ }
|
|
165
|
+ }
|
|
166
|
+
|
|
167
|
+ function hideSelectionUI() {
|
|
168
|
+ hideSelectionButtons();
|
|
169
|
+ selectionRect.style.display = "none";
|
|
170
|
+ }
|
|
171
|
+
|
109
|
172
|
function startMovingElements(x, y, evt) {
|
110
|
173
|
evt.preventDefault();
|
111
|
174
|
selectorState = selectorStates.moving;
|
|
@@ -139,7 +202,7 @@
|
139
|
202
|
|
140
|
203
|
|
141
|
204
|
function calculateSelection() {
|
142
|
|
- var scale = Tools.drawingArea.getCTM().a;
|
|
205
|
+ var scale = getScale();
|
143
|
206
|
var selectionTBBox = selectionRect.transformedBBox(scale);
|
144
|
207
|
var elements = Tools.drawingArea.children;
|
145
|
208
|
var selected = [];
|
|
@@ -231,15 +294,25 @@
|
231
|
294
|
}
|
232
|
295
|
|
233
|
296
|
function clickSelector(x, y, evt) {
|
234
|
|
- var scale = Tools.drawingArea.getCTM().a
|
|
297
|
+ var scale = getScale();
|
235
|
298
|
selectionRect = selectionRect || createSelectorRect();
|
236
|
|
- if (pointInTransformedBBox([x, y], selectionRect.transformedBBox(scale))) {
|
|
299
|
+ var button = null;
|
|
300
|
+ for (var i=0; i<selectionButtons.length; i++) {
|
|
301
|
+ if (selectionButtons[i].contains(evt.target)) {
|
|
302
|
+ button = selectionButtons[i];
|
|
303
|
+ }
|
|
304
|
+ }
|
|
305
|
+ if (button) {
|
|
306
|
+ button.clickCallback();
|
|
307
|
+ } else if (pointInTransformedBBox([x, y], selectionRect.transformedBBox(scale))) {
|
|
308
|
+ hideSelectionButtons();
|
237
|
309
|
startMovingElements(x, y, evt);
|
238
|
310
|
} else if (Tools.drawingArea.contains(evt.target)) {
|
239
|
|
- selectionRect.style.display = "none";
|
|
311
|
+ hideSelectionUI();
|
240
|
312
|
selected_els = [getParentMathematics(evt.target)];
|
241
|
313
|
startMovingElements(x, y, evt);
|
242
|
314
|
} else {
|
|
315
|
+ hideSelectionButtons();
|
243
|
316
|
startSelector(x, y, evt);
|
244
|
317
|
}
|
245
|
318
|
}
|
|
@@ -248,9 +321,10 @@
|
248
|
321
|
if (selectorState == selectorStates.selecting) {
|
249
|
322
|
selected_els = calculateSelection();
|
250
|
323
|
if (selected_els.length == 0) {
|
251
|
|
- selectionRect.style.display = "none";
|
|
324
|
+ hideSelectionUI();
|
252
|
325
|
}
|
253
|
326
|
}
|
|
327
|
+ if (selected_els.length != 0) showSelectionButtons();
|
254
|
328
|
translation_elements = [];
|
255
|
329
|
selectorState = selectorStates.pointing;
|
256
|
330
|
}
|