canvas2d-wrapper 1.4.0 → 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 +107 -191
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +108 -192
- 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,
|
@@ -235,78 +211,66 @@ function elementRightClick(e, elements, tileSize, state) {
|
|
235
211
|
var LEFT_BUTTON = 1;
|
236
212
|
var selectedObject = null;
|
237
213
|
var unselectTimeoutId = 0;
|
214
|
+
var UNSELECT_TIMEOUT_MS = 300;
|
238
215
|
function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {
|
239
216
|
var newProps = _extends({}, props);
|
240
|
-
|
241
217
|
var left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;
|
242
218
|
var top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;
|
243
|
-
|
244
219
|
if (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {
|
245
220
|
var moved = false;
|
246
|
-
|
247
221
|
if (dragObjects) {
|
248
222
|
if (selectedObject === null) {
|
249
223
|
selectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);
|
250
224
|
}
|
251
|
-
|
252
225
|
if (selectedObject !== null && selectedObject.element.draggable) {
|
253
226
|
selectedObject.element.x = -props.left - props.deltaLeft + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;
|
254
227
|
selectedObject.element.y = -props.top - props.deltaLeft + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;
|
255
228
|
moved = true;
|
256
|
-
|
257
229
|
if (onElementMoved) {
|
258
230
|
onElementMoved(selectedObject, event.screenX - props.prevX, event.screenY - props.prevY);
|
259
231
|
}
|
260
|
-
|
261
232
|
if (onHover) {
|
262
233
|
onHover(null);
|
263
234
|
}
|
264
235
|
}
|
265
236
|
}
|
266
|
-
|
267
237
|
if (!moved) {
|
268
238
|
if (!lockXAxis) {
|
269
239
|
newProps.left += event.screenX - props.prevX;
|
270
240
|
}
|
271
|
-
|
272
241
|
if (!lockYAxis) {
|
273
242
|
newProps.top += event.screenY - props.prevY;
|
274
243
|
}
|
275
244
|
}
|
276
|
-
|
277
245
|
if (event.nativeEvent.pointerType !== 'mouse') {
|
278
246
|
unselectTimeoutId = setTimeout(function () {
|
279
|
-
console.log('unselect');
|
280
247
|
selectedObject = null;
|
281
248
|
setProps(_extends({}, newProps, {
|
282
249
|
prevX: null,
|
283
250
|
prevY: null
|
284
251
|
}));
|
285
|
-
},
|
252
|
+
}, UNSELECT_TIMEOUT_MS);
|
286
253
|
}
|
287
254
|
} else {
|
288
255
|
if (onHover) {
|
289
256
|
onHover(collideElement(event, elements, left, top, tileSize, props.zoom));
|
290
257
|
}
|
291
|
-
|
292
258
|
selectedObject = null;
|
293
259
|
}
|
294
|
-
|
295
260
|
setProps(_extends({}, newProps, {
|
296
261
|
prevX: event.screenX,
|
297
262
|
prevY: event.screenY
|
298
263
|
}));
|
299
264
|
}
|
300
265
|
|
266
|
+
var WHEEL_DELTA = 0.05;
|
301
267
|
function mouseWheel(event, props, setProps, minZoom, maxZoom) {
|
302
268
|
var zoom = props.zoom;
|
303
|
-
|
304
269
|
if (event.deltaY < 0) {
|
305
|
-
zoom +=
|
270
|
+
zoom += WHEEL_DELTA;
|
306
271
|
} else {
|
307
|
-
zoom -=
|
272
|
+
zoom -= WHEEL_DELTA;
|
308
273
|
}
|
309
|
-
|
310
274
|
zoom = Math.max(zoom, minZoom);
|
311
275
|
zoom = Math.min(zoom, maxZoom);
|
312
276
|
setProps(_extends({}, props, {
|
@@ -319,23 +283,18 @@ function sortElements(elements) {
|
|
319
283
|
if (a.zIndex !== b.zIndex) {
|
320
284
|
return a.zIndex - b.zIndex;
|
321
285
|
}
|
322
|
-
|
323
286
|
if (a.fill === b.fill) {
|
324
287
|
if (a.stroke === b.stroke) {
|
325
288
|
return 0;
|
326
289
|
}
|
327
|
-
|
328
290
|
if (a.stroke < b.stroke) {
|
329
291
|
return 1;
|
330
292
|
}
|
331
|
-
|
332
293
|
return -1;
|
333
294
|
}
|
334
|
-
|
335
295
|
if (a.fill < b.fill) {
|
336
296
|
return 1;
|
337
297
|
}
|
338
|
-
|
339
298
|
return -1;
|
340
299
|
});
|
341
300
|
return elements;
|
@@ -349,7 +308,6 @@ var CanvasObject = /*#__PURE__*/function () {
|
|
349
308
|
this['z-index'] = zIndex;
|
350
309
|
this.draggable = draggable;
|
351
310
|
}
|
352
|
-
|
353
311
|
_createClass(CanvasObject, [{
|
354
312
|
key: "zIndex",
|
355
313
|
get: function get() {
|
@@ -364,167 +322,142 @@ var CanvasObject = /*#__PURE__*/function () {
|
|
364
322
|
return 'CanvasObject';
|
365
323
|
}
|
366
324
|
}]);
|
367
|
-
|
368
325
|
return CanvasObject;
|
369
326
|
}();
|
370
327
|
|
371
328
|
var ColoredCanvasObject = /*#__PURE__*/function (_CanvasObject) {
|
372
329
|
_inheritsLoose(ColoredCanvasObject, _CanvasObject);
|
373
|
-
|
374
330
|
function ColoredCanvasObject(id, x, y, fill, stroke, zIndex, draggable) {
|
375
331
|
var _this;
|
376
|
-
|
377
332
|
_this = _CanvasObject.call(this, id, x, y, zIndex, draggable) || this;
|
378
333
|
_this.fill = fill;
|
379
334
|
_this.stroke = stroke;
|
380
335
|
return _this;
|
381
336
|
}
|
382
|
-
|
383
337
|
_createClass(ColoredCanvasObject, [{
|
384
338
|
key: "constructorName",
|
385
339
|
get: function get() {
|
386
340
|
return 'ColoredCanvasObject';
|
387
341
|
}
|
388
342
|
}]);
|
389
|
-
|
390
343
|
return ColoredCanvasObject;
|
391
344
|
}(CanvasObject);
|
392
345
|
|
393
346
|
var Circle = /*#__PURE__*/function (_ColoredCanvasObject) {
|
394
347
|
_inheritsLoose(Circle, _ColoredCanvasObject);
|
395
|
-
|
396
348
|
function Circle(_ref) {
|
397
349
|
var _this;
|
398
|
-
|
399
350
|
var id = _ref.id,
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
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;
|
407
358
|
_this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable) || this;
|
408
359
|
_this.radius = radius;
|
409
360
|
return _this;
|
410
361
|
}
|
411
|
-
|
412
362
|
_createClass(Circle, [{
|
413
363
|
key: "constructorName",
|
414
364
|
get: function get() {
|
415
365
|
return 'Circle';
|
416
366
|
}
|
417
367
|
}]);
|
418
|
-
|
419
368
|
return Circle;
|
420
369
|
}(ColoredCanvasObject);
|
421
370
|
|
422
371
|
var CanvasImage = /*#__PURE__*/function (_CanvasObject) {
|
423
372
|
_inheritsLoose(CanvasImage, _CanvasObject);
|
424
|
-
|
425
373
|
function CanvasImage(_ref) {
|
426
374
|
var _this;
|
427
|
-
|
428
375
|
var id = _ref.id,
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
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;
|
436
383
|
_this = _CanvasObject.call(this, id, x, y, zIndex, draggable) || this;
|
437
384
|
_this.width = width;
|
438
385
|
_this.height = height;
|
439
386
|
_this.src = src;
|
440
387
|
return _this;
|
441
388
|
}
|
442
|
-
|
443
389
|
var _proto = CanvasImage.prototype;
|
444
|
-
|
445
390
|
_proto.crop = function crop(x, y, width, height) {
|
446
391
|
this.sx = sx;
|
447
392
|
this.sy = sx;
|
448
393
|
this.swidth = swidth;
|
449
394
|
this.sheight = sheight;
|
450
395
|
};
|
451
|
-
|
452
396
|
_createClass(CanvasImage, [{
|
453
397
|
key: "constructorName",
|
454
398
|
get: function get() {
|
455
399
|
return 'CanvasImage';
|
456
400
|
}
|
457
401
|
}]);
|
458
|
-
|
459
402
|
return CanvasImage;
|
460
403
|
}(CanvasObject);
|
461
404
|
|
462
405
|
var Rect = /*#__PURE__*/function (_ColoredCanvasObject) {
|
463
406
|
_inheritsLoose(Rect, _ColoredCanvasObject);
|
464
|
-
|
465
407
|
function Rect(_ref) {
|
466
408
|
var _this;
|
467
|
-
|
468
409
|
var id = _ref.id,
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
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;
|
477
418
|
_this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable) || this;
|
478
419
|
_this.width = width;
|
479
420
|
_this.height = height;
|
480
421
|
return _this;
|
481
422
|
}
|
482
|
-
|
483
423
|
_createClass(Rect, [{
|
484
424
|
key: "constructorName",
|
485
425
|
get: function get() {
|
486
426
|
return 'Rect';
|
487
427
|
}
|
488
428
|
}]);
|
489
|
-
|
490
429
|
return Rect;
|
491
430
|
}(ColoredCanvasObject);
|
492
431
|
|
493
432
|
var Polygon = /*#__PURE__*/function (_ColoredCanvasObject) {
|
494
433
|
_inheritsLoose(Polygon, _ColoredCanvasObject);
|
495
|
-
|
496
434
|
function Polygon(_ref) {
|
497
435
|
var _this;
|
498
|
-
|
499
436
|
var id = _ref.id,
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
437
|
+
points = _ref.points,
|
438
|
+
fill = _ref.fill,
|
439
|
+
stroke = _ref.stroke,
|
440
|
+
zIndex = _ref.zIndex,
|
441
|
+
draggable = _ref.draggable;
|
505
442
|
_this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, fill, stroke, zIndex, draggable) || this;
|
506
443
|
_this.points = points;
|
507
444
|
return _this;
|
508
445
|
}
|
509
|
-
|
510
446
|
_createClass(Polygon, [{
|
511
447
|
key: "constructorName",
|
512
448
|
get: function get() {
|
513
449
|
return 'Polygon';
|
514
450
|
}
|
515
451
|
}]);
|
516
|
-
|
517
452
|
return Polygon;
|
518
453
|
}(ColoredCanvasObject);
|
519
454
|
|
520
455
|
function renderCircle(context, element, left, top, localTileSize) {
|
521
456
|
context.beginPath();
|
522
457
|
context.arc(left + element.x * localTileSize, top + element.y * localTileSize, element.radius * localTileSize, 0, 2 * Math.PI);
|
523
|
-
|
524
458
|
if (element.fill) {
|
525
459
|
context.fill();
|
526
460
|
}
|
527
|
-
|
528
461
|
if (element.stroke) {
|
529
462
|
context.stroke();
|
530
463
|
}
|
@@ -537,7 +470,6 @@ function renderImage(context, element, left, top, localTileSize) {
|
|
537
470
|
__canvas2dWrapper__.imgCache[element.src] = new Image();
|
538
471
|
__canvas2dWrapper__.imgCache[element.src].src = element.src;
|
539
472
|
}
|
540
|
-
|
541
473
|
if (!element.sx) {
|
542
474
|
context.drawImage(__canvas2dWrapper__.imgCache[element.src], left + element.x * localTileSize, top + element.y * localTileSize, element.width * localTileSize, element.height * localTileSize);
|
543
475
|
} else {
|
@@ -549,7 +481,6 @@ function renderRect(context, element, left, top, localTileSize) {
|
|
549
481
|
if (element.fill) {
|
550
482
|
context.fillRect(left + element.x * localTileSize, top + element.y * localTileSize, element.width * localTileSize, element.height * localTileSize);
|
551
483
|
}
|
552
|
-
|
553
484
|
if (element.stroke) {
|
554
485
|
context.strokeRect(left + element.x * localTileSize, top + element.y * localTileSize, element.width * localTileSize, element.height * localTileSize);
|
555
486
|
}
|
@@ -558,17 +489,13 @@ function renderRect(context, element, left, top, localTileSize) {
|
|
558
489
|
function renderRect$1(context, element, left, top, localTileSize) {
|
559
490
|
context.beginPath();
|
560
491
|
context.moveTo(left + element.points[0].x * localTileSize, top + element.points[0].y * localTileSize);
|
561
|
-
|
562
492
|
for (var i = 0; i < element.points.length; i++) {
|
563
493
|
context.lineTo(left + element.points[i].x * localTileSize, top + element.points[i].y * localTileSize);
|
564
494
|
}
|
565
|
-
|
566
495
|
context.lineTo(left + element.points[0].x * localTileSize, top + element.points[0].y * localTileSize);
|
567
|
-
|
568
496
|
if (element.fill) {
|
569
497
|
context.fill();
|
570
498
|
}
|
571
|
-
|
572
499
|
if (element.stroke) {
|
573
500
|
context.stroke();
|
574
501
|
}
|
@@ -585,22 +512,17 @@ function renderCanvas(context, width, height, elements, tileSize, state) {
|
|
585
512
|
var prevStrokeStyle = '';
|
586
513
|
var localTileSize = calcTileSize(tileSize, state.zoom);
|
587
514
|
context.clearRect(0, 0, width, height);
|
588
|
-
|
589
515
|
for (var _iterator = _createForOfIteratorHelperLoose(elements), _step; !(_step = _iterator()).done;) {
|
590
516
|
var element = _step.value;
|
591
|
-
|
592
517
|
if (element.fill !== prevFillStyle && typeof element.fill !== 'undefined') {
|
593
518
|
context.fillStyle = element.fill;
|
594
519
|
prevFillStyle = element.fill;
|
595
520
|
}
|
596
|
-
|
597
521
|
if (element.stroke !== prevStrokeStyle && typeof element.stroke !== 'undefined') {
|
598
522
|
context.strokeStyle = element.stroke;
|
599
523
|
prevStrokeStyle = element.stroke;
|
600
524
|
}
|
601
|
-
|
602
525
|
var type = element.constructorName;
|
603
|
-
|
604
526
|
if (renderFn[type]) {
|
605
527
|
renderFn[type](context, element, left, top, localTileSize);
|
606
528
|
} else {
|
@@ -609,54 +531,54 @@ function renderCanvas(context, width, height, elements, tileSize, state) {
|
|
609
531
|
}
|
610
532
|
}
|
611
533
|
|
612
|
-
var _excluded = ["elements", "width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onRightClick", "onHover", "onElementMoved", "onWheel", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop"];
|
613
|
-
|
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
|
+
}
|
614
539
|
function Canvas2D(_ref) {
|
615
540
|
var elements = _ref.elements,
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
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);
|
645
570
|
var _useState = useState({}),
|
646
|
-
|
647
|
-
|
648
|
-
|
571
|
+
state = _useState[0],
|
572
|
+
setState = _useState[1];
|
649
573
|
var canvasRef = useCallback(function (canvas) {
|
650
574
|
if (canvas !== null) {
|
651
575
|
var context = canvas.getContext('2d');
|
652
|
-
|
653
576
|
if (smoothingQuality === false) {
|
654
577
|
context.imageSmoothingEnabled = false;
|
655
578
|
} else {
|
656
579
|
context.imageSmoothingEnabled = true;
|
657
580
|
context.imageSmoothingQuality = smoothingQuality;
|
658
581
|
}
|
659
|
-
|
660
582
|
setState({
|
661
583
|
boundingClientRect: canvas.getBoundingClientRect(),
|
662
584
|
canvas: canvas,
|
@@ -671,69 +593,63 @@ function Canvas2D(_ref) {
|
|
671
593
|
}, []);
|
672
594
|
state.deltaTop = deltaTop;
|
673
595
|
state.deltaLeft = deltaLeft;
|
674
|
-
|
675
596
|
if (typeof elements !== 'object' || !Array.isArray(elements)) {
|
676
597
|
throw new Error('Invalid elements, should be an array !');
|
677
598
|
}
|
678
|
-
|
679
599
|
if (typeof width !== 'number' || typeof height !== 'number') {
|
680
600
|
throw new Error('width/height should be specified and be numbers.');
|
681
601
|
}
|
682
|
-
|
683
602
|
if (minZoom > maxZoom) {
|
684
603
|
throw new Error('minZoom should be lower than maxZoom.');
|
685
604
|
}
|
686
|
-
|
687
605
|
if (typeof onClick !== 'function' && typeof onClick !== 'undefined') {
|
688
606
|
throw new Error('onClick should be a function.');
|
689
607
|
}
|
690
|
-
|
691
608
|
var sortedElements = sortElements(elements);
|
692
609
|
var onMouseMove = null;
|
693
|
-
|
694
610
|
if (trackMouseMove) {
|
695
611
|
onMouseMove = function onMouseMove(e) {
|
696
612
|
return mouseMove(e, elements, tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);
|
697
613
|
};
|
698
614
|
}
|
699
|
-
|
700
615
|
var onWheelFn = function onWheelFn(e) {
|
701
616
|
if (onWheel) {
|
702
617
|
onWheel(e);
|
703
618
|
}
|
704
|
-
|
705
619
|
if (minZoom !== maxZoom) {
|
706
620
|
mouseWheel(e, state, setState, minZoom, maxZoom);
|
707
621
|
}
|
708
622
|
};
|
709
|
-
|
710
623
|
var onClickFn = null;
|
711
|
-
|
712
624
|
if (onClick) {
|
713
625
|
onClickFn = function onClickFn(e) {
|
714
626
|
return onClick(elementClick(e, elements, tileSize, state));
|
715
627
|
};
|
716
628
|
}
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
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);
|
721
633
|
}
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
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;
|
726
651
|
};
|
727
|
-
|
728
|
-
state.canvas.addEventListener('contextmenu', prevEvent);
|
729
|
-
}
|
730
|
-
|
731
|
-
if (state.context) {
|
732
|
-
window.requestAnimationFrame(function () {
|
733
|
-
renderCanvas(state.context, width, height, sortedElements, tileSize, state);
|
734
|
-
});
|
735
|
-
}
|
736
|
-
|
652
|
+
}, [state.context, onFrame]);
|
737
653
|
return /*#__PURE__*/React.createElement("canvas", _extends({
|
738
654
|
ref: canvasRef,
|
739
655
|
width: width,
|