canvas2d-wrapper 1.2.4 → 1.2.5
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 +10 -4
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +10 -4
- package/dist/index.modern.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
@@ -551,8 +551,8 @@ var renderFn = (_renderFn = {}, _renderFn[new Circle({}).constructorName] = rend
|
|
551
551
|
points: [{}]
|
552
552
|
}).constructorName] = renderRect$1, _renderFn);
|
553
553
|
function renderCanvas(context, width, height, elements, tileSize, state) {
|
554
|
-
var left = state.left;
|
555
|
-
var top = state.top;
|
554
|
+
var left = state.left + state.deltaLeft;
|
555
|
+
var top = state.top + state.deltaTop;
|
556
556
|
var prevFillStyle = '';
|
557
557
|
var prevStrokeStyle = '';
|
558
558
|
var localTileSize = calcTileSize(tileSize, state.zoom);
|
@@ -604,7 +604,11 @@ function Canvas2D(_ref) {
|
|
604
604
|
smoothingQuality = _ref$smoothingQuality === void 0 ? 'medium' : _ref$smoothingQuality,
|
605
605
|
_ref$dragObjects = _ref.dragObjects,
|
606
606
|
dragObjects = _ref$dragObjects === void 0 ? false : _ref$dragObjects,
|
607
|
-
|
607
|
+
_ref$deltaLeft = _ref.deltaLeft,
|
608
|
+
deltaLeft = _ref$deltaLeft === void 0 ? 0 : _ref$deltaLeft,
|
609
|
+
_ref$deltaTop = _ref.deltaTop,
|
610
|
+
deltaTop = _ref$deltaTop === void 0 ? 0 : _ref$deltaTop,
|
611
|
+
otherProps = _objectWithoutPropertiesLoose(_ref, ["elements", "width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onHover", "onElementMoved", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop"]);
|
608
612
|
|
609
613
|
var _useState = React.useState({}),
|
610
614
|
state = _useState[0],
|
@@ -628,7 +632,9 @@ function Canvas2D(_ref) {
|
|
628
632
|
top: height / 2,
|
629
633
|
width: width,
|
630
634
|
height: height,
|
631
|
-
zoom: 1
|
635
|
+
zoom: 1,
|
636
|
+
deltaLeft: deltaLeft,
|
637
|
+
deltaTop: deltaTop
|
632
638
|
});
|
633
639
|
}
|
634
640
|
}, []);
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/collideElement.js","../src/events/elementClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/CanvasImage.js","../src/shapes/Rect.js","../src/shapes/Polygon.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderRect.js","../src/render/renderPolygon.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\treturn (x <= left && left <= (x + width) && y <= top && top <= (y + height));\n}","import calcTileSize from '../functions/calcTileSize';\n\nimport inCircle from './inCircle';\nimport inPoly from './inPoly';\nimport inRect from './inRect';\n\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\n\tconst localTileSize = calcTileSize(tileSize, zoom);\n\n\tfor(const element of elements) {\n\t\tconst x = element.x * localTileSize;\n\t\tconst y = element.y * localTileSize;\n\n\t\tswitch(element.constructorName) {\n\t\t\tcase 'Rect':\n\t\t\tcase 'CanvasImage':\n\t\t\t\tif(inRect(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Circle':\n\t\t\t\tif(inCircle(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Polygon':\n\t\t\t\tif(inPoly(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn null;\n}","import collideElement from '../collisions/collideElement';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst left = -state.left + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif(clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst left = -props.left + event.pageX - event.target.offsetLeft;\n\tconst top = -props.top + event.pageY - event.target.offsetTop;\n\n\tif(event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif(dragObjects) {\n\t\t\tif(selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif(selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif(onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif(onHover) {\n\t\t\t\t\tonHover(null);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(!moved) {\n\t\t\tif(!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif(!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom));\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\n","export default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += 0.05;\n\t} else {\n\t\tzoom -= 0.05;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn -1;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable }) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t}\n\n\tcrop(x, y, width, height) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.arc(\n\t\tleft + element.x * localTileSize,\n\t\ttop + element.y * localTileSize,\n\t\telement.radius * localTileSize,\n\t\t0,\n\t\t2 * Math.PI\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif(!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tif(!element.sx) {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\telement.sx,\n\t\t\telement.sy,\n\t\t\telement.swidth,\n\t\t\telement.sheight,\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tif(element.fill) {\n\t\tcontext.fillRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n\n\tif(element.stroke) {\n\t\tcontext.strokeRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.moveTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tcontext.lineTo(\n\t\t\tleft + element.points[i].x * localTileSize,\n\t\t\ttop + element.points[i].y * localTileSize,\n\t\t);\n\t}\n\n\tcontext.lineTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","import Circle from '../shapes/Circle';\nimport CanvasImage from '../shapes/CanvasImage';\nimport Rect from '../shapes/Rect';\nimport Polygon from '../shapes/Polygon';\n\nimport calcTileSize from '../functions/calcTileSize';\n\nimport renderCircle from './renderCircle';\nimport renderImage from './renderImage';\nimport renderRect from './renderRect';\nimport renderPolygon from './renderPolygon';\n\nconst renderFn = {\n\t[(new Circle({})).constructorName]: renderCircle,\n\t[(new CanvasImage({})).constructorName]: renderImage,\n\t[(new Rect({})).constructorName]: renderRect,\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\n};\n\nexport default function renderCanvas(\n\tcontext,\n\twidth,\n\theight,\n\telements,\n\ttileSize,\n\tstate,\n) {\n\tconst left = state.left;\n\tconst top = state.top;\n\n\tlet prevFillStyle = '';\n\tlet prevStrokeStyle = '';\n\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\n\n\tcontext.clearRect(0, 0, width, height);\n\n\tfor(const element of elements) {\n\t\tif(\n\t\t\telement.fill !== prevFillStyle &&\n\t\t\ttypeof element.fill !== 'undefined'\n\t\t) {\n\t\t\tcontext.fillStyle = element.fill;\n\t\t\tprevFillStyle = element.fill;\n\t\t}\n\n\t\tif(\n\t\t\telement.stroke !== prevStrokeStyle &&\n\t\t\ttypeof element.stroke !== 'undefined'\n\t\t) {\n\t\t\tcontext.strokeStyle = element.stroke;\n\t\t\tprevStrokeStyle = element.stroke;\n\t\t}\n\n\t\tconst type = element.constructorName;\n\t\tif(renderFn[type]) {\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\n\t\t} else {\n\t\t\tthrow new Error('Unsupported shape type:' + type);\n\t\t}\n\t}\n}\n","import React, { useCallback, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nexport default function Canvas2D({\n\telements,\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonHover,\n\tonElementMoved,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality='medium',\n\tdragObjects=false,\n\t...otherProps\n}) {\n\t// Hooks\n\tconst [state, setState] = useState({});\n\tconst canvasRef = useCallback((canvas) => {\n\t\tif(canvas !== null) {\n\t\t\tconst context = canvas.getContext('2d');\n\n\t\t\tif(smoothingQuality === false) {\n\t\t\t\tcontext.imageSmoothingEnabled = false;\n\t\t\t} else {\n\t\t\t\tcontext.imageSmoothingEnabled = true;\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\n\t\t\t}\n\n\t\t\tsetState({\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\n\t\t\t\tcontext,\n\t\t\t\tleft: width/2,\n\t\t\t\ttop: height/2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tzoom: 1,\n\t\t\t});\n\t\t}\n\t}, []);\n\n\t// Check inputs\n\tif(typeof elements !== 'object' || !Array.isArray(elements)) {\n\t\tthrow new Error('Invalid elements, should be an array !');\n\t}\n\n\tif(typeof width !== 'number' || typeof height !== 'number') {\n\t\tthrow new Error('width/height should be specified and be numbers.');\n\t}\n\n\tif(minZoom > maxZoom) {\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\n\t}\n\n\tif(typeof onClick !== 'function' && typeof onClick !== 'undefined') {\n\t\tthrow new Error('onClick should be a function.');\n\t}\n\n\t// Sort elements\n\tconst sortedElements = sortElements(elements);\n\n\t// Render\n\tlet onMouseMove = null;\n\tif(trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements, tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tlet onWheel = null;\n\tif(minZoom !== maxZoom) {\n\t\tonWheel = (e) => mouseWheel(e, state, setState, minZoom, maxZoom);\n\t}\n\n\tlet onClickFn = null;\n\tif(onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements, tileSize, state));\n\t}\n\n\t// Canvas render loop\n\tif(state.context) {\n\t\twindow.requestAnimationFrame(() => {\n\t\t\trenderCanvas(\n\t\t\t\tstate.context,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tsortedElements,\n\t\t\t\ttileSize,\n\t\t\t\tstate,\n\t\t\t);\n\t\t});\n\t}\n\n\treturn (\n\t\t<canvas\n\t\t\tref={canvasRef}\n\t\t\twidth={width}\n\t\t\theight={height}\n\t\t\tonMouseMove={onMouseMove}\n\t\t\tonWheel={onWheel}\n\t\t\tonClick={onClickFn}\n\t\t\tclassName=\"canvas2d-wrapper\"\n\t\t\t{...otherProps}\n\t\t/>\n\t);\n};\n","export default function preloadImages(images) {\r\n\tfor(const image of images) {\r\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\r\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\r\n\t}\r\n}"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","width","height","collideElement","e","elements","constructorName","id","originalEvent","elementClick","state","pageX","target","offsetLeft","pageY","offsetTop","clickedElement","LEFT_BUTTON","selectedObject","mouseMove","event","props","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","mouseWheel","minZoom","maxZoom","deltaY","Math","max","min","sortElements","sort","a","b","zIndex","fill","stroke","CanvasObject","ColoredCanvasObject","Circle","CanvasImage","src","crop","sx","sy","swidth","sheight","Rect","Polygon","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderRect","fillRect","strokeRect","moveTo","lineTo","renderFn","renderPolygon","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","trackMouseMove","onClick","smoothingQuality","otherProps","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","getBoundingClientRect","Array","isArray","sortedElements","onMouseMove","onWheel","onClickFn","requestAnimationFrame","React","preloadImages","images","image"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/collideElement.js","../src/events/elementClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/CanvasImage.js","../src/shapes/Rect.js","../src/shapes/Polygon.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderRect.js","../src/render/renderPolygon.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\treturn (x <= left && left <= (x + width) && y <= top && top <= (y + height));\n}","import calcTileSize from '../functions/calcTileSize';\n\nimport inCircle from './inCircle';\nimport inPoly from './inPoly';\nimport inRect from './inRect';\n\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\n\tconst localTileSize = calcTileSize(tileSize, zoom);\n\n\tfor(const element of elements) {\n\t\tconst x = element.x * localTileSize;\n\t\tconst y = element.y * localTileSize;\n\n\t\tswitch(element.constructorName) {\n\t\t\tcase 'Rect':\n\t\t\tcase 'CanvasImage':\n\t\t\t\tif(inRect(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Circle':\n\t\t\t\tif(inCircle(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Polygon':\n\t\t\t\tif(inPoly(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn null;\n}","import collideElement from '../collisions/collideElement';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst left = -state.left + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif(clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst left = -props.left + event.pageX - event.target.offsetLeft;\n\tconst top = -props.top + event.pageY - event.target.offsetTop;\n\n\tif(event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif(dragObjects) {\n\t\t\tif(selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif(selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif(onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif(onHover) {\n\t\t\t\t\tonHover(null);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(!moved) {\n\t\t\tif(!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif(!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom));\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\n","export default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += 0.05;\n\t} else {\n\t\tzoom -= 0.05;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn -1;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable }) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t}\n\n\tcrop(x, y, width, height) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.arc(\n\t\tleft + element.x * localTileSize,\n\t\ttop + element.y * localTileSize,\n\t\telement.radius * localTileSize,\n\t\t0,\n\t\t2 * Math.PI\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif(!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tif(!element.sx) {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\telement.sx,\n\t\t\telement.sy,\n\t\t\telement.swidth,\n\t\t\telement.sheight,\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tif(element.fill) {\n\t\tcontext.fillRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n\n\tif(element.stroke) {\n\t\tcontext.strokeRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.moveTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tcontext.lineTo(\n\t\t\tleft + element.points[i].x * localTileSize,\n\t\t\ttop + element.points[i].y * localTileSize,\n\t\t);\n\t}\n\n\tcontext.lineTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","import Circle from '../shapes/Circle';\nimport CanvasImage from '../shapes/CanvasImage';\nimport Rect from '../shapes/Rect';\nimport Polygon from '../shapes/Polygon';\n\nimport calcTileSize from '../functions/calcTileSize';\n\nimport renderCircle from './renderCircle';\nimport renderImage from './renderImage';\nimport renderRect from './renderRect';\nimport renderPolygon from './renderPolygon';\n\nconst renderFn = {\n\t[(new Circle({})).constructorName]: renderCircle,\n\t[(new CanvasImage({})).constructorName]: renderImage,\n\t[(new Rect({})).constructorName]: renderRect,\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\n};\n\nexport default function renderCanvas(\n\tcontext,\n\twidth,\n\theight,\n\telements,\n\ttileSize,\n\tstate,\n) {\n\tconst left = state.left + state.deltaLeft;\n\tconst top = state.top + state.deltaTop;\n\n\tlet prevFillStyle = '';\n\tlet prevStrokeStyle = '';\n\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\n\n\tcontext.clearRect(0, 0, width, height);\n\n\tfor(const element of elements) {\n\t\tif(\n\t\t\telement.fill !== prevFillStyle &&\n\t\t\ttypeof element.fill !== 'undefined'\n\t\t) {\n\t\t\tcontext.fillStyle = element.fill;\n\t\t\tprevFillStyle = element.fill;\n\t\t}\n\n\t\tif(\n\t\t\telement.stroke !== prevStrokeStyle &&\n\t\t\ttypeof element.stroke !== 'undefined'\n\t\t) {\n\t\t\tcontext.strokeStyle = element.stroke;\n\t\t\tprevStrokeStyle = element.stroke;\n\t\t}\n\n\t\tconst type = element.constructorName;\n\t\tif(renderFn[type]) {\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\n\t\t} else {\n\t\t\tthrow new Error('Unsupported shape type:' + type);\n\t\t}\n\t}\n}\n","import React, { useCallback, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nexport default function Canvas2D({\n\telements,\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonHover,\n\tonElementMoved,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality='medium',\n\tdragObjects=false,\n\tdeltaLeft=0,\n\tdeltaTop=0,\n\t...otherProps\n}) {\n\t// Hooks\n\tconst [state, setState] = useState({});\n\tconst canvasRef = useCallback((canvas) => {\n\t\tif(canvas !== null) {\n\t\t\tconst context = canvas.getContext('2d');\n\n\t\t\tif(smoothingQuality === false) {\n\t\t\t\tcontext.imageSmoothingEnabled = false;\n\t\t\t} else {\n\t\t\t\tcontext.imageSmoothingEnabled = true;\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\n\t\t\t}\n\n\t\t\tsetState({\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\n\t\t\t\tcontext,\n\t\t\t\tleft: width/2,\n\t\t\t\ttop: height/2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tzoom: 1,\n\t\t\t\tdeltaLeft,\n\t\t\t\tdeltaTop,\n\t\t\t});\n\t\t}\n\t}, []);\n\n\t// Check inputs\n\tif(typeof elements !== 'object' || !Array.isArray(elements)) {\n\t\tthrow new Error('Invalid elements, should be an array !');\n\t}\n\n\tif(typeof width !== 'number' || typeof height !== 'number') {\n\t\tthrow new Error('width/height should be specified and be numbers.');\n\t}\n\n\tif(minZoom > maxZoom) {\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\n\t}\n\n\tif(typeof onClick !== 'function' && typeof onClick !== 'undefined') {\n\t\tthrow new Error('onClick should be a function.');\n\t}\n\n\t// Sort elements\n\tconst sortedElements = sortElements(elements);\n\n\t// Render\n\tlet onMouseMove = null;\n\tif(trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements, tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tlet onWheel = null;\n\tif(minZoom !== maxZoom) {\n\t\tonWheel = (e) => mouseWheel(e, state, setState, minZoom, maxZoom);\n\t}\n\n\tlet onClickFn = null;\n\tif(onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements, tileSize, state));\n\t}\n\n\t// Canvas render loop\n\tif(state.context) {\n\t\twindow.requestAnimationFrame(() => {\n\t\t\trenderCanvas(\n\t\t\t\tstate.context,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tsortedElements,\n\t\t\t\ttileSize,\n\t\t\t\tstate,\n\t\t\t);\n\t\t});\n\t}\n\n\treturn (\n\t\t<canvas\n\t\t\tref={canvasRef}\n\t\t\twidth={width}\n\t\t\theight={height}\n\t\t\tonMouseMove={onMouseMove}\n\t\t\tonWheel={onWheel}\n\t\t\tonClick={onClickFn}\n\t\t\tclassName=\"canvas2d-wrapper\"\n\t\t\t{...otherProps}\n\t\t/>\n\t);\n};\n","export default function preloadImages(images) {\r\n\tfor(const image of images) {\r\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\r\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\r\n\t}\r\n}"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","width","height","collideElement","e","elements","constructorName","id","originalEvent","elementClick","state","pageX","target","offsetLeft","pageY","offsetTop","clickedElement","LEFT_BUTTON","selectedObject","mouseMove","event","props","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","mouseWheel","minZoom","maxZoom","deltaY","Math","max","min","sortElements","sort","a","b","zIndex","fill","stroke","CanvasObject","ColoredCanvasObject","Circle","CanvasImage","src","crop","sx","sy","swidth","sheight","Rect","Polygon","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderRect","fillRect","strokeRect","moveTo","lineTo","renderFn","renderPolygon","renderCanvas","deltaLeft","deltaTop","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","trackMouseMove","onClick","smoothingQuality","otherProps","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","getBoundingClientRect","Array","isArray","sortedElements","onMouseMove","onWheel","onClickFn","requestAnimationFrame","React","preloadImages","images","image"],"mappings":"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"}
|
package/dist/index.modern.js
CHANGED
@@ -548,8 +548,8 @@ var renderFn = (_renderFn = {}, _renderFn[new Circle({}).constructorName] = rend
|
|
548
548
|
points: [{}]
|
549
549
|
}).constructorName] = renderRect$1, _renderFn);
|
550
550
|
function renderCanvas(context, width, height, elements, tileSize, state) {
|
551
|
-
var left = state.left;
|
552
|
-
var top = state.top;
|
551
|
+
var left = state.left + state.deltaLeft;
|
552
|
+
var top = state.top + state.deltaTop;
|
553
553
|
var prevFillStyle = '';
|
554
554
|
var prevStrokeStyle = '';
|
555
555
|
var localTileSize = calcTileSize(tileSize, state.zoom);
|
@@ -601,7 +601,11 @@ function Canvas2D(_ref) {
|
|
601
601
|
smoothingQuality = _ref$smoothingQuality === void 0 ? 'medium' : _ref$smoothingQuality,
|
602
602
|
_ref$dragObjects = _ref.dragObjects,
|
603
603
|
dragObjects = _ref$dragObjects === void 0 ? false : _ref$dragObjects,
|
604
|
-
|
604
|
+
_ref$deltaLeft = _ref.deltaLeft,
|
605
|
+
deltaLeft = _ref$deltaLeft === void 0 ? 0 : _ref$deltaLeft,
|
606
|
+
_ref$deltaTop = _ref.deltaTop,
|
607
|
+
deltaTop = _ref$deltaTop === void 0 ? 0 : _ref$deltaTop,
|
608
|
+
otherProps = _objectWithoutPropertiesLoose(_ref, ["elements", "width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onHover", "onElementMoved", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop"]);
|
605
609
|
|
606
610
|
var _useState = useState({}),
|
607
611
|
state = _useState[0],
|
@@ -625,7 +629,9 @@ function Canvas2D(_ref) {
|
|
625
629
|
top: height / 2,
|
626
630
|
width: width,
|
627
631
|
height: height,
|
628
|
-
zoom: 1
|
632
|
+
zoom: 1,
|
633
|
+
deltaLeft: deltaLeft,
|
634
|
+
deltaTop: deltaTop
|
629
635
|
});
|
630
636
|
}
|
631
637
|
}, []);
|
package/dist/index.modern.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.modern.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/collideElement.js","../src/events/elementClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/CanvasImage.js","../src/shapes/Rect.js","../src/shapes/Polygon.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderRect.js","../src/render/renderPolygon.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\treturn (x <= left && left <= (x + width) && y <= top && top <= (y + height));\n}","import calcTileSize from '../functions/calcTileSize';\n\nimport inCircle from './inCircle';\nimport inPoly from './inPoly';\nimport inRect from './inRect';\n\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\n\tconst localTileSize = calcTileSize(tileSize, zoom);\n\n\tfor(const element of elements) {\n\t\tconst x = element.x * localTileSize;\n\t\tconst y = element.y * localTileSize;\n\n\t\tswitch(element.constructorName) {\n\t\t\tcase 'Rect':\n\t\t\tcase 'CanvasImage':\n\t\t\t\tif(inRect(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Circle':\n\t\t\t\tif(inCircle(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Polygon':\n\t\t\t\tif(inPoly(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn null;\n}","import collideElement from '../collisions/collideElement';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst left = -state.left + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif(clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst left = -props.left + event.pageX - event.target.offsetLeft;\n\tconst top = -props.top + event.pageY - event.target.offsetTop;\n\n\tif(event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif(dragObjects) {\n\t\t\tif(selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif(selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif(onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif(onHover) {\n\t\t\t\t\tonHover(null);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(!moved) {\n\t\t\tif(!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif(!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom));\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\n","export default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += 0.05;\n\t} else {\n\t\tzoom -= 0.05;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn -1;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable }) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t}\n\n\tcrop(x, y, width, height) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.arc(\n\t\tleft + element.x * localTileSize,\n\t\ttop + element.y * localTileSize,\n\t\telement.radius * localTileSize,\n\t\t0,\n\t\t2 * Math.PI\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif(!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tif(!element.sx) {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\telement.sx,\n\t\t\telement.sy,\n\t\t\telement.swidth,\n\t\t\telement.sheight,\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tif(element.fill) {\n\t\tcontext.fillRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n\n\tif(element.stroke) {\n\t\tcontext.strokeRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.moveTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tcontext.lineTo(\n\t\t\tleft + element.points[i].x * localTileSize,\n\t\t\ttop + element.points[i].y * localTileSize,\n\t\t);\n\t}\n\n\tcontext.lineTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","import Circle from '../shapes/Circle';\nimport CanvasImage from '../shapes/CanvasImage';\nimport Rect from '../shapes/Rect';\nimport Polygon from '../shapes/Polygon';\n\nimport calcTileSize from '../functions/calcTileSize';\n\nimport renderCircle from './renderCircle';\nimport renderImage from './renderImage';\nimport renderRect from './renderRect';\nimport renderPolygon from './renderPolygon';\n\nconst renderFn = {\n\t[(new Circle({})).constructorName]: renderCircle,\n\t[(new CanvasImage({})).constructorName]: renderImage,\n\t[(new Rect({})).constructorName]: renderRect,\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\n};\n\nexport default function renderCanvas(\n\tcontext,\n\twidth,\n\theight,\n\telements,\n\ttileSize,\n\tstate,\n) {\n\tconst left = state.left;\n\tconst top = state.top;\n\n\tlet prevFillStyle = '';\n\tlet prevStrokeStyle = '';\n\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\n\n\tcontext.clearRect(0, 0, width, height);\n\n\tfor(const element of elements) {\n\t\tif(\n\t\t\telement.fill !== prevFillStyle &&\n\t\t\ttypeof element.fill !== 'undefined'\n\t\t) {\n\t\t\tcontext.fillStyle = element.fill;\n\t\t\tprevFillStyle = element.fill;\n\t\t}\n\n\t\tif(\n\t\t\telement.stroke !== prevStrokeStyle &&\n\t\t\ttypeof element.stroke !== 'undefined'\n\t\t) {\n\t\t\tcontext.strokeStyle = element.stroke;\n\t\t\tprevStrokeStyle = element.stroke;\n\t\t}\n\n\t\tconst type = element.constructorName;\n\t\tif(renderFn[type]) {\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\n\t\t} else {\n\t\t\tthrow new Error('Unsupported shape type:' + type);\n\t\t}\n\t}\n}\n","import React, { useCallback, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nexport default function Canvas2D({\n\telements,\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonHover,\n\tonElementMoved,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality='medium',\n\tdragObjects=false,\n\t...otherProps\n}) {\n\t// Hooks\n\tconst [state, setState] = useState({});\n\tconst canvasRef = useCallback((canvas) => {\n\t\tif(canvas !== null) {\n\t\t\tconst context = canvas.getContext('2d');\n\n\t\t\tif(smoothingQuality === false) {\n\t\t\t\tcontext.imageSmoothingEnabled = false;\n\t\t\t} else {\n\t\t\t\tcontext.imageSmoothingEnabled = true;\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\n\t\t\t}\n\n\t\t\tsetState({\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\n\t\t\t\tcontext,\n\t\t\t\tleft: width/2,\n\t\t\t\ttop: height/2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tzoom: 1,\n\t\t\t});\n\t\t}\n\t}, []);\n\n\t// Check inputs\n\tif(typeof elements !== 'object' || !Array.isArray(elements)) {\n\t\tthrow new Error('Invalid elements, should be an array !');\n\t}\n\n\tif(typeof width !== 'number' || typeof height !== 'number') {\n\t\tthrow new Error('width/height should be specified and be numbers.');\n\t}\n\n\tif(minZoom > maxZoom) {\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\n\t}\n\n\tif(typeof onClick !== 'function' && typeof onClick !== 'undefined') {\n\t\tthrow new Error('onClick should be a function.');\n\t}\n\n\t// Sort elements\n\tconst sortedElements = sortElements(elements);\n\n\t// Render\n\tlet onMouseMove = null;\n\tif(trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements, tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tlet onWheel = null;\n\tif(minZoom !== maxZoom) {\n\t\tonWheel = (e) => mouseWheel(e, state, setState, minZoom, maxZoom);\n\t}\n\n\tlet onClickFn = null;\n\tif(onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements, tileSize, state));\n\t}\n\n\t// Canvas render loop\n\tif(state.context) {\n\t\twindow.requestAnimationFrame(() => {\n\t\t\trenderCanvas(\n\t\t\t\tstate.context,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tsortedElements,\n\t\t\t\ttileSize,\n\t\t\t\tstate,\n\t\t\t);\n\t\t});\n\t}\n\n\treturn (\n\t\t<canvas\n\t\t\tref={canvasRef}\n\t\t\twidth={width}\n\t\t\theight={height}\n\t\t\tonMouseMove={onMouseMove}\n\t\t\tonWheel={onWheel}\n\t\t\tonClick={onClickFn}\n\t\t\tclassName=\"canvas2d-wrapper\"\n\t\t\t{...otherProps}\n\t\t/>\n\t);\n};\n","export default function preloadImages(images) {\r\n\tfor(const image of images) {\r\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\r\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\r\n\t}\r\n}"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","width","height","collideElement","e","elements","constructorName","id","originalEvent","elementClick","state","pageX","target","offsetLeft","pageY","offsetTop","clickedElement","LEFT_BUTTON","selectedObject","mouseMove","event","props","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","mouseWheel","minZoom","maxZoom","deltaY","Math","max","min","sortElements","sort","a","b","zIndex","fill","stroke","CanvasObject","ColoredCanvasObject","Circle","CanvasImage","src","crop","sx","sy","swidth","sheight","Rect","Polygon","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderRect","fillRect","strokeRect","moveTo","lineTo","renderFn","renderPolygon","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","trackMouseMove","onClick","smoothingQuality","otherProps","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","getBoundingClientRect","Array","isArray","sortedElements","onMouseMove","onWheel","onClickFn","requestAnimationFrame","preloadImages","images","image"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"index.modern.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/collideElement.js","../src/events/elementClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/CanvasImage.js","../src/shapes/Rect.js","../src/shapes/Polygon.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderRect.js","../src/render/renderPolygon.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\treturn (x <= left && left <= (x + width) && y <= top && top <= (y + height));\n}","import calcTileSize from '../functions/calcTileSize';\n\nimport inCircle from './inCircle';\nimport inPoly from './inPoly';\nimport inRect from './inRect';\n\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\n\tconst localTileSize = calcTileSize(tileSize, zoom);\n\n\tfor(const element of elements) {\n\t\tconst x = element.x * localTileSize;\n\t\tconst y = element.y * localTileSize;\n\n\t\tswitch(element.constructorName) {\n\t\t\tcase 'Rect':\n\t\t\tcase 'CanvasImage':\n\t\t\t\tif(inRect(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Circle':\n\t\t\t\tif(inCircle(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Polygon':\n\t\t\t\tif(inPoly(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn null;\n}","import collideElement from '../collisions/collideElement';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst left = -state.left + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif(clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst left = -props.left + event.pageX - event.target.offsetLeft;\n\tconst top = -props.top + event.pageY - event.target.offsetTop;\n\n\tif(event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif(dragObjects) {\n\t\t\tif(selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif(selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif(onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif(onHover) {\n\t\t\t\t\tonHover(null);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif(!moved) {\n\t\t\tif(!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif(!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom));\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\n","export default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += 0.05;\n\t} else {\n\t\tzoom -= 0.05;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn -1;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable }) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t}\n\n\tcrop(x, y, width, height) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.arc(\n\t\tleft + element.x * localTileSize,\n\t\ttop + element.y * localTileSize,\n\t\telement.radius * localTileSize,\n\t\t0,\n\t\t2 * Math.PI\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif(!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tif(!element.sx) {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\telement.sx,\n\t\t\telement.sy,\n\t\t\telement.swidth,\n\t\t\telement.sheight,\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tif(element.fill) {\n\t\tcontext.fillRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n\n\tif(element.stroke) {\n\t\tcontext.strokeRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.moveTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tcontext.lineTo(\n\t\t\tleft + element.points[i].x * localTileSize,\n\t\t\ttop + element.points[i].y * localTileSize,\n\t\t);\n\t}\n\n\tcontext.lineTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","import Circle from '../shapes/Circle';\nimport CanvasImage from '../shapes/CanvasImage';\nimport Rect from '../shapes/Rect';\nimport Polygon from '../shapes/Polygon';\n\nimport calcTileSize from '../functions/calcTileSize';\n\nimport renderCircle from './renderCircle';\nimport renderImage from './renderImage';\nimport renderRect from './renderRect';\nimport renderPolygon from './renderPolygon';\n\nconst renderFn = {\n\t[(new Circle({})).constructorName]: renderCircle,\n\t[(new CanvasImage({})).constructorName]: renderImage,\n\t[(new Rect({})).constructorName]: renderRect,\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\n};\n\nexport default function renderCanvas(\n\tcontext,\n\twidth,\n\theight,\n\telements,\n\ttileSize,\n\tstate,\n) {\n\tconst left = state.left + state.deltaLeft;\n\tconst top = state.top + state.deltaTop;\n\n\tlet prevFillStyle = '';\n\tlet prevStrokeStyle = '';\n\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\n\n\tcontext.clearRect(0, 0, width, height);\n\n\tfor(const element of elements) {\n\t\tif(\n\t\t\telement.fill !== prevFillStyle &&\n\t\t\ttypeof element.fill !== 'undefined'\n\t\t) {\n\t\t\tcontext.fillStyle = element.fill;\n\t\t\tprevFillStyle = element.fill;\n\t\t}\n\n\t\tif(\n\t\t\telement.stroke !== prevStrokeStyle &&\n\t\t\ttypeof element.stroke !== 'undefined'\n\t\t) {\n\t\t\tcontext.strokeStyle = element.stroke;\n\t\t\tprevStrokeStyle = element.stroke;\n\t\t}\n\n\t\tconst type = element.constructorName;\n\t\tif(renderFn[type]) {\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\n\t\t} else {\n\t\t\tthrow new Error('Unsupported shape type:' + type);\n\t\t}\n\t}\n}\n","import React, { useCallback, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nexport default function Canvas2D({\n\telements,\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonHover,\n\tonElementMoved,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality='medium',\n\tdragObjects=false,\n\tdeltaLeft=0,\n\tdeltaTop=0,\n\t...otherProps\n}) {\n\t// Hooks\n\tconst [state, setState] = useState({});\n\tconst canvasRef = useCallback((canvas) => {\n\t\tif(canvas !== null) {\n\t\t\tconst context = canvas.getContext('2d');\n\n\t\t\tif(smoothingQuality === false) {\n\t\t\t\tcontext.imageSmoothingEnabled = false;\n\t\t\t} else {\n\t\t\t\tcontext.imageSmoothingEnabled = true;\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\n\t\t\t}\n\n\t\t\tsetState({\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\n\t\t\t\tcontext,\n\t\t\t\tleft: width/2,\n\t\t\t\ttop: height/2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tzoom: 1,\n\t\t\t\tdeltaLeft,\n\t\t\t\tdeltaTop,\n\t\t\t});\n\t\t}\n\t}, []);\n\n\t// Check inputs\n\tif(typeof elements !== 'object' || !Array.isArray(elements)) {\n\t\tthrow new Error('Invalid elements, should be an array !');\n\t}\n\n\tif(typeof width !== 'number' || typeof height !== 'number') {\n\t\tthrow new Error('width/height should be specified and be numbers.');\n\t}\n\n\tif(minZoom > maxZoom) {\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\n\t}\n\n\tif(typeof onClick !== 'function' && typeof onClick !== 'undefined') {\n\t\tthrow new Error('onClick should be a function.');\n\t}\n\n\t// Sort elements\n\tconst sortedElements = sortElements(elements);\n\n\t// Render\n\tlet onMouseMove = null;\n\tif(trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements, tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tlet onWheel = null;\n\tif(minZoom !== maxZoom) {\n\t\tonWheel = (e) => mouseWheel(e, state, setState, minZoom, maxZoom);\n\t}\n\n\tlet onClickFn = null;\n\tif(onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements, tileSize, state));\n\t}\n\n\t// Canvas render loop\n\tif(state.context) {\n\t\twindow.requestAnimationFrame(() => {\n\t\t\trenderCanvas(\n\t\t\t\tstate.context,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tsortedElements,\n\t\t\t\ttileSize,\n\t\t\t\tstate,\n\t\t\t);\n\t\t});\n\t}\n\n\treturn (\n\t\t<canvas\n\t\t\tref={canvasRef}\n\t\t\twidth={width}\n\t\t\theight={height}\n\t\t\tonMouseMove={onMouseMove}\n\t\t\tonWheel={onWheel}\n\t\t\tonClick={onClickFn}\n\t\t\tclassName=\"canvas2d-wrapper\"\n\t\t\t{...otherProps}\n\t\t/>\n\t);\n};\n","export default function preloadImages(images) {\r\n\tfor(const image of images) {\r\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\r\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\r\n\t}\r\n}"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","width","height","collideElement","e","elements","constructorName","id","originalEvent","elementClick","state","pageX","target","offsetLeft","pageY","offsetTop","clickedElement","LEFT_BUTTON","selectedObject","mouseMove","event","props","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","mouseWheel","minZoom","maxZoom","deltaY","Math","max","min","sortElements","sort","a","b","zIndex","fill","stroke","CanvasObject","ColoredCanvasObject","Circle","CanvasImage","src","crop","sx","sy","swidth","sheight","Rect","Polygon","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderRect","fillRect","strokeRect","moveTo","lineTo","renderFn","renderPolygon","renderCanvas","deltaLeft","deltaTop","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","trackMouseMove","onClick","smoothingQuality","otherProps","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","getBoundingClientRect","Array","isArray","sortedElements","onMouseMove","onWheel","onClickFn","requestAnimationFrame","preloadImages","images","image"],"mappings":"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"}
|