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