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
 	var selectorState = selectorStates.pointing;
38
 	var selectorState = selectorStates.pointing;
39
 	var last_sent = 0;
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
 	function getParentMathematics(el) {
66
 	function getParentMathematics(el) {
42
-		var target
43
-		var a = el
67
+		var target;
68
+		var a = el;
44
 		var els = [];
69
 		var els = [];
45
 		while (a) {
70
 		while (a) {
46
 			els.unshift(a);
71
 			els.unshift(a);
67
 		}
92
 		}
68
 		Tools.drawAndSend(data);
93
 		Tools.drawAndSend(data);
69
 		selected_els = [];
94
 		selected_els = [];
95
+		hideSelectionUI();
70
 	}
96
 	}
71
 
97
 
72
 	function duplicateSelection() {
98
 	function duplicateSelection() {
106
 		return shape;
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
 	function startMovingElements(x, y, evt) {
172
 	function startMovingElements(x, y, evt) {
110
 		evt.preventDefault();
173
 		evt.preventDefault();
111
 		selectorState = selectorStates.moving;
174
 		selectorState = selectorStates.moving;
139
 
202
 
140
 
203
 
141
 	function calculateSelection() {
204
 	function calculateSelection() {
142
-		var scale = Tools.drawingArea.getCTM().a;
205
+		var scale = getScale();
143
 		var selectionTBBox = selectionRect.transformedBBox(scale);
206
 		var selectionTBBox = selectionRect.transformedBBox(scale);
144
 		var elements = Tools.drawingArea.children;
207
 		var elements = Tools.drawingArea.children;
145
 		var selected = [];
208
 		var selected = [];
231
 	}
294
 	}
232
 
295
 
233
 	function clickSelector(x, y, evt) {
296
 	function clickSelector(x, y, evt) {
234
-		var scale = Tools.drawingArea.getCTM().a
297
+		var scale = getScale();
235
 		selectionRect = selectionRect || createSelectorRect();
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
 			startMovingElements(x, y, evt);
309
 			startMovingElements(x, y, evt);
238
 		} else if (Tools.drawingArea.contains(evt.target)) {
310
 		} else if (Tools.drawingArea.contains(evt.target)) {
239
-			selectionRect.style.display = "none";
311
+			hideSelectionUI();
240
 			selected_els = [getParentMathematics(evt.target)];
312
 			selected_els = [getParentMathematics(evt.target)];
241
 			startMovingElements(x, y, evt);
313
 			startMovingElements(x, y, evt);
242
 		} else {
314
 		} else {
315
+			hideSelectionButtons();
243
 			startSelector(x, y, evt);
316
 			startSelector(x, y, evt);
244
 		}
317
 		}
245
 	}
318
 	}
248
 		if (selectorState == selectorStates.selecting) {
321
 		if (selectorState == selectorStates.selecting) {
249
 			selected_els = calculateSelection();
322
 			selected_els = calculateSelection();
250
 			if (selected_els.length == 0) {
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
 		translation_elements = [];
328
 		translation_elements = [];
255
 		selectorState = selectorStates.pointing;
329
 		selectorState = selectorStates.pointing;
256
 	}
330
 	}

Loading…
Cancel
Save