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