canvas2d-wrapper 1.4.0 → 1.5.1

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/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 || function (target) {
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 || function _setPrototypeOf(o, p) {
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
- }, 300);
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 += 0.05;
273
+ zoom += WHEEL_DELTA;
309
274
  } else {
310
- zoom -= 0.05;
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
- x = _ref.x,
404
- y = _ref.y,
405
- radius = _ref.radius,
406
- fill = _ref.fill,
407
- stroke = _ref.stroke,
408
- zIndex = _ref.zIndex,
409
- draggable = _ref.draggable;
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
- x = _ref.x,
433
- y = _ref.y,
434
- width = _ref.width,
435
- height = _ref.height,
436
- src = _ref.src,
437
- zIndex = _ref.zIndex,
438
- draggable = _ref.draggable;
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
- x = _ref.x,
473
- y = _ref.y,
474
- width = _ref.width,
475
- height = _ref.height,
476
- fill = _ref.fill,
477
- stroke = _ref.stroke,
478
- zIndex = _ref.zIndex,
479
- draggable = _ref.draggable;
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
- points = _ref.points,
504
- fill = _ref.fill,
505
- stroke = _ref.stroke,
506
- zIndex = _ref.zIndex,
507
- draggable = _ref.draggable;
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
- var prevEvent;
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
- width = _ref.width,
620
- height = _ref.height,
621
- _ref$trackMouseMove = _ref.trackMouseMove,
622
- trackMouseMove = _ref$trackMouseMove === void 0 ? true : _ref$trackMouseMove,
623
- _ref$minZoom = _ref.minZoom,
624
- minZoom = _ref$minZoom === void 0 ? 1 : _ref$minZoom,
625
- _ref$maxZoom = _ref.maxZoom,
626
- maxZoom = _ref$maxZoom === void 0 ? 1 : _ref$maxZoom,
627
- _ref$tileSize = _ref.tileSize,
628
- tileSize = _ref$tileSize === void 0 ? 1 : _ref$tileSize,
629
- onClick = _ref.onClick,
630
- onRightClick = _ref.onRightClick,
631
- onHover = _ref.onHover,
632
- onElementMoved = _ref.onElementMoved,
633
- onWheel = _ref.onWheel,
634
- _ref$lockXAxis = _ref.lockXAxis,
635
- lockXAxis = _ref$lockXAxis === void 0 ? false : _ref$lockXAxis,
636
- _ref$lockYAxis = _ref.lockYAxis,
637
- lockYAxis = _ref$lockYAxis === void 0 ? false : _ref$lockYAxis,
638
- _ref$smoothingQuality = _ref.smoothingQuality,
639
- smoothingQuality = _ref$smoothingQuality === void 0 ? 'medium' : _ref$smoothingQuality,
640
- _ref$dragObjects = _ref.dragObjects,
641
- dragObjects = _ref$dragObjects === void 0 ? false : _ref$dragObjects,
642
- _ref$deltaLeft = _ref.deltaLeft,
643
- deltaLeft = _ref$deltaLeft === void 0 ? 0 : _ref$deltaLeft,
644
- _ref$deltaTop = _ref.deltaTop,
645
- deltaTop = _ref$deltaTop === void 0 ? 0 : _ref$deltaTop,
646
- otherProps = _objectWithoutPropertiesLoose(_ref, _excluded);
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
- state = _useState[0],
650
- setState = _useState[1];
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
- if (onRightClick && state.canvas) {
722
- if (prevEvent) {
723
- state.canvas.removeEventListener('contextmenu', prevEvent);
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
- prevEvent = function prevEvent(e) {
727
- e.preventDefault();
728
- onRightClick(elementRightClick(e, elements, tileSize, state));
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,
@@ -756,10 +672,112 @@ function preloadImages(images) {
756
672
  }
757
673
  }
758
674
 
675
+ var intervalId = 0;
676
+ function useGamepad() {
677
+ var _useState = React.useState(),
678
+ gamepad = _useState[0],
679
+ setGamepad = _useState[1];
680
+ React.useEffect(function () {
681
+ clearInterval(intervalId);
682
+ intervalId = setInterval(function () {
683
+ return setGamepad(navigator.getGamepads()[0]);
684
+ }, 15);
685
+ }, []);
686
+ return gamepad;
687
+ }
688
+
689
+ function useKeyboard() {
690
+ var _useState = React.useState({}),
691
+ keyboard = _useState[0],
692
+ setKeyboard = _useState[1];
693
+ React.useEffect(function () {
694
+ document.addEventListener('keydown', function (e) {
695
+ keyboard[e.key] = true;
696
+ setKeyboard(JSON.parse(JSON.stringify(keyboard)));
697
+ });
698
+ document.addEventListener('keyup', function (e) {
699
+ keyboard[e.key] = false;
700
+ setKeyboard(JSON.parse(JSON.stringify(keyboard)));
701
+ });
702
+ }, []);
703
+ return keyboard;
704
+ }
705
+
706
+ function useMousePosition(includeTouch) {
707
+ if (includeTouch === void 0) {
708
+ includeTouch = true;
709
+ }
710
+ var _useState = React.useState({
711
+ x: null,
712
+ y: null
713
+ }),
714
+ mousePosition = _useState[0],
715
+ setMousePosition = _useState[1];
716
+ React.useEffect(function () {
717
+ var updateMousePosition = function updateMousePosition(ev) {
718
+ var x, y;
719
+ if (ev.touches) {
720
+ var touch = ev.touches[0];
721
+ var _ref = [touch.clientX, touch.clientY];
722
+ x = _ref[0];
723
+ y = _ref[1];
724
+ } else {
725
+ var _ref2 = [ev.clientX, ev.clientY];
726
+ x = _ref2[0];
727
+ y = _ref2[1];
728
+ }
729
+ setMousePosition({
730
+ x: x,
731
+ y: y
732
+ });
733
+ };
734
+ window.addEventListener('mousemove', updateMousePosition);
735
+ if (includeTouch) {
736
+ window.addEventListener('touchmove', updateMousePosition);
737
+ }
738
+ return function () {
739
+ window.removeEventListener('mousemove', updateMousePosition);
740
+ if (includeTouch) {
741
+ window.removeEventListener('touchmove', updateMousePosition);
742
+ }
743
+ };
744
+ }, [includeTouch]);
745
+ return mousePosition;
746
+ }
747
+
748
+ function getWindowDimensions() {
749
+ var _document$documentEle = document.documentElement,
750
+ width = _document$documentEle.clientWidth,
751
+ height = _document$documentEle.clientHeight;
752
+ return {
753
+ width: width,
754
+ height: height
755
+ };
756
+ }
757
+ function useWindowDimensions() {
758
+ var _useState = React.useState(getWindowDimensions()),
759
+ windowDimensions = _useState[0],
760
+ setWindowDimensions = _useState[1];
761
+ React.useEffect(function () {
762
+ function handleResize() {
763
+ setWindowDimensions(getWindowDimensions());
764
+ }
765
+ window.addEventListener('resize', handleResize);
766
+ return function () {
767
+ return window.removeEventListener('resize', handleResize);
768
+ };
769
+ }, []);
770
+ return windowDimensions;
771
+ }
772
+
759
773
  exports.Canvas2D = Canvas2D;
760
774
  exports.CanvasImage = CanvasImage;
761
775
  exports.Circle = Circle;
762
776
  exports.Polygon = Polygon;
763
777
  exports.Rect = Rect;
764
778
  exports.preloadImages = preloadImages;
779
+ exports.useGamepad = useGamepad;
780
+ exports.useKeyboard = useKeyboard;
781
+ exports.useMousePosition = useMousePosition;
782
+ exports.useWindowDimensions = useWindowDimensions;
765
783
  //# sourceMappingURL=index.js.map