canvas2d-wrapper 1.2.5 → 1.3.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021-2022 Dysnomia
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/dist/index.js CHANGED
@@ -16,6 +16,9 @@ function _defineProperties(target, props) {
16
16
  function _createClass(Constructor, protoProps, staticProps) {
17
17
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
18
18
  if (staticProps) _defineProperties(Constructor, staticProps);
19
+ Object.defineProperty(Constructor, "prototype", {
20
+ writable: false
21
+ });
19
22
  return Constructor;
20
23
  }
21
24
 
@@ -201,8 +204,8 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
201
204
  }
202
205
 
203
206
  function elementClick(e, elements, tileSize, state) {
204
- var left = -state.left + e.pageX - e.target.offsetLeft;
205
- var top = -state.top + e.pageY - e.target.offsetTop;
207
+ var left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;
208
+ var top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;
206
209
  var clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);
207
210
 
208
211
  if (clickedElement !== null) {
@@ -221,8 +224,8 @@ var selectedObject = null;
221
224
  function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {
222
225
  var newProps = _extends({}, props);
223
226
 
224
- var left = -props.left + event.pageX - event.target.offsetLeft;
225
- var top = -props.top + event.pageY - event.target.offsetTop;
227
+ var left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;
228
+ var top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;
226
229
 
227
230
  if (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {
228
231
  var moved = false;
@@ -233,8 +236,8 @@ function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYA
233
236
  }
234
237
 
235
238
  if (selectedObject !== null && selectedObject.element.draggable) {
236
- selectedObject.element.x = -props.left + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;
237
- selectedObject.element.y = -props.top + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;
239
+ selectedObject.element.x = -props.left - props.deltaLeft + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;
240
+ selectedObject.element.y = -props.top - props.deltaLeft + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;
238
241
  moved = true;
239
242
 
240
243
  if (onElementMoved) {
@@ -581,6 +584,7 @@ function renderCanvas(context, width, height, elements, tileSize, state) {
581
584
  }
582
585
  }
583
586
 
587
+ var _excluded = ["elements", "width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onHover", "onElementMoved", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop"];
584
588
  function Canvas2D(_ref) {
585
589
  var elements = _ref.elements,
586
590
  width = _ref.width,
@@ -608,7 +612,7 @@ function Canvas2D(_ref) {
608
612
  deltaLeft = _ref$deltaLeft === void 0 ? 0 : _ref$deltaLeft,
609
613
  _ref$deltaTop = _ref.deltaTop,
610
614
  deltaTop = _ref$deltaTop === void 0 ? 0 : _ref$deltaTop,
611
- otherProps = _objectWithoutPropertiesLoose(_ref, ["elements", "width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onHover", "onElementMoved", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop"]);
615
+ otherProps = _objectWithoutPropertiesLoose(_ref, _excluded);
612
616
 
613
617
  var _useState = React.useState({}),
614
618
  state = _useState[0],
@@ -632,12 +636,12 @@ function Canvas2D(_ref) {
632
636
  top: height / 2,
633
637
  width: width,
634
638
  height: height,
635
- zoom: 1,
636
- deltaLeft: deltaLeft,
637
- deltaTop: deltaTop
639
+ zoom: 1
638
640
  });
639
641
  }
640
642
  }, []);
643
+ state.deltaTop = deltaTop;
644
+ state.deltaLeft = deltaLeft;
641
645
 
642
646
  if (typeof elements !== 'object' || !Array.isArray(elements)) {
643
647
  throw new Error('Invalid elements, should be an array !');
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/collideElement.js","../src/events/elementClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/CanvasImage.js","../src/shapes/Rect.js","../src/shapes/Polygon.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderRect.js","../src/render/renderPolygon.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\treturn (x <= left && left <= (x + width) && y <= top && top <= (y + height));\n}","import calcTileSize from '../functions/calcTileSize';\n\nimport inCircle from './inCircle';\nimport inPoly from './inPoly';\nimport inRect from './inRect';\n\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\n\tconst localTileSize = calcTileSize(tileSize, zoom);\n\n\tfor(const element of elements) {\n\t\tconst x = element.x * localTileSize;\n\t\tconst y = element.y * localTileSize;\n\n\t\tswitch(element.constructorName) {\n\t\t\tcase 'Rect':\n\t\t\tcase 'CanvasImage':\n\t\t\t\tif(inRect(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Circle':\n\t\t\t\tif(inCircle(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Polygon':\n\t\t\t\tif(inPoly(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn null;\n}","import collideElement from '../collisions/collideElement';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst left = -state.left + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif(clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst left = -props.left + event.pageX - event.target.offsetLeft;\n\tconst top = -props.top + event.pageY - event.target.offsetTop;\n\n\tif(event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif(dragObjects) {\n\t\t\tif(selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif(selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif(onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif(onHover) {\n\t\t\t\t\tonHover(null);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(!moved) {\n\t\t\tif(!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif(!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom));\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\n","export default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += 0.05;\n\t} else {\n\t\tzoom -= 0.05;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn -1;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable }) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t}\n\n\tcrop(x, y, width, height) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.arc(\n\t\tleft + element.x * localTileSize,\n\t\ttop + element.y * localTileSize,\n\t\telement.radius * localTileSize,\n\t\t0,\n\t\t2 * Math.PI\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif(!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tif(!element.sx) {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\telement.sx,\n\t\t\telement.sy,\n\t\t\telement.swidth,\n\t\t\telement.sheight,\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tif(element.fill) {\n\t\tcontext.fillRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n\n\tif(element.stroke) {\n\t\tcontext.strokeRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.moveTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tcontext.lineTo(\n\t\t\tleft + element.points[i].x * localTileSize,\n\t\t\ttop + element.points[i].y * localTileSize,\n\t\t);\n\t}\n\n\tcontext.lineTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","import Circle from '../shapes/Circle';\nimport CanvasImage from '../shapes/CanvasImage';\nimport Rect from '../shapes/Rect';\nimport Polygon from '../shapes/Polygon';\n\nimport calcTileSize from '../functions/calcTileSize';\n\nimport renderCircle from './renderCircle';\nimport renderImage from './renderImage';\nimport renderRect from './renderRect';\nimport renderPolygon from './renderPolygon';\n\nconst renderFn = {\n\t[(new Circle({})).constructorName]: renderCircle,\n\t[(new CanvasImage({})).constructorName]: renderImage,\n\t[(new Rect({})).constructorName]: renderRect,\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\n};\n\nexport default function renderCanvas(\n\tcontext,\n\twidth,\n\theight,\n\telements,\n\ttileSize,\n\tstate,\n) {\n\tconst left = state.left + state.deltaLeft;\n\tconst top = state.top + state.deltaTop;\n\n\tlet prevFillStyle = '';\n\tlet prevStrokeStyle = '';\n\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\n\n\tcontext.clearRect(0, 0, width, height);\n\n\tfor(const element of elements) {\n\t\tif(\n\t\t\telement.fill !== prevFillStyle &&\n\t\t\ttypeof element.fill !== 'undefined'\n\t\t) {\n\t\t\tcontext.fillStyle = element.fill;\n\t\t\tprevFillStyle = element.fill;\n\t\t}\n\n\t\tif(\n\t\t\telement.stroke !== prevStrokeStyle &&\n\t\t\ttypeof element.stroke !== 'undefined'\n\t\t) {\n\t\t\tcontext.strokeStyle = element.stroke;\n\t\t\tprevStrokeStyle = element.stroke;\n\t\t}\n\n\t\tconst type = element.constructorName;\n\t\tif(renderFn[type]) {\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\n\t\t} else {\n\t\t\tthrow new Error('Unsupported shape type:' + type);\n\t\t}\n\t}\n}\n","import React, { useCallback, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nexport default function Canvas2D({\n\telements,\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonHover,\n\tonElementMoved,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality='medium',\n\tdragObjects=false,\n\tdeltaLeft=0,\n\tdeltaTop=0,\n\t...otherProps\n}) {\n\t// Hooks\n\tconst [state, setState] = useState({});\n\tconst canvasRef = useCallback((canvas) => {\n\t\tif(canvas !== null) {\n\t\t\tconst context = canvas.getContext('2d');\n\n\t\t\tif(smoothingQuality === false) {\n\t\t\t\tcontext.imageSmoothingEnabled = false;\n\t\t\t} else {\n\t\t\t\tcontext.imageSmoothingEnabled = true;\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\n\t\t\t}\n\n\t\t\tsetState({\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\n\t\t\t\tcontext,\n\t\t\t\tleft: width/2,\n\t\t\t\ttop: height/2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tzoom: 1,\n\t\t\t\tdeltaLeft,\n\t\t\t\tdeltaTop,\n\t\t\t});\n\t\t}\n\t}, []);\n\n\t// Check inputs\n\tif(typeof elements !== 'object' || !Array.isArray(elements)) {\n\t\tthrow new Error('Invalid elements, should be an array !');\n\t}\n\n\tif(typeof width !== 'number' || typeof height !== 'number') {\n\t\tthrow new Error('width/height should be specified and be numbers.');\n\t}\n\n\tif(minZoom > maxZoom) {\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\n\t}\n\n\tif(typeof onClick !== 'function' && typeof onClick !== 'undefined') {\n\t\tthrow new Error('onClick should be a function.');\n\t}\n\n\t// Sort elements\n\tconst sortedElements = sortElements(elements);\n\n\t// Render\n\tlet onMouseMove = null;\n\tif(trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements, tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tlet onWheel = null;\n\tif(minZoom !== maxZoom) {\n\t\tonWheel = (e) => mouseWheel(e, state, setState, minZoom, maxZoom);\n\t}\n\n\tlet onClickFn = null;\n\tif(onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements, tileSize, state));\n\t}\n\n\t// Canvas render loop\n\tif(state.context) {\n\t\twindow.requestAnimationFrame(() => {\n\t\t\trenderCanvas(\n\t\t\t\tstate.context,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tsortedElements,\n\t\t\t\ttileSize,\n\t\t\t\tstate,\n\t\t\t);\n\t\t});\n\t}\n\n\treturn (\n\t\t<canvas\n\t\t\tref={canvasRef}\n\t\t\twidth={width}\n\t\t\theight={height}\n\t\t\tonMouseMove={onMouseMove}\n\t\t\tonWheel={onWheel}\n\t\t\tonClick={onClickFn}\n\t\t\tclassName=\"canvas2d-wrapper\"\n\t\t\t{...otherProps}\n\t\t/>\n\t);\n};\n","export default function preloadImages(images) {\r\n\tfor(const image of images) {\r\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\r\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\r\n\t}\r\n}"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","width","height","collideElement","e","elements","constructorName","id","originalEvent","elementClick","state","pageX","target","offsetLeft","pageY","offsetTop","clickedElement","LEFT_BUTTON","selectedObject","mouseMove","event","props","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","mouseWheel","minZoom","maxZoom","deltaY","Math","max","min","sortElements","sort","a","b","zIndex","fill","stroke","CanvasObject","ColoredCanvasObject","Circle","CanvasImage","src","crop","sx","sy","swidth","sheight","Rect","Polygon","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderRect","fillRect","strokeRect","moveTo","lineTo","renderFn","renderPolygon","renderCanvas","deltaLeft","deltaTop","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","trackMouseMove","onClick","smoothingQuality","otherProps","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","getBoundingClientRect","Array","isArray","sortedElements","onMouseMove","onWheel","onClickFn","requestAnimationFrame","React","preloadImages","images","image"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/collideElement.js","../src/events/elementClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/CanvasImage.js","../src/shapes/Rect.js","../src/shapes/Polygon.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderRect.js","../src/render/renderPolygon.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\treturn (x <= left && left <= (x + width) && y <= top && top <= (y + height));\n}","import calcTileSize from '../functions/calcTileSize';\n\nimport inCircle from './inCircle';\nimport inPoly from './inPoly';\nimport inRect from './inRect';\n\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\n\tconst localTileSize = calcTileSize(tileSize, zoom);\n\n\tfor(const element of elements) {\n\t\tconst x = element.x * localTileSize;\n\t\tconst y = element.y * localTileSize;\n\n\t\tswitch(element.constructorName) {\n\t\t\tcase 'Rect':\n\t\t\tcase 'CanvasImage':\n\t\t\t\tif(inRect(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Circle':\n\t\t\t\tif(inCircle(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Polygon':\n\t\t\t\tif(inPoly(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn null;\n}","import collideElement from '../collisions/collideElement';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif(clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\n\n\tif(event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif(dragObjects) {\n\t\t\tif(selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif(selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif(onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif(onHover) {\n\t\t\t\t\tonHover(null);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(!moved) {\n\t\t\tif(!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif(!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom));\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\n","export default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += 0.05;\n\t} else {\n\t\tzoom -= 0.05;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn -1;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable }) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t}\n\n\tcrop(x, y, width, height) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.arc(\n\t\tleft + element.x * localTileSize,\n\t\ttop + element.y * localTileSize,\n\t\telement.radius * localTileSize,\n\t\t0,\n\t\t2 * Math.PI\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif(!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tif(!element.sx) {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\telement.sx,\n\t\t\telement.sy,\n\t\t\telement.swidth,\n\t\t\telement.sheight,\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tif(element.fill) {\n\t\tcontext.fillRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n\n\tif(element.stroke) {\n\t\tcontext.strokeRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.moveTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tcontext.lineTo(\n\t\t\tleft + element.points[i].x * localTileSize,\n\t\t\ttop + element.points[i].y * localTileSize,\n\t\t);\n\t}\n\n\tcontext.lineTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","import Circle from '../shapes/Circle';\nimport CanvasImage from '../shapes/CanvasImage';\nimport Rect from '../shapes/Rect';\nimport Polygon from '../shapes/Polygon';\n\nimport calcTileSize from '../functions/calcTileSize';\n\nimport renderCircle from './renderCircle';\nimport renderImage from './renderImage';\nimport renderRect from './renderRect';\nimport renderPolygon from './renderPolygon';\n\nconst renderFn = {\n\t[(new Circle({})).constructorName]: renderCircle,\n\t[(new CanvasImage({})).constructorName]: renderImage,\n\t[(new Rect({})).constructorName]: renderRect,\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\n};\n\nexport default function renderCanvas(\n\tcontext,\n\twidth,\n\theight,\n\telements,\n\ttileSize,\n\tstate,\n) {\n\tconst left = state.left + state.deltaLeft;\n\tconst top = state.top + state.deltaTop;\n\n\tlet prevFillStyle = '';\n\tlet prevStrokeStyle = '';\n\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\n\n\tcontext.clearRect(0, 0, width, height);\n\n\tfor(const element of elements) {\n\t\tif(\n\t\t\telement.fill !== prevFillStyle &&\n\t\t\ttypeof element.fill !== 'undefined'\n\t\t) {\n\t\t\tcontext.fillStyle = element.fill;\n\t\t\tprevFillStyle = element.fill;\n\t\t}\n\n\t\tif(\n\t\t\telement.stroke !== prevStrokeStyle &&\n\t\t\ttypeof element.stroke !== 'undefined'\n\t\t) {\n\t\t\tcontext.strokeStyle = element.stroke;\n\t\t\tprevStrokeStyle = element.stroke;\n\t\t}\n\n\t\tconst type = element.constructorName;\n\t\tif(renderFn[type]) {\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\n\t\t} else {\n\t\t\tthrow new Error('Unsupported shape type:' + type);\n\t\t}\n\t}\n}\n","import React, { useCallback, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nexport default function Canvas2D({\n\telements,\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonHover,\n\tonElementMoved,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality='medium',\n\tdragObjects=false,\n\tdeltaLeft=0,\n\tdeltaTop=0,\n\t...otherProps\n}) {\n\t// Hooks\n\tconst [state, setState] = useState({});\n\tconst canvasRef = useCallback((canvas) => {\n\t\tif(canvas !== null) {\n\t\t\tconst context = canvas.getContext('2d');\n\n\t\t\tif(smoothingQuality === false) {\n\t\t\t\tcontext.imageSmoothingEnabled = false;\n\t\t\t} else {\n\t\t\t\tcontext.imageSmoothingEnabled = true;\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\n\t\t\t}\n\n\t\t\tsetState({\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\n\t\t\t\tcontext,\n\t\t\t\tleft: width/2,\n\t\t\t\ttop: height/2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tzoom: 1,\n\t\t\t});\n\t\t}\n\t}, []);\n\n\tstate.deltaTop = deltaTop;\n\tstate.deltaLeft = deltaLeft;\n\n\t// Check inputs\n\tif(typeof elements !== 'object' || !Array.isArray(elements)) {\n\t\tthrow new Error('Invalid elements, should be an array !');\n\t}\n\n\tif(typeof width !== 'number' || typeof height !== 'number') {\n\t\tthrow new Error('width/height should be specified and be numbers.');\n\t}\n\n\tif(minZoom > maxZoom) {\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\n\t}\n\n\tif(typeof onClick !== 'function' && typeof onClick !== 'undefined') {\n\t\tthrow new Error('onClick should be a function.');\n\t}\n\n\t// Sort elements\n\tconst sortedElements = sortElements(elements);\n\n\t// Render\n\tlet onMouseMove = null;\n\tif(trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements, tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tlet onWheel = null;\n\tif(minZoom !== maxZoom) {\n\t\tonWheel = (e) => mouseWheel(e, state, setState, minZoom, maxZoom);\n\t}\n\n\tlet onClickFn = null;\n\tif(onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements, tileSize, state));\n\t}\n\n\t// Canvas render loop\n\tif(state.context) {\n\t\twindow.requestAnimationFrame(() => {\n\t\t\trenderCanvas(\n\t\t\t\tstate.context,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tsortedElements,\n\t\t\t\ttileSize,\n\t\t\t\tstate,\n\t\t\t);\n\t\t});\n\t}\n\n\treturn (\n\t\t<canvas\n\t\t\tref={canvasRef}\n\t\t\twidth={width}\n\t\t\theight={height}\n\t\t\tonMouseMove={onMouseMove}\n\t\t\tonWheel={onWheel}\n\t\t\tonClick={onClickFn}\n\t\t\tclassName=\"canvas2d-wrapper\"\n\t\t\t{...otherProps}\n\t\t/>\n\t);\n};\n","export default function preloadImages(images) {\r\n\tfor(const image of images) {\r\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\r\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\r\n\t}\r\n}"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","width","height","collideElement","e","elements","constructorName","id","originalEvent","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","LEFT_BUTTON","selectedObject","mouseMove","event","props","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","mouseWheel","minZoom","maxZoom","deltaY","Math","max","min","sortElements","sort","a","b","zIndex","fill","stroke","CanvasObject","ColoredCanvasObject","Circle","CanvasImage","src","crop","sx","sy","swidth","sheight","Rect","Polygon","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderRect","fillRect","strokeRect","moveTo","lineTo","renderFn","renderPolygon","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","trackMouseMove","onClick","smoothingQuality","otherProps","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","getBoundingClientRect","Array","isArray","sortedElements","onMouseMove","onWheel","onClickFn","requestAnimationFrame","React","preloadImages","images","image"],"mappings":"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"}
@@ -13,6 +13,9 @@ function _defineProperties(target, props) {
13
13
  function _createClass(Constructor, protoProps, staticProps) {
14
14
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
15
15
  if (staticProps) _defineProperties(Constructor, staticProps);
16
+ Object.defineProperty(Constructor, "prototype", {
17
+ writable: false
18
+ });
16
19
  return Constructor;
17
20
  }
18
21
 
@@ -198,8 +201,8 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
198
201
  }
199
202
 
200
203
  function elementClick(e, elements, tileSize, state) {
201
- var left = -state.left + e.pageX - e.target.offsetLeft;
202
- var top = -state.top + e.pageY - e.target.offsetTop;
204
+ var left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;
205
+ var top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;
203
206
  var clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);
204
207
 
205
208
  if (clickedElement !== null) {
@@ -218,8 +221,8 @@ var selectedObject = null;
218
221
  function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {
219
222
  var newProps = _extends({}, props);
220
223
 
221
- var left = -props.left + event.pageX - event.target.offsetLeft;
222
- var top = -props.top + event.pageY - event.target.offsetTop;
224
+ var left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;
225
+ var top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;
223
226
 
224
227
  if (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {
225
228
  var moved = false;
@@ -230,8 +233,8 @@ function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYA
230
233
  }
231
234
 
232
235
  if (selectedObject !== null && selectedObject.element.draggable) {
233
- selectedObject.element.x = -props.left + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;
234
- selectedObject.element.y = -props.top + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;
236
+ selectedObject.element.x = -props.left - props.deltaLeft + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;
237
+ selectedObject.element.y = -props.top - props.deltaLeft + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;
235
238
  moved = true;
236
239
 
237
240
  if (onElementMoved) {
@@ -578,6 +581,7 @@ function renderCanvas(context, width, height, elements, tileSize, state) {
578
581
  }
579
582
  }
580
583
 
584
+ var _excluded = ["elements", "width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onHover", "onElementMoved", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop"];
581
585
  function Canvas2D(_ref) {
582
586
  var elements = _ref.elements,
583
587
  width = _ref.width,
@@ -605,7 +609,7 @@ function Canvas2D(_ref) {
605
609
  deltaLeft = _ref$deltaLeft === void 0 ? 0 : _ref$deltaLeft,
606
610
  _ref$deltaTop = _ref.deltaTop,
607
611
  deltaTop = _ref$deltaTop === void 0 ? 0 : _ref$deltaTop,
608
- otherProps = _objectWithoutPropertiesLoose(_ref, ["elements", "width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onHover", "onElementMoved", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop"]);
612
+ otherProps = _objectWithoutPropertiesLoose(_ref, _excluded);
609
613
 
610
614
  var _useState = useState({}),
611
615
  state = _useState[0],
@@ -629,12 +633,12 @@ function Canvas2D(_ref) {
629
633
  top: height / 2,
630
634
  width: width,
631
635
  height: height,
632
- zoom: 1,
633
- deltaLeft: deltaLeft,
634
- deltaTop: deltaTop
636
+ zoom: 1
635
637
  });
636
638
  }
637
639
  }, []);
640
+ state.deltaTop = deltaTop;
641
+ state.deltaLeft = deltaLeft;
638
642
 
639
643
  if (typeof elements !== 'object' || !Array.isArray(elements)) {
640
644
  throw new Error('Invalid elements, should be an array !');
@@ -1 +1 @@
1
- {"version":3,"file":"index.modern.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/collideElement.js","../src/events/elementClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/CanvasImage.js","../src/shapes/Rect.js","../src/shapes/Polygon.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderRect.js","../src/render/renderPolygon.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\treturn (x <= left && left <= (x + width) && y <= top && top <= (y + height));\n}","import calcTileSize from '../functions/calcTileSize';\n\nimport inCircle from './inCircle';\nimport inPoly from './inPoly';\nimport inRect from './inRect';\n\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\n\tconst localTileSize = calcTileSize(tileSize, zoom);\n\n\tfor(const element of elements) {\n\t\tconst x = element.x * localTileSize;\n\t\tconst y = element.y * localTileSize;\n\n\t\tswitch(element.constructorName) {\n\t\t\tcase 'Rect':\n\t\t\tcase 'CanvasImage':\n\t\t\t\tif(inRect(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Circle':\n\t\t\t\tif(inCircle(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Polygon':\n\t\t\t\tif(inPoly(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn null;\n}","import collideElement from '../collisions/collideElement';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst left = -state.left + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif(clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst left = -props.left + event.pageX - event.target.offsetLeft;\n\tconst top = -props.top + event.pageY - event.target.offsetTop;\n\n\tif(event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif(dragObjects) {\n\t\t\tif(selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif(selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif(onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif(onHover) {\n\t\t\t\t\tonHover(null);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(!moved) {\n\t\t\tif(!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif(!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom));\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\n","export default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += 0.05;\n\t} else {\n\t\tzoom -= 0.05;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn -1;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable }) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t}\n\n\tcrop(x, y, width, height) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.arc(\n\t\tleft + element.x * localTileSize,\n\t\ttop + element.y * localTileSize,\n\t\telement.radius * localTileSize,\n\t\t0,\n\t\t2 * Math.PI\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif(!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tif(!element.sx) {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\telement.sx,\n\t\t\telement.sy,\n\t\t\telement.swidth,\n\t\t\telement.sheight,\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tif(element.fill) {\n\t\tcontext.fillRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n\n\tif(element.stroke) {\n\t\tcontext.strokeRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.moveTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tcontext.lineTo(\n\t\t\tleft + element.points[i].x * localTileSize,\n\t\t\ttop + element.points[i].y * localTileSize,\n\t\t);\n\t}\n\n\tcontext.lineTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","import Circle from '../shapes/Circle';\nimport CanvasImage from '../shapes/CanvasImage';\nimport Rect from '../shapes/Rect';\nimport Polygon from '../shapes/Polygon';\n\nimport calcTileSize from '../functions/calcTileSize';\n\nimport renderCircle from './renderCircle';\nimport renderImage from './renderImage';\nimport renderRect from './renderRect';\nimport renderPolygon from './renderPolygon';\n\nconst renderFn = {\n\t[(new Circle({})).constructorName]: renderCircle,\n\t[(new CanvasImage({})).constructorName]: renderImage,\n\t[(new Rect({})).constructorName]: renderRect,\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\n};\n\nexport default function renderCanvas(\n\tcontext,\n\twidth,\n\theight,\n\telements,\n\ttileSize,\n\tstate,\n) {\n\tconst left = state.left + state.deltaLeft;\n\tconst top = state.top + state.deltaTop;\n\n\tlet prevFillStyle = '';\n\tlet prevStrokeStyle = '';\n\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\n\n\tcontext.clearRect(0, 0, width, height);\n\n\tfor(const element of elements) {\n\t\tif(\n\t\t\telement.fill !== prevFillStyle &&\n\t\t\ttypeof element.fill !== 'undefined'\n\t\t) {\n\t\t\tcontext.fillStyle = element.fill;\n\t\t\tprevFillStyle = element.fill;\n\t\t}\n\n\t\tif(\n\t\t\telement.stroke !== prevStrokeStyle &&\n\t\t\ttypeof element.stroke !== 'undefined'\n\t\t) {\n\t\t\tcontext.strokeStyle = element.stroke;\n\t\t\tprevStrokeStyle = element.stroke;\n\t\t}\n\n\t\tconst type = element.constructorName;\n\t\tif(renderFn[type]) {\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\n\t\t} else {\n\t\t\tthrow new Error('Unsupported shape type:' + type);\n\t\t}\n\t}\n}\n","import React, { useCallback, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nexport default function Canvas2D({\n\telements,\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonHover,\n\tonElementMoved,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality='medium',\n\tdragObjects=false,\n\tdeltaLeft=0,\n\tdeltaTop=0,\n\t...otherProps\n}) {\n\t// Hooks\n\tconst [state, setState] = useState({});\n\tconst canvasRef = useCallback((canvas) => {\n\t\tif(canvas !== null) {\n\t\t\tconst context = canvas.getContext('2d');\n\n\t\t\tif(smoothingQuality === false) {\n\t\t\t\tcontext.imageSmoothingEnabled = false;\n\t\t\t} else {\n\t\t\t\tcontext.imageSmoothingEnabled = true;\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\n\t\t\t}\n\n\t\t\tsetState({\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\n\t\t\t\tcontext,\n\t\t\t\tleft: width/2,\n\t\t\t\ttop: height/2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tzoom: 1,\n\t\t\t\tdeltaLeft,\n\t\t\t\tdeltaTop,\n\t\t\t});\n\t\t}\n\t}, []);\n\n\t// Check inputs\n\tif(typeof elements !== 'object' || !Array.isArray(elements)) {\n\t\tthrow new Error('Invalid elements, should be an array !');\n\t}\n\n\tif(typeof width !== 'number' || typeof height !== 'number') {\n\t\tthrow new Error('width/height should be specified and be numbers.');\n\t}\n\n\tif(minZoom > maxZoom) {\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\n\t}\n\n\tif(typeof onClick !== 'function' && typeof onClick !== 'undefined') {\n\t\tthrow new Error('onClick should be a function.');\n\t}\n\n\t// Sort elements\n\tconst sortedElements = sortElements(elements);\n\n\t// Render\n\tlet onMouseMove = null;\n\tif(trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements, tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tlet onWheel = null;\n\tif(minZoom !== maxZoom) {\n\t\tonWheel = (e) => mouseWheel(e, state, setState, minZoom, maxZoom);\n\t}\n\n\tlet onClickFn = null;\n\tif(onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements, tileSize, state));\n\t}\n\n\t// Canvas render loop\n\tif(state.context) {\n\t\twindow.requestAnimationFrame(() => {\n\t\t\trenderCanvas(\n\t\t\t\tstate.context,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tsortedElements,\n\t\t\t\ttileSize,\n\t\t\t\tstate,\n\t\t\t);\n\t\t});\n\t}\n\n\treturn (\n\t\t<canvas\n\t\t\tref={canvasRef}\n\t\t\twidth={width}\n\t\t\theight={height}\n\t\t\tonMouseMove={onMouseMove}\n\t\t\tonWheel={onWheel}\n\t\t\tonClick={onClickFn}\n\t\t\tclassName=\"canvas2d-wrapper\"\n\t\t\t{...otherProps}\n\t\t/>\n\t);\n};\n","export default function preloadImages(images) {\r\n\tfor(const image of images) {\r\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\r\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\r\n\t}\r\n}"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","width","height","collideElement","e","elements","constructorName","id","originalEvent","elementClick","state","pageX","target","offsetLeft","pageY","offsetTop","clickedElement","LEFT_BUTTON","selectedObject","mouseMove","event","props","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","mouseWheel","minZoom","maxZoom","deltaY","Math","max","min","sortElements","sort","a","b","zIndex","fill","stroke","CanvasObject","ColoredCanvasObject","Circle","CanvasImage","src","crop","sx","sy","swidth","sheight","Rect","Polygon","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderRect","fillRect","strokeRect","moveTo","lineTo","renderFn","renderPolygon","renderCanvas","deltaLeft","deltaTop","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","trackMouseMove","onClick","smoothingQuality","otherProps","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","getBoundingClientRect","Array","isArray","sortedElements","onMouseMove","onWheel","onClickFn","requestAnimationFrame","preloadImages","images","image"],"mappings":"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"}
1
+ {"version":3,"file":"index.modern.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/collideElement.js","../src/events/elementClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/CanvasImage.js","../src/shapes/Rect.js","../src/shapes/Polygon.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderRect.js","../src/render/renderPolygon.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\treturn (x <= left && left <= (x + width) && y <= top && top <= (y + height));\n}","import calcTileSize from '../functions/calcTileSize';\n\nimport inCircle from './inCircle';\nimport inPoly from './inPoly';\nimport inRect from './inRect';\n\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\n\tconst localTileSize = calcTileSize(tileSize, zoom);\n\n\tfor(const element of elements) {\n\t\tconst x = element.x * localTileSize;\n\t\tconst y = element.y * localTileSize;\n\n\t\tswitch(element.constructorName) {\n\t\t\tcase 'Rect':\n\t\t\tcase 'CanvasImage':\n\t\t\t\tif(inRect(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Circle':\n\t\t\t\tif(inCircle(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Polygon':\n\t\t\t\tif(inPoly(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn null;\n}","import collideElement from '../collisions/collideElement';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif(clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\n\n\tif(event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif(dragObjects) {\n\t\t\tif(selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif(selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif(onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif(onHover) {\n\t\t\t\t\tonHover(null);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(!moved) {\n\t\t\tif(!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif(!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom));\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\n","export default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += 0.05;\n\t} else {\n\t\tzoom -= 0.05;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn -1;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable }) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t}\n\n\tcrop(x, y, width, height) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.arc(\n\t\tleft + element.x * localTileSize,\n\t\ttop + element.y * localTileSize,\n\t\telement.radius * localTileSize,\n\t\t0,\n\t\t2 * Math.PI\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif(!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tif(!element.sx) {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\telement.sx,\n\t\t\telement.sy,\n\t\t\telement.swidth,\n\t\t\telement.sheight,\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tif(element.fill) {\n\t\tcontext.fillRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n\n\tif(element.stroke) {\n\t\tcontext.strokeRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.moveTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tcontext.lineTo(\n\t\t\tleft + element.points[i].x * localTileSize,\n\t\t\ttop + element.points[i].y * localTileSize,\n\t\t);\n\t}\n\n\tcontext.lineTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","import Circle from '../shapes/Circle';\nimport CanvasImage from '../shapes/CanvasImage';\nimport Rect from '../shapes/Rect';\nimport Polygon from '../shapes/Polygon';\n\nimport calcTileSize from '../functions/calcTileSize';\n\nimport renderCircle from './renderCircle';\nimport renderImage from './renderImage';\nimport renderRect from './renderRect';\nimport renderPolygon from './renderPolygon';\n\nconst renderFn = {\n\t[(new Circle({})).constructorName]: renderCircle,\n\t[(new CanvasImage({})).constructorName]: renderImage,\n\t[(new Rect({})).constructorName]: renderRect,\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\n};\n\nexport default function renderCanvas(\n\tcontext,\n\twidth,\n\theight,\n\telements,\n\ttileSize,\n\tstate,\n) {\n\tconst left = state.left + state.deltaLeft;\n\tconst top = state.top + state.deltaTop;\n\n\tlet prevFillStyle = '';\n\tlet prevStrokeStyle = '';\n\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\n\n\tcontext.clearRect(0, 0, width, height);\n\n\tfor(const element of elements) {\n\t\tif(\n\t\t\telement.fill !== prevFillStyle &&\n\t\t\ttypeof element.fill !== 'undefined'\n\t\t) {\n\t\t\tcontext.fillStyle = element.fill;\n\t\t\tprevFillStyle = element.fill;\n\t\t}\n\n\t\tif(\n\t\t\telement.stroke !== prevStrokeStyle &&\n\t\t\ttypeof element.stroke !== 'undefined'\n\t\t) {\n\t\t\tcontext.strokeStyle = element.stroke;\n\t\t\tprevStrokeStyle = element.stroke;\n\t\t}\n\n\t\tconst type = element.constructorName;\n\t\tif(renderFn[type]) {\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\n\t\t} else {\n\t\t\tthrow new Error('Unsupported shape type:' + type);\n\t\t}\n\t}\n}\n","import React, { useCallback, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nexport default function Canvas2D({\n\telements,\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonHover,\n\tonElementMoved,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality='medium',\n\tdragObjects=false,\n\tdeltaLeft=0,\n\tdeltaTop=0,\n\t...otherProps\n}) {\n\t// Hooks\n\tconst [state, setState] = useState({});\n\tconst canvasRef = useCallback((canvas) => {\n\t\tif(canvas !== null) {\n\t\t\tconst context = canvas.getContext('2d');\n\n\t\t\tif(smoothingQuality === false) {\n\t\t\t\tcontext.imageSmoothingEnabled = false;\n\t\t\t} else {\n\t\t\t\tcontext.imageSmoothingEnabled = true;\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\n\t\t\t}\n\n\t\t\tsetState({\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\n\t\t\t\tcontext,\n\t\t\t\tleft: width/2,\n\t\t\t\ttop: height/2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tzoom: 1,\n\t\t\t});\n\t\t}\n\t}, []);\n\n\tstate.deltaTop = deltaTop;\n\tstate.deltaLeft = deltaLeft;\n\n\t// Check inputs\n\tif(typeof elements !== 'object' || !Array.isArray(elements)) {\n\t\tthrow new Error('Invalid elements, should be an array !');\n\t}\n\n\tif(typeof width !== 'number' || typeof height !== 'number') {\n\t\tthrow new Error('width/height should be specified and be numbers.');\n\t}\n\n\tif(minZoom > maxZoom) {\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\n\t}\n\n\tif(typeof onClick !== 'function' && typeof onClick !== 'undefined') {\n\t\tthrow new Error('onClick should be a function.');\n\t}\n\n\t// Sort elements\n\tconst sortedElements = sortElements(elements);\n\n\t// Render\n\tlet onMouseMove = null;\n\tif(trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements, tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tlet onWheel = null;\n\tif(minZoom !== maxZoom) {\n\t\tonWheel = (e) => mouseWheel(e, state, setState, minZoom, maxZoom);\n\t}\n\n\tlet onClickFn = null;\n\tif(onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements, tileSize, state));\n\t}\n\n\t// Canvas render loop\n\tif(state.context) {\n\t\twindow.requestAnimationFrame(() => {\n\t\t\trenderCanvas(\n\t\t\t\tstate.context,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tsortedElements,\n\t\t\t\ttileSize,\n\t\t\t\tstate,\n\t\t\t);\n\t\t});\n\t}\n\n\treturn (\n\t\t<canvas\n\t\t\tref={canvasRef}\n\t\t\twidth={width}\n\t\t\theight={height}\n\t\t\tonMouseMove={onMouseMove}\n\t\t\tonWheel={onWheel}\n\t\t\tonClick={onClickFn}\n\t\t\tclassName=\"canvas2d-wrapper\"\n\t\t\t{...otherProps}\n\t\t/>\n\t);\n};\n","export default function preloadImages(images) {\r\n\tfor(const image of images) {\r\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\r\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\r\n\t}\r\n}"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","width","height","collideElement","e","elements","constructorName","id","originalEvent","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","LEFT_BUTTON","selectedObject","mouseMove","event","props","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","mouseWheel","minZoom","maxZoom","deltaY","Math","max","min","sortElements","sort","a","b","zIndex","fill","stroke","CanvasObject","ColoredCanvasObject","Circle","CanvasImage","src","crop","sx","sy","swidth","sheight","Rect","Polygon","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderRect","fillRect","strokeRect","moveTo","lineTo","renderFn","renderPolygon","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","trackMouseMove","onClick","smoothingQuality","otherProps","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","getBoundingClientRect","Array","isArray","sortedElements","onMouseMove","onWheel","onClickFn","requestAnimationFrame","preloadImages","images","image"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "canvas2d-wrapper",
3
- "version": "1.2.5",
3
+ "version": "1.3.0",
4
4
  "description": "A React Wrapper to use HTML5 canvas with mouse move and zoom abilities.",
5
5
  "author": "Elanis",
6
6
  "license": "MIT",
@@ -24,25 +24,28 @@
24
24
  "deploy": "gh-pages -d example/build"
25
25
  },
26
26
  "peerDependencies": {
27
- "react": "^16.0.0"
27
+ "react": "^17.0.0"
28
28
  },
29
29
  "devDependencies": {
30
- "microbundle-crl": "^0.13.10",
31
30
  "babel-eslint": "^10.0.3",
32
31
  "cross-env": "^7.0.2",
33
- "eslint": "^6.8.0",
34
- "eslint-config-standard": "^14.1.0",
35
- "eslint-config-standard-react": "^9.2.0",
32
+ "eslint": "^7.32.0",
33
+ "eslint-config-standard": "^16.0.3",
34
+ "eslint-config-standard-react": "^11.0.1",
36
35
  "eslint-plugin-import": "^2.18.2",
37
36
  "eslint-plugin-node": "^11.0.0",
38
- "eslint-plugin-promise": "^4.2.1",
37
+ "eslint-plugin-promise": "^5.2.0",
39
38
  "eslint-plugin-react": "^7.17.0",
40
- "eslint-plugin-standard": "^4.0.1",
41
- "gh-pages": "^2.2.0",
39
+ "eslint-plugin-standard": "^5.0.0",
40
+ "gh-pages": "^3.2.3",
41
+ "microbundle-crl": "^0.13.10",
42
42
  "npm-run-all": "^4.1.5",
43
- "react": "^16.13.1",
44
- "react-dom": "^16.13.1",
45
- "react-scripts": "^3.4.1"
43
+ "postcss-flexbugs-fixes": "^5.0.2",
44
+ "postcss-normalize": "^10.0.1",
45
+ "postcss-preset-env": "^7.4.1",
46
+ "react": "^17.0.2",
47
+ "react-dom": "^17.0.2",
48
+ "react-scripts": "^5.0.0"
46
49
  },
47
50
  "files": [
48
51
  "dist"