canvas2d-wrapper 1.3.4 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +101 -98
- package/dist/index.js +117 -189
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +118 -190
- package/dist/index.modern.js.map +1 -1
- package/package.json +54 -53
package/dist/index.modern.js
CHANGED
@@ -1,15 +1,28 @@
|
|
1
|
-
import React, { useState, useCallback } from 'react';
|
1
|
+
import React, { useState, useCallback, useEffect } from 'react';
|
2
2
|
|
3
|
+
function _toPrimitive(t, r) {
|
4
|
+
if ("object" != typeof t || !t) return t;
|
5
|
+
var e = t[Symbol.toPrimitive];
|
6
|
+
if (void 0 !== e) {
|
7
|
+
var i = e.call(t, r || "default");
|
8
|
+
if ("object" != typeof i) return i;
|
9
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
10
|
+
}
|
11
|
+
return ("string" === r ? String : Number)(t);
|
12
|
+
}
|
13
|
+
function _toPropertyKey(t) {
|
14
|
+
var i = _toPrimitive(t, "string");
|
15
|
+
return "symbol" == typeof i ? i : String(i);
|
16
|
+
}
|
3
17
|
function _defineProperties(target, props) {
|
4
18
|
for (var i = 0; i < props.length; i++) {
|
5
19
|
var descriptor = props[i];
|
6
20
|
descriptor.enumerable = descriptor.enumerable || false;
|
7
21
|
descriptor.configurable = true;
|
8
22
|
if ("value" in descriptor) descriptor.writable = true;
|
9
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
23
|
+
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
|
10
24
|
}
|
11
25
|
}
|
12
|
-
|
13
26
|
function _createClass(Constructor, protoProps, staticProps) {
|
14
27
|
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
15
28
|
if (staticProps) _defineProperties(Constructor, staticProps);
|
@@ -18,56 +31,44 @@ function _createClass(Constructor, protoProps, staticProps) {
|
|
18
31
|
});
|
19
32
|
return Constructor;
|
20
33
|
}
|
21
|
-
|
22
34
|
function _extends() {
|
23
|
-
_extends = Object.assign
|
35
|
+
_extends = Object.assign ? Object.assign.bind() : function (target) {
|
24
36
|
for (var i = 1; i < arguments.length; i++) {
|
25
37
|
var source = arguments[i];
|
26
|
-
|
27
38
|
for (var key in source) {
|
28
39
|
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
29
40
|
target[key] = source[key];
|
30
41
|
}
|
31
42
|
}
|
32
43
|
}
|
33
|
-
|
34
44
|
return target;
|
35
45
|
};
|
36
|
-
|
37
46
|
return _extends.apply(this, arguments);
|
38
47
|
}
|
39
|
-
|
40
48
|
function _inheritsLoose(subClass, superClass) {
|
41
49
|
subClass.prototype = Object.create(superClass.prototype);
|
42
50
|
subClass.prototype.constructor = subClass;
|
43
|
-
|
44
51
|
_setPrototypeOf(subClass, superClass);
|
45
52
|
}
|
46
|
-
|
47
53
|
function _setPrototypeOf(o, p) {
|
48
|
-
_setPrototypeOf = Object.setPrototypeOf
|
54
|
+
_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
|
49
55
|
o.__proto__ = p;
|
50
56
|
return o;
|
51
57
|
};
|
52
|
-
|
53
58
|
return _setPrototypeOf(o, p);
|
54
59
|
}
|
55
|
-
|
56
60
|
function _objectWithoutPropertiesLoose(source, excluded) {
|
57
61
|
if (source == null) return {};
|
58
62
|
var target = {};
|
59
63
|
var sourceKeys = Object.keys(source);
|
60
64
|
var key, i;
|
61
|
-
|
62
65
|
for (i = 0; i < sourceKeys.length; i++) {
|
63
66
|
key = sourceKeys[i];
|
64
67
|
if (excluded.indexOf(key) >= 0) continue;
|
65
68
|
target[key] = source[key];
|
66
69
|
}
|
67
|
-
|
68
70
|
return target;
|
69
71
|
}
|
70
|
-
|
71
72
|
function _unsupportedIterableToArray(o, minLen) {
|
72
73
|
if (!o) return;
|
73
74
|
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
@@ -76,19 +77,14 @@ function _unsupportedIterableToArray(o, minLen) {
|
|
76
77
|
if (n === "Map" || n === "Set") return Array.from(o);
|
77
78
|
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
78
79
|
}
|
79
|
-
|
80
80
|
function _arrayLikeToArray(arr, len) {
|
81
81
|
if (len == null || len > arr.length) len = arr.length;
|
82
|
-
|
83
82
|
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
84
|
-
|
85
83
|
return arr2;
|
86
84
|
}
|
87
|
-
|
88
85
|
function _createForOfIteratorHelperLoose(o, allowArrayLike) {
|
89
86
|
var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
|
90
87
|
if (it) return (it = it.call(o)).next.bind(it);
|
91
|
-
|
92
88
|
if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
|
93
89
|
if (it) o = it;
|
94
90
|
var i = 0;
|
@@ -102,7 +98,6 @@ function _createForOfIteratorHelperLoose(o, allowArrayLike) {
|
|
102
98
|
};
|
103
99
|
};
|
104
100
|
}
|
105
|
-
|
106
101
|
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
107
102
|
}
|
108
103
|
|
@@ -118,31 +113,24 @@ function inCircle(element, x, y, left, top, localTileSize) {
|
|
118
113
|
function inPoly(element, x, y, mouseX, mouseY, localTileSize) {
|
119
114
|
var j = element.points.length - 1;
|
120
115
|
var counter = false;
|
121
|
-
|
122
116
|
for (var i = 0; i < element.points.length; i++) {
|
123
117
|
var iX = element.points[i].x * localTileSize;
|
124
118
|
var iY = element.points[i].y * localTileSize;
|
125
|
-
|
126
119
|
if (mouseX === iX && mouseY === iY) {
|
127
120
|
return true;
|
128
121
|
}
|
129
|
-
|
130
122
|
var jX = element.points[j].x * localTileSize;
|
131
123
|
var jY = element.points[j].y * localTileSize;
|
132
|
-
|
133
124
|
if (iY > y !== jY > y) {
|
134
125
|
var slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);
|
135
|
-
|
136
126
|
if (slope === 0) {
|
137
127
|
return true;
|
138
128
|
}
|
139
|
-
|
140
129
|
if (slope < 0 !== jY < iY) {
|
141
130
|
counter = !counter;
|
142
131
|
}
|
143
132
|
}
|
144
133
|
}
|
145
|
-
|
146
134
|
return counter;
|
147
135
|
}
|
148
136
|
|
@@ -154,12 +142,10 @@ function inRect(element, x, y, left, top, localTileSize) {
|
|
154
142
|
|
155
143
|
function collideElement(e, elements, left, top, tileSize, zoom) {
|
156
144
|
var localTileSize = calcTileSize(tileSize, zoom);
|
157
|
-
|
158
145
|
for (var _iterator = _createForOfIteratorHelperLoose(elements), _step; !(_step = _iterator()).done;) {
|
159
146
|
var element = _step.value;
|
160
147
|
var x = element.x * localTileSize;
|
161
148
|
var y = element.y * localTileSize;
|
162
|
-
|
163
149
|
switch (element.constructorName) {
|
164
150
|
case 'Rect':
|
165
151
|
case 'CanvasImage':
|
@@ -170,9 +156,7 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
|
|
170
156
|
originalEvent: e
|
171
157
|
};
|
172
158
|
}
|
173
|
-
|
174
159
|
break;
|
175
|
-
|
176
160
|
case 'Circle':
|
177
161
|
if (inCircle(element, x, y, left, top, localTileSize)) {
|
178
162
|
return {
|
@@ -181,9 +165,7 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
|
|
181
165
|
originalEvent: e
|
182
166
|
};
|
183
167
|
}
|
184
|
-
|
185
168
|
break;
|
186
|
-
|
187
169
|
case 'Polygon':
|
188
170
|
if (inPoly(element, x, y, left, top, localTileSize)) {
|
189
171
|
return {
|
@@ -192,11 +174,9 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
|
|
192
174
|
originalEvent: e
|
193
175
|
};
|
194
176
|
}
|
195
|
-
|
196
177
|
break;
|
197
178
|
}
|
198
179
|
}
|
199
|
-
|
200
180
|
return null;
|
201
181
|
}
|
202
182
|
|
@@ -204,11 +184,9 @@ function elementClick(e, elements, tileSize, state) {
|
|
204
184
|
var left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;
|
205
185
|
var top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;
|
206
186
|
var clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);
|
207
|
-
|
208
187
|
if (clickedElement !== null) {
|
209
188
|
return clickedElement;
|
210
189
|
}
|
211
|
-
|
212
190
|
return {
|
213
191
|
id: null,
|
214
192
|
element: null,
|
@@ -220,11 +198,9 @@ function elementRightClick(e, elements, tileSize, state) {
|
|
220
198
|
var left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;
|
221
199
|
var top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;
|
222
200
|
var clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);
|
223
|
-
|
224
201
|
if (clickedElement !== null) {
|
225
202
|
return clickedElement;
|
226
203
|
}
|
227
|
-
|
228
204
|
return {
|
229
205
|
id: null,
|
230
206
|
element: null,
|
@@ -234,67 +210,67 @@ function elementRightClick(e, elements, tileSize, state) {
|
|
234
210
|
|
235
211
|
var LEFT_BUTTON = 1;
|
236
212
|
var selectedObject = null;
|
213
|
+
var unselectTimeoutId = 0;
|
214
|
+
var UNSELECT_TIMEOUT_MS = 300;
|
237
215
|
function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {
|
238
216
|
var newProps = _extends({}, props);
|
239
|
-
|
240
217
|
var left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;
|
241
218
|
var top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;
|
242
|
-
|
243
219
|
if (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {
|
244
220
|
var moved = false;
|
245
|
-
|
246
221
|
if (dragObjects) {
|
247
222
|
if (selectedObject === null) {
|
248
223
|
selectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);
|
249
224
|
}
|
250
|
-
|
251
225
|
if (selectedObject !== null && selectedObject.element.draggable) {
|
252
226
|
selectedObject.element.x = -props.left - props.deltaLeft + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;
|
253
227
|
selectedObject.element.y = -props.top - props.deltaLeft + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;
|
254
228
|
moved = true;
|
255
|
-
|
256
229
|
if (onElementMoved) {
|
257
230
|
onElementMoved(selectedObject, event.screenX - props.prevX, event.screenY - props.prevY);
|
258
231
|
}
|
259
|
-
|
260
232
|
if (onHover) {
|
261
233
|
onHover(null);
|
262
234
|
}
|
263
235
|
}
|
264
236
|
}
|
265
|
-
|
266
237
|
if (!moved) {
|
267
238
|
if (!lockXAxis) {
|
268
239
|
newProps.left += event.screenX - props.prevX;
|
269
240
|
}
|
270
|
-
|
271
241
|
if (!lockYAxis) {
|
272
242
|
newProps.top += event.screenY - props.prevY;
|
273
243
|
}
|
274
244
|
}
|
245
|
+
if (event.nativeEvent.pointerType !== 'mouse') {
|
246
|
+
unselectTimeoutId = setTimeout(function () {
|
247
|
+
selectedObject = null;
|
248
|
+
setProps(_extends({}, newProps, {
|
249
|
+
prevX: null,
|
250
|
+
prevY: null
|
251
|
+
}));
|
252
|
+
}, UNSELECT_TIMEOUT_MS);
|
253
|
+
}
|
275
254
|
} else {
|
276
255
|
if (onHover) {
|
277
256
|
onHover(collideElement(event, elements, left, top, tileSize, props.zoom));
|
278
257
|
}
|
279
|
-
|
280
258
|
selectedObject = null;
|
281
259
|
}
|
282
|
-
|
283
260
|
setProps(_extends({}, newProps, {
|
284
261
|
prevX: event.screenX,
|
285
262
|
prevY: event.screenY
|
286
263
|
}));
|
287
264
|
}
|
288
265
|
|
266
|
+
var WHEEL_DELTA = 0.05;
|
289
267
|
function mouseWheel(event, props, setProps, minZoom, maxZoom) {
|
290
268
|
var zoom = props.zoom;
|
291
|
-
|
292
269
|
if (event.deltaY < 0) {
|
293
|
-
zoom +=
|
270
|
+
zoom += WHEEL_DELTA;
|
294
271
|
} else {
|
295
|
-
zoom -=
|
272
|
+
zoom -= WHEEL_DELTA;
|
296
273
|
}
|
297
|
-
|
298
274
|
zoom = Math.max(zoom, minZoom);
|
299
275
|
zoom = Math.min(zoom, maxZoom);
|
300
276
|
setProps(_extends({}, props, {
|
@@ -307,23 +283,18 @@ function sortElements(elements) {
|
|
307
283
|
if (a.zIndex !== b.zIndex) {
|
308
284
|
return a.zIndex - b.zIndex;
|
309
285
|
}
|
310
|
-
|
311
286
|
if (a.fill === b.fill) {
|
312
287
|
if (a.stroke === b.stroke) {
|
313
288
|
return 0;
|
314
289
|
}
|
315
|
-
|
316
290
|
if (a.stroke < b.stroke) {
|
317
291
|
return 1;
|
318
292
|
}
|
319
|
-
|
320
293
|
return -1;
|
321
294
|
}
|
322
|
-
|
323
295
|
if (a.fill < b.fill) {
|
324
296
|
return 1;
|
325
297
|
}
|
326
|
-
|
327
298
|
return -1;
|
328
299
|
});
|
329
300
|
return elements;
|
@@ -337,7 +308,6 @@ var CanvasObject = /*#__PURE__*/function () {
|
|
337
308
|
this['z-index'] = zIndex;
|
338
309
|
this.draggable = draggable;
|
339
310
|
}
|
340
|
-
|
341
311
|
_createClass(CanvasObject, [{
|
342
312
|
key: "zIndex",
|
343
313
|
get: function get() {
|
@@ -352,167 +322,142 @@ var CanvasObject = /*#__PURE__*/function () {
|
|
352
322
|
return 'CanvasObject';
|
353
323
|
}
|
354
324
|
}]);
|
355
|
-
|
356
325
|
return CanvasObject;
|
357
326
|
}();
|
358
327
|
|
359
328
|
var ColoredCanvasObject = /*#__PURE__*/function (_CanvasObject) {
|
360
329
|
_inheritsLoose(ColoredCanvasObject, _CanvasObject);
|
361
|
-
|
362
330
|
function ColoredCanvasObject(id, x, y, fill, stroke, zIndex, draggable) {
|
363
331
|
var _this;
|
364
|
-
|
365
332
|
_this = _CanvasObject.call(this, id, x, y, zIndex, draggable) || this;
|
366
333
|
_this.fill = fill;
|
367
334
|
_this.stroke = stroke;
|
368
335
|
return _this;
|
369
336
|
}
|
370
|
-
|
371
337
|
_createClass(ColoredCanvasObject, [{
|
372
338
|
key: "constructorName",
|
373
339
|
get: function get() {
|
374
340
|
return 'ColoredCanvasObject';
|
375
341
|
}
|
376
342
|
}]);
|
377
|
-
|
378
343
|
return ColoredCanvasObject;
|
379
344
|
}(CanvasObject);
|
380
345
|
|
381
346
|
var Circle = /*#__PURE__*/function (_ColoredCanvasObject) {
|
382
347
|
_inheritsLoose(Circle, _ColoredCanvasObject);
|
383
|
-
|
384
348
|
function Circle(_ref) {
|
385
349
|
var _this;
|
386
|
-
|
387
350
|
var id = _ref.id,
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
351
|
+
x = _ref.x,
|
352
|
+
y = _ref.y,
|
353
|
+
radius = _ref.radius,
|
354
|
+
fill = _ref.fill,
|
355
|
+
stroke = _ref.stroke,
|
356
|
+
zIndex = _ref.zIndex,
|
357
|
+
draggable = _ref.draggable;
|
395
358
|
_this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable) || this;
|
396
359
|
_this.radius = radius;
|
397
360
|
return _this;
|
398
361
|
}
|
399
|
-
|
400
362
|
_createClass(Circle, [{
|
401
363
|
key: "constructorName",
|
402
364
|
get: function get() {
|
403
365
|
return 'Circle';
|
404
366
|
}
|
405
367
|
}]);
|
406
|
-
|
407
368
|
return Circle;
|
408
369
|
}(ColoredCanvasObject);
|
409
370
|
|
410
371
|
var CanvasImage = /*#__PURE__*/function (_CanvasObject) {
|
411
372
|
_inheritsLoose(CanvasImage, _CanvasObject);
|
412
|
-
|
413
373
|
function CanvasImage(_ref) {
|
414
374
|
var _this;
|
415
|
-
|
416
375
|
var id = _ref.id,
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
376
|
+
x = _ref.x,
|
377
|
+
y = _ref.y,
|
378
|
+
width = _ref.width,
|
379
|
+
height = _ref.height,
|
380
|
+
src = _ref.src,
|
381
|
+
zIndex = _ref.zIndex,
|
382
|
+
draggable = _ref.draggable;
|
424
383
|
_this = _CanvasObject.call(this, id, x, y, zIndex, draggable) || this;
|
425
384
|
_this.width = width;
|
426
385
|
_this.height = height;
|
427
386
|
_this.src = src;
|
428
387
|
return _this;
|
429
388
|
}
|
430
|
-
|
431
389
|
var _proto = CanvasImage.prototype;
|
432
|
-
|
433
390
|
_proto.crop = function crop(x, y, width, height) {
|
434
391
|
this.sx = sx;
|
435
392
|
this.sy = sx;
|
436
393
|
this.swidth = swidth;
|
437
394
|
this.sheight = sheight;
|
438
395
|
};
|
439
|
-
|
440
396
|
_createClass(CanvasImage, [{
|
441
397
|
key: "constructorName",
|
442
398
|
get: function get() {
|
443
399
|
return 'CanvasImage';
|
444
400
|
}
|
445
401
|
}]);
|
446
|
-
|
447
402
|
return CanvasImage;
|
448
403
|
}(CanvasObject);
|
449
404
|
|
450
405
|
var Rect = /*#__PURE__*/function (_ColoredCanvasObject) {
|
451
406
|
_inheritsLoose(Rect, _ColoredCanvasObject);
|
452
|
-
|
453
407
|
function Rect(_ref) {
|
454
408
|
var _this;
|
455
|
-
|
456
409
|
var id = _ref.id,
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
410
|
+
x = _ref.x,
|
411
|
+
y = _ref.y,
|
412
|
+
width = _ref.width,
|
413
|
+
height = _ref.height,
|
414
|
+
fill = _ref.fill,
|
415
|
+
stroke = _ref.stroke,
|
416
|
+
zIndex = _ref.zIndex,
|
417
|
+
draggable = _ref.draggable;
|
465
418
|
_this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable) || this;
|
466
419
|
_this.width = width;
|
467
420
|
_this.height = height;
|
468
421
|
return _this;
|
469
422
|
}
|
470
|
-
|
471
423
|
_createClass(Rect, [{
|
472
424
|
key: "constructorName",
|
473
425
|
get: function get() {
|
474
426
|
return 'Rect';
|
475
427
|
}
|
476
428
|
}]);
|
477
|
-
|
478
429
|
return Rect;
|
479
430
|
}(ColoredCanvasObject);
|
480
431
|
|
481
432
|
var Polygon = /*#__PURE__*/function (_ColoredCanvasObject) {
|
482
433
|
_inheritsLoose(Polygon, _ColoredCanvasObject);
|
483
|
-
|
484
434
|
function Polygon(_ref) {
|
485
435
|
var _this;
|
486
|
-
|
487
436
|
var id = _ref.id,
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
437
|
+
points = _ref.points,
|
438
|
+
fill = _ref.fill,
|
439
|
+
stroke = _ref.stroke,
|
440
|
+
zIndex = _ref.zIndex,
|
441
|
+
draggable = _ref.draggable;
|
493
442
|
_this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, fill, stroke, zIndex, draggable) || this;
|
494
443
|
_this.points = points;
|
495
444
|
return _this;
|
496
445
|
}
|
497
|
-
|
498
446
|
_createClass(Polygon, [{
|
499
447
|
key: "constructorName",
|
500
448
|
get: function get() {
|
501
449
|
return 'Polygon';
|
502
450
|
}
|
503
451
|
}]);
|
504
|
-
|
505
452
|
return Polygon;
|
506
453
|
}(ColoredCanvasObject);
|
507
454
|
|
508
455
|
function renderCircle(context, element, left, top, localTileSize) {
|
509
456
|
context.beginPath();
|
510
457
|
context.arc(left + element.x * localTileSize, top + element.y * localTileSize, element.radius * localTileSize, 0, 2 * Math.PI);
|
511
|
-
|
512
458
|
if (element.fill) {
|
513
459
|
context.fill();
|
514
460
|
}
|
515
|
-
|
516
461
|
if (element.stroke) {
|
517
462
|
context.stroke();
|
518
463
|
}
|
@@ -525,7 +470,6 @@ function renderImage(context, element, left, top, localTileSize) {
|
|
525
470
|
__canvas2dWrapper__.imgCache[element.src] = new Image();
|
526
471
|
__canvas2dWrapper__.imgCache[element.src].src = element.src;
|
527
472
|
}
|
528
|
-
|
529
473
|
if (!element.sx) {
|
530
474
|
context.drawImage(__canvas2dWrapper__.imgCache[element.src], left + element.x * localTileSize, top + element.y * localTileSize, element.width * localTileSize, element.height * localTileSize);
|
531
475
|
} else {
|
@@ -537,7 +481,6 @@ function renderRect(context, element, left, top, localTileSize) {
|
|
537
481
|
if (element.fill) {
|
538
482
|
context.fillRect(left + element.x * localTileSize, top + element.y * localTileSize, element.width * localTileSize, element.height * localTileSize);
|
539
483
|
}
|
540
|
-
|
541
484
|
if (element.stroke) {
|
542
485
|
context.strokeRect(left + element.x * localTileSize, top + element.y * localTileSize, element.width * localTileSize, element.height * localTileSize);
|
543
486
|
}
|
@@ -546,17 +489,13 @@ function renderRect(context, element, left, top, localTileSize) {
|
|
546
489
|
function renderRect$1(context, element, left, top, localTileSize) {
|
547
490
|
context.beginPath();
|
548
491
|
context.moveTo(left + element.points[0].x * localTileSize, top + element.points[0].y * localTileSize);
|
549
|
-
|
550
492
|
for (var i = 0; i < element.points.length; i++) {
|
551
493
|
context.lineTo(left + element.points[i].x * localTileSize, top + element.points[i].y * localTileSize);
|
552
494
|
}
|
553
|
-
|
554
495
|
context.lineTo(left + element.points[0].x * localTileSize, top + element.points[0].y * localTileSize);
|
555
|
-
|
556
496
|
if (element.fill) {
|
557
497
|
context.fill();
|
558
498
|
}
|
559
|
-
|
560
499
|
if (element.stroke) {
|
561
500
|
context.stroke();
|
562
501
|
}
|
@@ -573,22 +512,17 @@ function renderCanvas(context, width, height, elements, tileSize, state) {
|
|
573
512
|
var prevStrokeStyle = '';
|
574
513
|
var localTileSize = calcTileSize(tileSize, state.zoom);
|
575
514
|
context.clearRect(0, 0, width, height);
|
576
|
-
|
577
515
|
for (var _iterator = _createForOfIteratorHelperLoose(elements), _step; !(_step = _iterator()).done;) {
|
578
516
|
var element = _step.value;
|
579
|
-
|
580
517
|
if (element.fill !== prevFillStyle && typeof element.fill !== 'undefined') {
|
581
518
|
context.fillStyle = element.fill;
|
582
519
|
prevFillStyle = element.fill;
|
583
520
|
}
|
584
|
-
|
585
521
|
if (element.stroke !== prevStrokeStyle && typeof element.stroke !== 'undefined') {
|
586
522
|
context.strokeStyle = element.stroke;
|
587
523
|
prevStrokeStyle = element.stroke;
|
588
524
|
}
|
589
|
-
|
590
525
|
var type = element.constructorName;
|
591
|
-
|
592
526
|
if (renderFn[type]) {
|
593
527
|
renderFn[type](context, element, left, top, localTileSize);
|
594
528
|
} else {
|
@@ -597,54 +531,54 @@ function renderCanvas(context, width, height, elements, tileSize, state) {
|
|
597
531
|
}
|
598
532
|
}
|
599
533
|
|
600
|
-
var _excluded = ["elements", "width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onRightClick", "onHover", "onElementMoved", "onWheel", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop"];
|
601
|
-
|
534
|
+
var _excluded = ["elements", "width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onRightClick", "onHover", "onElementMoved", "onWheel", "onFrame", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop"];
|
535
|
+
function onRightClickEvent(e) {
|
536
|
+
e.preventDefault();
|
537
|
+
onRightClick(elementRightClick(e, elements, tileSize, state));
|
538
|
+
}
|
602
539
|
function Canvas2D(_ref) {
|
603
540
|
var elements = _ref.elements,
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
541
|
+
width = _ref.width,
|
542
|
+
height = _ref.height,
|
543
|
+
_ref$trackMouseMove = _ref.trackMouseMove,
|
544
|
+
trackMouseMove = _ref$trackMouseMove === void 0 ? true : _ref$trackMouseMove,
|
545
|
+
_ref$minZoom = _ref.minZoom,
|
546
|
+
minZoom = _ref$minZoom === void 0 ? 1 : _ref$minZoom,
|
547
|
+
_ref$maxZoom = _ref.maxZoom,
|
548
|
+
maxZoom = _ref$maxZoom === void 0 ? 1 : _ref$maxZoom,
|
549
|
+
_ref$tileSize = _ref.tileSize,
|
550
|
+
tileSize = _ref$tileSize === void 0 ? 1 : _ref$tileSize,
|
551
|
+
onClick = _ref.onClick,
|
552
|
+
onRightClick = _ref.onRightClick,
|
553
|
+
onHover = _ref.onHover,
|
554
|
+
onElementMoved = _ref.onElementMoved,
|
555
|
+
onWheel = _ref.onWheel,
|
556
|
+
onFrame = _ref.onFrame,
|
557
|
+
_ref$lockXAxis = _ref.lockXAxis,
|
558
|
+
lockXAxis = _ref$lockXAxis === void 0 ? false : _ref$lockXAxis,
|
559
|
+
_ref$lockYAxis = _ref.lockYAxis,
|
560
|
+
lockYAxis = _ref$lockYAxis === void 0 ? false : _ref$lockYAxis,
|
561
|
+
_ref$smoothingQuality = _ref.smoothingQuality,
|
562
|
+
smoothingQuality = _ref$smoothingQuality === void 0 ? 'medium' : _ref$smoothingQuality,
|
563
|
+
_ref$dragObjects = _ref.dragObjects,
|
564
|
+
dragObjects = _ref$dragObjects === void 0 ? false : _ref$dragObjects,
|
565
|
+
_ref$deltaLeft = _ref.deltaLeft,
|
566
|
+
deltaLeft = _ref$deltaLeft === void 0 ? 0 : _ref$deltaLeft,
|
567
|
+
_ref$deltaTop = _ref.deltaTop,
|
568
|
+
deltaTop = _ref$deltaTop === void 0 ? 0 : _ref$deltaTop,
|
569
|
+
otherProps = _objectWithoutPropertiesLoose(_ref, _excluded);
|
633
570
|
var _useState = useState({}),
|
634
|
-
|
635
|
-
|
636
|
-
|
571
|
+
state = _useState[0],
|
572
|
+
setState = _useState[1];
|
637
573
|
var canvasRef = useCallback(function (canvas) {
|
638
574
|
if (canvas !== null) {
|
639
575
|
var context = canvas.getContext('2d');
|
640
|
-
|
641
576
|
if (smoothingQuality === false) {
|
642
577
|
context.imageSmoothingEnabled = false;
|
643
578
|
} else {
|
644
579
|
context.imageSmoothingEnabled = true;
|
645
580
|
context.imageSmoothingQuality = smoothingQuality;
|
646
581
|
}
|
647
|
-
|
648
582
|
setState({
|
649
583
|
boundingClientRect: canvas.getBoundingClientRect(),
|
650
584
|
canvas: canvas,
|
@@ -659,74 +593,68 @@ function Canvas2D(_ref) {
|
|
659
593
|
}, []);
|
660
594
|
state.deltaTop = deltaTop;
|
661
595
|
state.deltaLeft = deltaLeft;
|
662
|
-
|
663
596
|
if (typeof elements !== 'object' || !Array.isArray(elements)) {
|
664
597
|
throw new Error('Invalid elements, should be an array !');
|
665
598
|
}
|
666
|
-
|
667
599
|
if (typeof width !== 'number' || typeof height !== 'number') {
|
668
600
|
throw new Error('width/height should be specified and be numbers.');
|
669
601
|
}
|
670
|
-
|
671
602
|
if (minZoom > maxZoom) {
|
672
603
|
throw new Error('minZoom should be lower than maxZoom.');
|
673
604
|
}
|
674
|
-
|
675
605
|
if (typeof onClick !== 'function' && typeof onClick !== 'undefined') {
|
676
606
|
throw new Error('onClick should be a function.');
|
677
607
|
}
|
678
|
-
|
679
608
|
var sortedElements = sortElements(elements);
|
680
609
|
var onMouseMove = null;
|
681
|
-
|
682
610
|
if (trackMouseMove) {
|
683
611
|
onMouseMove = function onMouseMove(e) {
|
684
612
|
return mouseMove(e, elements, tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);
|
685
613
|
};
|
686
614
|
}
|
687
|
-
|
688
615
|
var onWheelFn = function onWheelFn(e) {
|
689
616
|
if (onWheel) {
|
690
617
|
onWheel(e);
|
691
618
|
}
|
692
|
-
|
693
619
|
if (minZoom !== maxZoom) {
|
694
620
|
mouseWheel(e, state, setState, minZoom, maxZoom);
|
695
621
|
}
|
696
622
|
};
|
697
|
-
|
698
623
|
var onClickFn = null;
|
699
|
-
|
700
624
|
if (onClick) {
|
701
625
|
onClickFn = function onClickFn(e) {
|
702
626
|
return onClick(elementClick(e, elements, tileSize, state));
|
703
627
|
};
|
704
628
|
}
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
state.canvas.removeEventListener('contextmenu',
|
629
|
+
useEffect(function () {
|
630
|
+
if (onRightClick && state.canvas) {
|
631
|
+
state.canvas.addEventListener('contextmenu', onRightClickEvent);
|
632
|
+
return state.canvas.removeEventListener('contextmenu', onRightClickEvent);
|
709
633
|
}
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
634
|
+
}, [state.canvas, onRightClick]);
|
635
|
+
useEffect(function () {
|
636
|
+
var shouldRender = true;
|
637
|
+
function render() {
|
638
|
+
if (onFrame) {
|
639
|
+
onFrame();
|
640
|
+
}
|
641
|
+
if (state.context) {
|
642
|
+
renderCanvas(state.context, width, height, sortedElements, tileSize, state);
|
643
|
+
}
|
644
|
+
if (shouldRender) {
|
645
|
+
window.requestAnimationFrame(render);
|
646
|
+
}
|
647
|
+
}
|
648
|
+
window.requestAnimationFrame(render);
|
649
|
+
return function () {
|
650
|
+
shouldRender = false;
|
714
651
|
};
|
715
|
-
|
716
|
-
state.canvas.addEventListener('contextmenu', prevEvent);
|
717
|
-
}
|
718
|
-
|
719
|
-
if (state.context) {
|
720
|
-
window.requestAnimationFrame(function () {
|
721
|
-
renderCanvas(state.context, width, height, sortedElements, tileSize, state);
|
722
|
-
});
|
723
|
-
}
|
724
|
-
|
652
|
+
}, [state.context, onFrame]);
|
725
653
|
return /*#__PURE__*/React.createElement("canvas", _extends({
|
726
654
|
ref: canvasRef,
|
727
655
|
width: width,
|
728
656
|
height: height,
|
729
|
-
|
657
|
+
onPointerMove: onMouseMove,
|
730
658
|
onWheel: onWheelFn,
|
731
659
|
onClick: onClickFn,
|
732
660
|
className: "canvas2d-wrapper"
|