canvas2d-wrapper 1.6.0 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -538,7 +538,7 @@ function renderCanvas(context, width, height, elements, tileSize, state) {
538
538
  }
539
539
 
540
540
  var _excluded = ["width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onRightClick", "onHover", "onElementMoved", "onWheel", "onFrame", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop"];
541
- var elements = [];
541
+ var elements = {};
542
542
  function Canvas2D(_ref) {
543
543
  var width = _ref.width,
544
544
  height = _ref.height,
@@ -569,6 +569,9 @@ function Canvas2D(_ref) {
569
569
  _ref$deltaTop = _ref.deltaTop,
570
570
  deltaTop = _ref$deltaTop === void 0 ? 0 : _ref$deltaTop,
571
571
  otherProps = _objectWithoutPropertiesLoose(_ref, _excluded);
572
+ if (!elements[otherProps.id]) {
573
+ elements[otherProps.id] = [];
574
+ }
572
575
  var _useState = React.useState({}),
573
576
  state = _useState[0],
574
577
  setState = _useState[1];
@@ -610,7 +613,7 @@ function Canvas2D(_ref) {
610
613
  var onMouseMove = null;
611
614
  if (trackMouseMove) {
612
615
  onMouseMove = function onMouseMove(e) {
613
- return mouseMove(e, elements, tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);
616
+ return mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);
614
617
  };
615
618
  }
616
619
  var onWheelFn = function onWheelFn(e) {
@@ -624,17 +627,19 @@ function Canvas2D(_ref) {
624
627
  var onClickFn = null;
625
628
  if (onClick) {
626
629
  onClickFn = function onClickFn(e) {
627
- return onClick(elementClick(e, elements, tileSize, state));
630
+ return onClick(elementClick(e, elements[otherProps.id], tileSize, state));
628
631
  };
629
632
  }
630
633
  React.useEffect(function () {
631
634
  function onRightClickEvent(e) {
632
635
  e.preventDefault();
633
- onRightClick(elementRightClick(e, elements, tileSize, state));
636
+ onRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));
634
637
  }
635
638
  if (onRightClick && state.canvas) {
636
639
  state.canvas.addEventListener('contextmenu', onRightClickEvent);
637
- return state.canvas.removeEventListener('contextmenu', onRightClickEvent);
640
+ return function () {
641
+ state.canvas.removeEventListener('contextmenu', onRightClickEvent);
642
+ };
638
643
  }
639
644
  }, [state.canvas, onRightClick]);
640
645
  React.useEffect(function () {
@@ -643,8 +648,8 @@ function Canvas2D(_ref) {
643
648
  if (!shouldRender) {
644
649
  return;
645
650
  }
646
- elements = onFrame();
647
- var sortedElements = sortElements(elements);
651
+ elements[otherProps.id] = onFrame();
652
+ var sortedElements = sortElements(elements[otherProps.id]);
648
653
  if (state.context) {
649
654
  renderCanvas(state.context, width, height, sortedElements, tileSize, state);
650
655
  }
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/elementRightClick.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","../src/hooks/useGamepad.js","../src/hooks/useKeyboard.js","../src/hooks/useMousePosition.js","../src/hooks/useWindowDimensions.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\nexport default function elementRightClick(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;\nlet unselectTimeoutId = 0;\nconst UNSELECT_TIMEOUT_MS = 300;\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\t// Lock Axis\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\n\t\tif(event.nativeEvent.pointerType !== 'mouse') {\n\t\t\tunselectTimeoutId = setTimeout(() => {\n\t\t\t\tselectedObject = null;\n\t\t\t\tsetProps({\n\t\t\t\t\t...newProps,\n\t\t\t\t\tprevX: null,\n\t\t\t\t\tprevY: null,\n\t\t\t\t});\n\t\t\t}, UNSELECT_TIMEOUT_MS);\n\t\t}\n\t} else {\n\t\tif(onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), { x: left, y: top });\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","const WHEEL_DELTA = 0.05;\n\nexport default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += WHEEL_DELTA;\n\t} else {\n\t\tzoom -= WHEEL_DELTA;\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, useEffect, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport elementRightClick from './events/elementRightClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nlet elements = [];\n\nexport default function Canvas2D({\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonRightClick,\n\tonHover,\n\tonElementMoved,\n\tonWheel,\n\tonFrame,\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\tcanvas,\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 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\tif(typeof onFrame !== 'function') {\n\t\tthrow new Error('onFrame should be a function.');\n\t}\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\tconst onWheelFn = (e) => {\n\t\tif(onWheel) {\n\t\t\tonWheel(e);\n\t\t}\n\n\t\tif(minZoom !== maxZoom) {\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\n\t\t}\n\t};\n\n\tlet onClickFn = null;\n\tif(onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements, tileSize, state));\n\t}\n\n\n\t// Right click Event\n\tuseEffect(() => {\n\t\tfunction onRightClickEvent(e) {\n\t\t\te.preventDefault();\n\t\t\tonRightClick(elementRightClick(e, elements, tileSize, state));\n\t\t}\n\n\t\tif(onRightClick && state.canvas) {\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\n\t\t\treturn state.canvas.removeEventListener('contextmenu', onRightClickEvent);\n\t\t}\n\t}, [state.canvas, onRightClick]);\n\n\t// Canvas render loop\n\tuseEffect(() => {\n\t\tlet shouldRender = true;\n\t\tfunction render() {\n\t\t\tif(!shouldRender) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telements = onFrame();\n\t\t\tconst sortedElements = sortElements(elements);\n\n\t\t\tif(state.context) {\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.context,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tsortedElements,\n\t\t\t\t\ttileSize,\n\t\t\t\t\tstate,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\twindow.requestAnimationFrame(render);\n\t\t}\n\t\twindow.requestAnimationFrame(render);\n\n\t\treturn () => { shouldRender = false; };\n\t}, [state.context, onFrame]);\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\tonPointerMove={onMouseMove}\n\t\t\tonWheel={onWheelFn}\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) {\n\tfor(const image of images) {\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\n\t}\n}","import { useEffect, useState } from 'react';\n\nlet intervalId = 0;\nconst FRAME_INTERVAL = 15; // TODO: requestAnimationFrame ?\nexport default function useGamepad() {\n\tconst [gamepad, setGamepad] = useState();\n\n\tuseEffect(() => {\n\t\tclearInterval(intervalId);\n\t\tintervalId = setInterval(() =>\n\t\t\tsetGamepad(navigator.getGamepads()[0])\n\t\t, FRAME_INTERVAL);\n\t}, []);\n\n\treturn gamepad;\n}","import { useEffect, useState } from 'react';\n\nexport default function useKeyboard() {\n\tconst [keyboard, setKeyboard] = useState({});\n\n\tuseEffect(() => {\n\t\tdocument.addEventListener('keydown', (e) => {\n\t\t\tkeyboard[e.key] = true;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t});\n\t\tdocument.addEventListener('keyup', (e) => {\n\t\t\tkeyboard[e.key] = false;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t});\n\t}, []);\n\n\treturn keyboard;\n}","import { useEffect, useState } from 'react';\n\nexport default function useMousePosition(includeTouch = true) {\n\tconst [\n\t\tmousePosition,\n\t\tsetMousePosition\n\t] = useState({ x: null, y: null });\n\n\tuseEffect(() => {\n\t\tconst updateMousePosition = ev => {\n\t\t\tlet x, y;\n\t\t\tif (ev.touches) {\n\t\t\t\tconst touch = ev.touches[0];\n\t\t\t\t[x, y] = [touch.clientX, touch.clientY];\n\t\t\t} else {\n\t\t\t\t[x, y] = [ev.clientX, ev.clientY];\n\t\t\t}\n\t\t\tsetMousePosition({ x, y });\n\t\t};\n\t\twindow.addEventListener('mousemove', updateMousePosition);\n\n\t\tif (includeTouch) {\n\t\t\twindow.addEventListener('touchmove', updateMousePosition);\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('mousemove', updateMousePosition);\n\n\t\t\tif (includeTouch) {\n\t\t\t\twindow.removeEventListener('touchmove', updateMousePosition);\n\t\t\t}\n\t\t};\n\t}, [includeTouch]);\n\n\treturn mousePosition;\n}","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n\tconst { clientWidth: width, clientHeight: height } = document.documentElement;\n\treturn {\n\t\twidth,\n\t\theight,\n\t};\n}\n\nexport default function useWindowDimensions() {\n\tconst [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n\tuseEffect(() => {\n\t\tfunction handleResize() {\n\t\t\tsetWindowDimensions(getWindowDimensions());\n\t\t}\n\n\t\twindow.addEventListener('resize', handleResize);\n\t\treturn () => window.removeEventListener('resize', handleResize);\n\t}, []);\n\n\treturn windowDimensions;\n}\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","_iterator","_createForOfIteratorHelperLoose","_step","done","value","constructorName","id","originalEvent","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","event","props","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","_extends","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","pointerType","setTimeout","WHEEL_DELTA","mouseWheel","minZoom","maxZoom","deltaY","Math","max","min","sortElements","sort","a","b","zIndex","fill","stroke","CanvasObject","_createClass","key","get","set","ColoredCanvasObject","_CanvasObject","_inheritsLoose","_this","call","Circle","_ColoredCanvasObject","_ref","CanvasImage","src","_proto","prototype","crop","sx","sy","swidth","sheight","Rect","Polygon","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderRect","fillRect","strokeRect","moveTo","lineTo","renderFn","_renderFn","renderPolygon","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","_ref$trackMouseMove","trackMouseMove","_ref$minZoom","_ref$maxZoom","_ref$tileSize","onClick","onRightClick","onWheel","onFrame","_ref$lockXAxis","_ref$lockYAxis","_ref$smoothingQuality","smoothingQuality","_ref$dragObjects","_ref$deltaLeft","_ref$deltaTop","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","getBoundingClientRect","onMouseMove","onWheelFn","onClickFn","useEffect","onRightClickEvent","preventDefault","addEventListener","removeEventListener","shouldRender","render","sortedElements","requestAnimationFrame","React","createElement","ref","onPointerMove","className","preloadImages","images","image","intervalId","FRAME_INTERVAL","useGamepad","gamepad","setGamepad","clearInterval","setInterval","navigator","getGamepads","useKeyboard","keyboard","setKeyboard","document","JSON","parse","stringify","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"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/elementRightClick.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","../src/hooks/useGamepad.js","../src/hooks/useKeyboard.js","../src/hooks/useMousePosition.js","../src/hooks/useWindowDimensions.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\nexport default function elementRightClick(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;\nlet unselectTimeoutId = 0;\nconst UNSELECT_TIMEOUT_MS = 300;\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\t// Lock Axis\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\n\t\tif(event.nativeEvent.pointerType !== 'mouse') {\n\t\t\tunselectTimeoutId = setTimeout(() => {\n\t\t\t\tselectedObject = null;\n\t\t\t\tsetProps({\n\t\t\t\t\t...newProps,\n\t\t\t\t\tprevX: null,\n\t\t\t\t\tprevY: null,\n\t\t\t\t});\n\t\t\t}, UNSELECT_TIMEOUT_MS);\n\t\t}\n\t} else {\n\t\tif(onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), { x: left, y: top });\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","const WHEEL_DELTA = 0.05;\n\nexport default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += WHEEL_DELTA;\n\t} else {\n\t\tzoom -= WHEEL_DELTA;\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, useEffect, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport elementRightClick from './events/elementRightClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nconst elements = {};\n\nexport default function Canvas2D({\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonRightClick,\n\tonHover,\n\tonElementMoved,\n\tonWheel,\n\tonFrame,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality='medium',\n\tdragObjects=false,\n\tdeltaLeft=0,\n\tdeltaTop=0,\n\t...otherProps\n}) {\n\tif(!elements[otherProps.id]) {\n\t\telements[otherProps.id] = [];\n\t}\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\tcanvas,\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 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\tif(typeof onFrame !== 'function') {\n\t\tthrow new Error('onFrame should be a function.');\n\t}\n\n\t// Render\n\tlet onMouseMove = null;\n\tif(trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tconst onWheelFn = (e) => {\n\t\tif(onWheel) {\n\t\t\tonWheel(e);\n\t\t}\n\n\t\tif(minZoom !== maxZoom) {\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\n\t\t}\n\t};\n\n\tlet onClickFn = null;\n\tif(onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements[otherProps.id], tileSize, state));\n\t}\n\n\n\t// Right click Event\n\tuseEffect(() => {\n\t\tfunction onRightClickEvent(e) {\n\t\t\te.preventDefault();\n\t\t\tonRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));\n\t\t}\n\n\t\tif(onRightClick && state.canvas) {\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\n\t\t}\n\t}, [state.canvas, onRightClick]);\n\n\t// Canvas render loop\n\tuseEffect(() => {\n\t\tlet shouldRender = true;\n\t\tfunction render() {\n\t\t\tif(!shouldRender) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telements[otherProps.id] = onFrame();\n\t\t\tconst sortedElements = sortElements(elements[otherProps.id]);\n\n\t\t\tif(state.context) {\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.context,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tsortedElements,\n\t\t\t\t\ttileSize,\n\t\t\t\t\tstate,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\twindow.requestAnimationFrame(render);\n\t\t}\n\t\twindow.requestAnimationFrame(render);\n\n\t\treturn () => { shouldRender = false; };\n\t}, [state.context, onFrame]);\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\tonPointerMove={onMouseMove}\n\t\t\tonWheel={onWheelFn}\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) {\n\tfor(const image of images) {\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\n\t}\n}","import { useEffect, useState } from 'react';\n\nlet intervalId = 0;\nconst FRAME_INTERVAL = 15; // TODO: requestAnimationFrame ?\nexport default function useGamepad() {\n\tconst [gamepad, setGamepad] = useState();\n\n\tuseEffect(() => {\n\t\tclearInterval(intervalId);\n\t\tintervalId = setInterval(() =>\n\t\t\tsetGamepad(navigator.getGamepads()[0])\n\t\t, FRAME_INTERVAL);\n\t}, []);\n\n\treturn gamepad;\n}","import { useEffect, useState } from 'react';\n\nexport default function useKeyboard() {\n\tconst [keyboard, setKeyboard] = useState({});\n\n\tuseEffect(() => {\n\t\tdocument.addEventListener('keydown', (e) => {\n\t\t\tkeyboard[e.key] = true;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t});\n\t\tdocument.addEventListener('keyup', (e) => {\n\t\t\tkeyboard[e.key] = false;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t});\n\t}, []);\n\n\treturn keyboard;\n}","import { useEffect, useState } from 'react';\n\nexport default function useMousePosition(includeTouch = true) {\n\tconst [\n\t\tmousePosition,\n\t\tsetMousePosition\n\t] = useState({ x: null, y: null });\n\n\tuseEffect(() => {\n\t\tconst updateMousePosition = ev => {\n\t\t\tlet x, y;\n\t\t\tif (ev.touches) {\n\t\t\t\tconst touch = ev.touches[0];\n\t\t\t\t[x, y] = [touch.clientX, touch.clientY];\n\t\t\t} else {\n\t\t\t\t[x, y] = [ev.clientX, ev.clientY];\n\t\t\t}\n\t\t\tsetMousePosition({ x, y });\n\t\t};\n\t\twindow.addEventListener('mousemove', updateMousePosition);\n\n\t\tif (includeTouch) {\n\t\t\twindow.addEventListener('touchmove', updateMousePosition);\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('mousemove', updateMousePosition);\n\n\t\t\tif (includeTouch) {\n\t\t\t\twindow.removeEventListener('touchmove', updateMousePosition);\n\t\t\t}\n\t\t};\n\t}, [includeTouch]);\n\n\treturn mousePosition;\n}","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n\tconst { clientWidth: width, clientHeight: height } = document.documentElement;\n\treturn {\n\t\twidth,\n\t\theight,\n\t};\n}\n\nexport default function useWindowDimensions() {\n\tconst [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n\tuseEffect(() => {\n\t\tfunction handleResize() {\n\t\t\tsetWindowDimensions(getWindowDimensions());\n\t\t}\n\n\t\twindow.addEventListener('resize', handleResize);\n\t\treturn () => window.removeEventListener('resize', handleResize);\n\t}, []);\n\n\treturn windowDimensions;\n}\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","_iterator","_createForOfIteratorHelperLoose","_step","done","value","constructorName","id","originalEvent","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","event","props","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","_extends","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","pointerType","setTimeout","WHEEL_DELTA","mouseWheel","minZoom","maxZoom","deltaY","Math","max","min","sortElements","sort","a","b","zIndex","fill","stroke","CanvasObject","_createClass","key","get","set","ColoredCanvasObject","_CanvasObject","_inheritsLoose","_this","call","Circle","_ColoredCanvasObject","_ref","CanvasImage","src","_proto","prototype","crop","sx","sy","swidth","sheight","Rect","Polygon","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderRect","fillRect","strokeRect","moveTo","lineTo","renderFn","_renderFn","renderPolygon","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","_ref$trackMouseMove","trackMouseMove","_ref$minZoom","_ref$maxZoom","_ref$tileSize","onClick","onRightClick","onWheel","onFrame","_ref$lockXAxis","_ref$lockYAxis","_ref$smoothingQuality","smoothingQuality","_ref$dragObjects","_ref$deltaLeft","_ref$deltaTop","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","getBoundingClientRect","onMouseMove","onWheelFn","onClickFn","useEffect","onRightClickEvent","preventDefault","addEventListener","removeEventListener","shouldRender","render","sortedElements","requestAnimationFrame","React","createElement","ref","onPointerMove","className","preloadImages","images","image","intervalId","FRAME_INTERVAL","useGamepad","gamepad","setGamepad","clearInterval","setInterval","navigator","getGamepads","useKeyboard","keyboard","setKeyboard","document","JSON","parse","stringify","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"mappings":"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"}
@@ -535,7 +535,7 @@ function renderCanvas(context, width, height, elements, tileSize, state) {
535
535
  }
536
536
 
537
537
  var _excluded = ["width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onRightClick", "onHover", "onElementMoved", "onWheel", "onFrame", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop"];
538
- var elements = [];
538
+ var elements = {};
539
539
  function Canvas2D(_ref) {
540
540
  var width = _ref.width,
541
541
  height = _ref.height,
@@ -566,6 +566,9 @@ function Canvas2D(_ref) {
566
566
  _ref$deltaTop = _ref.deltaTop,
567
567
  deltaTop = _ref$deltaTop === void 0 ? 0 : _ref$deltaTop,
568
568
  otherProps = _objectWithoutPropertiesLoose(_ref, _excluded);
569
+ if (!elements[otherProps.id]) {
570
+ elements[otherProps.id] = [];
571
+ }
569
572
  var _useState = useState({}),
570
573
  state = _useState[0],
571
574
  setState = _useState[1];
@@ -607,7 +610,7 @@ function Canvas2D(_ref) {
607
610
  var onMouseMove = null;
608
611
  if (trackMouseMove) {
609
612
  onMouseMove = function onMouseMove(e) {
610
- return mouseMove(e, elements, tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);
613
+ return mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);
611
614
  };
612
615
  }
613
616
  var onWheelFn = function onWheelFn(e) {
@@ -621,17 +624,19 @@ function Canvas2D(_ref) {
621
624
  var onClickFn = null;
622
625
  if (onClick) {
623
626
  onClickFn = function onClickFn(e) {
624
- return onClick(elementClick(e, elements, tileSize, state));
627
+ return onClick(elementClick(e, elements[otherProps.id], tileSize, state));
625
628
  };
626
629
  }
627
630
  useEffect(function () {
628
631
  function onRightClickEvent(e) {
629
632
  e.preventDefault();
630
- onRightClick(elementRightClick(e, elements, tileSize, state));
633
+ onRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));
631
634
  }
632
635
  if (onRightClick && state.canvas) {
633
636
  state.canvas.addEventListener('contextmenu', onRightClickEvent);
634
- return state.canvas.removeEventListener('contextmenu', onRightClickEvent);
637
+ return function () {
638
+ state.canvas.removeEventListener('contextmenu', onRightClickEvent);
639
+ };
635
640
  }
636
641
  }, [state.canvas, onRightClick]);
637
642
  useEffect(function () {
@@ -640,8 +645,8 @@ function Canvas2D(_ref) {
640
645
  if (!shouldRender) {
641
646
  return;
642
647
  }
643
- elements = onFrame();
644
- var sortedElements = sortElements(elements);
648
+ elements[otherProps.id] = onFrame();
649
+ var sortedElements = sortElements(elements[otherProps.id]);
645
650
  if (state.context) {
646
651
  renderCanvas(state.context, width, height, sortedElements, tileSize, state);
647
652
  }
@@ -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/elementRightClick.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","../src/hooks/useGamepad.js","../src/hooks/useKeyboard.js","../src/hooks/useMousePosition.js","../src/hooks/useWindowDimensions.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\nexport default function elementRightClick(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;\nlet unselectTimeoutId = 0;\nconst UNSELECT_TIMEOUT_MS = 300;\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\t// Lock Axis\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\n\t\tif(event.nativeEvent.pointerType !== 'mouse') {\n\t\t\tunselectTimeoutId = setTimeout(() => {\n\t\t\t\tselectedObject = null;\n\t\t\t\tsetProps({\n\t\t\t\t\t...newProps,\n\t\t\t\t\tprevX: null,\n\t\t\t\t\tprevY: null,\n\t\t\t\t});\n\t\t\t}, UNSELECT_TIMEOUT_MS);\n\t\t}\n\t} else {\n\t\tif(onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), { x: left, y: top });\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","const WHEEL_DELTA = 0.05;\n\nexport default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += WHEEL_DELTA;\n\t} else {\n\t\tzoom -= WHEEL_DELTA;\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, useEffect, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport elementRightClick from './events/elementRightClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nlet elements = [];\n\nexport default function Canvas2D({\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonRightClick,\n\tonHover,\n\tonElementMoved,\n\tonWheel,\n\tonFrame,\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\tcanvas,\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 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\tif(typeof onFrame !== 'function') {\n\t\tthrow new Error('onFrame should be a function.');\n\t}\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\tconst onWheelFn = (e) => {\n\t\tif(onWheel) {\n\t\t\tonWheel(e);\n\t\t}\n\n\t\tif(minZoom !== maxZoom) {\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\n\t\t}\n\t};\n\n\tlet onClickFn = null;\n\tif(onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements, tileSize, state));\n\t}\n\n\n\t// Right click Event\n\tuseEffect(() => {\n\t\tfunction onRightClickEvent(e) {\n\t\t\te.preventDefault();\n\t\t\tonRightClick(elementRightClick(e, elements, tileSize, state));\n\t\t}\n\n\t\tif(onRightClick && state.canvas) {\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\n\t\t\treturn state.canvas.removeEventListener('contextmenu', onRightClickEvent);\n\t\t}\n\t}, [state.canvas, onRightClick]);\n\n\t// Canvas render loop\n\tuseEffect(() => {\n\t\tlet shouldRender = true;\n\t\tfunction render() {\n\t\t\tif(!shouldRender) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telements = onFrame();\n\t\t\tconst sortedElements = sortElements(elements);\n\n\t\t\tif(state.context) {\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.context,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tsortedElements,\n\t\t\t\t\ttileSize,\n\t\t\t\t\tstate,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\twindow.requestAnimationFrame(render);\n\t\t}\n\t\twindow.requestAnimationFrame(render);\n\n\t\treturn () => { shouldRender = false; };\n\t}, [state.context, onFrame]);\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\tonPointerMove={onMouseMove}\n\t\t\tonWheel={onWheelFn}\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) {\n\tfor(const image of images) {\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\n\t}\n}","import { useEffect, useState } from 'react';\n\nlet intervalId = 0;\nconst FRAME_INTERVAL = 15; // TODO: requestAnimationFrame ?\nexport default function useGamepad() {\n\tconst [gamepad, setGamepad] = useState();\n\n\tuseEffect(() => {\n\t\tclearInterval(intervalId);\n\t\tintervalId = setInterval(() =>\n\t\t\tsetGamepad(navigator.getGamepads()[0])\n\t\t, FRAME_INTERVAL);\n\t}, []);\n\n\treturn gamepad;\n}","import { useEffect, useState } from 'react';\n\nexport default function useKeyboard() {\n\tconst [keyboard, setKeyboard] = useState({});\n\n\tuseEffect(() => {\n\t\tdocument.addEventListener('keydown', (e) => {\n\t\t\tkeyboard[e.key] = true;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t});\n\t\tdocument.addEventListener('keyup', (e) => {\n\t\t\tkeyboard[e.key] = false;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t});\n\t}, []);\n\n\treturn keyboard;\n}","import { useEffect, useState } from 'react';\n\nexport default function useMousePosition(includeTouch = true) {\n\tconst [\n\t\tmousePosition,\n\t\tsetMousePosition\n\t] = useState({ x: null, y: null });\n\n\tuseEffect(() => {\n\t\tconst updateMousePosition = ev => {\n\t\t\tlet x, y;\n\t\t\tif (ev.touches) {\n\t\t\t\tconst touch = ev.touches[0];\n\t\t\t\t[x, y] = [touch.clientX, touch.clientY];\n\t\t\t} else {\n\t\t\t\t[x, y] = [ev.clientX, ev.clientY];\n\t\t\t}\n\t\t\tsetMousePosition({ x, y });\n\t\t};\n\t\twindow.addEventListener('mousemove', updateMousePosition);\n\n\t\tif (includeTouch) {\n\t\t\twindow.addEventListener('touchmove', updateMousePosition);\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('mousemove', updateMousePosition);\n\n\t\t\tif (includeTouch) {\n\t\t\t\twindow.removeEventListener('touchmove', updateMousePosition);\n\t\t\t}\n\t\t};\n\t}, [includeTouch]);\n\n\treturn mousePosition;\n}","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n\tconst { clientWidth: width, clientHeight: height } = document.documentElement;\n\treturn {\n\t\twidth,\n\t\theight,\n\t};\n}\n\nexport default function useWindowDimensions() {\n\tconst [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n\tuseEffect(() => {\n\t\tfunction handleResize() {\n\t\t\tsetWindowDimensions(getWindowDimensions());\n\t\t}\n\n\t\twindow.addEventListener('resize', handleResize);\n\t\treturn () => window.removeEventListener('resize', handleResize);\n\t}, []);\n\n\treturn windowDimensions;\n}\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","_iterator","_createForOfIteratorHelperLoose","_step","done","value","constructorName","id","originalEvent","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","event","props","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","_extends","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","pointerType","setTimeout","WHEEL_DELTA","mouseWheel","minZoom","maxZoom","deltaY","Math","max","min","sortElements","sort","a","b","zIndex","fill","stroke","CanvasObject","_createClass","key","get","set","ColoredCanvasObject","_CanvasObject","_inheritsLoose","_this","call","Circle","_ColoredCanvasObject","_ref","CanvasImage","src","_proto","prototype","crop","sx","sy","swidth","sheight","Rect","Polygon","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderRect","fillRect","strokeRect","moveTo","lineTo","renderFn","_renderFn","renderPolygon","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","_ref$trackMouseMove","trackMouseMove","_ref$minZoom","_ref$maxZoom","_ref$tileSize","onClick","onRightClick","onWheel","onFrame","_ref$lockXAxis","_ref$lockYAxis","_ref$smoothingQuality","smoothingQuality","_ref$dragObjects","_ref$deltaLeft","_ref$deltaTop","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","getBoundingClientRect","onMouseMove","onWheelFn","onClickFn","useEffect","onRightClickEvent","preventDefault","addEventListener","removeEventListener","shouldRender","render","sortedElements","requestAnimationFrame","React","createElement","ref","onPointerMove","className","preloadImages","images","image","intervalId","FRAME_INTERVAL","useGamepad","gamepad","setGamepad","clearInterval","setInterval","navigator","getGamepads","useKeyboard","keyboard","setKeyboard","document","JSON","parse","stringify","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"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/elementRightClick.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","../src/hooks/useGamepad.js","../src/hooks/useKeyboard.js","../src/hooks/useMousePosition.js","../src/hooks/useWindowDimensions.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\nexport default function elementRightClick(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;\nlet unselectTimeoutId = 0;\nconst UNSELECT_TIMEOUT_MS = 300;\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\t// Lock Axis\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\n\t\tif(event.nativeEvent.pointerType !== 'mouse') {\n\t\t\tunselectTimeoutId = setTimeout(() => {\n\t\t\t\tselectedObject = null;\n\t\t\t\tsetProps({\n\t\t\t\t\t...newProps,\n\t\t\t\t\tprevX: null,\n\t\t\t\t\tprevY: null,\n\t\t\t\t});\n\t\t\t}, UNSELECT_TIMEOUT_MS);\n\t\t}\n\t} else {\n\t\tif(onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), { x: left, y: top });\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","const WHEEL_DELTA = 0.05;\n\nexport default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += WHEEL_DELTA;\n\t} else {\n\t\tzoom -= WHEEL_DELTA;\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, useEffect, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport elementRightClick from './events/elementRightClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nconst elements = {};\n\nexport default function Canvas2D({\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonRightClick,\n\tonHover,\n\tonElementMoved,\n\tonWheel,\n\tonFrame,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality='medium',\n\tdragObjects=false,\n\tdeltaLeft=0,\n\tdeltaTop=0,\n\t...otherProps\n}) {\n\tif(!elements[otherProps.id]) {\n\t\telements[otherProps.id] = [];\n\t}\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\tcanvas,\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 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\tif(typeof onFrame !== 'function') {\n\t\tthrow new Error('onFrame should be a function.');\n\t}\n\n\t// Render\n\tlet onMouseMove = null;\n\tif(trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tconst onWheelFn = (e) => {\n\t\tif(onWheel) {\n\t\t\tonWheel(e);\n\t\t}\n\n\t\tif(minZoom !== maxZoom) {\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\n\t\t}\n\t};\n\n\tlet onClickFn = null;\n\tif(onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements[otherProps.id], tileSize, state));\n\t}\n\n\n\t// Right click Event\n\tuseEffect(() => {\n\t\tfunction onRightClickEvent(e) {\n\t\t\te.preventDefault();\n\t\t\tonRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));\n\t\t}\n\n\t\tif(onRightClick && state.canvas) {\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\n\t\t}\n\t}, [state.canvas, onRightClick]);\n\n\t// Canvas render loop\n\tuseEffect(() => {\n\t\tlet shouldRender = true;\n\t\tfunction render() {\n\t\t\tif(!shouldRender) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telements[otherProps.id] = onFrame();\n\t\t\tconst sortedElements = sortElements(elements[otherProps.id]);\n\n\t\t\tif(state.context) {\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.context,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tsortedElements,\n\t\t\t\t\ttileSize,\n\t\t\t\t\tstate,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\twindow.requestAnimationFrame(render);\n\t\t}\n\t\twindow.requestAnimationFrame(render);\n\n\t\treturn () => { shouldRender = false; };\n\t}, [state.context, onFrame]);\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\tonPointerMove={onMouseMove}\n\t\t\tonWheel={onWheelFn}\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) {\n\tfor(const image of images) {\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\n\t}\n}","import { useEffect, useState } from 'react';\n\nlet intervalId = 0;\nconst FRAME_INTERVAL = 15; // TODO: requestAnimationFrame ?\nexport default function useGamepad() {\n\tconst [gamepad, setGamepad] = useState();\n\n\tuseEffect(() => {\n\t\tclearInterval(intervalId);\n\t\tintervalId = setInterval(() =>\n\t\t\tsetGamepad(navigator.getGamepads()[0])\n\t\t, FRAME_INTERVAL);\n\t}, []);\n\n\treturn gamepad;\n}","import { useEffect, useState } from 'react';\n\nexport default function useKeyboard() {\n\tconst [keyboard, setKeyboard] = useState({});\n\n\tuseEffect(() => {\n\t\tdocument.addEventListener('keydown', (e) => {\n\t\t\tkeyboard[e.key] = true;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t});\n\t\tdocument.addEventListener('keyup', (e) => {\n\t\t\tkeyboard[e.key] = false;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t});\n\t}, []);\n\n\treturn keyboard;\n}","import { useEffect, useState } from 'react';\n\nexport default function useMousePosition(includeTouch = true) {\n\tconst [\n\t\tmousePosition,\n\t\tsetMousePosition\n\t] = useState({ x: null, y: null });\n\n\tuseEffect(() => {\n\t\tconst updateMousePosition = ev => {\n\t\t\tlet x, y;\n\t\t\tif (ev.touches) {\n\t\t\t\tconst touch = ev.touches[0];\n\t\t\t\t[x, y] = [touch.clientX, touch.clientY];\n\t\t\t} else {\n\t\t\t\t[x, y] = [ev.clientX, ev.clientY];\n\t\t\t}\n\t\t\tsetMousePosition({ x, y });\n\t\t};\n\t\twindow.addEventListener('mousemove', updateMousePosition);\n\n\t\tif (includeTouch) {\n\t\t\twindow.addEventListener('touchmove', updateMousePosition);\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('mousemove', updateMousePosition);\n\n\t\t\tif (includeTouch) {\n\t\t\t\twindow.removeEventListener('touchmove', updateMousePosition);\n\t\t\t}\n\t\t};\n\t}, [includeTouch]);\n\n\treturn mousePosition;\n}","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n\tconst { clientWidth: width, clientHeight: height } = document.documentElement;\n\treturn {\n\t\twidth,\n\t\theight,\n\t};\n}\n\nexport default function useWindowDimensions() {\n\tconst [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n\tuseEffect(() => {\n\t\tfunction handleResize() {\n\t\t\tsetWindowDimensions(getWindowDimensions());\n\t\t}\n\n\t\twindow.addEventListener('resize', handleResize);\n\t\treturn () => window.removeEventListener('resize', handleResize);\n\t}, []);\n\n\treturn windowDimensions;\n}\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","_iterator","_createForOfIteratorHelperLoose","_step","done","value","constructorName","id","originalEvent","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","event","props","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","_extends","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","pointerType","setTimeout","WHEEL_DELTA","mouseWheel","minZoom","maxZoom","deltaY","Math","max","min","sortElements","sort","a","b","zIndex","fill","stroke","CanvasObject","_createClass","key","get","set","ColoredCanvasObject","_CanvasObject","_inheritsLoose","_this","call","Circle","_ColoredCanvasObject","_ref","CanvasImage","src","_proto","prototype","crop","sx","sy","swidth","sheight","Rect","Polygon","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderRect","fillRect","strokeRect","moveTo","lineTo","renderFn","_renderFn","renderPolygon","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","_ref$trackMouseMove","trackMouseMove","_ref$minZoom","_ref$maxZoom","_ref$tileSize","onClick","onRightClick","onWheel","onFrame","_ref$lockXAxis","_ref$lockYAxis","_ref$smoothingQuality","smoothingQuality","_ref$dragObjects","_ref$deltaLeft","_ref$deltaTop","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","getBoundingClientRect","onMouseMove","onWheelFn","onClickFn","useEffect","onRightClickEvent","preventDefault","addEventListener","removeEventListener","shouldRender","render","sortedElements","requestAnimationFrame","React","createElement","ref","onPointerMove","className","preloadImages","images","image","intervalId","FRAME_INTERVAL","useGamepad","gamepad","setGamepad","clearInterval","setInterval","navigator","getGamepads","useKeyboard","keyboard","setKeyboard","document","JSON","parse","stringify","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "canvas2d-wrapper",
3
- "version": "1.6.0",
3
+ "version": "1.6.2",
4
4
  "description": "A React Wrapper to use HTML5 canvas with mouse move and zoom abilities.",
5
5
  "author": "Elanis",
6
6
  "license": "MIT",
@@ -27,18 +27,18 @@
27
27
  "react": "^17.0.0 || ^18.0.0"
28
28
  },
29
29
  "devDependencies": {
30
- "@testing-library/jest-dom": "^6.2.0",
31
- "@testing-library/react": "^14.1.2",
30
+ "@testing-library/jest-dom": "^6.4.2",
31
+ "@testing-library/react": "^14.2.1",
32
32
  "@testing-library/user-event": "^14.5.2",
33
33
  "canvas": "^2.11.2",
34
34
  "cross-env": "^7.0.3",
35
- "eslint": "^8.56.0",
35
+ "eslint": "^8.57.0",
36
36
  "gh-pages": "^6.1.1",
37
37
  "microbundle-crl": "^0.13.11",
38
38
  "npm-run-all": "^4.1.5",
39
39
  "postcss-flexbugs-fixes": "^5.0.2",
40
40
  "postcss-normalize": "^10.0.1",
41
- "postcss-preset-env": "^9.3.0",
41
+ "postcss-preset-env": "^9.5.0",
42
42
  "react": "^18.2.0",
43
43
  "react-dom": "^18.2.0",
44
44
  "react-scripts": "^5.0.1"
@@ -47,7 +47,7 @@
47
47
  "dist"
48
48
  ],
49
49
  "dependencies": {
50
- "@babel/eslint-parser": "^7.23.3",
50
+ "@babel/eslint-parser": "^7.23.10",
51
51
  "@babel/preset-react": "^7.23.3",
52
52
  "eslint-config-standard-react": "^13.0.0"
53
53
  }