Browse Source

Add buttons for deleteSelection and duplicateSelection

dev_h
Finn Krein 3 years ago
parent
commit
fd1da74515
1 changed files with 81 additions and 7 deletions
  1. 81
    7
      client-data/tools/hand/hand.js

+ 81
- 7
client-data/tools/hand/hand.js View File

@@ -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
 	}

Loading…
Cancel
Save