'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){var e=this.path;e&&!e.isNotVisible()&&e._render(t),this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")},_renderText:function(t){"stroke"===this.paintFirst?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t))},_setTextStyles:function(t,e,i){if(t.textBaseline="alphabetical",this.path)switch(this.pathAlign){case"center":t.textBaseline="middle";break;case"ascender":t.textBaseline="top";break;case"descender":t.textBaseline="bottom"}t.font=this._getFontDeclaration(e,i)},calcTextWidth:function(){for(var t=this.getLineWidth(0),e=1,i=this._textLines.length;et&&(t=r)}return t},_renderTextLine:function(t,e,i,r,n,o){this._renderChars(t,e,i,r,n,o)},_renderTextLinesBackground:function(t){if(this.textBackgroundColor||this.styleHas("textBackgroundColor")){for(var e,i,r,n,o,a,s,l=t.fillStyle,c=this._getLeftOffset(),h=this._getTopOffset(),u=0,f=0,d=this.path,g=0,p=this._textLines.length;g=0:is?u%=s:u<0&&(u+=s),this._setGraphemeOnPath(u,o,a),u+=o.kernedWidth}return{width:l,numOfSpaces:0}},_setGraphemeOnPath:function(t,i,r){var n=t+i.kernedWidth/2,o=this.path,a=e.util.getPointOnPath(o.path,n,o.segmentsInfo);i.renderLeft=a.x-r.x,i.renderTop=a.y-r.y,i.angle=a.angle+("right"===this.pathSide?Math.PI:0)},_getGraphemeBox:function(t,e,i,r,n){var o,a=this.getCompleteStyleDeclaration(e,i),s=r?this.getCompleteStyleDeclaration(e,i-1):{},l=this._measureChar(t,a,r,s),c=l.kernedWidth,h=l.width;0!==this.charSpacing&&(h+=o=this._getWidthOfCharSpacing(),c+=o);var u={width:h,left:0,height:a.fontSize,kernedWidth:c,deltaY:a.deltaY};if(i>0&&!n){var f=this.__charBounds[e][i-1];u.left=f.left+f.width+l.kernedWidth-l.width}return u},getHeightOfLine:function(t){if(this.__lineHeights[t])return this.__lineHeights[t];for(var e=this._textLines[t],i=this.getHeightOfChar(t,0),r=1,n=e.length;r0){var O=y+o+u;"rtl"===this.direction&&(O=this.width-O-f),c&&m&&(t.fillStyle=m,t.fillRect(O,h+_*r+a,f,this.fontSize/15)),u=d.left,f=d.width,c=g,m=v,r=n,a=s}else f+=d.kernedWidth;var O=y+o+u;"rtl"===this.direction&&(O=this.width-O-f),t.fillStyle=v,g&&v&&t.fillRect(O,h+_*r+a,f-x,this.fontSize/15),b+=i}this._removeShadow(t)}},_getFontDeclaration:function(t,i){var r=t||this,n=this.fontFamily,o=e.Text.genericFonts.indexOf(n.toLowerCase())>-1,a=void 0===n||n.indexOf("'")>-1||n.indexOf(",")>-1||n.indexOf('"')>-1||o?r.fontFamily:'"'+r.fontFamily+'"';return[e.isLikelyNode?r.fontWeight:r.fontStyle,e.isLikelyNode?r.fontStyle:r.fontWeight,i?this.CACHE_FONT_SIZE+"px":r.fontSize+"px",a].join(" ")},render:function(t){this.visible&&(!this.canvas||!this.canvas.skipOffscreen||this.group||this.isOnScreen())&&(this._shouldClearDimensionCache()&&this.initDimensions(),this.callSuper("render",t))},_splitTextIntoLines:function(t){for(var i=t.split(this._reNewline),r=Array(i.length),n=["\n"],o=[],a=0;a0&&t.clipPath?this.clonePathWithClipPath(e,t,function(t){r.forEach(function(e){i._addPathToObjectEraser(e,t)})}):r.length>0&&r.forEach(function(t){i._addPathToObjectEraser(t,e)});return}var n=t.eraser;n||(n=new tQ.Eraser,t.eraser=n),e.clone(function(e){var r=tQ.util.multiplyTransformMatrices(tQ.util.invertTransform(t.calcTransformMatrix()),e.calcTransformMatrix());tQ.util.applyTransformToObject(e,r),n.addWithUpdate(e),t.set("dirty",!0),t.fire("erasing:end",{path:e}),t.group&&Array.isArray(i.__subTargets)&&i.__subTargets.push(t)})},applyEraserToCanvas:function(t){var e=this.canvas,i={};return["backgroundImage","overlayImage"].forEach(function(r){var n=e[r];n&&n.erasable&&(this._addPathToObjectEraser(n,t),i[r]=n)},this),i},_finalizeAndAddPath:function(){var t=this.canvas.contextTop,e=this.canvas;t.closePath(),this.decimate&&(this._points=this.decimatePoints(this._points,this.decimate)),e.clearContext(e.contextTop),this._isErasing=!1;var i=this._points&&this._points.length>1?this.convertPointsToSVGPath(this._points):null;if(!i||this._isEmptySVGPath(i)){e.fire("erasing:end"),e.requestRenderAll();return}var r=this.createPath(i);r.setCoords(),e.fire("before:path:created",{path:r});var n=this.applyEraserToCanvas(r),o=this;this.__subTargets=[];var a=[];e.forEachObject(function(t){t.erasable&&t.intersectsWithObject(r,!0,!0)&&(o._addPathToObjectEraser(t,r),a.push(t))}),e.fire("erasing:end",{path:r,targets:a,subTargets:this.__subTargets,drawables:n}),delete this.__subTargets,e.requestRenderAll(),this._resetShadow(),e.fire("path:created",{path:r})}})},6957:function(){},6907:function(){},4866:function(){}},function(t){t.O(0,[774,937,866,609,980,445,617,943,470,888,179],function(){return t(t.s=8312)}),_N_E=t.O()}]);
+//# sourceMappingURL=index-f57aecfcfef566e7.js.map
\ No newline at end of file
diff --git a/docs/_next/static/chunks/pages/index-f57aecfcfef566e7.js.map b/docs/_next/static/chunks/pages/index-f57aecfcfef566e7.js.map
new file mode 100644
index 0000000..6eb9fdd
--- /dev/null
+++ b/docs/_next/static/chunks/pages/index-f57aecfcfef566e7.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"static/chunks/pages/index-f57aecfcfef566e7.js","mappings":"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","sources":["webpack://_N_E/","webpack://_N_E/./src/useCanvas.ts","webpack://_N_E/./src/useTools.ts","webpack://_N_E/./src/CanvasTools.tsx","webpack://_N_E/./src/AppFooter.tsx","webpack://_N_E/./src/useWarrior.ts","webpack://_N_E/./src/fabricUtils.ts","webpack://_N_E/./src/imageProcessing.worker.ts","webpack://_N_E/./src/useImageWorker.ts","webpack://_N_E/./src/useSettings.ts","webpack://_N_E/./src/imageUtils.ts","webpack://_N_E/./src/ToolsProvider.tsx","webpack://_N_E/./src/CanvasBackdrop.tsx","webpack://_N_E/./src/CanvasProvider.tsx","webpack://_N_E/./src/CanvasInteractions.tsx","webpack://_N_E/./src/CanvasToggle.tsx","webpack://_N_E/./src/importUtils.ts","webpack://_N_E/./src/WarriorSelector.tsx","webpack://_N_E/./src/WarriorProvider.tsx","webpack://_N_E/./src/useEnvironment.ts","webpack://_N_E/./src/useSkin.ts","webpack://_N_E/./src/Material.tsx","webpack://_N_E/./src/Materials.tsx","webpack://_N_E/./src/WarriorViewer.tsx","webpack://_N_E/./src/EnvironmentSelector.tsx","webpack://_N_E/./src/EnvironmentExposure.tsx","webpack://_N_E/./src/AnimationSelector.tsx","webpack://_N_E/./src/EnvironmentProvider.tsx","webpack://_N_E/./src/SkinProvider.tsx","webpack://_N_E/./src/MaterialSelector.tsx","webpack://_N_E/./src/Canvas.tsx","webpack://_N_E/./src/useImageLoader.ts","webpack://_N_E/./src/ColorCanvas.tsx","webpack://_N_E/./src/MetallicCanvas.tsx","webpack://_N_E/./src/MaterialCanvases.tsx","webpack://_N_E/./src/ImageLoaderProvider.tsx","webpack://_N_E/./src/pages/index.tsx","webpack://_N_E/./src/useModelViewer.ts","webpack://_N_E/./vendor/fabric/fabric.js","webpack://_N_E/ignored|/Users/exogen/Projects/t2-model-skinner/vendor/fabric|jsdom","webpack://_N_E/ignored|/Users/exogen/Projects/t2-model-skinner/vendor/fabric|jsdom/lib/jsdom/living/generated/utils","webpack://_N_E/ignored|/Users/exogen/Projects/t2-model-skinner/vendor/fabric|jsdom/lib/jsdom/utils","webpack://_N_E/"],"sourcesContent":["\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/\",\n function () {\n return require(\"private-next-pages/index.tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/\"])\n });\n }\n ","import React, { useContext } from \"react\";\nimport { fabric } from \"fabric\";\n\nexport interface CanvasInfo {\n canvas: fabric.Canvas;\n notifyChange: () => void;\n isDrawingMode: boolean;\n setDrawingMode: (isDrawingMode: boolean) => void;\n undo: () => void;\n redo: () => void;\n canUndo: boolean;\n canRedo: boolean;\n}\n\ninterface CanvasContextValue {\n canvases: Record;\n registerCanvas: (canvasId: string, canvasInfo: CanvasInfo) => void;\n unregisterCanvas: (canvasId: string) => void;\n}\n\nconst CanvasContext = React.createContext(null);\nCanvasContext.displayName = \"CanvasContext\";\n\nexport { CanvasContext };\n\nfunction useCanvas(canvasId: string | null): CanvasInfo;\nfunction useCanvas(): CanvasContextValue;\n\nfunction useCanvas(canvasId?: string | null) {\n const context = useContext(CanvasContext);\n if (!context) {\n throw new Error(\"No CanvasContext.Provider\");\n }\n if (typeof canvasId === \"undefined\") {\n return context;\n } else if (canvasId == null) {\n return {};\n } else {\n return context.canvases[canvasId] ?? {};\n }\n}\n\nexport default useCanvas;\n","import React, { useContext } from \"react\";\nimport { fabric } from \"fabric\";\n\ninterface ToolsContextValue {\n activeCanvas: string | null;\n activeCanvasType: string;\n setActiveCanvasType: (canvasType: string) => void;\n selectedObjects: Array;\n brushSize: number;\n setBrushSize: (brushSize: number) => void;\n brushColor: number;\n setBrushColor: (brushColor: number) => void;\n hueRotate: number | null;\n setHueRotate: (hueRotate: number) => void;\n saturation: number | null;\n setSaturation: (saturation: number) => void;\n brightness: number | null;\n setBrightness: (brightness: number) => void;\n layerMode: string;\n setLayerMode: (layerMode: string) => void;\n deleteSelection: () => void;\n undo: () => void;\n redo: () => void;\n canUndo: boolean;\n canRedo: boolean;\n addImages: (imageUrls: string[]) => void;\n duplicate: () => void;\n sendBackward: () => void;\n bringForward: () => void;\n lockSelection: () => void;\n unlockSelection: () => void;\n exportSkin: ({\n name,\n format,\n }: {\n name: string;\n format: string;\n }) => Promise;\n lockedObjects: Set;\n backgroundColor: string;\n setBackgroundColor: (backgroundColor: string) => void;\n selectedMaterialIndex: number;\n setSelectedMaterialIndex: (materialIndex: number) => void;\n selectedFrameIndex: number;\n setSelectedFrameIndex: (\n frameIndex: number | ((frameIndex: number) => number)\n ) => void;\n textureSize: [number, number];\n hasMetallic: boolean;\n hasAnimation: boolean;\n frameCount: number;\n}\n\nconst ToolsContext = React.createContext(null);\nToolsContext.displayName = \"ToolsContext\";\n\nexport { ToolsContext };\n\nexport default function useTools() {\n const context = useContext(ToolsContext);\n if (!context) {\n throw new Error(\"No ToolsContext.Provider\");\n }\n return context;\n}\n","import { InputHTMLAttributes, useEffect, useRef, useState } from \"react\";\nimport useCanvas from \"./useCanvas\";\nimport useTools from \"./useTools\";\nimport { usePopper } from \"react-popper\";\nimport Slider from \"rc-slider\";\nimport { RiFileCopyFill } from \"react-icons/ri\";\nimport { FaTrashAlt, FaLock, FaUnlock } from \"react-icons/fa\";\nimport { GoArrowUp, GoArrowDown } from \"react-icons/go\";\nimport { GiArrowCursor } from \"react-icons/gi\";\nimport { IoMdBrush } from \"react-icons/io\";\nimport { ImPlus, ImUndo2, ImRedo2, ImContrast } from \"react-icons/im\";\n\nexport default function CanvasTools() {\n const nameInputRef = useRef(null);\n const fileInputRef = useRef(null);\n const fileTypeRef = useRef(null);\n const {\n activeCanvas,\n backgroundColor,\n setBackgroundColor,\n selectedObjects,\n lockedObjects,\n lockSelection,\n unlockSelection,\n bringForward,\n sendBackward,\n duplicate,\n deleteSelection,\n undo,\n redo,\n canUndo,\n canRedo,\n brushColor,\n setBrushColor,\n brushSize,\n setBrushSize,\n hueRotate,\n setHueRotate,\n saturation,\n setSaturation,\n brightness,\n setBrightness,\n layerMode,\n setLayerMode,\n activeCanvasType,\n addImages,\n exportSkin,\n } = useTools();\n const { canvas, isDrawingMode, setDrawingMode } = useCanvas(activeCanvas);\n const [isMac, setIsMac] = useState(false);\n const commandKeyPrefix = isMac ? \"⌘\" : \"Ctrl \";\n const shiftKeySymbol = \"⇧\";\n\n // Brush popup\n const [referenceElement, setReferenceElement] = useState(\n null\n );\n const [popperElement, setPopperElement] = useState(null);\n const [arrowElement, setArrowElement] = useState(null);\n const [isBrushToolsOpen, setBrushToolsOpen] = useState(false);\n const [isFilterToolsOpen, setFilterToolsOpen] = useState(false);\n const { styles, attributes } = usePopper(referenceElement, popperElement, {\n modifiers: [\n { name: \"arrow\", options: { element: arrowElement } },\n {\n name: \"offset\",\n options: {\n offset: [0, 10],\n },\n },\n ],\n });\n\n const isSelectionLocked = selectedObjects.length\n ? selectedObjects.every((object) => lockedObjects.has(object))\n : false;\n\n const handleBackgroundColorChange: InputHTMLAttributes[\"onChange\"] =\n (event) => {\n setBackgroundColor(event.target.value);\n };\n\n useEffect(() => {\n if (navigator.platform && navigator.platform.startsWith(\"Mac\")) {\n setIsMac(true);\n } else if (navigator.userAgent.match(/\\(Macintosh;/)) {\n setIsMac(true);\n }\n }, []);\n\n useEffect(() => {\n if (popperElement) {\n popperElement.focus();\n }\n }, [popperElement]);\n\n return (\n \n
\n \n \n \n \n \n \n
\n
\n {activeCanvasType === \"color\" ? (\n <>\n
{\n const imageUrl = await new Promise
(\n (resolve, reject) => {\n const inputFile = event.target.files?.[0];\n if (inputFile) {\n const reader = new FileReader();\n reader.addEventListener(\"load\", (event) => {\n resolve(event.target?.result as string);\n });\n reader.readAsDataURL(inputFile);\n } else {\n reject(new Error(\"No input file provided.\"));\n }\n }\n );\n addImages([imageUrl]);\n }}\n type=\"file\"\n accept=\".png, image/png\"\n hidden\n />\n \n\n \n\n {isFilterToolsOpen ? (\n {\n const newFocusElement = event.relatedTarget;\n const isFocusLeaving =\n !newFocusElement ||\n !event.currentTarget.contains(newFocusElement);\n if (isFocusLeaving) {\n setFilterToolsOpen(false);\n }\n }}\n {...attributes.popper}\n >\n
\n
\n
\n
\n
\n {\n if (Array.isArray(value)) {\n value = value[0];\n }\n setHueRotate(value / 180);\n }}\n trackStyle={{\n height: 8,\n background: \"#03fccf\",\n }}\n handleStyle={{\n width: 20,\n height: 20,\n marginTop: -6,\n borderColor: \"#03fccf\",\n background: \"rgb(5, 69, 76)\",\n // background: `rgb(${brushColor}, ${brushColor}, ${brushColor})`,\n opacity: 1,\n }}\n railStyle={{\n height: 8,\n border: \"1px solid #555\",\n background: \"rgba(255, 255, 255, 0.3)\",\n }}\n />\n
\n
\n\n
\n
\n
\n {\n if (Array.isArray(value)) {\n value = value[0];\n }\n setSaturation(value / 100);\n }}\n trackStyle={{\n height: 8,\n background: \"#03fccf\",\n }}\n handleStyle={{\n width: 20,\n height: 20,\n marginTop: -6,\n borderColor: \"#03fccf\",\n background: \"rgb(5, 69, 76)\",\n // background: `rgb(${brushColor}, ${brushColor}, ${brushColor})`,\n opacity: 1,\n }}\n railStyle={{\n height: 8,\n border: \"1px solid #555\",\n background: \"rgba(255, 255, 255, 0.3)\",\n }}\n />\n
\n
\n\n
\n
\n
\n {\n if (Array.isArray(value)) {\n value = value[0];\n }\n setBrightness(value / 100);\n }}\n trackStyle={{\n height: 8,\n background: \"#03fccf\",\n }}\n handleStyle={{\n width: 20,\n height: 20,\n marginTop: -6,\n borderColor: \"#03fccf\",\n background: \"rgb(5, 69, 76)\",\n // background: `rgb(${brushColor}, ${brushColor}, ${brushColor})`,\n opacity: 1,\n }}\n railStyle={{\n height: 8,\n border: \"1px solid #555\",\n background: \"rgba(255, 255, 255, 0.3)\",\n }}\n />\n
\n
\n
\n\n
\n
\n ) : null}\n \n \n \n \n \n \n \n >\n ) : null}\n\n {activeCanvasType === \"metallic\" ? (\n <>\n \n \n\n {isBrushToolsOpen ? (\n {\n const newFocusElement = event.relatedTarget;\n const isFocusLeaving =\n !newFocusElement ||\n !event.currentTarget.contains(newFocusElement);\n if (isFocusLeaving) {\n setBrushToolsOpen(false);\n }\n }}\n {...attributes.popper}\n >\n
\n
\n
\n
\n {\n if (Array.isArray(value)) {\n value = value[0];\n }\n setBrushColor(value);\n }}\n handleStyle={{\n width: 20,\n height: 20,\n marginTop: -6,\n borderColor: \"rgb(20, 105, 241)\",\n background: `rgb(${brushColor}, ${brushColor}, ${brushColor})`,\n opacity: 1,\n }}\n railStyle={{\n height: 8,\n border: \"1px solid #555\",\n background:\n \"linear-gradient(to right, black 0%, white 100%)\",\n }}\n />\n
\n
\n\n
\n
\n
\n {\n if (Array.isArray(value)) {\n value = value[0];\n }\n setBrushSize(value);\n }}\n handleStyle={{\n width: 20,\n height: 20,\n marginTop: -6,\n borderColor: \"#03fccf\",\n background: \"rgb(5, 69, 76)\",\n // background: `rgb(${brushColor}, ${brushColor}, ${brushColor})`,\n opacity: 1,\n }}\n railStyle={{\n height: 8,\n border: \"1px solid #555\",\n background: \"rgba(255, 255, 255, 0.3)\",\n }}\n />\n
\n
\n
\n\n
\n
\n ) : null}\n >\n ) : null}\n \n
\n \n \n \n
\n
\n );\n}\n","import { FaGithub } from \"react-icons/fa\";\n\nexport default function AppFooter() {\n return (\n \n );\n}\n","import React, { useContext } from \"react\";\n\ntype WarriorContextValue = {\n actualModel: string;\n selectedModel: string;\n setSelectedModel: (selectedModel: string) => void;\n selectedModelType: string;\n selectedAnimation: string | null;\n selectedModelUrl: string;\n setSelectedAnimation: (selectedAnimation: string | null) => void;\n animationPaused: boolean;\n setAnimationPaused: (\n animationPaused: boolean | ((animationPaused: boolean) => boolean)\n ) => void;\n skinImageUrls: Record;\n defaultSkinImageUrls: Record;\n setSkinImageUrls: (\n value:\n | Record\n | ((\n prevSkinImageUrls: Record\n ) => Record)\n ) => void;\n selectedSkinType: string | null;\n setSelectedSkinType: (selectedSkinType: string | null) => void;\n selectedSkin: string | null;\n setSelectedSkin: (selectedSkin: string | null) => void;\n setSelectedModelType: (selectedModelType: string) => void;\n slowModeEnabled: boolean;\n setSlowModeEnabled: (slowModeEnabled: boolean) => void;\n};\n\nconst WarriorContext = React.createContext(null);\nWarriorContext.displayName = \"WarriorContext\";\n\nexport { WarriorContext };\n\nexport default function useWarrior() {\n const context = useContext(WarriorContext);\n if (!context) {\n throw new Error(\"No WarriorContext.Provider\");\n }\n return context;\n}\n","import { fabric } from \"fabric\";\n\nexport function createFabricImage(url: string) {\n return new Promise((resolve) =>\n fabric.Image.fromURL(url, resolve, {\n crossOrigin: \"anonymous\",\n })\n );\n}\n","export default function Worker_fn() {\n return new Worker(__webpack_public_path__ + \"static/chunks/imageProcessing.worker-e73713bf981eb595.worker.js\");\n}\n","import { useEffect, useMemo, useRef } from \"react\";\nimport * as Comlink from \"comlink\";\nimport Worker from \"worker-loader!./imageProcessing.worker\";\nimport type { ImageFunctions } from \"./imageProcessing.worker\";\n\nexport default function useImageWorker() {\n const workerRef = useRef(null);\n const functionsRef = useRef\n > | null>(null);\n\n const value = useMemo(() => {\n const getFunctions = () => {\n return functionsRef.current;\n };\n return {\n async combineColorAndAlphaImageUrls(...args) {\n const functions = await getFunctions();\n return functions?.combineColorAndAlphaImageUrls(...args);\n },\n async removeAlphaFromArrayBuffer(...args) {\n const functions = await getFunctions();\n return functions?.removeAlphaFromArrayBuffer(...args);\n },\n async convertArrayBufferAlphaToGrayscale(...args) {\n const functions = await getFunctions();\n return functions?.convertArrayBufferAlphaToGrayscale(...args);\n },\n async convertGrayscaleImageUrlToMetallicRoughness(...args) {\n const functions = await getFunctions();\n return functions?.convertGrayscaleImageUrlToMetallicRoughness(...args);\n },\n } as ImageFunctions;\n }, []);\n\n useEffect(() => {\n const worker = new Worker();\n const functions = Comlink.wrap(worker);\n\n workerRef.current = worker;\n functionsRef.current = functions;\n\n return () => {\n functions[Comlink.releaseProxy]();\n worker.terminate();\n };\n }, []);\n\n return value;\n}\n","export default function useSettings() {\n return {\n canvasPadding: 64,\n basePath: process.env.NODE_ENV === \"production\" ? \"/t2-model-skinner\" : \"\",\n };\n}\n","import { PNG } from \"pngjs/browser\";\nimport getStream from \"get-stream\";\n\nexport function arrayBufferToBase64(arrayBuffer: ArrayBuffer) {\n let base64 = \"\";\n const encodings =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n const bytes = new Uint8Array(arrayBuffer);\n const byteLength = bytes.byteLength;\n const byteRemainder = byteLength % 3;\n const mainLength = byteLength - byteRemainder;\n\n let a, b, c, d;\n let chunk;\n\n // Main loop deals with bytes in chunks of 3\n for (let i = 0; i < mainLength; i = i + 3) {\n // Combine the three bytes into a single integer\n chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n\n // Use bitmasks to extract 6-bit segments from the triplet\n a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18\n b = (chunk & 258048) >> 12; // 258048 = (2^6 - 1) << 12\n c = (chunk & 4032) >> 6; // 4032 = (2^6 - 1) << 6\n d = chunk & 63; // 63 = 2^6 - 1\n\n // Convert the raw binary segments to the appropriate ASCII encoding\n base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];\n }\n\n // Deal with the remaining bytes and padding\n if (byteRemainder == 1) {\n chunk = bytes[mainLength];\n\n a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2\n\n // Set the 4 least significant bits to zero\n b = (chunk & 3) << 4; // 3 = 2^2 - 1\n\n base64 += encodings[a] + encodings[b] + \"==\";\n } else if (byteRemainder == 2) {\n chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1];\n\n a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10\n b = (chunk & 1008) >> 4; // 1008 = (2^6 - 1) << 4\n\n // Set the 2 least significant bits to zero\n c = (chunk & 15) << 2; // 15 = 2^4 - 1\n\n base64 += encodings[a] + encodings[b] + encodings[c] + \"=\";\n }\n\n return base64;\n}\n\nexport async function rgbaToArrayBuffer(\n rgba: Uint8Array,\n {\n width,\n height,\n }: {\n width: number;\n height: number;\n }\n) {\n const png = new PNG({\n width,\n height,\n inputHasAlpha: true,\n });\n png.data = rgba;\n png.pack();\n const arrayBuffer = await getStream.buffer(png);\n return arrayBuffer;\n}\n\nexport function arrayBufferToImageUrl(arrayBuffer: ArrayBuffer) {\n const base64 = arrayBufferToBase64(arrayBuffer);\n return `data:image/png;base64,${base64}`;\n}\n\nexport async function imageUrlToArrayBuffer(url: string) {\n const response = await fetch(url);\n if (response.ok) {\n const arrayBuffer = await response.arrayBuffer();\n return arrayBuffer;\n } else {\n throw new Error(`Failed to load image URL: ${url}`);\n }\n}\n\nexport async function arrayBufferToRgba(arrayBuffer: ArrayBuffer) {\n const png = await new Promise((resolve, reject) =>\n new PNG().parse(arrayBuffer, (err, data) => {\n if (err) {\n reject(err);\n } else {\n resolve(data);\n }\n })\n );\n return { rgba: png.data, width: png.width, height: png.height };\n}\n\nexport async function setGrayscaleFromAlpha(rgba: Uint8Array) {\n const length = rgba.length;\n for (let i = 0; i < length; i += 4) {\n const alpha = rgba[i + 3];\n rgba[i] = alpha;\n rgba[i + 1] = alpha;\n rgba[i + 2] = alpha;\n rgba[i + 3] = 255;\n }\n}\n\nexport async function setAlphaFromGrayscale(\n rgba: Uint8Array,\n grayscaleRgba: Uint8Array\n) {\n const length = rgba.length;\n // Modify image to map white pixels on the metallic canvas\n // to the alpha channel.\n for (let i = 0; i < length; i += 4) {\n rgba[i + 3] = Math.max(1, grayscaleRgba[i]);\n }\n}\n\nexport async function setAlphaToMax(rgba: Uint8Array) {\n const length = rgba.length;\n for (let i = 0; i < length; i += 4) {\n rgba[i + 3] = 255;\n }\n}\n\nexport function setMetallicFromGrayscale(rgba: Uint8Array) {\n const length = rgba.length;\n for (let i = 0; i < length; i += 4) {\n const grayscale = rgba[i];\n // Red meanings nothing, set to 0.\n rgba[i] = 0;\n // Green maps to roughness. We want more metallic to be less rough.\n rgba[i + 1] = grayscale > 0 ? 255 - Math.min(grayscale * 2 + 64, 255) : 255;\n // Blue and alpha values should already be correct.\n rgba[i + 2] = grayscale ? Math.min(grayscale * 1 + 64, 255) : 0;\n }\n}\n\nexport async function imageUrlToRgba(imageUrl: string) {\n const arrayBuffer = await imageUrlToArrayBuffer(imageUrl);\n const { rgba, width, height } = await arrayBufferToRgba(arrayBuffer);\n return { rgba, width, height };\n}\n\ntype ImageSize = {\n width: number;\n height: number;\n};\n\nexport async function rgbaToImageUrl(\n rgba: Uint8Array,\n { width, height }: ImageSize\n) {\n const arrayBuffer = await rgbaToArrayBuffer(rgba, {\n width,\n height,\n });\n const imageUrl = arrayBufferToImageUrl(arrayBuffer);\n return imageUrl;\n}\n\nexport async function combineColorAndAlphaImageUrls({\n colorImageUrl,\n metallicImageUrl,\n}: {\n colorImageUrl: string;\n metallicImageUrl: string;\n}) {\n const [{ rgba, width, height }, { rgba: metallicRgba }] = await Promise.all([\n imageUrlToRgba(colorImageUrl),\n imageUrlToRgba(metallicImageUrl),\n ]);\n setAlphaFromGrayscale(rgba, metallicRgba);\n const outputImageUrl = await rgbaToImageUrl(rgba, { width, height });\n return outputImageUrl;\n}\n\nexport async function removeAlphaFromArrayBuffer(arrayBuffer: ArrayBuffer) {\n const { rgba, width, height } = await arrayBufferToRgba(arrayBuffer);\n setAlphaToMax(rgba);\n const outputImageUrl = await rgbaToImageUrl(rgba, { width, height });\n return outputImageUrl;\n}\n\nexport async function convertArrayBufferAlphaToGrayscale(\n arrayBuffer: ArrayBuffer\n) {\n const { rgba, width, height } = await arrayBufferToRgba(arrayBuffer);\n setGrayscaleFromAlpha(rgba);\n const outputImageUrl = await rgbaToImageUrl(rgba, { width, height });\n return outputImageUrl;\n}\n\nexport async function convertGrayscaleImageUrlToMetallicRoughness(\n imageUrl: string\n) {\n const { rgba, width, height } = await imageUrlToRgba(imageUrl);\n setMetallicFromGrayscale(rgba);\n const outputImageUrl = await rgbaToImageUrl(rgba, { width, height });\n return outputImageUrl;\n}\n","import { ReactNode, useCallback, useEffect, useMemo, useState } from \"react\";\nimport getConfig from \"next/config\";\nimport { fabric } from \"fabric\";\nimport { ToolsContext } from \"./useTools\";\nimport useCanvas from \"./useCanvas\";\nimport useWarrior from \"./useWarrior\";\nimport { createFabricImage } from \"./fabricUtils\";\nimport useImageWorker from \"./useImageWorker\";\nimport { MaterialDefinition } from \"./Material\";\nimport useSettings from \"./useSettings\";\nimport { imageUrlToArrayBuffer } from \"./imageUtils\";\n\nconst { publicRuntimeConfig } = getConfig();\n\nconst { materials } = publicRuntimeConfig;\n\nfunction lockObject(object: fabric.Object) {\n object.lockMovementX = true;\n object.lockMovementY = true;\n object.lockScalingX = true;\n object.lockScalingY = true;\n object.lockRotation = true;\n}\n\nfunction unlockObject(object: fabric.Object) {\n object.lockMovementX = false;\n object.lockMovementY = false;\n object.lockScalingX = false;\n object.lockScalingY = false;\n object.lockRotation = false;\n}\n\nfunction isActiveSelection(\n object: fabric.Object\n): object is fabric.ActiveSelection {\n return object.type === \"activeSelection\";\n}\n\ntype ObjectFilters = {\n HueRotation?: number;\n Saturation?: number;\n Brightness?: number;\n};\n\nexport default function ToolsProvider({ children }: { children: ReactNode }) {\n const { actualModel, selectedModelType } = useWarrior();\n const [selectedMaterialIndex, setSelectedMaterialIndex] = useState(0);\n const [selectedFrameIndex, setSelectedFrameIndex] = useState(0);\n const materialDefs = materials[actualModel];\n const materialDef = materialDefs[selectedMaterialIndex] ?? null;\n\n const frameCount = materialDef.frameCount ?? 1;\n const hasAnimation = frameCount > 1;\n\n const textureSize = useMemo(\n () => materialDef.size ?? [512, 512],\n [materialDef]\n );\n\n const hasMetallic = !(\n materialDef.metallicFactor === 0 && materialDef.roughnessFactor === 1\n );\n\n const [activeCanvasType, setActiveCanvasType] = useState(\"color\");\n\n if (!hasMetallic && activeCanvasType === \"metallic\") {\n setActiveCanvasType(\"color\");\n }\n\n if (selectedFrameIndex >= frameCount) {\n setSelectedFrameIndex(0);\n }\n\n useEffect(() => {\n setSelectedFrameIndex(0);\n }, [materialDef]);\n\n const [backgroundColor, setBackgroundColor] = useState(\"magenta\");\n const [lockedObjects, setLockedObjects] = useState(\n () => new Set()\n );\n const [brushColor, setBrushColor] = useState(200);\n const [brushSize, setBrushSize] = useState(10);\n const [filterMap, setFilterMap] = useState(\n () => new Map()\n );\n const [selectedObjects, setSelectedObjects] = useState(\n () => []\n );\n\n const activeCanvas = materialDef\n ? `${materialDef.name}:${activeCanvasType}:${selectedFrameIndex}`\n : null;\n const metallicCanvasId = materialDef\n ? `${materialDef.name}:metallic:${selectedFrameIndex}`\n : null;\n const { canvases } = useCanvas();\n const { canvas, notifyChange, undo, redo, canUndo, canRedo } =\n useCanvas(activeCanvas);\n const { canvas: metallicCanvas } = useCanvas(metallicCanvasId);\n const [isDrawingMode, setDrawingMode] = useState(false);\n const { combineColorAndAlphaImageUrls } = useImageWorker();\n const { canvasPadding } = useSettings();\n const [filterChanges, setFilterChanges] = useState<\n Array<[fabric.Object, ObjectFilters]>\n >(() => []);\n const [layerMode, setLayerMode] = useState(\"BaseLayer\");\n\n if (selectedObjects.length) {\n if (layerMode !== \"SelectedLayer\") {\n setLayerMode(\"SelectedLayer\");\n }\n } else {\n if (layerMode === \"SelectedLayer\") {\n setLayerMode(\"BaseLayer\");\n }\n }\n\n const getFilter = (name: keyof ObjectFilters) => {\n let applyObjects = selectedObjects;\n if (layerMode === \"AllLayers\") {\n applyObjects = canvas?._objects ?? [];\n } else if (layerMode === \"BaseLayer\") {\n applyObjects = canvas?._objects.slice(0, 1) ?? [];\n }\n if (applyObjects.length) {\n const getValue = (i: number) =>\n (filterMap.get(applyObjects[i]) ?? {})[name] ?? 0;\n const firstValue = getValue(0);\n if (\n applyObjects\n .slice(1)\n .every((applyObject, i) => getValue(i + 1) === firstValue)\n ) {\n return firstValue;\n }\n return null;\n } else {\n return 0;\n }\n };\n\n const hueRotate = getFilter(\"HueRotation\");\n const saturation = getFilter(\"Saturation\");\n const brightness = getFilter(\"Brightness\");\n\n const setFilter = useCallback(\n (name: keyof ObjectFilters, value: number) => {\n const filterChanges: Array<[fabric.Object, ObjectFilters]> = [];\n const newFilterMap = new Map(filterMap);\n let applyObjects = selectedObjects;\n if (layerMode === \"AllLayers\") {\n applyObjects = canvas?._objects ?? [];\n } else if (layerMode === \"BaseLayer\") {\n applyObjects = canvas?._objects.slice(0, 1) ?? [];\n }\n for (const applyObject of applyObjects) {\n const existingFilters = filterMap.get(applyObject) ?? {};\n const newFilters = { ...existingFilters, [name]: value };\n newFilterMap.set(applyObject, newFilters);\n filterChanges.push([applyObject, newFilters]);\n }\n setFilterMap(newFilterMap);\n setFilterChanges(filterChanges);\n },\n [canvas, layerMode, filterMap, selectedObjects]\n );\n\n const setHueRotate = useCallback(\n (value: number) => setFilter(\"HueRotation\", value),\n [setFilter]\n );\n\n const setSaturation = useCallback(\n (value: number) => setFilter(\"Saturation\", value),\n [setFilter]\n );\n\n const setBrightness = useCallback(\n (value: number) => setFilter(\"Brightness\", value),\n [setFilter]\n );\n\n useEffect(() => {\n if (!filterChanges.length) {\n return;\n }\n for (const [selectedObject, newFilters] of filterChanges) {\n if (selectedObject instanceof fabric.Image) {\n selectedObject.filters = [];\n for (const key in newFilters) {\n const filterValue = newFilters[key as keyof ObjectFilters] ?? 0;\n if (filterValue !== 0) {\n switch (key) {\n case \"HueRotation\":\n selectedObject.filters.push(\n // @ts-expect-error @types/fabric does not include HueRotation.\n new fabric.Image.filters.HueRotation({\n rotation: filterValue,\n })\n );\n break;\n case \"Saturation\":\n selectedObject.filters.push(\n new fabric.Image.filters.Saturation({\n saturation: filterValue,\n })\n );\n break;\n case \"Brightness\":\n selectedObject.filters.push(\n new fabric.Image.filters.Brightness({\n brightness: filterValue,\n })\n );\n break;\n }\n }\n }\n selectedObject.applyFilters();\n }\n }\n setFilterChanges([]);\n if (notifyChange) {\n notifyChange();\n }\n }, [filterChanges, notifyChange]);\n\n const lockSelection = useCallback(() => {\n if (selectedObjects.length) {\n setLockedObjects((lockedObjects) => {\n const newLockedObjects = new Set(lockedObjects);\n for (const selectedObject of selectedObjects) {\n newLockedObjects.add(selectedObject);\n lockObject(selectedObject);\n }\n return newLockedObjects;\n });\n }\n }, [selectedObjects]);\n\n const unlockSelection = useCallback(() => {\n if (selectedObjects.length) {\n setLockedObjects((lockedObjects) => {\n const newLockedObjects = new Set(lockedObjects);\n for (const selectedObject of selectedObjects) {\n newLockedObjects.delete(selectedObject);\n unlockObject(selectedObject);\n }\n return newLockedObjects;\n });\n }\n }, [selectedObjects]);\n\n const bringForward = useCallback(async () => {\n const object = canvas.getActiveObject();\n if (object) {\n canvas.bringForward(object, true);\n notifyChange();\n }\n }, [canvas, notifyChange]);\n\n const sendBackward = useCallback(async () => {\n const object = canvas.getActiveObject();\n if (object) {\n // Don't allow below base skin.\n if (canvas._objects[0] === object || canvas._objects[1] === object) {\n return;\n }\n canvas.sendBackwards(object, true);\n notifyChange();\n }\n }, [canvas, notifyChange]);\n\n const addImages = useCallback(\n async (imageUrls: string[]) => {\n let lastAddedImage;\n for (const imageUrl of imageUrls) {\n const image = await createFabricImage(imageUrl);\n if (!image.width || !image.height) {\n throw new Error(\"Zero-height image\");\n }\n const widthRatio = image.width / textureSize[0];\n const heightRatio = image.height / textureSize[1];\n if (widthRatio > 1 || heightRatio > 1) {\n let scale;\n if (widthRatio > heightRatio) {\n scale = 1 / widthRatio;\n } else {\n scale = 1 / heightRatio;\n }\n image.scaleX = scale;\n image.scaleY = scale;\n }\n if (activeCanvasType === \"metallic\") {\n if (!image.filters) {\n image.filters = [];\n }\n const grayscaleFilter = new fabric.Image.filters.Grayscale();\n image.filters.push(grayscaleFilter);\n image.applyFilters();\n }\n setDrawingMode(false);\n canvas.centerObject(image);\n canvas.add(image);\n lastAddedImage = image;\n }\n if (lastAddedImage) {\n canvas.setActiveObject(lastAddedImage);\n }\n },\n [canvas, activeCanvasType, textureSize]\n );\n\n const duplicate = useCallback(async () => {\n const object = canvas.getActiveObject();\n if (object) {\n const copy = await new Promise((resolve) =>\n object.clone(resolve)\n );\n copy.set({\n top: (copy.top ?? 0) + 20,\n left: (copy.left ?? 0) + 20,\n evented: true,\n });\n\n if (isActiveSelection(copy)) {\n copy.canvas = canvas;\n copy.forEachObject((object) => {\n canvas.add(object);\n });\n copy.setCoords();\n }\n\n canvas.discardActiveObject();\n canvas.add(copy);\n canvas.setActiveObject(copy);\n }\n }, [canvas]);\n\n const deleteSelection = useCallback(async () => {\n const objects = canvas.getActiveObjects();\n canvas.discardActiveObject();\n canvas.remove(...objects);\n canvas.requestRenderAll();\n // forceUpdateRef.current();\n }, [canvas]);\n\n const exportSkin = useCallback(\n async ({ format, name = \"\" }: { format: string; name: string }) => {\n const { savePngFile, saveZipFile, createZipFile } = await import(\n \"./exportUtils\"\n );\n\n name = name.trim() || \"MyCustomSkin\";\n\n const materialExports = await Promise.all(\n materialDefs\n .filter(\n (materialDef: MaterialDefinition) =>\n materialDef &&\n !materialDef.hidden &&\n materialDef.selectable !== false\n )\n .map((materialDef: MaterialDefinition) => {\n const frameCount = materialDef.frameCount ?? 1;\n const frames = new Array(frameCount).fill(null);\n return frames.map(async (_, frameIndex) => {\n const colorCanvas =\n canvases[`${materialDef.name}:color:${frameIndex}`]?.canvas;\n const metallicCanvas =\n canvases[`${materialDef.name}:metallic:${frameIndex}`]?.canvas;\n\n const textureSize = materialDef.size ?? [512, 512];\n let outputImageUrl;\n\n const colorImageUrl = colorCanvas.toDataURL({\n top: canvasPadding,\n left: canvasPadding,\n width: textureSize[0],\n height: textureSize[1],\n });\n\n if (metallicCanvas) {\n const metallicImageUrl = metallicCanvas.toDataURL({\n top: canvasPadding,\n left: canvasPadding,\n width: textureSize[0],\n height: textureSize[1],\n });\n outputImageUrl = await combineColorAndAlphaImageUrls({\n colorImageUrl,\n metallicImageUrl,\n });\n } else {\n outputImageUrl = colorImageUrl;\n }\n\n let filename;\n switch (selectedModelType) {\n case \"player\":\n filename = `${name}.${actualModel}.png`;\n break;\n case \"weapon\":\n case \"vehicle\":\n if (materialDef) {\n const frameZeroFile = materialDef.file ?? materialDef.name;\n if (frameCount > 1) {\n const match = frameZeroFile.match(/^(.+)(\\d\\d)$/);\n if (match) {\n const baseName = match[1];\n filename = `${baseName}${frameIndex\n .toString()\n .padStart(2, \"0\")}.png`;\n } else {\n throw new Error(\"Unexpected animation filename\");\n }\n } else {\n filename = `${frameZeroFile}.png`;\n }\n } else if (selectedModelType === \"weapon\") {\n filename = `weapon_${actualModel}.png`;\n } else {\n filename = `${actualModel}.png`;\n }\n }\n\n return { imageUrl: outputImageUrl, filename };\n });\n })\n .flat()\n );\n\n switch (format) {\n case \"png\": {\n const { imageUrl, filename } = materialExports[selectedMaterialIndex];\n savePngFile(imageUrl, filename);\n break;\n }\n case \"vl2\": {\n const files = await Promise.all(\n materialExports.map(async (materialExport) => ({\n data: await imageUrlToArrayBuffer(materialExport.imageUrl),\n name: materialExport.filename,\n }))\n );\n const zip = createZipFile(files);\n const camelCaseName = actualModel.replace(\n /(?:^([a-z])|_([a-z]))/g,\n (match, a, b) => (a || b).toUpperCase()\n );\n let zipFileName = \"\";\n switch (selectedModelType) {\n case \"player\":\n zipFileName = `zPlayerSkin-${name}.vl2`;\n break;\n case \"weapon\":\n zipFileName = `zWeapon${camelCaseName}-${name}.vl2`;\n break;\n case \"vehicle\":\n zipFileName = `z${camelCaseName}-${name}.vl2`;\n break;\n }\n await saveZipFile(zip, zipFileName);\n }\n }\n return;\n },\n [\n actualModel,\n canvasPadding,\n canvases,\n combineColorAndAlphaImageUrls,\n materialDefs,\n selectedMaterialIndex,\n selectedModelType,\n ]\n );\n\n const context = useMemo(\n () => ({\n activeCanvas,\n activeCanvasType,\n setActiveCanvasType,\n backgroundColor,\n setBackgroundColor,\n lockedObjects,\n setLockedObjects,\n brushColor,\n setBrushColor,\n brushSize,\n setBrushSize,\n hueRotate,\n setHueRotate,\n saturation,\n setSaturation,\n brightness,\n setBrightness,\n layerMode,\n setLayerMode,\n selectedObjects,\n lockSelection,\n unlockSelection,\n bringForward,\n sendBackward,\n addImages,\n duplicate,\n deleteSelection,\n undo,\n redo,\n canUndo,\n canRedo,\n exportSkin,\n isDrawingMode,\n setDrawingMode,\n selectedMaterialIndex,\n setSelectedMaterialIndex,\n textureSize,\n hasMetallic,\n selectedFrameIndex,\n setSelectedFrameIndex,\n hasAnimation,\n frameCount,\n }),\n [\n activeCanvas,\n activeCanvasType,\n backgroundColor,\n lockedObjects,\n brushColor,\n brushSize,\n hueRotate,\n saturation,\n brightness,\n layerMode,\n setHueRotate,\n setSaturation,\n setBrightness,\n selectedObjects,\n lockSelection,\n unlockSelection,\n bringForward,\n sendBackward,\n addImages,\n duplicate,\n deleteSelection,\n undo,\n redo,\n canUndo,\n canRedo,\n exportSkin,\n isDrawingMode,\n selectedMaterialIndex,\n textureSize,\n hasMetallic,\n selectedFrameIndex,\n hasAnimation,\n frameCount,\n ]\n );\n\n useEffect(() => {\n if (canvas) {\n const handleSelectionUpdated = () => {\n setSelectedObjects(canvas.getActiveObjects());\n };\n canvas.on(\"selection:cleared\", handleSelectionUpdated);\n canvas.on(\"selection:updated\", handleSelectionUpdated);\n canvas.on(\"selection:created\", handleSelectionUpdated);\n\n handleSelectionUpdated();\n\n return () => {\n canvas.off(\"selection:cleared\", handleSelectionUpdated);\n canvas.off(\"selection:updated\", handleSelectionUpdated);\n canvas.off(\"selection:created\", handleSelectionUpdated);\n };\n }\n }, [canvas]);\n\n useEffect(() => {\n if (metallicCanvas) {\n metallicCanvas.freeDrawingBrush.width = brushSize;\n }\n }, [metallicCanvas, brushSize]);\n\n useEffect(() => {\n if (metallicCanvas) {\n metallicCanvas.freeDrawingBrush.color = `rgb(${brushColor}, ${brushColor}, ${brushColor})`;\n }\n }, [metallicCanvas, brushColor]);\n\n return (\n {children}\n );\n}\n","import useTools from \"./useTools\";\nimport useSettings from \"./useSettings\";\n\nexport default function CanvasBackdrop() {\n const { backgroundColor, textureSize } = useTools();\n const { canvasPadding } = useSettings();\n\n return textureSize ? (\n \n ) : null;\n}\n","import { ReactNode, useCallback, useMemo, useState } from \"react\";\nimport { CanvasContext, CanvasInfo } from \"./useCanvas\";\n\nexport default function CanvasProvider({ children }: { children: ReactNode }) {\n const [canvases, setCanvases] = useState>({});\n\n const registerCanvas = useCallback(\n (canvasId: string, canvasInfo: CanvasInfo) => {\n setCanvases((canvases) => {\n return { ...canvases, [canvasId]: canvasInfo };\n });\n },\n []\n );\n\n const unregisterCanvas = useCallback((canvasId: string) => {\n setCanvases((canvases) => {\n const { [canvasId]: canvas, ...rest } = canvases;\n return rest;\n });\n }, []);\n\n const context = useMemo(() => {\n return {\n canvases,\n registerCanvas,\n unregisterCanvas,\n };\n }, [canvases, registerCanvas, unregisterCanvas]);\n\n return (\n {children}\n );\n}\n","import { ReactNode, useRef } from \"react\";\nimport useCanvas from \"./useCanvas\";\nimport useTools from \"./useTools\";\n\nexport default function CanvasInteractions({\n children,\n}: {\n children: ReactNode;\n}) {\n const ref = useRef(null);\n const {\n activeCanvas,\n bringForward,\n sendBackward,\n duplicate,\n deleteSelection,\n addImages,\n undo,\n redo,\n } = useTools();\n const { canvas, notifyChange, setDrawingMode } = useCanvas(activeCanvas);\n\n const nudge = async ({ top = 0, left = 0 } = {}) => {\n const objects = canvas.getActiveObjects();\n for (const object of objects) {\n object.top = (object.top ?? 0) + top;\n object.left = (object.left ?? 0) + left;\n }\n notifyChange();\n };\n\n return (\n {\n event.preventDefault();\n if (ref.current) {\n ref.current.focus();\n }\n const { items } = event.dataTransfer;\n const images = Array.from(items).filter(\n (item) => item.kind === \"file\" && item.type.match(/^image\\//)\n );\n const imageUrls = await Promise.all(\n images\n .map(async (droppedImageFile) => {\n const file = droppedImageFile.getAsFile();\n if (!file) {\n throw new Error(\"Not a file.\");\n }\n const reader = new FileReader();\n const imageUrl = await new Promise((resolve, reject) => {\n reader.onload = async (event) => {\n if (event.target && typeof event.target.result === \"string\") {\n resolve(event.target.result);\n } else {\n reject(new Error(\"Failed to load image data.\"));\n }\n };\n reader.readAsDataURL(file);\n });\n return imageUrl;\n })\n .filter(Boolean)\n );\n\n await addImages(imageUrls);\n }}\n onKeyDown={async (event) => {\n const target = event.target as HTMLElement;\n if (target.nodeName === \"INPUT\" || target.nodeName === \"TEXTAREA\") {\n return;\n }\n if (event.ctrlKey || event.metaKey) {\n switch (event.key) {\n case \"z\":\n if (event.altKey) {\n return;\n } else if (event.shiftKey) {\n event.preventDefault();\n redo();\n return;\n } else {\n event.preventDefault();\n undo();\n return;\n }\n case \"y\":\n if (event.altKey || event.shiftKey) {\n return;\n } else {\n event.preventDefault();\n redo();\n return;\n }\n }\n }\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n switch (event.key) {\n case \"Backspace\":\n case \"Delete\": {\n event.preventDefault();\n await deleteSelection();\n break;\n }\n case \"ArrowLeft\": {\n event.preventDefault();\n await nudge({ left: -1 });\n break;\n }\n case \"ArrowRight\": {\n event.preventDefault();\n await nudge({ left: 1 });\n break;\n }\n case \"ArrowUp\": {\n event.preventDefault();\n await nudge({ top: -1 });\n break;\n }\n case \"ArrowDown\": {\n event.preventDefault();\n await nudge({ top: 1 });\n break;\n }\n case \"d\": {\n event.preventDefault();\n await duplicate();\n break;\n }\n case \"f\": {\n event.preventDefault();\n await bringForward();\n break;\n }\n case \"b\": {\n event.preventDefault();\n await sendBackward();\n break;\n }\n case \"p\": {\n if (activeCanvas === \"metallic\") {\n event.preventDefault();\n setDrawingMode(true);\n }\n break;\n }\n case \"s\":\n if (activeCanvas === \"color\") {\n event.preventDefault();\n setDrawingMode(false);\n }\n break;\n }\n }}\n >\n {children}\n
\n );\n}\n","import { FaChevronLeft, FaChevronRight } from \"react-icons/fa\";\nimport useTools from \"./useTools\";\n\nexport default function CanvasToggle() {\n const {\n activeCanvasType,\n setActiveCanvasType,\n hasMetallic,\n hasAnimation,\n frameCount,\n selectedFrameIndex,\n setSelectedFrameIndex,\n } = useTools();\n\n return (\n <>\n \n \n {hasMetallic ? (\n \n ) : null}\n
\n {hasAnimation ? (\n \n \n \n {selectedFrameIndex + 1} / {frameCount}\n \n \n
\n ) : null}\n >\n );\n}\n","import JSZip from \"jszip\";\n\nexport async function readZipFile(inputFile: File) {\n const content = await JSZip.loadAsync(inputFile);\n const skins = await Promise.all(\n Object.entries(content.files).map(async ([path, file]) => {\n const match = /([^/]+)\\.([lmh](?:male|female|bioderm))\\.png$/g.exec(path);\n if (match) {\n const base64string = await file.async(\"base64\");\n return {\n name: match[1],\n model: match[2],\n imageUrl: `data:image/png;base64,${base64string}`,\n };\n }\n })\n );\n return skins.filter(Boolean);\n}\n\nexport function detectFileType(file: File) {\n if (file.name.match(/\\.png$/i)) {\n return \"png\";\n } else if (file.name.match(/\\.zip$/i)) {\n return \"zip\";\n } else if (file.name.match(/\\.vl2$/i)) {\n return \"vl2\";\n }\n}\n\nexport function nameToMaterial(filename: string) {}\n","import getConfig from \"next/config\";\nimport useWarrior from \"./useWarrior\";\nimport { AiTwotoneFolderOpen } from \"react-icons/ai\";\nimport { useEffect, useRef, useState } from \"react\";\nimport useTools from \"./useTools\";\nimport { detectFileType } from \"./importUtils\";\n\nconst { publicRuntimeConfig } = getConfig();\nconst { defaultSkins, modelDefaults, materials } = publicRuntimeConfig;\n\nconst baseManifestPath = `https://exogen.github.io/t2-skins`;\nconst defaultCustomSkins = {};\n\nexport default function WarriorSelector() {\n const {\n selectedModel,\n setSelectedModel,\n selectedModelType,\n setSelectedModelType,\n selectedSkin,\n setSelectedSkin,\n setSelectedSkinType,\n actualModel,\n setSelectedAnimation,\n setSkinImageUrls,\n setAnimationPaused,\n } = useWarrior();\n const { selectedMaterialIndex, setSelectedMaterialIndex } = useTools();\n const materialDefs = materials[actualModel];\n const materialDef = materialDefs[selectedMaterialIndex];\n const [customSkins, setCustomSkins] =\n useState>(defaultCustomSkins);\n const [newSkins, setNewSkins] =\n useState>(defaultCustomSkins);\n const [selectedSkinSection, setSelectedSkinSection] = useState(\n null\n );\n const fileInputRef = useRef(null);\n\n useEffect(() => {\n const controller = new AbortController();\n const signal = controller.signal;\n let ignore = false;\n\n const loadCustomSkins = async () => {\n let res;\n try {\n res = await fetch(`${baseManifestPath}/skins.json`, { signal });\n } catch (err) {\n return;\n }\n if (!ignore) {\n const json = await res.json();\n if (!ignore) {\n setCustomSkins(json.customSkins ?? {});\n setNewSkins(json.newSkins ?? {});\n }\n }\n };\n\n loadCustomSkins();\n\n return () => {\n ignore = true;\n controller.abort();\n };\n }, []);\n\n let skinSelectValue = selectedSkin ?? \"\";\n if (selectedSkin && selectedSkinSection) {\n skinSelectValue = `${selectedSkinSection}/${selectedSkin}`;\n }\n\n return (\n \n
\n \n \n
\n
\n
\n
\n
\n
\n
{\n const imageUrl = await new Promise
((resolve, reject) => {\n const inputFile = event.target.files?.[0];\n if (inputFile) {\n const fileType = detectFileType(inputFile);\n switch (fileType) {\n case \"png\": {\n const reader = new FileReader();\n reader.addEventListener(\"load\", (event) => {\n resolve(event.target?.result as string);\n });\n reader.readAsDataURL(inputFile);\n break;\n }\n // case \"zip\":\n // case \"vl2\": {\n // const skins = await readZipFile(inputFile);\n // if (skins.length) {\n // resolve(skins[0].imageUrl);\n // }\n // }\n }\n } else {\n reject(new Error(\"No input file provided.\"));\n }\n });\n setSelectedSkin(null);\n setSelectedSkinSection(null);\n setSkinImageUrls({\n [materialDef.file ?? materialDef.name]: [imageUrl],\n });\n }}\n type=\"file\"\n // accept=\".png, image/png, .vl2, .zip, application/zip, application/zip-compressed\"\n accept=\".png, image/png\"\n hidden\n />\n \n
\n
\n );\n}\n","import { ReactNode, useEffect, useMemo, useState } from \"react\";\nimport getConfig from \"next/config\";\nimport useSettings from \"./useSettings\";\nimport { WarriorContext } from \"./useWarrior\";\nimport type { MaterialDefinition } from \"./Material\";\n\nconst { publicRuntimeConfig } = getConfig();\nconst { materials, modelDefaults } = publicRuntimeConfig;\nconst baseSkinPath = `https://exogen.github.io/t2-skins/skins`;\n\nfunction getFrameNames(frameZeroFile: string, frameCount: number) {\n if (frameCount < 2) {\n return [frameZeroFile];\n }\n const match = frameZeroFile.match(/^(.+)(\\d\\d)$/);\n if (match) {\n const baseName = match[1];\n const frames = new Array(frameCount).fill(null);\n return frames.map((_, i) => `${baseName}${i.toString().padStart(2, \"0\")}`);\n } else {\n throw new Error(\"Did not match expected frame format\");\n }\n}\n\nexport function getSkinImageUrls({\n basePath,\n actualModel,\n selectedModelType,\n selectedSkin,\n selectedSkinType,\n}: {\n basePath: string;\n actualModel: string;\n selectedModelType: string;\n selectedSkin: string | null;\n selectedSkinType: string | null;\n}): Record {\n const materialDefs = materials[actualModel];\n switch (selectedModelType) {\n case \"player\":\n switch (selectedSkinType) {\n case \"default\":\n return {\n base: [`${basePath}/textures/${selectedSkin}.${actualModel}.png`],\n };\n case \"custom\":\n return {\n base: [`${baseSkinPath}/${selectedSkin}.${actualModel}.png`],\n };\n }\n break;\n case \"weapon\":\n case \"vehicle\":\n return materialDefs.reduce(\n (\n skinImageUrls: Record,\n materialDef: MaterialDefinition\n ) => {\n if (materialDef) {\n const frameCount = materialDef.frameCount ?? 1;\n switch (selectedSkinType) {\n case \"default\":\n if (materialDef.hasDefault !== false) {\n skinImageUrls[materialDef.file ?? materialDef.name] =\n getFrameNames(\n materialDef.file ?? materialDef.name,\n frameCount\n ).map((name) => `${basePath}/textures/${name}.png`);\n }\n break;\n case \"custom\":\n skinImageUrls[materialDef.file ?? materialDef.name] =\n getFrameNames(\n materialDef.file ?? materialDef.name,\n frameCount\n ).map(\n (name) => `${baseSkinPath}/${selectedSkin}/${name}.png`\n );\n break;\n }\n }\n return skinImageUrls;\n },\n {}\n );\n }\n return {};\n}\n\nfunction getModelUrl(\n basePath: string,\n actualModel: string,\n selectedAnimation: string | null\n) {\n switch (actualModel) {\n default:\n return `${basePath}/${actualModel}${\n selectedAnimation ? \".anim\" : \"\"\n }.glb`;\n }\n}\n\n// const queryParamSeparator = \".\";\n\n// function parseQuerySelection(searchParams: URLSearchParams) {\n// const modelWithTypeFromUrl = searchParams.get(\"m\");\n// const skinWithTypeFromUrl = searchParams.get(\"s\");\n// let selectedModel;\n// let selectedModelType;\n// if (typeof modelWithTypeFromUrl === \"string\") {\n// [selectedModelType, selectedModel] =\n// modelWithTypeFromUrl.split(queryParamSeparator);\n// }\n// let selectedSkin;\n// let selectedSkinType;\n// if (typeof skinWithTypeFromUrl === \"string\") {\n// [selectedSkinType, selectedSkin] =\n// skinWithTypeFromUrl.split(queryParamSeparator);\n// }\n// return {\n// selectedModel: selectedModel || null,\n// selectedModelType: selectedModelType || null,\n// selectedSkin: selectedSkin || null,\n// selectedSkinType: selectedSkinType || null,\n// };\n// }\n\nexport default function WarriorProvider({ children }: { children: ReactNode }) {\n const [selectedModel, setSelectedModel] = useState(\"lmale\");\n const [selectedModelType, setSelectedModelType] = useState(\"player\");\n const [selectedSkin, setSelectedSkin] = useState(\n \"Blood Eagle\"\n );\n const [selectedSkinType, setSelectedSkinType] = useState(\n \"default\"\n );\n const [selectedAnimation, setSelectedAnimation] = useState(\n null\n );\n const [animationPaused, setAnimationPaused] = useState(false);\n const [slowModeEnabled, setSlowModeEnabled] = useState(false);\n const { basePath } = useSettings();\n const actualModel = selectedModel === \"hfemale\" ? \"hmale\" : selectedModel;\n const selectedModelUrl = getModelUrl(\n basePath,\n actualModel,\n selectedAnimation\n );\n\n const [skinImageUrls, setSkinImageUrls] = useState>(\n () =>\n getSkinImageUrls({\n basePath,\n actualModel,\n selectedModelType,\n selectedSkin,\n selectedSkinType,\n })\n );\n\n const defaultSkinImageUrls = useMemo(\n () =>\n getSkinImageUrls({\n basePath,\n actualModel,\n selectedModelType,\n selectedSkin: modelDefaults[actualModel],\n selectedSkinType: \"default\",\n }),\n [actualModel, basePath, selectedModelType]\n );\n\n const context = useMemo(() => {\n return {\n selectedModel,\n setSelectedModel,\n selectedModelType,\n setSelectedModelType,\n actualModel,\n selectedModelUrl,\n animationPaused,\n setAnimationPaused,\n selectedSkin,\n setSelectedSkin,\n selectedSkinType,\n setSelectedSkinType,\n selectedAnimation,\n setSelectedAnimation,\n skinImageUrls,\n setSkinImageUrls,\n defaultSkinImageUrls,\n slowModeEnabled,\n setSlowModeEnabled,\n };\n }, [\n selectedModel,\n setSelectedModel,\n selectedModelType,\n setSelectedModelType,\n actualModel,\n selectedModelUrl,\n animationPaused,\n setAnimationPaused,\n selectedSkin,\n setSelectedSkin,\n selectedSkinType,\n setSelectedSkinType,\n selectedAnimation,\n setSelectedAnimation,\n skinImageUrls,\n setSkinImageUrls,\n defaultSkinImageUrls,\n slowModeEnabled,\n ]);\n\n useEffect(() => {\n if (selectedSkin) {\n setSkinImageUrls(\n getSkinImageUrls({\n basePath,\n actualModel,\n selectedModelType,\n selectedSkin,\n selectedSkinType,\n })\n );\n }\n }, [\n basePath,\n actualModel,\n selectedModelType,\n selectedSkin,\n selectedSkinType,\n ]);\n\n return (\n \n {children}\n \n );\n}\n","import React, { useContext } from \"react\";\n\ninterface EnvironmentContextValue {\n selectedEnvironment: string | null;\n setSelectedEnvironment: (selectedEnvironment: string | null) => void;\n showEnvironment: boolean;\n setShowEnvironment: (showEnvironment: boolean) => void;\n exposure: number;\n setExposure: (exposure: number) => void;\n environmentImageUrl: string | null;\n}\n\nconst EnvironmentContext = React.createContext(\n null\n);\nEnvironmentContext.displayName = \"EnvironmentContext\";\n\nexport { EnvironmentContext };\n\nexport default function useEnvironment() {\n const context = useContext(EnvironmentContext);\n if (!context) {\n throw new Error(\"No EnvironmentContext.Provider\");\n }\n return context;\n}\n","import React, { useContext } from \"react\";\n\nexport type SkinImages = {\n colorImageUrl?: string[];\n metallicImageUrl?: string[];\n};\n\nexport type MaterialSkins = Record;\n\ninterface SkinContextValue {\n materialSkins: MaterialSkins;\n getSkinImages: (materialFile: string) => SkinImages;\n setSkinImages: (materialFile: string, skinImages: SkinImages) => void;\n getColorImageUrl: (\n materialFile: string,\n frameIndex: number\n ) => string | undefined;\n setColorImageUrl: (\n materialFile: string,\n colorImageUrl: string,\n frameIndex: number\n ) => void;\n getMetallicImageUrl: (\n materialFile: string,\n frameIndex: number\n ) => string | undefined;\n setMetallicImageUrl: (\n materialFile: string,\n metallicImageUrl: string,\n frameIndex: number\n ) => void;\n}\n\nconst SkinContext = React.createContext(null);\nSkinContext.displayName = \"SkinContext\";\n\nexport { SkinContext };\n\nexport default function useSkin() {\n const context = useContext(SkinContext);\n if (!context) {\n throw new Error(\"No SkinContext.Provider\");\n }\n return context;\n}\n","import { MutableRefObject, useEffect, useRef } from \"react\";\nimport type { ModelViewerElement } from \"@google/model-viewer\";\nimport useSettings from \"./useSettings\";\nimport useSkin from \"./useSkin\";\nimport useModelViewer from \"./useModelViewer\";\nimport useWarrior from \"./useWarrior\";\n\n// const secondaryMaterialTextures: Record = {\n// disc: [\"textures/discshield2\"],\n// };\n\nexport type ModelMaterial = NonNullable<\n ModelViewerElement[\"model\"]\n>[\"materials\"][number];\n\nexport type MaterialDefinition = {\n index?: number;\n name: string;\n label?: string;\n file?: string;\n hasDefault?: boolean;\n size?: [number, number];\n hidden?: boolean;\n selectable?: boolean;\n alphaMode?: \"BLEND\" | \"MASK\" | \"OPAQUE\";\n alphaCutoff?: number;\n baseColorFactor?: [number, number, number, number];\n emissiveFactor?: [number, number, number];\n emissiveTexture?: boolean;\n metallicFactor?: number;\n roughnessFactor?: number;\n frameCount?: number;\n frameTimings?: number[];\n};\n\ntype FrameInfo = {\n frameIndex: number;\n frameProgress: number;\n};\n\nfunction useTexture({\n material,\n materialDef,\n textureType,\n imageUrl,\n frameRef,\n}: {\n material: ModelMaterial;\n materialDef?: MaterialDefinition;\n textureType: \"baseColorTexture\" | \"metallicRoughnessTexture\";\n imageUrl?: string[];\n frameRef: MutableRefObject;\n}) {\n const { modelViewer } = useModelViewer();\n const { basePath } = useSettings();\n const { slowModeEnabled } = useWarrior();\n\n useEffect(() => {\n let stale = false;\n let animationFrame: ReturnType;\n\n const updateTexture = async () => {\n if (!materialDef || materialDef.hidden) {\n if (textureType === \"metallicRoughnessTexture\") {\n return;\n } else {\n material.setAlphaMode(\"BLEND\");\n material.pbrMetallicRoughness.setBaseColorFactor([0, 0, 0, 0]);\n }\n } else {\n const {\n alphaMode,\n alphaCutoff,\n baseColorFactor,\n emissiveFactor,\n emissiveTexture = false,\n metallicFactor = 1,\n roughnessFactor = 1,\n frameCount = 1,\n frameTimings,\n } = materialDef;\n\n let textureUrls =\n imageUrl ?? new Array(frameCount).fill(`${basePath}/white.png`);\n\n if (textureUrls.some((url) => !url)) {\n return;\n }\n\n switch (textureType) {\n case \"baseColorTexture\":\n if (baseColorFactor) {\n material.pbrMetallicRoughness.setBaseColorFactor(baseColorFactor);\n }\n if (alphaMode) {\n material.setAlphaMode(alphaMode);\n }\n if (alphaCutoff) {\n material.setAlphaCutoff(alphaCutoff);\n }\n if (emissiveFactor) {\n material.setEmissiveFactor(emissiveFactor);\n }\n break;\n case \"metallicRoughnessTexture\":\n material.pbrMetallicRoughness.setMetallicFactor(metallicFactor);\n material.pbrMetallicRoughness.setRoughnessFactor(roughnessFactor);\n if (metallicFactor === 0 && roughnessFactor === 1) {\n textureUrls = new Array(frameCount).fill(`${basePath}/green.png`);\n }\n }\n\n const textures = await Promise.all(\n textureUrls.map((textureUrl) => modelViewer.createTexture(textureUrl))\n );\n if (!stale) {\n const isMasterTexture = textureType === \"baseColorTexture\";\n const frameInfo = frameRef.current;\n\n const frame: FrameRequestCallback = () => {\n const texture = textures[frameInfo.frameIndex];\n material.pbrMetallicRoughness[textureType].setTexture(texture);\n if (isMasterTexture && emissiveTexture) {\n material.emissiveTexture.setTexture(texture);\n }\n if (isMasterTexture) {\n frameInfo.frameProgress += slowModeEnabled ? 0.05 : 1;\n }\n if (frameCount > 1) {\n const frameTiming = frameTimings?.[frameInfo.frameIndex] ?? 1;\n if (isMasterTexture && frameInfo.frameProgress >= frameTiming) {\n frameInfo.frameIndex = (frameInfo.frameIndex + 1) % frameCount;\n frameInfo.frameProgress = 0;\n }\n animationFrame = requestAnimationFrame(frame);\n }\n };\n\n frame(0);\n }\n }\n };\n\n updateTexture();\n\n return () => {\n stale = true;\n if (animationFrame != null) {\n cancelAnimationFrame(animationFrame);\n }\n };\n }, [\n basePath,\n modelViewer,\n material,\n materialDef,\n textureType,\n imageUrl,\n frameRef,\n slowModeEnabled,\n ]);\n}\n\ninterface MaterialProps {\n material: ModelMaterial;\n materialDef?: MaterialDefinition;\n}\n\nexport default function Material({ material, materialDef }: MaterialProps) {\n const { getSkinImages } = useSkin();\n const { colorImageUrl, metallicImageUrl } =\n getSkinImages(materialDef?.file ?? material.name) ?? {};\n const frameRef = useRef({ frameIndex: 0, frameProgress: 0 });\n\n useTexture({\n material,\n materialDef,\n textureType: \"baseColorTexture\",\n imageUrl: colorImageUrl,\n frameRef,\n });\n useTexture({\n material,\n materialDef,\n textureType: \"metallicRoughnessTexture\",\n imageUrl: metallicImageUrl,\n frameRef,\n });\n\n return null;\n}\n","import getConfig from \"next/config\";\nimport Material, { MaterialDefinition } from \"./Material\";\nimport useModelViewer from \"./useModelViewer\";\nimport useWarrior from \"./useWarrior\";\n\nconst { publicRuntimeConfig } = getConfig();\n\nconst { materials } = publicRuntimeConfig;\n\nexport default function Materials() {\n const { actualModel } = useWarrior();\n const { model } = useModelViewer();\n const materialDefs: MaterialDefinition[] = materials[actualModel];\n\n return (\n <>\n {model.materials.map((material, i) => {\n const materialDef =\n materialDefs.find((materialDef) => materialDef.index === i) ??\n materialDefs[i];\n return (\n \n );\n })}\n >\n );\n}\n","import dynamic from \"next/dynamic\";\nimport getConfig from \"next/config\";\nimport useEnvironment from \"./useEnvironment\";\nimport useWarrior from \"./useWarrior\";\nimport Materials from \"./Materials\";\n\nconst ModelViewer = dynamic(() => import(\"./ModelViewer\"), { ssr: false });\n\nconst { publicRuntimeConfig } = getConfig();\n\nconst { cameraOverrides } = publicRuntimeConfig;\n\nexport default function WarriorViewer() {\n const {\n selectedModel,\n selectedModelUrl,\n selectedModelType,\n selectedAnimation,\n animationPaused,\n slowModeEnabled,\n } = useWarrior();\n const { environmentImageUrl, showEnvironment, exposure } = useEnvironment();\n\n return (\n \n \n \n );\n}\n","import useEnvironment from \"./useEnvironment\";\n\nexport default function EnvironmentSelector() {\n const { selectedEnvironment, setSelectedEnvironment } = useEnvironment();\n\n return (\n <>\n \n \n >\n );\n}\n","import { ImBrightnessContrast } from \"react-icons/im\";\nimport useEnvironment from \"./useEnvironment\";\n\nexport default function EnvironmentExposure() {\n const { exposure, setExposure } = useEnvironment();\n\n return (\n <>\n \n {\n setExposure(parseFloat(event.target.value));\n }}\n />\n >\n );\n}\n","import { useMemo } from \"react\";\nimport getConfig from \"next/config\";\nimport { IoMdPlay, IoMdPause } from \"react-icons/io\";\nimport useWarrior from \"./useWarrior\";\n\nconst { publicRuntimeConfig } = getConfig();\nconst { animations, animationLabels, animationLabelOverrides } =\n publicRuntimeConfig;\n\nexport default function AnimationSelector() {\n const {\n actualModel,\n selectedModelType,\n selectedAnimation,\n setSelectedAnimation,\n animationPaused,\n setAnimationPaused,\n slowModeEnabled,\n setSlowModeEnabled,\n } = useWarrior();\n\n const animationList = useMemo(\n () => [\n ...(selectedModelType === \"player\" ? animations.global : []),\n ...(animations[actualModel] ?? []),\n ],\n [actualModel, selectedModelType]\n );\n\n return (\n <>\n \n
\n
\n {\n setSlowModeEnabled(event.target.checked);\n }}\n />{\" \"}\n \n
\n
\n \n \n \n
\n >\n );\n}\n","import { ReactNode, useMemo, useState } from \"react\";\nimport { EnvironmentContext } from \"./useEnvironment\";\nimport useSettings from \"./useSettings\";\n\nexport default function EnvironmentProvider({\n children,\n}: {\n children: ReactNode;\n}) {\n const [selectedEnvironment, setSelectedEnvironment] = useState(\n null\n );\n const [showEnvironment, setShowEnvironment] = useState(false);\n const [exposure, setExposure] = useState(1);\n const { basePath } = useSettings();\n\n const context = useMemo(() => {\n const environmentImageUrl = selectedEnvironment\n ? `${basePath}/${selectedEnvironment}`\n : null;\n return {\n selectedEnvironment,\n setSelectedEnvironment,\n showEnvironment,\n setShowEnvironment,\n exposure,\n setExposure,\n environmentImageUrl,\n };\n }, [basePath, selectedEnvironment, showEnvironment, exposure]);\n\n return (\n \n {children}\n \n );\n}\n","import { ReactNode, useMemo, useState } from \"react\";\nimport { SkinContext, MaterialSkins, SkinImages } from \"./useSkin\";\n\nexport default function SkinProvider({ children }: { children: ReactNode }) {\n const [materialSkins, setMaterialSkins] = useState({});\n\n const setters = useMemo(\n () => ({\n setSkinImages(materialFile: string, skinImages: SkinImages) {\n setMaterialSkins((materialSkins) => {\n return {\n ...materialSkins,\n [materialFile]: skinImages,\n };\n });\n },\n setColorImageUrl(\n materialFile: string,\n colorImageUrl: string,\n frameIndex: number\n ) {\n setMaterialSkins((materialSkins) => {\n const newColorImageUrl = Array.from(\n materialSkins[materialFile]?.colorImageUrl ?? []\n );\n newColorImageUrl[frameIndex] = colorImageUrl;\n return {\n ...materialSkins,\n [materialFile]: {\n ...materialSkins[materialFile],\n colorImageUrl: newColorImageUrl,\n },\n };\n });\n },\n setMetallicImageUrl(\n materialFile: string,\n metallicImageUrl: string,\n frameIndex: number\n ) {\n setMaterialSkins((materialSkins) => {\n const newMetallicImageUrl = Array.from(\n materialSkins[materialFile]?.metallicImageUrl ?? []\n );\n newMetallicImageUrl[frameIndex] = metallicImageUrl;\n return {\n ...materialSkins,\n [materialFile]: {\n ...materialSkins[materialFile],\n metallicImageUrl: newMetallicImageUrl,\n },\n };\n });\n },\n }),\n []\n );\n\n const context = useMemo(() => {\n return {\n materialSkins,\n getSkinImages(materialFile: string) {\n return materialSkins[materialFile];\n },\n getColorImageUrl(materialFile: string, frameIndex: number) {\n return materialSkins[materialFile].colorImageUrl?.[frameIndex];\n },\n getMetallicImageUrl(materialFile: string, frameIndex: number) {\n return materialSkins[materialFile].metallicImageUrl?.[frameIndex];\n },\n ...setters,\n };\n }, [materialSkins, setters]);\n\n return (\n {children}\n );\n}\n","import getConfig from \"next/config\";\nimport useTools from \"./useTools\";\nimport useWarrior from \"./useWarrior\";\nimport { MaterialDefinition } from \"./Material\";\n\nconst { publicRuntimeConfig } = getConfig();\n\nconst { materials } = publicRuntimeConfig;\n\nexport default function MaterialSelector() {\n const { actualModel } = useWarrior();\n const { selectedMaterialIndex, setSelectedMaterialIndex } = useTools();\n const materialDefs: MaterialDefinition[] = materials[actualModel];\n\n return (\n \n );\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport useCanvas from \"./useCanvas\";\nimport useSettings from \"./useSettings\";\nimport useTools from \"./useTools\";\nimport { fabric } from \"fabric\";\nimport { createFabricImage } from \"./fabricUtils\";\n\ntype JSONSnapshot = ReturnType;\n\nfunction updateObjectControlOptions() {\n fabric.Object.prototype.set({\n transparentCorners: false,\n borderColor: \"#8afff1\",\n cornerSize: 9,\n cornerStyle: \"circle\",\n cornerColor: \"#8afff1\",\n cornerStrokeColor: \"#1c9f7c\",\n strokeWidth: 10,\n perPixelTargetFind: true,\n });\n}\n\nexport interface CanvasProps {\n canvasId: string;\n canvasType: \"color\" | \"metallic\";\n onChange: (canvas: fabric.Canvas) => void;\n baseImageUrl: string | null;\n textureSize: [number, number];\n defaultDrawingMode?: boolean;\n}\n\nexport default function Canvas({\n canvasId,\n onChange,\n baseImageUrl,\n textureSize,\n defaultDrawingMode = false,\n}: CanvasProps) {\n const canvasElementRef = useRef(null);\n const [canvas, setCanvas] = useState(null);\n const { activeCanvas } = useTools();\n const { canvasPadding } = useSettings();\n const { registerCanvas, unregisterCanvas } = useCanvas();\n const [isDrawingMode, setDrawingMode] = useState(defaultDrawingMode);\n const handleChangeRef = useRef();\n const trackChanges = useRef(true);\n const [undoHistory, setUndoHistory] = useState(() => []);\n const [redoHistory, setRedoHistory] = useState(() => []);\n\n const canUndo = undoHistory.length > 1;\n const canRedo = redoHistory.length > 0;\n\n const handleChange: CanvasProps[\"onChange\"] = useCallback((canvas) => {\n const handleChange = handleChangeRef.current;\n if (handleChange) {\n handleChange(canvas);\n }\n }, []);\n\n const undo = useCallback(async () => {\n if (!canvas) {\n return;\n }\n if (undoHistory.length > 1) {\n const [restoreState, currentState] = undoHistory.slice(-2);\n trackChanges.current = false;\n canvas.renderOnAddRemove = false;\n canvas.clear();\n canvas.loadFromJSON(restoreState, () => {\n canvas.renderAll();\n trackChanges.current = true;\n canvas.renderOnAddRemove = true;\n });\n setUndoHistory((undoHistory) => undoHistory.slice(0, -1));\n setRedoHistory((redoHistory) => [currentState, ...redoHistory]);\n }\n }, [canvas, undoHistory]);\n\n const redo = useCallback(() => {\n if (!canvas) {\n return;\n }\n if (redoHistory.length > 0) {\n const nextState = redoHistory[0];\n trackChanges.current = false;\n canvas.renderOnAddRemove = false;\n canvas.clear();\n canvas.loadFromJSON(nextState, () => {\n canvas.renderAll();\n trackChanges.current = true;\n canvas.renderOnAddRemove = true;\n });\n setUndoHistory((undoHistory) => [...undoHistory, nextState]);\n setRedoHistory((redoHistory) => redoHistory.slice(1));\n }\n }, [canvas, redoHistory]);\n\n useEffect(() => {\n handleChangeRef.current = onChange;\n }, [onChange]);\n\n const isActive = activeCanvas === canvasId;\n\n useEffect(() => {\n const options = {\n preserveObjectStacking: true,\n targetFindTolerance: 2,\n };\n updateObjectControlOptions();\n\n const canvas = new fabric.Canvas(canvasElementRef.current, options);\n\n let isSnapshotting = false;\n let changeTimer: ReturnType;\n\n const handleChangeWithCanvasArg = () => {\n handleChange(canvas);\n };\n\n const handleRender = () => {\n if (isSnapshotting) {\n return;\n }\n if (!trackChanges.current) {\n return;\n }\n clearTimeout(changeTimer);\n changeTimer = setTimeout(() => {\n const snapshot = snapshotCanvas();\n setUndoHistory((history) => [...history.slice(-5), snapshot]);\n setRedoHistory([]);\n }, 150);\n };\n\n const snapshotCanvas = () => {\n isSnapshotting = true;\n const snapshot = canvas.toJSON([\n \"lockMovementX\",\n \"lockMovementY\",\n \"lockRotation\",\n \"lockScalingX\",\n \"lockScalingY\",\n \"selectable\",\n \"hoverCursor\",\n \"moveCursor\",\n ]);\n isSnapshotting = false;\n return snapshot;\n };\n\n canvas.on(\"object:modified\", handleChangeWithCanvasArg);\n canvas.on(\"object:added\", handleChangeWithCanvasArg);\n canvas.on(\"object:removed\", handleChangeWithCanvasArg);\n canvas.on(\"after:render\", handleRender);\n\n setCanvas(canvas);\n\n return () => {\n clearTimeout(changeTimer);\n setCanvas(null);\n canvas.dispose();\n };\n }, [handleChange]);\n\n useEffect(() => {\n if (canvas) {\n canvas.isDrawingMode = isDrawingMode;\n }\n }, [canvas, isDrawingMode]);\n\n useEffect(() => {\n if (canvas && isActive) {\n canvas.calcOffset();\n }\n }, [canvas, isActive]);\n\n useEffect(() => {\n if (canvas) {\n registerCanvas(canvasId, {\n canvas,\n notifyChange: () => {\n canvas.renderAll();\n handleChange(canvas);\n },\n undo,\n redo,\n canUndo,\n canRedo,\n isDrawingMode,\n setDrawingMode,\n });\n return () => {\n unregisterCanvas(canvasId);\n };\n }\n }, [\n canvas,\n registerCanvas,\n unregisterCanvas,\n canvasId,\n handleChange,\n isDrawingMode,\n setDrawingMode,\n undo,\n redo,\n canUndo,\n canRedo,\n ]);\n\n useEffect(() => {\n if (canvas && textureSize) {\n trackChanges.current = false;\n canvas.clear();\n if (baseImageUrl) {\n let stale = false;\n const addImage = async () => {\n const image = await createFabricImage(baseImageUrl);\n if (!stale) {\n if (!image.width || !image.height) {\n throw new Error(\"Zero-height image\");\n }\n image.selectable = false;\n image.lockMovementX = true;\n image.lockMovementY = true;\n image.lockScalingX = true;\n image.lockScalingY = true;\n image.lockRotation = true;\n image.hoverCursor = \"default\";\n image.moveCursor = \"default\";\n const [expectedWidth, expectedHeight] = textureSize;\n const scaleX =\n image.width === expectedWidth ? 1 : expectedWidth / image.width;\n const scaleY =\n image.height === expectedHeight\n ? 1\n : expectedHeight / image.height;\n if (scaleX !== 1 || scaleY !== 1) {\n image.scaleX = scaleX;\n image.scaleY = scaleY;\n }\n canvas.centerObject(image);\n canvas.add(image);\n }\n trackChanges.current = true;\n canvas.requestRenderAll();\n };\n\n addImage();\n\n return () => {\n stale = true;\n };\n }\n }\n }, [canvas, baseImageUrl, textureSize]);\n\n return (\n \n \n
\n );\n}\n","import React, { useContext } from \"react\";\n\ninterface ImageLoaderContextValue {\n loadImage: (url: string) => Promise;\n}\n\nexport const ImageLoaderContext =\n React.createContext(null);\nImageLoaderContext.displayName = \"ImageLoaderContext\";\n\nexport default function useImageLoader() {\n const context = useContext(ImageLoaderContext);\n if (!context) {\n throw new Error(\"ImageLoaderContext.Provider not found!\");\n }\n return context;\n}\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport Canvas, { CanvasProps } from \"./Canvas\";\nimport useSettings from \"./useSettings\";\nimport useSkin from \"./useSkin\";\nimport type { MaterialDefinition } from \"./Material\";\nimport useWarrior from \"./useWarrior\";\nimport useImageWorker from \"./useImageWorker\";\nimport useImageLoader from \"./useImageLoader\";\n\nconst defaultTextureSize = [512, 512] as [number, number];\n\nexport default function ColorCanvas({\n materialDef,\n frameIndex = 0,\n}: {\n materialDef: MaterialDefinition;\n frameIndex: number;\n}) {\n const { skinImageUrls, defaultSkinImageUrls } = useWarrior();\n const skinImageUrl =\n skinImageUrls[materialDef.file ?? materialDef.name]?.[frameIndex];\n const defaultSkinImageUrl =\n defaultSkinImageUrls[materialDef.file ?? materialDef.name]?.[frameIndex];\n const { setColorImageUrl } = useSkin();\n const { canvasPadding } = useSettings();\n const [noAlphaImageUrl, setNoAlphaImageUrl] = useState(null);\n const { removeAlphaFromArrayBuffer } = useImageWorker();\n const { loadImage } = useImageLoader();\n\n const textureSize = useMemo(\n () => materialDef.size ?? defaultTextureSize,\n [materialDef]\n );\n\n const handleChange = useCallback(\n async (canvas) => {\n const imageUrl = canvas.toDataURL({\n top: canvasPadding,\n left: canvasPadding,\n width: textureSize[0],\n height: textureSize[1],\n });\n setColorImageUrl(\n materialDef.file ?? materialDef.name,\n imageUrl,\n frameIndex\n );\n },\n [textureSize, canvasPadding, setColorImageUrl, materialDef, frameIndex]\n );\n\n useEffect(() => {\n if (skinImageUrl) {\n let stale = false;\n\n const generateImageUrl = async () => {\n let arrayBuffer;\n try {\n arrayBuffer = await loadImage(skinImageUrl);\n } catch (err) {\n if (materialDef.hasDefault !== false) {\n arrayBuffer = await loadImage(defaultSkinImageUrl);\n } else {\n return;\n }\n }\n const outputImageUrl = await removeAlphaFromArrayBuffer(arrayBuffer);\n if (!stale) {\n setNoAlphaImageUrl(outputImageUrl);\n }\n };\n\n generateImageUrl();\n\n return () => {\n stale = true;\n };\n } else {\n setNoAlphaImageUrl(null);\n }\n }, [\n materialDef,\n skinImageUrl,\n defaultSkinImageUrl,\n removeAlphaFromArrayBuffer,\n loadImage,\n ]);\n\n const canvasId = `${materialDef.name}:color:${frameIndex}`;\n\n return textureSize ? (\n \n ) : null;\n}\n","import { useCallback, useEffect, useRef, useMemo, useState } from \"react\";\nimport Canvas, { CanvasProps } from \"./Canvas\";\nimport useImageWorker from \"./useImageWorker\";\nimport useSettings from \"./useSettings\";\nimport type { MaterialDefinition } from \"./Material\";\nimport useSkin from \"./useSkin\";\nimport useWarrior from \"./useWarrior\";\nimport useImageLoader from \"./useImageLoader\";\n\nconst defaultTextureSize = [512, 512] as [number, number];\n\nexport default function MetallicCanvas({\n materialDef,\n frameIndex = 0,\n}: {\n materialDef: MaterialDefinition;\n frameIndex: number;\n}) {\n const { skinImageUrls, defaultSkinImageUrls } = useWarrior();\n const skinImageUrl =\n skinImageUrls[materialDef.file ?? materialDef.name]?.[frameIndex];\n const defaultSkinImageUrl =\n defaultSkinImageUrls[materialDef.file ?? materialDef.name]?.[frameIndex];\n const { setMetallicImageUrl } = useSkin();\n const { canvasPadding } = useSettings();\n const [alphaImageUrl, setAlphaImageUrl] = useState(null);\n const runningChangeHandlers = useRef(0);\n const {\n convertGrayscaleImageUrlToMetallicRoughness,\n convertArrayBufferAlphaToGrayscale,\n } = useImageWorker();\n const { loadImage } = useImageLoader();\n\n const textureSize = useMemo(\n () => materialDef.size ?? defaultTextureSize,\n [materialDef]\n );\n\n const handleChange = useCallback(\n async (canvas) => {\n runningChangeHandlers.current += 1;\n const imageUrl = canvas.toDataURL({\n top: canvasPadding,\n left: canvasPadding,\n width: textureSize[0],\n height: textureSize[1],\n });\n let outputImageUrl;\n try {\n outputImageUrl = await convertGrayscaleImageUrlToMetallicRoughness(\n imageUrl\n );\n } finally {\n runningChangeHandlers.current -= 1;\n }\n if (runningChangeHandlers.current === 0) {\n setMetallicImageUrl(\n materialDef.file ?? materialDef.name,\n outputImageUrl,\n frameIndex\n );\n }\n },\n [\n textureSize,\n canvasPadding,\n setMetallicImageUrl,\n convertGrayscaleImageUrlToMetallicRoughness,\n materialDef,\n frameIndex,\n ]\n );\n\n useEffect(() => {\n if (skinImageUrl) {\n let stale = false;\n\n const generateImageUrl = async () => {\n let arrayBuffer;\n try {\n arrayBuffer = await loadImage(skinImageUrl);\n } catch (err) {\n if (materialDef.hasDefault !== false) {\n arrayBuffer = await loadImage(defaultSkinImageUrl);\n } else {\n return;\n }\n }\n const outputImageUrl = await convertArrayBufferAlphaToGrayscale(\n arrayBuffer\n );\n if (!stale) {\n setAlphaImageUrl(outputImageUrl);\n }\n };\n\n generateImageUrl();\n\n return () => {\n stale = true;\n };\n } else {\n setAlphaImageUrl(null);\n }\n }, [\n materialDef,\n skinImageUrl,\n defaultSkinImageUrl,\n textureSize,\n convertArrayBufferAlphaToGrayscale,\n loadImage,\n ]);\n\n const canvasId = `${materialDef.name}:metallic:${frameIndex}`;\n\n return textureSize ? (\n \n ) : null;\n}\n","import React from \"react\";\nimport getConfig from \"next/config\";\nimport ColorCanvas from \"./ColorCanvas\";\nimport MetallicCanvas from \"./MetallicCanvas\";\nimport useWarrior from \"./useWarrior\";\nimport { MaterialDefinition } from \"./Material\";\n\nconst { publicRuntimeConfig } = getConfig();\n\nconst { materials } = publicRuntimeConfig;\n\nexport default function MaterialCanvases() {\n const { actualModel } = useWarrior();\n const materialDefs: MaterialDefinition[] = materials[actualModel];\n\n return (\n <>\n {materialDefs.map((materialDef) => {\n if (!materialDef) {\n return null;\n }\n const hasMetallic = !(\n materialDef.metallicFactor === 0 && materialDef.roughnessFactor === 1\n );\n const frameCount = materialDef.frameCount ?? 1;\n const frames = new Array(frameCount).fill(null);\n return (\n \n {frames.map((_, i) => (\n \n ))}\n {hasMetallic\n ? frames.map((_, i) => (\n \n ))\n : null}\n \n );\n })}\n >\n );\n}\n","import { useQueryClient } from \"@tanstack/react-query\";\nimport { ReactNode, useMemo } from \"react\";\nimport { ImageLoaderContext } from \"./useImageLoader\";\nimport { imageUrlToArrayBuffer } from \"./imageUtils\";\n\nexport default function ImageLoaderProvider({\n children,\n}: {\n children: ReactNode;\n}) {\n const queryClient = useQueryClient();\n const context = useMemo(() => {\n return {\n async loadImage(imageUrl: string) {\n if (imageUrl.startsWith(\"data:\")) {\n return imageUrlToArrayBuffer(imageUrl);\n } else {\n const arrayBuffer = await queryClient.fetchQuery({\n queryKey: [imageUrl],\n });\n return arrayBuffer;\n }\n },\n };\n }, [queryClient]);\n\n return (\n \n {children}\n \n );\n}\n","\"use client\";\nimport Head from \"next/head\";\nimport CanvasTools from \"../CanvasTools\";\nimport AppFooter from \"../AppFooter\";\nimport ToolsProvider from \"../ToolsProvider\";\nimport CanvasBackdrop from \"../CanvasBackdrop\";\nimport CanvasProvider from \"../CanvasProvider\";\nimport CanvasInteractions from \"../CanvasInteractions\";\nimport CanvasToggle from \"../CanvasToggle\";\nimport WarriorSelector from \"../WarriorSelector\";\nimport WarriorProvider from \"../WarriorProvider\";\nimport WarriorViewer from \"../WarriorViewer\";\nimport EnvironmentSelector from \"../EnvironmentSelector\";\nimport EnvironmentExposure from \"../EnvironmentExposure\";\nimport AnimationSelector from \"../AnimationSelector\";\nimport EnvironmentProvider from \"../EnvironmentProvider\";\nimport SkinProvider from \"../SkinProvider\";\nimport MaterialSelector from \"../MaterialSelector\";\nimport MaterialCanvases from \"../MaterialCanvases\";\nimport ImageLoaderProvider from \"../ImageLoaderProvider\";\nimport {\n QueryClient,\n QueryClientProvider,\n QueryKey,\n} from \"@tanstack/react-query\";\nimport { imageUrlToArrayBuffer } from \"../imageUtils\";\n\nasync function imageFetcher({ queryKey }: { queryKey: QueryKey }) {\n const [imageUrl] = queryKey as [string];\n return imageUrlToArrayBuffer(imageUrl);\n}\n\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n queryFn: imageFetcher,\n staleTime: Infinity,\n cacheTime: 60000,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n },\n },\n});\n\nexport default function HomePage() {\n return (\n <>\n \n T2 Model Viewer & Skinner\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n >\n );\n}\n","import React, { useContext } from \"react\";\nimport { ModelViewerElement } from \"@google/model-viewer\";\n\nexport const ModelViewerContext = React.createContext<{\n modelViewer: ModelViewerElement;\n model: NonNullable;\n isLoaded: boolean;\n} | null>(null);\nModelViewerContext.displayName = \"ModelViewerContext\";\n\nexport default function useModelViewer() {\n const context = useContext(ModelViewerContext);\n if (!context) {\n throw new Error(\"No ModelViewerContext.Provider\");\n }\n return context;\n}\n","/*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */\n\nvar fabric = fabric || { version: '5.2.1' };\nif (typeof exports !== 'undefined') {\n exports.fabric = fabric;\n}\n/* _AMD_START_ */\nelse if (typeof define === 'function' && define.amd) {\n define([], function() { return fabric; });\n}\n/* _AMD_END_ */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n if (document instanceof (typeof HTMLDocument !== 'undefined' ? HTMLDocument : Document)) {\n fabric.document = document;\n }\n else {\n fabric.document = document.implementation.createHTMLDocument('');\n }\n fabric.window = window;\n}\nelse {\n // assume we're running under node.js when document/window are not present\n var jsdom = require('jsdom');\n var virtualWindow = new jsdom.JSDOM(\n decodeURIComponent('%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E'),\n {\n features: {\n FetchExternalResources: ['img']\n },\n resources: 'usable'\n }).window;\n fabric.document = virtualWindow.document;\n fabric.jsdomImplForWrapper = require('jsdom/lib/jsdom/living/generated/utils').implForWrapper;\n fabric.nodeCanvas = require('jsdom/lib/jsdom/utils').Canvas;\n fabric.window = virtualWindow;\n DOMParser = fabric.window.DOMParser;\n}\n\n/**\n * True when in environment that supports touch events\n * @type boolean\n */\nfabric.isTouchSupported = 'ontouchstart' in fabric.window || 'ontouchstart' in fabric.document ||\n (fabric.window && fabric.window.navigator && fabric.window.navigator.maxTouchPoints > 0);\n\n/**\n * True when in environment that's probably Node.js\n * @type boolean\n */\nfabric.isLikelyNode = typeof Buffer !== 'undefined' &&\n typeof window === 'undefined';\n\n\n\n/**\n * Pixel per Inch as a default value set to 96. Can be changed for more realistic conversion.\n */\nfabric.DPI = 96;\nfabric.reNum = '(?:[-+]?(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:[eE][-+]?\\\\d+)?)';\nfabric.commaWsp = '(?:\\\\s+,?\\\\s*|,\\\\s*)';\nfabric.rePathCommand = /([-+]?((\\d+\\.\\d+)|((\\d+)|(\\.\\d+)))(?:[eE][-+]?\\d+)?)/ig;\nfabric.reNonWord = /[ \\n\\.,;!\\?\\-]/;\nfabric.fontPaths = { };\nfabric.iMatrix = [1, 0, 0, 1, 0, 0];\nfabric.svgNS = 'http://www.w3.org/2000/svg';\n\n/**\n * Pixel limit for cache canvases. 1Mpx , 4Mpx should be fine.\n * @since 1.7.14\n * @type Number\n * @default\n */\nfabric.perfLimitSizeTotal = 2097152;\n\n/**\n * Pixel limit for cache canvases width or height. IE fixes the maximum at 5000\n * @since 1.7.14\n * @type Number\n * @default\n */\nfabric.maxCacheSideLimit = 4096;\n\n/**\n * Lowest pixel limit for cache canvases, set at 256PX\n * @since 1.7.14\n * @type Number\n * @default\n */\nfabric.minCacheSideLimit = 256;\n\n/**\n * Cache Object for widths of chars in text rendering.\n */\nfabric.charWidthsCache = { };\n\n/**\n * if webgl is enabled and available, textureSize will determine the size\n * of the canvas backend\n * @since 2.0.0\n * @type Number\n * @default\n */\nfabric.textureSize = 2048;\n\n/**\n * When 'true', style information is not retained when copy/pasting text, making\n * pasted text use destination style.\n * Defaults to 'false'.\n * @type Boolean\n * @default\n */\nfabric.disableStyleCopyPaste = false;\n\n/**\n * Enable webgl for filtering picture is available\n * A filtering backend will be initialized, this will both take memory and\n * time since a default 2048x2048 canvas will be created for the gl context\n * @since 2.0.0\n * @type Boolean\n * @default\n */\nfabric.enableGLFiltering = true;\n\n/**\n * Device Pixel Ratio\n * @see https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/HTML-canvas-guide/SettingUptheCanvas/SettingUptheCanvas.html\n */\nfabric.devicePixelRatio = fabric.window.devicePixelRatio ||\n fabric.window.webkitDevicePixelRatio ||\n fabric.window.mozDevicePixelRatio ||\n 1;\n/**\n * Browser-specific constant to adjust CanvasRenderingContext2D.shadowBlur value,\n * which is unitless and not rendered equally across browsers.\n *\n * Values that work quite well (as of October 2017) are:\n * - Chrome: 1.5\n * - Edge: 1.75\n * - Firefox: 0.9\n * - Safari: 0.95\n *\n * @since 2.0.0\n * @type Number\n * @default 1\n */\nfabric.browserShadowBlurConstant = 1;\n\n/**\n * This object contains the result of arc to bezier conversion for faster retrieving if the same arc needs to be converted again.\n * It was an internal variable, is accessible since version 2.3.4\n */\nfabric.arcToSegmentsCache = { };\n\n/**\n * This object keeps the results of the boundsOfCurve calculation mapped by the joined arguments necessary to calculate it.\n * It does speed up calculation, if you parse and add always the same paths, but in case of heavy usage of freedrawing\n * you do not get any speed benefit and you get a big object in memory.\n * The object was a private variable before, while now is appended to the lib so that you have access to it and you\n * can eventually clear it.\n * It was an internal variable, is accessible since version 2.3.4\n */\nfabric.boundsOfCurveCache = { };\n\n/**\n * If disabled boundsOfCurveCache is not used. For apps that make heavy usage of pencil drawing probably disabling it is better\n * @default true\n */\nfabric.cachesBoundsOfCurve = true;\n\n/**\n * Skip performance testing of setupGLContext and force the use of putImageData that seems to be the one that works best on\n * Chrome + old hardware. if your users are experiencing empty images after filtering you may try to force this to true\n * this has to be set before instantiating the filtering backend ( before filtering the first image )\n * @type Boolean\n * @default false\n */\nfabric.forceGLPutImageData = false;\n\nfabric.initFilterBackend = function() {\n if (fabric.enableGLFiltering && fabric.isWebglSupported && fabric.isWebglSupported(fabric.textureSize)) {\n console.log('max texture size: ' + fabric.maxTextureSize);\n return (new fabric.WebglFilterBackend({ tileSize: fabric.textureSize }));\n }\n else if (fabric.Canvas2dFilterBackend) {\n return (new fabric.Canvas2dFilterBackend());\n }\n};\n(function() {\n\n /**\n * @private\n * @param {String} eventName\n * @param {Function} handler\n */\n function _removeEventListener(eventName, handler) {\n if (!this.__eventListeners[eventName]) {\n return;\n }\n var eventListener = this.__eventListeners[eventName];\n if (handler) {\n eventListener[eventListener.indexOf(handler)] = false;\n }\n else {\n fabric.util.array.fill(eventListener, false);\n }\n }\n\n /**\n * Observes specified event\n * @memberOf fabric.Observable\n * @alias on\n * @param {String|Object} eventName Event name (eg. 'after:render') or object with key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n * @param {Function} handler Function that receives a notification when an event of the specified type occurs\n * @return {Self} thisArg\n * @chainable\n */\n function on(eventName, handler) {\n if (!this.__eventListeners) {\n this.__eventListeners = { };\n }\n // one object with key/value pairs was passed\n if (arguments.length === 1) {\n for (var prop in eventName) {\n this.on(prop, eventName[prop]);\n }\n }\n else {\n if (!this.__eventListeners[eventName]) {\n this.__eventListeners[eventName] = [];\n }\n this.__eventListeners[eventName].push(handler);\n }\n return this;\n }\n\n function _once(eventName, handler) {\n var _handler = function () {\n handler.apply(this, arguments);\n this.off(eventName, _handler);\n }.bind(this);\n this.on(eventName, _handler);\n }\n\n function once(eventName, handler) {\n // one object with key/value pairs was passed\n if (arguments.length === 1) {\n for (var prop in eventName) {\n _once.call(this, prop, eventName[prop]);\n }\n }\n else {\n _once.call(this, eventName, handler);\n }\n return this;\n }\n\n /**\n * Stops event observing for a particular event handler. Calling this method\n * without arguments removes all handlers for all events\n * @memberOf fabric.Observable\n * @alias off\n * @param {String|Object} eventName Event name (eg. 'after:render') or object with key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n * @param {Function} handler Function to be deleted from EventListeners\n * @return {Self} thisArg\n * @chainable\n */\n function off(eventName, handler) {\n if (!this.__eventListeners) {\n return this;\n }\n\n // remove all key/value pairs (event name -> event handler)\n if (arguments.length === 0) {\n for (eventName in this.__eventListeners) {\n _removeEventListener.call(this, eventName);\n }\n }\n // one object with key/value pairs was passed\n else if (arguments.length === 1 && typeof arguments[0] === 'object') {\n for (var prop in eventName) {\n _removeEventListener.call(this, prop, eventName[prop]);\n }\n }\n else {\n _removeEventListener.call(this, eventName, handler);\n }\n return this;\n }\n\n /**\n * Fires event with an optional options object\n * @memberOf fabric.Observable\n * @param {String} eventName Event name to fire\n * @param {Object} [options] Options object\n * @return {Self} thisArg\n * @chainable\n */\n function fire(eventName, options) {\n if (!this.__eventListeners) {\n return this;\n }\n\n var listenersForEvent = this.__eventListeners[eventName];\n if (!listenersForEvent) {\n return this;\n }\n\n for (var i = 0, len = listenersForEvent.length; i < len; i++) {\n listenersForEvent[i] && listenersForEvent[i].call(this, options || { });\n }\n this.__eventListeners[eventName] = listenersForEvent.filter(function(value) {\n return value !== false;\n });\n return this;\n }\n\n /**\n * @namespace fabric.Observable\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#events}\n * @see {@link http://fabricjs.com/events|Events demo}\n */\n fabric.Observable = {\n fire: fire,\n on: on,\n once: once,\n off: off,\n };\n})();\n/**\n * @namespace fabric.Collection\n */\nfabric.Collection = {\n\n _objects: [],\n\n /**\n * Adds objects to collection, Canvas or Group, then renders canvas\n * (if `renderOnAddRemove` is not `false`).\n * in case of Group no changes to bounding box are made.\n * Objects should be instances of (or inherit from) fabric.Object\n * Use of this function is highly discouraged for groups.\n * you can add a bunch of objects with the add method but then you NEED\n * to run a addWithUpdate call for the Group class or position/bbox will be wrong.\n * @param {...fabric.Object} object Zero or more fabric instances\n * @return {Self} thisArg\n * @chainable\n */\n add: function () {\n this._objects.push.apply(this._objects, arguments);\n if (this._onObjectAdded) {\n for (var i = 0, length = arguments.length; i < length; i++) {\n this._onObjectAdded(arguments[i]);\n }\n }\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Inserts an object into collection at specified index, then renders canvas (if `renderOnAddRemove` is not `false`)\n * An object should be an instance of (or inherit from) fabric.Object\n * Use of this function is highly discouraged for groups.\n * you can add a bunch of objects with the insertAt method but then you NEED\n * to run a addWithUpdate call for the Group class or position/bbox will be wrong.\n * @param {Object} object Object to insert\n * @param {Number} index Index to insert object at\n * @param {Boolean} nonSplicing When `true`, no splicing (shifting) of objects occurs\n * @return {Self} thisArg\n * @chainable\n */\n insertAt: function (object, index, nonSplicing) {\n var objects = this._objects;\n if (nonSplicing) {\n objects[index] = object;\n }\n else {\n objects.splice(index, 0, object);\n }\n this._onObjectAdded && this._onObjectAdded(object);\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`)\n * @param {...fabric.Object} object Zero or more fabric instances\n * @return {Self} thisArg\n * @chainable\n */\n remove: function() {\n var objects = this._objects,\n index, somethingRemoved = false;\n\n for (var i = 0, length = arguments.length; i < length; i++) {\n index = objects.indexOf(arguments[i]);\n\n // only call onObjectRemoved if an object was actually removed\n if (index !== -1) {\n somethingRemoved = true;\n objects.splice(index, 1);\n this._onObjectRemoved && this._onObjectRemoved(arguments[i]);\n }\n }\n\n this.renderOnAddRemove && somethingRemoved && this.requestRenderAll();\n return this;\n },\n\n /**\n * Executes given function for each object in this group\n * @param {Function} callback\n * Callback invoked with current object as first argument,\n * index - as second and an array of all objects - as third.\n * Callback is invoked in a context of Global Object (e.g. `window`)\n * when no `context` argument is given\n *\n * @param {Object} context Context (aka thisObject)\n * @return {Self} thisArg\n * @chainable\n */\n forEachObject: function(callback, context) {\n var objects = this.getObjects();\n for (var i = 0, len = objects.length; i < len; i++) {\n callback.call(context, objects[i], i, objects);\n }\n return this;\n },\n\n /**\n * Returns an array of children objects of this instance\n * Type parameter introduced in 1.3.10\n * since 2.3.5 this method return always a COPY of the array;\n * @param {String} [type] When specified, only objects of this type are returned\n * @return {Array}\n */\n getObjects: function(type) {\n if (typeof type === 'undefined') {\n return this._objects.concat();\n }\n return this._objects.filter(function(o) {\n return o.type === type;\n });\n },\n\n /**\n * Returns object at specified index\n * @param {Number} index\n * @return {Self} thisArg\n */\n item: function (index) {\n return this._objects[index];\n },\n\n /**\n * Returns true if collection contains no objects\n * @return {Boolean} true if collection is empty\n */\n isEmpty: function () {\n return this._objects.length === 0;\n },\n\n /**\n * Returns a size of a collection (i.e: length of an array containing its objects)\n * @return {Number} Collection size\n */\n size: function() {\n return this._objects.length;\n },\n\n /**\n * Returns true if collection contains an object\n * @param {Object} object Object to check against\n * @param {Boolean} [deep=false] `true` to check all descendants, `false` to check only `_objects`\n * @return {Boolean} `true` if collection contains an object\n */\n contains: function (object, deep) {\n if (this._objects.indexOf(object) > -1) {\n return true;\n }\n else if (deep) {\n return this._objects.some(function (obj) {\n return typeof obj.contains === 'function' && obj.contains(object, true);\n });\n }\n return false;\n },\n\n /**\n * Returns number representation of a collection complexity\n * @return {Number} complexity\n */\n complexity: function () {\n return this._objects.reduce(function (memo, current) {\n memo += current.complexity ? current.complexity() : 0;\n return memo;\n }, 0);\n }\n};\n/**\n * @namespace fabric.CommonMethods\n */\nfabric.CommonMethods = {\n\n /**\n * Sets object's properties from options\n * @param {Object} [options] Options object\n */\n _setOptions: function(options) {\n for (var prop in options) {\n this.set(prop, options[prop]);\n }\n },\n\n /**\n * @private\n * @param {Object} [filler] Options object\n * @param {String} [property] property to set the Gradient to\n */\n _initGradient: function(filler, property) {\n if (filler && filler.colorStops && !(filler instanceof fabric.Gradient)) {\n this.set(property, new fabric.Gradient(filler));\n }\n },\n\n /**\n * @private\n * @param {Object} [filler] Options object\n * @param {String} [property] property to set the Pattern to\n * @param {Function} [callback] callback to invoke after pattern load\n */\n _initPattern: function(filler, property, callback) {\n if (filler && filler.source && !(filler instanceof fabric.Pattern)) {\n this.set(property, new fabric.Pattern(filler, callback));\n }\n else {\n callback && callback();\n }\n },\n\n /**\n * @private\n */\n _setObject: function(obj) {\n for (var prop in obj) {\n this._set(prop, obj[prop]);\n }\n },\n\n /**\n * Sets property to a given value. When changing position/dimension -related properties (left, top, scale, angle, etc.) `set` does not update position of object's borders/controls. If you need to update those, call `setCoords()`.\n * @param {String|Object} key Property name or object (if object, iterate over the object properties)\n * @param {Object|Function} value Property value (if function, the value is passed into it and its return value is used as a new one)\n * @return {fabric.Object} thisArg\n * @chainable\n */\n set: function(key, value) {\n if (typeof key === 'object') {\n this._setObject(key);\n }\n else {\n this._set(key, value);\n }\n return this;\n },\n\n _set: function(key, value) {\n this[key] = value;\n },\n\n /**\n * Toggles specified property from `true` to `false` or from `false` to `true`\n * @param {String} property Property to toggle\n * @return {fabric.Object} thisArg\n * @chainable\n */\n toggle: function(property) {\n var value = this.get(property);\n if (typeof value === 'boolean') {\n this.set(property, !value);\n }\n return this;\n },\n\n /**\n * Basic getter\n * @param {String} property Property name\n * @return {*} value of a property\n */\n get: function(property) {\n return this[property];\n }\n};\n(function(global) {\n\n var sqrt = Math.sqrt,\n atan2 = Math.atan2,\n pow = Math.pow,\n PiBy180 = Math.PI / 180,\n PiBy2 = Math.PI / 2;\n\n /**\n * @namespace fabric.util\n */\n fabric.util = {\n\n /**\n * Calculate the cos of an angle, avoiding returning floats for known results\n * @static\n * @memberOf fabric.util\n * @param {Number} angle the angle in radians or in degree\n * @return {Number}\n */\n cos: function(angle) {\n if (angle === 0) { return 1; }\n if (angle < 0) {\n // cos(a) = cos(-a)\n angle = -angle;\n }\n var angleSlice = angle / PiBy2;\n switch (angleSlice) {\n case 1: case 3: return 0;\n case 2: return -1;\n }\n return Math.cos(angle);\n },\n\n /**\n * Calculate the sin of an angle, avoiding returning floats for known results\n * @static\n * @memberOf fabric.util\n * @param {Number} angle the angle in radians or in degree\n * @return {Number}\n */\n sin: function(angle) {\n if (angle === 0) { return 0; }\n var angleSlice = angle / PiBy2, sign = 1;\n if (angle < 0) {\n // sin(-a) = -sin(a)\n sign = -1;\n }\n switch (angleSlice) {\n case 1: return sign;\n case 2: return 0;\n case 3: return -sign;\n }\n return Math.sin(angle);\n },\n\n /**\n * Removes value from an array.\n * Presence of value (and its position in an array) is determined via `Array.prototype.indexOf`\n * @static\n * @memberOf fabric.util\n * @param {Array} array\n * @param {*} value\n * @return {Array} original array\n */\n removeFromArray: function(array, value) {\n var idx = array.indexOf(value);\n if (idx !== -1) {\n array.splice(idx, 1);\n }\n return array;\n },\n\n /**\n * Returns random number between 2 specified ones.\n * @static\n * @memberOf fabric.util\n * @param {Number} min lower limit\n * @param {Number} max upper limit\n * @return {Number} random value (between min and max)\n */\n getRandomInt: function(min, max) {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n },\n\n /**\n * Transforms degrees to radians.\n * @static\n * @memberOf fabric.util\n * @param {Number} degrees value in degrees\n * @return {Number} value in radians\n */\n degreesToRadians: function(degrees) {\n return degrees * PiBy180;\n },\n\n /**\n * Transforms radians to degrees.\n * @static\n * @memberOf fabric.util\n * @param {Number} radians value in radians\n * @return {Number} value in degrees\n */\n radiansToDegrees: function(radians) {\n return radians / PiBy180;\n },\n\n /**\n * Rotates `point` around `origin` with `radians`\n * @static\n * @memberOf fabric.util\n * @param {fabric.Point} point The point to rotate\n * @param {fabric.Point} origin The origin of the rotation\n * @param {Number} radians The radians of the angle for the rotation\n * @return {fabric.Point} The new rotated point\n */\n rotatePoint: function(point, origin, radians) {\n var newPoint = new fabric.Point(point.x - origin.x, point.y - origin.y),\n v = fabric.util.rotateVector(newPoint, radians);\n return new fabric.Point(v.x, v.y).addEquals(origin);\n },\n\n /**\n * Rotates `vector` with `radians`\n * @static\n * @memberOf fabric.util\n * @param {Object} vector The vector to rotate (x and y)\n * @param {Number} radians The radians of the angle for the rotation\n * @return {Object} The new rotated point\n */\n rotateVector: function(vector, radians) {\n var sin = fabric.util.sin(radians),\n cos = fabric.util.cos(radians),\n rx = vector.x * cos - vector.y * sin,\n ry = vector.x * sin + vector.y * cos;\n return {\n x: rx,\n y: ry\n };\n },\n\n /**\n * Creates a vetor from points represented as a point\n * @static\n * @memberOf fabric.util\n *\n * @typedef {Object} Point\n * @property {number} x\n * @property {number} y\n *\n * @param {Point} from\n * @param {Point} to\n * @returns {Point} vector\n */\n createVector: function (from, to) {\n return new fabric.Point(to.x - from.x, to.y - from.y);\n },\n\n /**\n * Calculates angle between 2 vectors using dot product\n * @static\n * @memberOf fabric.util\n * @param {Point} a\n * @param {Point} b\n * @returns the angle in radian between the vectors\n */\n calcAngleBetweenVectors: function (a, b) {\n return Math.acos((a.x * b.x + a.y * b.y) / (Math.hypot(a.x, a.y) * Math.hypot(b.x, b.y)));\n },\n\n /**\n * @static\n * @memberOf fabric.util\n * @param {Point} v\n * @returns {Point} vector representing the unit vector of pointing to the direction of `v`\n */\n getHatVector: function (v) {\n return new fabric.Point(v.x, v.y).multiply(1 / Math.hypot(v.x, v.y));\n },\n\n /**\n * @static\n * @memberOf fabric.util\n * @param {Point} A\n * @param {Point} B\n * @param {Point} C\n * @returns {{ vector: Point, angle: number }} vector representing the bisector of A and A's angle\n */\n getBisector: function (A, B, C) {\n var AB = fabric.util.createVector(A, B), AC = fabric.util.createVector(A, C);\n var alpha = fabric.util.calcAngleBetweenVectors(AB, AC);\n // check if alpha is relative to AB->BC\n var ro = fabric.util.calcAngleBetweenVectors(fabric.util.rotateVector(AB, alpha), AC);\n var phi = alpha * (ro === 0 ? 1 : -1) / 2;\n return {\n vector: fabric.util.getHatVector(fabric.util.rotateVector(AB, phi)),\n angle: alpha\n };\n },\n\n /**\n * Project stroke width on points returning 2 projections for each point as follows:\n * - `miter`: 2 points corresponding to the outer boundary and the inner boundary of stroke.\n * - `bevel`: 2 points corresponding to the bevel boundaries, tangent to the bisector.\n * - `round`: same as `bevel`\n * Used to calculate object's bounding box\n * @static\n * @memberOf fabric.util\n * @param {Point[]} points\n * @param {Object} options\n * @param {number} options.strokeWidth\n * @param {'miter'|'bevel'|'round'} options.strokeLineJoin\n * @param {number} options.strokeMiterLimit https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit\n * @param {boolean} options.strokeUniform\n * @param {number} options.scaleX\n * @param {number} options.scaleY\n * @param {boolean} [openPath] whether the shape is open or not, affects the calculations of the first and last points\n * @returns {fabric.Point[]} array of size 2n/4n of all suspected points\n */\n projectStrokeOnPoints: function (points, options, openPath) {\n var coords = [], s = options.strokeWidth / 2,\n strokeUniformScalar = options.strokeUniform ?\n new fabric.Point(1 / options.scaleX, 1 / options.scaleY) : new fabric.Point(1, 1),\n getStrokeHatVector = function (v) {\n var scalar = s / (Math.hypot(v.x, v.y));\n return new fabric.Point(v.x * scalar * strokeUniformScalar.x, v.y * scalar * strokeUniformScalar.y);\n };\n if (points.length <= 1) {return coords;}\n points.forEach(function (p, index) {\n var A = new fabric.Point(p.x, p.y), B, C;\n if (index === 0) {\n C = points[index + 1];\n B = openPath ? getStrokeHatVector(fabric.util.createVector(C, A)).addEquals(A) : points[points.length - 1];\n }\n else if (index === points.length - 1) {\n B = points[index - 1];\n C = openPath ? getStrokeHatVector(fabric.util.createVector(B, A)).addEquals(A) : points[0];\n }\n else {\n B = points[index - 1];\n C = points[index + 1];\n }\n var bisector = fabric.util.getBisector(A, B, C),\n bisectorVector = bisector.vector,\n alpha = bisector.angle,\n scalar,\n miterVector;\n if (options.strokeLineJoin === 'miter') {\n scalar = -s / Math.sin(alpha / 2);\n miterVector = new fabric.Point(\n bisectorVector.x * scalar * strokeUniformScalar.x,\n bisectorVector.y * scalar * strokeUniformScalar.y\n );\n if (Math.hypot(miterVector.x, miterVector.y) / s <= options.strokeMiterLimit) {\n coords.push(A.add(miterVector));\n coords.push(A.subtract(miterVector));\n return;\n }\n }\n scalar = -s * Math.SQRT2;\n miterVector = new fabric.Point(\n bisectorVector.x * scalar * strokeUniformScalar.x,\n bisectorVector.y * scalar * strokeUniformScalar.y\n );\n coords.push(A.add(miterVector));\n coords.push(A.subtract(miterVector));\n });\n return coords;\n },\n\n /**\n * Apply transform t to point p\n * @static\n * @memberOf fabric.util\n * @param {fabric.Point} p The point to transform\n * @param {Array} t The transform\n * @param {Boolean} [ignoreOffset] Indicates that the offset should not be applied\n * @return {fabric.Point} The transformed point\n */\n transformPoint: function(p, t, ignoreOffset) {\n if (ignoreOffset) {\n return new fabric.Point(\n t[0] * p.x + t[2] * p.y,\n t[1] * p.x + t[3] * p.y\n );\n }\n return new fabric.Point(\n t[0] * p.x + t[2] * p.y + t[4],\n t[1] * p.x + t[3] * p.y + t[5]\n );\n },\n\n /**\n * Returns coordinates of points's bounding rectangle (left, top, width, height)\n * @param {Array} points 4 points array\n * @param {Array} [transform] an array of 6 numbers representing a 2x3 transform matrix\n * @return {Object} Object with left, top, width, height properties\n */\n makeBoundingBoxFromPoints: function(points, transform) {\n if (transform) {\n for (var i = 0; i < points.length; i++) {\n points[i] = fabric.util.transformPoint(points[i], transform);\n }\n }\n var xPoints = [points[0].x, points[1].x, points[2].x, points[3].x],\n minX = fabric.util.array.min(xPoints),\n maxX = fabric.util.array.max(xPoints),\n width = maxX - minX,\n yPoints = [points[0].y, points[1].y, points[2].y, points[3].y],\n minY = fabric.util.array.min(yPoints),\n maxY = fabric.util.array.max(yPoints),\n height = maxY - minY;\n\n return {\n left: minX,\n top: minY,\n width: width,\n height: height\n };\n },\n\n /**\n * Invert transformation t\n * @static\n * @memberOf fabric.util\n * @param {Array} t The transform\n * @return {Array} The inverted transform\n */\n invertTransform: function(t) {\n var a = 1 / (t[0] * t[3] - t[1] * t[2]),\n r = [a * t[3], -a * t[1], -a * t[2], a * t[0]],\n o = fabric.util.transformPoint({ x: t[4], y: t[5] }, r, true);\n r[4] = -o.x;\n r[5] = -o.y;\n return r;\n },\n\n /**\n * A wrapper around Number#toFixed, which contrary to native method returns number, not string.\n * @static\n * @memberOf fabric.util\n * @param {Number|String} number number to operate on\n * @param {Number} fractionDigits number of fraction digits to \"leave\"\n * @return {Number}\n */\n toFixed: function(number, fractionDigits) {\n return parseFloat(Number(number).toFixed(fractionDigits));\n },\n\n /**\n * Converts from attribute value to pixel value if applicable.\n * Returns converted pixels or original value not converted.\n * @param {Number|String} value number to operate on\n * @param {Number} fontSize\n * @return {Number|String}\n */\n parseUnit: function(value, fontSize) {\n var unit = /\\D{0,2}$/.exec(value),\n number = parseFloat(value);\n if (!fontSize) {\n fontSize = fabric.Text.DEFAULT_SVG_FONT_SIZE;\n }\n switch (unit[0]) {\n case 'mm':\n return number * fabric.DPI / 25.4;\n\n case 'cm':\n return number * fabric.DPI / 2.54;\n\n case 'in':\n return number * fabric.DPI;\n\n case 'pt':\n return number * fabric.DPI / 72; // or * 4 / 3\n\n case 'pc':\n return number * fabric.DPI / 72 * 12; // or * 16\n\n case 'em':\n return number * fontSize;\n\n default:\n return number;\n }\n },\n\n /**\n * Function which always returns `false`.\n * @static\n * @memberOf fabric.util\n * @return {Boolean}\n */\n falseFunction: function() {\n return false;\n },\n\n /**\n * Returns klass \"Class\" object of given namespace\n * @memberOf fabric.util\n * @param {String} type Type of object (eg. 'circle')\n * @param {String} namespace Namespace to get klass \"Class\" object from\n * @return {Object} klass \"Class\"\n */\n getKlass: function(type, namespace) {\n // capitalize first letter only\n type = fabric.util.string.camelize(type.charAt(0).toUpperCase() + type.slice(1));\n return fabric.util.resolveNamespace(namespace)[type];\n },\n\n /**\n * Returns array of attributes for given svg that fabric parses\n * @memberOf fabric.util\n * @param {String} type Type of svg element (eg. 'circle')\n * @return {Array} string names of supported attributes\n */\n getSvgAttributes: function(type) {\n var attributes = [\n 'instantiated_by_use',\n 'style',\n 'id',\n 'class'\n ];\n switch (type) {\n case 'linearGradient':\n attributes = attributes.concat(['x1', 'y1', 'x2', 'y2', 'gradientUnits', 'gradientTransform']);\n break;\n case 'radialGradient':\n attributes = attributes.concat(['gradientUnits', 'gradientTransform', 'cx', 'cy', 'r', 'fx', 'fy', 'fr']);\n break;\n case 'stop':\n attributes = attributes.concat(['offset', 'stop-color', 'stop-opacity']);\n break;\n }\n return attributes;\n },\n\n /**\n * Returns object of given namespace\n * @memberOf fabric.util\n * @param {String} namespace Namespace string e.g. 'fabric.Image.filter' or 'fabric'\n * @return {Object} Object for given namespace (default fabric)\n */\n resolveNamespace: function(namespace) {\n if (!namespace) {\n return fabric;\n }\n\n var parts = namespace.split('.'),\n len = parts.length, i,\n obj = global || fabric.window;\n\n for (i = 0; i < len; ++i) {\n obj = obj[parts[i]];\n }\n\n return obj;\n },\n\n /**\n * Loads image element from given url and passes it to a callback\n * @memberOf fabric.util\n * @param {String} url URL representing an image\n * @param {Function} callback Callback; invoked with loaded image\n * @param {*} [context] Context to invoke callback in\n * @param {Object} [crossOrigin] crossOrigin value to set image element to\n */\n loadImage: function(url, callback, context, crossOrigin) {\n if (!url) {\n callback && callback.call(context, url);\n return;\n }\n\n var img = fabric.util.createImage();\n\n /** @ignore */\n var onLoadCallback = function () {\n callback && callback.call(context, img, false);\n img = img.onload = img.onerror = null;\n };\n\n img.onload = onLoadCallback;\n /** @ignore */\n img.onerror = function() {\n fabric.log('Error loading ' + img.src);\n callback && callback.call(context, null, true);\n img = img.onload = img.onerror = null;\n };\n\n // data-urls appear to be buggy with crossOrigin\n // https://github.com/kangax/fabric.js/commit/d0abb90f1cd5c5ef9d2a94d3fb21a22330da3e0a#commitcomment-4513767\n // see https://code.google.com/p/chromium/issues/detail?id=315152\n // https://bugzilla.mozilla.org/show_bug.cgi?id=935069\n // crossOrigin null is the same as not set.\n if (url.indexOf('data') !== 0 &&\n crossOrigin !== undefined &&\n crossOrigin !== null) {\n img.crossOrigin = crossOrigin;\n }\n\n // IE10 / IE11-Fix: SVG contents from data: URI\n // will only be available if the IMG is present\n // in the DOM (and visible)\n if (url.substring(0,14) === 'data:image/svg') {\n img.onload = null;\n fabric.util.loadImageInDom(img, onLoadCallback);\n }\n\n img.src = url;\n },\n\n /**\n * Attaches SVG image with data: URL to the dom\n * @memberOf fabric.util\n * @param {Object} img Image object with data:image/svg src\n * @param {Function} callback Callback; invoked with loaded image\n * @return {Object} DOM element (div containing the SVG image)\n */\n loadImageInDom: function(img, onLoadCallback) {\n var div = fabric.document.createElement('div');\n div.style.width = div.style.height = '1px';\n div.style.left = div.style.top = '-100%';\n div.style.position = 'absolute';\n div.appendChild(img);\n fabric.document.querySelector('body').appendChild(div);\n /**\n * Wrap in function to:\n * 1. Call existing callback\n * 2. Cleanup DOM\n */\n img.onload = function () {\n onLoadCallback();\n div.parentNode.removeChild(div);\n div = null;\n };\n },\n\n /**\n * Creates corresponding fabric instances from their object representations\n * @static\n * @memberOf fabric.util\n * @param {Array} objects Objects to enliven\n * @param {Function} callback Callback to invoke when all objects are created\n * @param {String} namespace Namespace to get klass \"Class\" object from\n * @param {Function} reviver Method for further parsing of object elements,\n * called after each fabric object created.\n */\n enlivenObjects: function(objects, callback, namespace, reviver) {\n objects = objects || [];\n\n var enlivenedObjects = [],\n numLoadedObjects = 0,\n numTotalObjects = objects.length;\n\n function onLoaded() {\n if (++numLoadedObjects === numTotalObjects) {\n callback && callback(enlivenedObjects.filter(function(obj) {\n // filter out undefined objects (objects that gave error)\n return obj;\n }));\n }\n }\n\n if (!numTotalObjects) {\n callback && callback(enlivenedObjects);\n return;\n }\n\n objects.forEach(function (o, index) {\n // if sparse array\n if (!o || !o.type) {\n onLoaded();\n return;\n }\n var klass = fabric.util.getKlass(o.type, namespace);\n klass.fromObject(o, function (obj, error) {\n error || (enlivenedObjects[index] = obj);\n reviver && reviver(o, obj, error);\n onLoaded();\n });\n });\n },\n\n /**\n * Creates corresponding fabric instances residing in an object, e.g. `clipPath`\n * @see {@link fabric.Object.ENLIVEN_PROPS}\n * @param {Object} object\n * @param {Object} [context] assign enlived props to this object (pass null to skip this)\n * @param {(objects:fabric.Object[]) => void} callback\n */\n enlivenObjectEnlivables: function (object, context, callback) {\n var enlivenProps = fabric.Object.ENLIVEN_PROPS.filter(function (key) { return !!object[key]; });\n fabric.util.enlivenObjects(enlivenProps.map(function (key) { return object[key]; }), function (enlivedProps) {\n var objects = {};\n enlivenProps.forEach(function (key, index) {\n objects[key] = enlivedProps[index];\n context && (context[key] = enlivedProps[index]);\n });\n callback && callback(objects);\n });\n },\n\n /**\n * Create and wait for loading of patterns\n * @static\n * @memberOf fabric.util\n * @param {Array} patterns Objects to enliven\n * @param {Function} callback Callback to invoke when all objects are created\n * called after each fabric object created.\n */\n enlivenPatterns: function(patterns, callback) {\n patterns = patterns || [];\n\n function onLoaded() {\n if (++numLoadedPatterns === numPatterns) {\n callback && callback(enlivenedPatterns);\n }\n }\n\n var enlivenedPatterns = [],\n numLoadedPatterns = 0,\n numPatterns = patterns.length;\n\n if (!numPatterns) {\n callback && callback(enlivenedPatterns);\n return;\n }\n\n patterns.forEach(function (p, index) {\n if (p && p.source) {\n new fabric.Pattern(p, function(pattern) {\n enlivenedPatterns[index] = pattern;\n onLoaded();\n });\n }\n else {\n enlivenedPatterns[index] = p;\n onLoaded();\n }\n });\n },\n\n /**\n * Groups SVG elements (usually those retrieved from SVG document)\n * @static\n * @memberOf fabric.util\n * @param {Array} elements SVG elements to group\n * @param {Object} [options] Options object\n * @param {String} path Value to set sourcePath to\n * @return {fabric.Object|fabric.Group}\n */\n groupSVGElements: function(elements, options, path) {\n var object;\n if (elements && elements.length === 1) {\n return elements[0];\n }\n if (options) {\n if (options.width && options.height) {\n options.centerPoint = {\n x: options.width / 2,\n y: options.height / 2\n };\n }\n else {\n delete options.width;\n delete options.height;\n }\n }\n object = new fabric.Group(elements, options);\n if (typeof path !== 'undefined') {\n object.sourcePath = path;\n }\n return object;\n },\n\n /**\n * Populates an object with properties of another object\n * @static\n * @memberOf fabric.util\n * @param {Object} source Source object\n * @param {Object} destination Destination object\n * @return {Array} properties Properties names to include\n */\n populateWithProperties: function(source, destination, properties) {\n if (properties && Array.isArray(properties)) {\n for (var i = 0, len = properties.length; i < len; i++) {\n if (properties[i] in source) {\n destination[properties[i]] = source[properties[i]];\n }\n }\n }\n },\n\n /**\n * Creates canvas element\n * @static\n * @memberOf fabric.util\n * @return {CanvasElement} initialized canvas element\n */\n createCanvasElement: function() {\n return fabric.document.createElement('canvas');\n },\n\n /**\n * Creates a canvas element that is a copy of another and is also painted\n * @param {CanvasElement} canvas to copy size and content of\n * @static\n * @memberOf fabric.util\n * @return {CanvasElement} initialized canvas element\n */\n copyCanvasElement: function(canvas) {\n var newCanvas = fabric.util.createCanvasElement();\n newCanvas.width = canvas.width;\n newCanvas.height = canvas.height;\n newCanvas.getContext('2d').drawImage(canvas, 0, 0);\n return newCanvas;\n },\n\n /**\n * since 2.6.0 moved from canvas instance to utility.\n * @param {CanvasElement} canvasEl to copy size and content of\n * @param {String} format 'jpeg' or 'png', in some browsers 'webp' is ok too\n * @param {Number} quality <= 1 and > 0\n * @static\n * @memberOf fabric.util\n * @return {String} data url\n */\n toDataURL: function(canvasEl, format, quality) {\n return canvasEl.toDataURL('image/' + format, quality);\n },\n\n /**\n * Creates image element (works on client and node)\n * @static\n * @memberOf fabric.util\n * @return {HTMLImageElement} HTML image element\n */\n createImage: function() {\n return fabric.document.createElement('img');\n },\n\n /**\n * Multiply matrix A by matrix B to nest transformations\n * @static\n * @memberOf fabric.util\n * @param {Array} a First transformMatrix\n * @param {Array} b Second transformMatrix\n * @param {Boolean} is2x2 flag to multiply matrices as 2x2 matrices\n * @return {Array} The product of the two transform matrices\n */\n multiplyTransformMatrices: function(a, b, is2x2) {\n // Matrix multiply a * b\n return [\n a[0] * b[0] + a[2] * b[1],\n a[1] * b[0] + a[3] * b[1],\n a[0] * b[2] + a[2] * b[3],\n a[1] * b[2] + a[3] * b[3],\n is2x2 ? 0 : a[0] * b[4] + a[2] * b[5] + a[4],\n is2x2 ? 0 : a[1] * b[4] + a[3] * b[5] + a[5]\n ];\n },\n\n /**\n * Decomposes standard 2x3 matrix into transform components\n * @static\n * @memberOf fabric.util\n * @param {Array} a transformMatrix\n * @return {Object} Components of transform\n */\n qrDecompose: function(a) {\n var angle = atan2(a[1], a[0]),\n denom = pow(a[0], 2) + pow(a[1], 2),\n scaleX = sqrt(denom),\n scaleY = (a[0] * a[3] - a[2] * a[1]) / scaleX,\n skewX = atan2(a[0] * a[2] + a[1] * a [3], denom);\n return {\n angle: angle / PiBy180,\n scaleX: scaleX,\n scaleY: scaleY,\n skewX: skewX / PiBy180,\n skewY: 0,\n translateX: a[4],\n translateY: a[5]\n };\n },\n\n /**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet\n * @static\n * @memberOf fabric.util\n * @param {Object} options\n * @param {Number} [options.angle] angle in degrees\n * @return {Number[]} transform matrix\n */\n calcRotateMatrix: function(options) {\n if (!options.angle) {\n return fabric.iMatrix.concat();\n }\n var theta = fabric.util.degreesToRadians(options.angle),\n cos = fabric.util.cos(theta),\n sin = fabric.util.sin(theta);\n return [cos, sin, -sin, cos, 0, 0];\n },\n\n /**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet.\n * is called DimensionsTransformMatrix because those properties are the one that influence\n * the size of the resulting box of the object.\n * @static\n * @memberOf fabric.util\n * @param {Object} options\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Boolean} [options.flipX]\n * @param {Boolean} [options.flipY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewY]\n * @return {Number[]} transform matrix\n */\n calcDimensionsMatrix: function(options) {\n var scaleX = typeof options.scaleX === 'undefined' ? 1 : options.scaleX,\n scaleY = typeof options.scaleY === 'undefined' ? 1 : options.scaleY,\n scaleMatrix = [\n options.flipX ? -scaleX : scaleX,\n 0,\n 0,\n options.flipY ? -scaleY : scaleY,\n 0,\n 0],\n multiply = fabric.util.multiplyTransformMatrices,\n degreesToRadians = fabric.util.degreesToRadians;\n if (options.skewX) {\n scaleMatrix = multiply(\n scaleMatrix,\n [1, 0, Math.tan(degreesToRadians(options.skewX)), 1],\n true);\n }\n if (options.skewY) {\n scaleMatrix = multiply(\n scaleMatrix,\n [1, Math.tan(degreesToRadians(options.skewY)), 0, 1],\n true);\n }\n return scaleMatrix;\n },\n\n /**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet\n * @static\n * @memberOf fabric.util\n * @param {Object} options\n * @param {Number} [options.angle]\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Boolean} [options.flipX]\n * @param {Boolean} [options.flipY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewX]\n * @param {Number} [options.translateX]\n * @param {Number} [options.translateY]\n * @return {Number[]} transform matrix\n */\n composeMatrix: function(options) {\n var matrix = [1, 0, 0, 1, options.translateX || 0, options.translateY || 0],\n multiply = fabric.util.multiplyTransformMatrices;\n if (options.angle) {\n matrix = multiply(matrix, fabric.util.calcRotateMatrix(options));\n }\n if (options.scaleX !== 1 || options.scaleY !== 1 ||\n options.skewX || options.skewY || options.flipX || options.flipY) {\n matrix = multiply(matrix, fabric.util.calcDimensionsMatrix(options));\n }\n return matrix;\n },\n\n /**\n * reset an object transform state to neutral. Top and left are not accounted for\n * @static\n * @memberOf fabric.util\n * @param {fabric.Object} target object to transform\n */\n resetObjectTransform: function (target) {\n target.scaleX = 1;\n target.scaleY = 1;\n target.skewX = 0;\n target.skewY = 0;\n target.flipX = false;\n target.flipY = false;\n target.rotate(0);\n },\n\n /**\n * Extract Object transform values\n * @static\n * @memberOf fabric.util\n * @param {fabric.Object} target object to read from\n * @return {Object} Components of transform\n */\n saveObjectTransform: function (target) {\n return {\n scaleX: target.scaleX,\n scaleY: target.scaleY,\n skewX: target.skewX,\n skewY: target.skewY,\n angle: target.angle,\n left: target.left,\n flipX: target.flipX,\n flipY: target.flipY,\n top: target.top\n };\n },\n\n /**\n * Returns true if context has transparent pixel\n * at specified location (taking tolerance into account)\n * @param {CanvasRenderingContext2D} ctx context\n * @param {Number} x x coordinate\n * @param {Number} y y coordinate\n * @param {Number} tolerance Tolerance\n */\n isTransparent: function(ctx, x, y, tolerance) {\n\n // If tolerance is > 0 adjust start coords to take into account.\n // If moves off Canvas fix to 0\n if (tolerance > 0) {\n if (x > tolerance) {\n x -= tolerance;\n }\n else {\n x = 0;\n }\n if (y > tolerance) {\n y -= tolerance;\n }\n else {\n y = 0;\n }\n }\n\n var _isTransparent = true, i, temp,\n imageData = ctx.getImageData(x, y, (tolerance * 2) || 1, (tolerance * 2) || 1),\n l = imageData.data.length;\n\n // Split image data - for tolerance > 1, pixelDataSize = 4;\n for (i = 3; i < l; i += 4) {\n temp = imageData.data[i];\n _isTransparent = temp <= 0;\n if (_isTransparent === false) {\n break; // Stop if colour found\n }\n }\n\n imageData = null;\n\n return _isTransparent;\n },\n\n /**\n * Parse preserveAspectRatio attribute from element\n * @param {string} attribute to be parsed\n * @return {Object} an object containing align and meetOrSlice attribute\n */\n parsePreserveAspectRatioAttribute: function(attribute) {\n var meetOrSlice = 'meet', alignX = 'Mid', alignY = 'Mid',\n aspectRatioAttrs = attribute.split(' '), align;\n\n if (aspectRatioAttrs && aspectRatioAttrs.length) {\n meetOrSlice = aspectRatioAttrs.pop();\n if (meetOrSlice !== 'meet' && meetOrSlice !== 'slice') {\n align = meetOrSlice;\n meetOrSlice = 'meet';\n }\n else if (aspectRatioAttrs.length) {\n align = aspectRatioAttrs.pop();\n }\n }\n //divide align in alignX and alignY\n alignX = align !== 'none' ? align.slice(1, 4) : 'none';\n alignY = align !== 'none' ? align.slice(5, 8) : 'none';\n return {\n meetOrSlice: meetOrSlice,\n alignX: alignX,\n alignY: alignY\n };\n },\n\n /**\n * Clear char widths cache for the given font family or all the cache if no\n * fontFamily is specified.\n * Use it if you know you are loading fonts in a lazy way and you are not waiting\n * for custom fonts to load properly when adding text objects to the canvas.\n * If a text object is added when its own font is not loaded yet, you will get wrong\n * measurement and so wrong bounding boxes.\n * After the font cache is cleared, either change the textObject text content or call\n * initDimensions() to trigger a recalculation\n * @memberOf fabric.util\n * @param {String} [fontFamily] font family to clear\n */\n clearFabricFontCache: function(fontFamily) {\n fontFamily = (fontFamily || '').toLowerCase();\n if (!fontFamily) {\n fabric.charWidthsCache = { };\n }\n else if (fabric.charWidthsCache[fontFamily]) {\n delete fabric.charWidthsCache[fontFamily];\n }\n },\n\n /**\n * Given current aspect ratio, determines the max width and height that can\n * respect the total allowed area for the cache.\n * @memberOf fabric.util\n * @param {Number} ar aspect ratio\n * @param {Number} maximumArea Maximum area you want to achieve\n * @return {Object.x} Limited dimensions by X\n * @return {Object.y} Limited dimensions by Y\n */\n limitDimsByArea: function(ar, maximumArea) {\n var roughWidth = Math.sqrt(maximumArea * ar),\n perfLimitSizeY = Math.floor(maximumArea / roughWidth);\n return { x: Math.floor(roughWidth), y: perfLimitSizeY };\n },\n\n capValue: function(min, value, max) {\n return Math.max(min, Math.min(value, max));\n },\n\n /**\n * Finds the scale for the object source to fit inside the object destination,\n * keeping aspect ratio intact.\n * respect the total allowed area for the cache.\n * @memberOf fabric.util\n * @param {Object | fabric.Object} source\n * @param {Number} source.height natural unscaled height of the object\n * @param {Number} source.width natural unscaled width of the object\n * @param {Object | fabric.Object} destination\n * @param {Number} destination.height natural unscaled height of the object\n * @param {Number} destination.width natural unscaled width of the object\n * @return {Number} scale factor to apply to source to fit into destination\n */\n findScaleToFit: function(source, destination) {\n return Math.min(destination.width / source.width, destination.height / source.height);\n },\n\n /**\n * Finds the scale for the object source to cover entirely the object destination,\n * keeping aspect ratio intact.\n * respect the total allowed area for the cache.\n * @memberOf fabric.util\n * @param {Object | fabric.Object} source\n * @param {Number} source.height natural unscaled height of the object\n * @param {Number} source.width natural unscaled width of the object\n * @param {Object | fabric.Object} destination\n * @param {Number} destination.height natural unscaled height of the object\n * @param {Number} destination.width natural unscaled width of the object\n * @return {Number} scale factor to apply to source to cover destination\n */\n findScaleToCover: function(source, destination) {\n return Math.max(destination.width / source.width, destination.height / source.height);\n },\n\n /**\n * given an array of 6 number returns something like `\"matrix(...numbers)\"`\n * @memberOf fabric.util\n * @param {Array} transform an array with 6 numbers\n * @return {String} transform matrix for svg\n * @return {Object.y} Limited dimensions by Y\n */\n matrixToSVG: function(transform) {\n return 'matrix(' + transform.map(function(value) {\n return fabric.util.toFixed(value, fabric.Object.NUM_FRACTION_DIGITS);\n }).join(' ') + ')';\n },\n\n /**\n * given an object and a transform, apply the inverse transform to the object,\n * this is equivalent to remove from that object that transformation, so that\n * added in a space with the removed transform, the object will be the same as before.\n * Removing from an object a transform that scale by 2 is like scaling it by 1/2.\n * Removing from an object a transfrom that rotate by 30deg is like rotating by 30deg\n * in the opposite direction.\n * This util is used to add objects inside transformed groups or nested groups.\n * @memberOf fabric.util\n * @param {fabric.Object} object the object you want to transform\n * @param {Array} transform the destination transform\n */\n removeTransformFromObject: function(object, transform) {\n var inverted = fabric.util.invertTransform(transform),\n finalTransform = fabric.util.multiplyTransformMatrices(inverted, object.calcOwnMatrix());\n fabric.util.applyTransformToObject(object, finalTransform);\n },\n\n /**\n * given an object and a transform, apply the transform to the object.\n * this is equivalent to change the space where the object is drawn.\n * Adding to an object a transform that scale by 2 is like scaling it by 2.\n * This is used when removing an object from an active selection for example.\n * @memberOf fabric.util\n * @param {fabric.Object} object the object you want to transform\n * @param {Array} transform the destination transform\n */\n addTransformToObject: function(object, transform) {\n fabric.util.applyTransformToObject(\n object,\n fabric.util.multiplyTransformMatrices(transform, object.calcOwnMatrix())\n );\n },\n\n /**\n * discard an object transform state and apply the one from the matrix.\n * @memberOf fabric.util\n * @param {fabric.Object} object the object you want to transform\n * @param {Array} transform the destination transform\n */\n applyTransformToObject: function(object, transform) {\n var options = fabric.util.qrDecompose(transform),\n center = new fabric.Point(options.translateX, options.translateY);\n object.flipX = false;\n object.flipY = false;\n object.set('scaleX', options.scaleX);\n object.set('scaleY', options.scaleY);\n object.skewX = options.skewX;\n object.skewY = options.skewY;\n object.angle = options.angle;\n object.setPositionByOrigin(center, 'center', 'center');\n },\n\n /**\n * given a width and height, return the size of the bounding box\n * that can contains the box with width/height with applied transform\n * described in options.\n * Use to calculate the boxes around objects for controls.\n * @memberOf fabric.util\n * @param {Number} width\n * @param {Number} height\n * @param {Object} options\n * @param {Number} options.scaleX\n * @param {Number} options.scaleY\n * @param {Number} options.skewX\n * @param {Number} options.skewY\n * @return {Object.x} width of containing\n * @return {Object.y} height of containing\n */\n sizeAfterTransform: function(width, height, options) {\n var dimX = width / 2, dimY = height / 2,\n points = [\n {\n x: -dimX,\n y: -dimY\n },\n {\n x: dimX,\n y: -dimY\n },\n {\n x: -dimX,\n y: dimY\n },\n {\n x: dimX,\n y: dimY\n }],\n transformMatrix = fabric.util.calcDimensionsMatrix(options),\n bbox = fabric.util.makeBoundingBoxFromPoints(points, transformMatrix);\n return {\n x: bbox.width,\n y: bbox.height,\n };\n },\n\n /**\n * Merges 2 clip paths into one visually equal clip path\n *\n * **IMPORTANT**:\\\n * Does **NOT** clone the arguments, clone them proir if necessary.\n *\n * Creates a wrapper (group) that contains one clip path and is clipped by the other so content is kept where both overlap.\n * Use this method if both the clip paths may have nested clip paths of their own, so assigning one to the other's clip path property is not possible.\n *\n * In order to handle the `inverted` property we follow logic described in the following cases:\\\n * **(1)** both clip paths are inverted - the clip paths pass the inverted prop to the wrapper and loose it themselves.\\\n * **(2)** one is inverted and the other isn't - the wrapper shouldn't become inverted and the inverted clip path must clip the non inverted one to produce an identical visual effect.\\\n * **(3)** both clip paths are not inverted - wrapper and clip paths remain unchanged.\n *\n * @memberOf fabric.util\n * @param {fabric.Object} c1\n * @param {fabric.Object} c2\n * @returns {fabric.Object} merged clip path\n */\n mergeClipPaths: function (c1, c2) {\n var a = c1, b = c2;\n if (a.inverted && !b.inverted) {\n // case (2)\n a = c2;\n b = c1;\n }\n // `b` becomes `a`'s clip path so we transform `b` to `a` coordinate plane\n fabric.util.applyTransformToObject(\n b,\n fabric.util.multiplyTransformMatrices(\n fabric.util.invertTransform(a.calcTransformMatrix()),\n b.calcTransformMatrix()\n )\n );\n // assign the `inverted` prop to the wrapping group\n var inverted = a.inverted && b.inverted;\n if (inverted) {\n // case (1)\n a.inverted = b.inverted = false;\n }\n return new fabric.Group([a], { clipPath: b, inverted: inverted });\n },\n\n /**\n * @memberOf fabric.util\n * @param {Object} prevStyle first style to compare\n * @param {Object} thisStyle second style to compare\n * @param {boolean} forTextSpans whether to check overline, underline, and line-through properties\n * @return {boolean} true if the style changed\n */\n hasStyleChanged: function(prevStyle, thisStyle, forTextSpans) {\n forTextSpans = forTextSpans || false;\n return (prevStyle.fill !== thisStyle.fill ||\n prevStyle.stroke !== thisStyle.stroke ||\n prevStyle.strokeWidth !== thisStyle.strokeWidth ||\n prevStyle.fontSize !== thisStyle.fontSize ||\n prevStyle.fontFamily !== thisStyle.fontFamily ||\n prevStyle.fontWeight !== thisStyle.fontWeight ||\n prevStyle.fontStyle !== thisStyle.fontStyle ||\n prevStyle.deltaY !== thisStyle.deltaY) ||\n (forTextSpans &&\n (prevStyle.overline !== thisStyle.overline ||\n prevStyle.underline !== thisStyle.underline ||\n prevStyle.linethrough !== thisStyle.linethrough));\n },\n\n /**\n * Returns the array form of a text object's inline styles property with styles grouped in ranges\n * rather than per character. This format is less verbose, and is better suited for storage\n * so it is used in serialization (not during runtime).\n * @memberOf fabric.util\n * @param {object} styles per character styles for a text object\n * @param {String} text the text string that the styles are applied to\n * @return {{start: number, end: number, style: object}[]}\n */\n stylesToArray: function(styles, text) {\n // clone style structure to prevent mutation\n var styles = fabric.util.object.clone(styles, true),\n textLines = text.split('\\n'),\n charIndex = -1, prevStyle = {}, stylesArray = [];\n //loop through each textLine\n for (var i = 0; i < textLines.length; i++) {\n if (!styles[i]) {\n //no styles exist for this line, so add the line's length to the charIndex total\n charIndex += textLines[i].length;\n continue;\n }\n //loop through each character of the current line\n for (var c = 0; c < textLines[i].length; c++) {\n charIndex++;\n var thisStyle = styles[i][c];\n //check if style exists for this character\n if (thisStyle) {\n var styleChanged = fabric.util.hasStyleChanged(prevStyle, thisStyle, true);\n if (styleChanged) {\n stylesArray.push({\n start: charIndex,\n end: charIndex + 1,\n style: thisStyle\n });\n }\n else {\n //if style is the same as previous character, increase end index\n stylesArray[stylesArray.length - 1].end++;\n }\n }\n prevStyle = thisStyle || {};\n }\n }\n return stylesArray;\n },\n\n /**\n * Returns the object form of the styles property with styles that are assigned per\n * character rather than grouped by range. This format is more verbose, and is\n * only used during runtime (not for serialization/storage)\n * @memberOf fabric.util\n * @param {Array} styles the serialized form of a text object's styles\n * @param {String} text the text string that the styles are applied to\n * @return {Object}\n */\n stylesFromArray: function(styles, text) {\n if (!Array.isArray(styles)) {\n return styles;\n }\n var textLines = text.split('\\n'),\n charIndex = -1, styleIndex = 0, stylesObject = {};\n //loop through each textLine\n for (var i = 0; i < textLines.length; i++) {\n //loop through each character of the current line\n for (var c = 0; c < textLines[i].length; c++) {\n charIndex++;\n //check if there's a style collection that includes the current character\n if (styles[styleIndex]\n && styles[styleIndex].start <= charIndex\n && charIndex < styles[styleIndex].end) {\n //create object for line index if it doesn't exist\n stylesObject[i] = stylesObject[i] || {};\n //assign a style at this character's index\n stylesObject[i][c] = Object.assign({}, styles[styleIndex].style);\n //if character is at the end of the current style collection, move to the next\n if (charIndex === styles[styleIndex].end - 1) {\n styleIndex++;\n }\n }\n }\n }\n return stylesObject;\n }\n };\n})(typeof exports !== 'undefined' ? exports : this);\n(function() {\n var _join = Array.prototype.join,\n commandLengths = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7\n },\n repeatedCommands = {\n m: 'l',\n M: 'L'\n };\n function segmentToBezier(th2, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, fromX, fromY) {\n var costh2 = fabric.util.cos(th2),\n sinth2 = fabric.util.sin(th2),\n costh3 = fabric.util.cos(th3),\n sinth3 = fabric.util.sin(th3),\n toX = cosTh * rx * costh3 - sinTh * ry * sinth3 + cx1,\n toY = sinTh * rx * costh3 + cosTh * ry * sinth3 + cy1,\n cp1X = fromX + mT * ( -cosTh * rx * sinth2 - sinTh * ry * costh2),\n cp1Y = fromY + mT * ( -sinTh * rx * sinth2 + cosTh * ry * costh2),\n cp2X = toX + mT * ( cosTh * rx * sinth3 + sinTh * ry * costh3),\n cp2Y = toY + mT * ( sinTh * rx * sinth3 - cosTh * ry * costh3);\n\n return ['C',\n cp1X, cp1Y,\n cp2X, cp2Y,\n toX, toY\n ];\n }\n\n /* Adapted from http://dxr.mozilla.org/mozilla-central/source/content/svg/content/src/nsSVGPathDataParser.cpp\n * by Andrea Bogazzi code is under MPL. if you don't have a copy of the license you can take it here\n * http://mozilla.org/MPL/2.0/\n */\n function arcToSegments(toX, toY, rx, ry, large, sweep, rotateX) {\n var PI = Math.PI, th = rotateX * PI / 180,\n sinTh = fabric.util.sin(th),\n cosTh = fabric.util.cos(th),\n fromX = 0, fromY = 0;\n\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n var px = -cosTh * toX * 0.5 - sinTh * toY * 0.5,\n py = -cosTh * toY * 0.5 + sinTh * toX * 0.5,\n rx2 = rx * rx, ry2 = ry * ry, py2 = py * py, px2 = px * px,\n pl = rx2 * ry2 - rx2 * py2 - ry2 * px2,\n root = 0;\n\n if (pl < 0) {\n var s = Math.sqrt(1 - pl / (rx2 * ry2));\n rx *= s;\n ry *= s;\n }\n else {\n root = (large === sweep ? -1.0 : 1.0) *\n Math.sqrt( pl / (rx2 * py2 + ry2 * px2));\n }\n\n var cx = root * rx * py / ry,\n cy = -root * ry * px / rx,\n cx1 = cosTh * cx - sinTh * cy + toX * 0.5,\n cy1 = sinTh * cx + cosTh * cy + toY * 0.5,\n mTheta = calcVectorAngle(1, 0, (px - cx) / rx, (py - cy) / ry),\n dtheta = calcVectorAngle((px - cx) / rx, (py - cy) / ry, (-px - cx) / rx, (-py - cy) / ry);\n\n if (sweep === 0 && dtheta > 0) {\n dtheta -= 2 * PI;\n }\n else if (sweep === 1 && dtheta < 0) {\n dtheta += 2 * PI;\n }\n\n // Convert into cubic bezier segments <= 90deg\n var segments = Math.ceil(Math.abs(dtheta / PI * 2)),\n result = [], mDelta = dtheta / segments,\n mT = 8 / 3 * Math.sin(mDelta / 4) * Math.sin(mDelta / 4) / Math.sin(mDelta / 2),\n th3 = mTheta + mDelta;\n\n for (var i = 0; i < segments; i++) {\n result[i] = segmentToBezier(mTheta, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, fromX, fromY);\n fromX = result[i][5];\n fromY = result[i][6];\n mTheta = th3;\n th3 += mDelta;\n }\n return result;\n }\n\n /*\n * Private\n */\n function calcVectorAngle(ux, uy, vx, vy) {\n var ta = Math.atan2(uy, ux),\n tb = Math.atan2(vy, vx);\n if (tb >= ta) {\n return tb - ta;\n }\n else {\n return 2 * Math.PI - (ta - tb);\n }\n }\n\n /**\n * Calculate bounding box of a beziercurve\n * @param {Number} x0 starting point\n * @param {Number} y0\n * @param {Number} x1 first control point\n * @param {Number} y1\n * @param {Number} x2 secondo control point\n * @param {Number} y2\n * @param {Number} x3 end of bezier\n * @param {Number} y3\n */\n // taken from http://jsbin.com/ivomiq/56/edit no credits available for that.\n // TODO: can we normalize this with the starting points set at 0 and then translated the bbox?\n function getBoundsOfCurve(x0, y0, x1, y1, x2, y2, x3, y3) {\n var argsString;\n if (fabric.cachesBoundsOfCurve) {\n argsString = _join.call(arguments);\n if (fabric.boundsOfCurveCache[argsString]) {\n return fabric.boundsOfCurveCache[argsString];\n }\n }\n\n var sqrt = Math.sqrt,\n min = Math.min, max = Math.max,\n abs = Math.abs, tvalues = [],\n bounds = [[], []],\n a, b, c, t, t1, t2, b2ac, sqrtb2ac;\n\n b = 6 * x0 - 12 * x1 + 6 * x2;\n a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;\n c = 3 * x1 - 3 * x0;\n\n for (var i = 0; i < 2; ++i) {\n if (i > 0) {\n b = 6 * y0 - 12 * y1 + 6 * y2;\n a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;\n c = 3 * y1 - 3 * y0;\n }\n\n if (abs(a) < 1e-12) {\n if (abs(b) < 1e-12) {\n continue;\n }\n t = -c / b;\n if (0 < t && t < 1) {\n tvalues.push(t);\n }\n continue;\n }\n b2ac = b * b - 4 * c * a;\n if (b2ac < 0) {\n continue;\n }\n sqrtb2ac = sqrt(b2ac);\n t1 = (-b + sqrtb2ac) / (2 * a);\n if (0 < t1 && t1 < 1) {\n tvalues.push(t1);\n }\n t2 = (-b - sqrtb2ac) / (2 * a);\n if (0 < t2 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n\n var x, y, j = tvalues.length, jlen = j, mt;\n while (j--) {\n t = tvalues[j];\n mt = 1 - t;\n x = (mt * mt * mt * x0) + (3 * mt * mt * t * x1) + (3 * mt * t * t * x2) + (t * t * t * x3);\n bounds[0][j] = x;\n\n y = (mt * mt * mt * y0) + (3 * mt * mt * t * y1) + (3 * mt * t * t * y2) + (t * t * t * y3);\n bounds[1][j] = y;\n }\n\n bounds[0][jlen] = x0;\n bounds[1][jlen] = y0;\n bounds[0][jlen + 1] = x3;\n bounds[1][jlen + 1] = y3;\n var result = [\n {\n x: min.apply(null, bounds[0]),\n y: min.apply(null, bounds[1])\n },\n {\n x: max.apply(null, bounds[0]),\n y: max.apply(null, bounds[1])\n }\n ];\n if (fabric.cachesBoundsOfCurve) {\n fabric.boundsOfCurveCache[argsString] = result;\n }\n return result;\n }\n\n /**\n * Converts arc to a bunch of bezier curves\n * @param {Number} fx starting point x\n * @param {Number} fy starting point y\n * @param {Array} coords Arc command\n */\n function fromArcToBeziers(fx, fy, coords) {\n var rx = coords[1],\n ry = coords[2],\n rot = coords[3],\n large = coords[4],\n sweep = coords[5],\n tx = coords[6],\n ty = coords[7],\n segsNorm = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot);\n\n for (var i = 0, len = segsNorm.length; i < len; i++) {\n segsNorm[i][1] += fx;\n segsNorm[i][2] += fy;\n segsNorm[i][3] += fx;\n segsNorm[i][4] += fy;\n segsNorm[i][5] += fx;\n segsNorm[i][6] += fy;\n }\n return segsNorm;\n };\n\n /**\n * This function take a parsed SVG path and make it simpler for fabricJS logic.\n * simplification consist of: only UPPERCASE absolute commands ( relative converted to absolute )\n * S converted in C, T converted in Q, A converted in C.\n * @param {Array} path the array of commands of a parsed svg path for fabric.Path\n * @return {Array} the simplified array of commands of a parsed svg path for fabric.Path\n */\n function makePathSimpler(path) {\n // x and y represent the last point of the path. the previous command point.\n // we add them to each relative command to make it an absolute comment.\n // we also swap the v V h H with L, because are easier to transform.\n var x = 0, y = 0, len = path.length,\n // x1 and y1 represent the last point of the subpath. the subpath is started with\n // m or M command. When a z or Z command is drawn, x and y need to be resetted to\n // the last x1 and y1.\n x1 = 0, y1 = 0, current, i, converted,\n // previous will host the letter of the previous command, to handle S and T.\n // controlX and controlY will host the previous reflected control point\n destinationPath = [], previous, controlX, controlY;\n for (i = 0; i < len; ++i) {\n converted = false;\n current = path[i].slice(0);\n switch (current[0]) { // first letter\n case 'l': // lineto, relative\n current[0] = 'L';\n current[1] += x;\n current[2] += y;\n // falls through\n case 'L':\n x = current[1];\n y = current[2];\n break;\n case 'h': // horizontal lineto, relative\n current[1] += x;\n // falls through\n case 'H':\n current[0] = 'L';\n current[2] = y;\n x = current[1];\n break;\n case 'v': // vertical lineto, relative\n current[1] += y;\n // falls through\n case 'V':\n current[0] = 'L';\n y = current[1];\n current[1] = x;\n current[2] = y;\n break;\n case 'm': // moveTo, relative\n current[0] = 'M';\n current[1] += x;\n current[2] += y;\n // falls through\n case 'M':\n x = current[1];\n y = current[2];\n x1 = current[1];\n y1 = current[2];\n break;\n case 'c': // bezierCurveTo, relative\n current[0] = 'C';\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n current[5] += x;\n current[6] += y;\n // falls through\n case 'C':\n controlX = current[3];\n controlY = current[4];\n x = current[5];\n y = current[6];\n break;\n case 's': // shorthand cubic bezierCurveTo, relative\n current[0] = 'S';\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n // falls through\n case 'S':\n // would be sScC but since we are swapping sSc for C, we check just that.\n if (previous === 'C') {\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n else {\n // If there is no previous command or if the previous command was not a C, c, S, or s,\n // the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n x = current[3];\n y = current[4];\n current[0] = 'C';\n current[5] = current[3];\n current[6] = current[4];\n current[3] = current[1];\n current[4] = current[2];\n current[1] = controlX;\n current[2] = controlY;\n // current[3] and current[4] are NOW the second control point.\n // we keep it for the next reflection.\n controlX = current[3];\n controlY = current[4];\n break;\n case 'q': // quadraticCurveTo, relative\n current[0] = 'Q';\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n // falls through\n case 'Q':\n controlX = current[1];\n controlY = current[2];\n x = current[3];\n y = current[4];\n break;\n case 't': // shorthand quadraticCurveTo, relative\n current[0] = 'T';\n current[1] += x;\n current[2] += y;\n // falls through\n case 'T':\n if (previous === 'Q') {\n // calculate reflection of previous control point\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n else {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n current[0] = 'Q';\n x = current[1];\n y = current[2];\n current[1] = controlX;\n current[2] = controlY;\n current[3] = x;\n current[4] = y;\n break;\n case 'a':\n current[0] = 'A';\n current[6] += x;\n current[7] += y;\n // falls through\n case 'A':\n converted = true;\n destinationPath = destinationPath.concat(fromArcToBeziers(x, y, current));\n x = current[6];\n y = current[7];\n break;\n case 'z':\n case 'Z':\n x = x1;\n y = y1;\n break;\n default:\n }\n if (!converted) {\n destinationPath.push(current);\n }\n previous = current[0];\n }\n return destinationPath;\n };\n\n /**\n * Calc length from point x1,y1 to x2,y2\n * @param {Number} x1 starting point x\n * @param {Number} y1 starting point y\n * @param {Number} x2 starting point x\n * @param {Number} y2 starting point y\n * @return {Number} length of segment\n */\n function calcLineLength(x1, y1, x2, y2) {\n return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n }\n\n // functions for the Cubic beizer\n // taken from: https://github.com/konvajs/konva/blob/7.0.5/src/shapes/Path.ts#L350\n function CB1(t) {\n return t * t * t;\n }\n function CB2(t) {\n return 3 * t * t * (1 - t);\n }\n function CB3(t) {\n return 3 * t * (1 - t) * (1 - t);\n }\n function CB4(t) {\n return (1 - t) * (1 - t) * (1 - t);\n }\n\n function getPointOnCubicBezierIterator(p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y) {\n return function(pct) {\n var c1 = CB1(pct), c2 = CB2(pct), c3 = CB3(pct), c4 = CB4(pct);\n return {\n x: p4x * c1 + p3x * c2 + p2x * c3 + p1x * c4,\n y: p4y * c1 + p3y * c2 + p2y * c3 + p1y * c4\n };\n };\n }\n\n function getTangentCubicIterator(p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y) {\n return function (pct) {\n var invT = 1 - pct,\n tangentX = (3 * invT * invT * (p2x - p1x)) + (6 * invT * pct * (p3x - p2x)) +\n (3 * pct * pct * (p4x - p3x)),\n tangentY = (3 * invT * invT * (p2y - p1y)) + (6 * invT * pct * (p3y - p2y)) +\n (3 * pct * pct * (p4y - p3y));\n return Math.atan2(tangentY, tangentX);\n };\n }\n\n function QB1(t) {\n return t * t;\n }\n\n function QB2(t) {\n return 2 * t * (1 - t);\n }\n\n function QB3(t) {\n return (1 - t) * (1 - t);\n }\n\n function getPointOnQuadraticBezierIterator(p1x, p1y, p2x, p2y, p3x, p3y) {\n return function(pct) {\n var c1 = QB1(pct), c2 = QB2(pct), c3 = QB3(pct);\n return {\n x: p3x * c1 + p2x * c2 + p1x * c3,\n y: p3y * c1 + p2y * c2 + p1y * c3\n };\n };\n }\n\n function getTangentQuadraticIterator(p1x, p1y, p2x, p2y, p3x, p3y) {\n return function (pct) {\n var invT = 1 - pct,\n tangentX = (2 * invT * (p2x - p1x)) + (2 * pct * (p3x - p2x)),\n tangentY = (2 * invT * (p2y - p1y)) + (2 * pct * (p3y - p2y));\n return Math.atan2(tangentY, tangentX);\n };\n }\n\n\n // this will run over a path segment ( a cubic or quadratic segment) and approximate it\n // with 100 segemnts. This will good enough to calculate the length of the curve\n function pathIterator(iterator, x1, y1) {\n var tempP = { x: x1, y: y1 }, p, tmpLen = 0, perc;\n for (perc = 1; perc <= 100; perc += 1) {\n p = iterator(perc / 100);\n tmpLen += calcLineLength(tempP.x, tempP.y, p.x, p.y);\n tempP = p;\n }\n return tmpLen;\n }\n\n /**\n * Given a pathInfo, and a distance in pixels, find the percentage from 0 to 1\n * that correspond to that pixels run over the path.\n * The percentage will be then used to find the correct point on the canvas for the path.\n * @param {Array} segInfo fabricJS collection of information on a parsed path\n * @param {Number} distance from starting point, in pixels.\n * @return {Object} info object with x and y ( the point on canvas ) and angle, the tangent on that point;\n */\n function findPercentageForDistance(segInfo, distance) {\n var perc = 0, tmpLen = 0, iterator = segInfo.iterator, tempP = { x: segInfo.x, y: segInfo.y },\n p, nextLen, nextStep = 0.01, angleFinder = segInfo.angleFinder, lastPerc;\n // nextStep > 0.0001 covers 0.00015625 that 1/64th of 1/100\n // the path\n while (tmpLen < distance && nextStep > 0.0001) {\n p = iterator(perc);\n lastPerc = perc;\n nextLen = calcLineLength(tempP.x, tempP.y, p.x, p.y);\n // compare tmpLen each cycle with distance, decide next perc to test.\n if ((nextLen + tmpLen) > distance) {\n // we discard this step and we make smaller steps.\n perc -= nextStep;\n nextStep /= 2;\n }\n else {\n tempP = p;\n perc += nextStep;\n tmpLen += nextLen;\n }\n }\n p.angle = angleFinder(lastPerc);\n return p;\n }\n\n /**\n * Run over a parsed and simplifed path and extrac some informations.\n * informations are length of each command and starting point\n * @param {Array} path fabricJS parsed path commands\n * @return {Array} path commands informations\n */\n function getPathSegmentsInfo(path) {\n var totalLength = 0, len = path.length, current,\n //x2 and y2 are the coords of segment start\n //x1 and y1 are the coords of the current point\n x1 = 0, y1 = 0, x2 = 0, y2 = 0, info = [], iterator, tempInfo, angleFinder;\n for (var i = 0; i < len; i++) {\n current = path[i];\n tempInfo = {\n x: x1,\n y: y1,\n command: current[0],\n };\n switch (current[0]) { //first letter\n case 'M':\n tempInfo.length = 0;\n x2 = x1 = current[1];\n y2 = y1 = current[2];\n break;\n case 'L':\n tempInfo.length = calcLineLength(x1, y1, current[1], current[2]);\n x1 = current[1];\n y1 = current[2];\n break;\n case 'C':\n iterator = getPointOnCubicBezierIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6]\n );\n angleFinder = getTangentCubicIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6]\n );\n tempInfo.iterator = iterator;\n tempInfo.angleFinder = angleFinder;\n tempInfo.length = pathIterator(iterator, x1, y1);\n x1 = current[5];\n y1 = current[6];\n break;\n case 'Q':\n iterator = getPointOnQuadraticBezierIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4]\n );\n angleFinder = getTangentQuadraticIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4]\n );\n tempInfo.iterator = iterator;\n tempInfo.angleFinder = angleFinder;\n tempInfo.length = pathIterator(iterator, x1, y1);\n x1 = current[3];\n y1 = current[4];\n break;\n case 'Z':\n case 'z':\n // we add those in order to ease calculations later\n tempInfo.destX = x2;\n tempInfo.destY = y2;\n tempInfo.length = calcLineLength(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n break;\n }\n totalLength += tempInfo.length;\n info.push(tempInfo);\n }\n info.push({ length: totalLength, x: x1, y: y1 });\n return info;\n }\n\n function getPointOnPath(path, distance, infos) {\n if (!infos) {\n infos = getPathSegmentsInfo(path);\n }\n var i = 0;\n while ((distance - infos[i].length > 0) && i < (infos.length - 2)) {\n distance -= infos[i].length;\n i++;\n }\n // var distance = infos[infos.length - 1] * perc;\n var segInfo = infos[i], segPercent = distance / segInfo.length,\n command = segInfo.command, segment = path[i], info;\n\n switch (command) {\n case 'M':\n return { x: segInfo.x, y: segInfo.y, angle: 0 };\n case 'Z':\n case 'z':\n info = new fabric.Point(segInfo.x, segInfo.y).lerp(\n new fabric.Point(segInfo.destX, segInfo.destY),\n segPercent\n );\n info.angle = Math.atan2(segInfo.destY - segInfo.y, segInfo.destX - segInfo.x);\n return info;\n case 'L':\n info = new fabric.Point(segInfo.x, segInfo.y).lerp(\n new fabric.Point(segment[1], segment[2]),\n segPercent\n );\n info.angle = Math.atan2(segment[2] - segInfo.y, segment[1] - segInfo.x);\n return info;\n case 'C':\n return findPercentageForDistance(segInfo, distance);\n case 'Q':\n return findPercentageForDistance(segInfo, distance);\n }\n }\n\n /**\n *\n * @param {string} pathString\n * @return {(string|number)[][]} An array of SVG path commands\n * @example Usage\n * parsePath('M 3 4 Q 3 5 2 1 4 0 Q 9 12 2 1 4 0') === [\n * ['M', 3, 4],\n * ['Q', 3, 5, 2, 1, 4, 0],\n * ['Q', 9, 12, 2, 1, 4, 0],\n * ];\n *\n */\n function parsePath(pathString) {\n var result = [],\n coords = [],\n currentPath,\n parsed,\n re = fabric.rePathCommand,\n rNumber = '[-+]?(?:\\\\d*\\\\.\\\\d+|\\\\d+\\\\.?)(?:[eE][-+]?\\\\d+)?\\\\s*',\n rNumberCommaWsp = '(' + rNumber + ')' + fabric.commaWsp,\n rFlagCommaWsp = '([01])' + fabric.commaWsp + '?',\n rArcSeq = rNumberCommaWsp + '?' + rNumberCommaWsp + '?' + rNumberCommaWsp + rFlagCommaWsp + rFlagCommaWsp +\n rNumberCommaWsp + '?(' + rNumber + ')',\n regArcArgumentSequence = new RegExp(rArcSeq, 'g'),\n match,\n coordsStr,\n // one of commands (m,M,l,L,q,Q,c,C,etc.) followed by non-command characters (i.e. command values)\n path;\n if (!pathString || !pathString.match) {\n return result;\n }\n path = pathString.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi);\n\n for (var i = 0, coordsParsed, len = path.length; i < len; i++) {\n currentPath = path[i];\n\n coordsStr = currentPath.slice(1).trim();\n coords.length = 0;\n\n var command = currentPath.charAt(0);\n coordsParsed = [command];\n\n if (command.toLowerCase() === 'a') {\n // arcs have special flags that apparently don't require spaces so handle special\n for (var args; (args = regArcArgumentSequence.exec(coordsStr));) {\n for (var j = 1; j < args.length; j++) {\n coords.push(args[j]);\n }\n }\n }\n else {\n while ((match = re.exec(coordsStr))) {\n coords.push(match[0]);\n }\n }\n\n for (var j = 0, jlen = coords.length; j < jlen; j++) {\n parsed = parseFloat(coords[j]);\n if (!isNaN(parsed)) {\n coordsParsed.push(parsed);\n }\n }\n\n var commandLength = commandLengths[command.toLowerCase()],\n repeatedCommand = repeatedCommands[command] || command;\n\n if (coordsParsed.length - 1 > commandLength) {\n for (var k = 1, klen = coordsParsed.length; k < klen; k += commandLength) {\n result.push([command].concat(coordsParsed.slice(k, k + commandLength)));\n command = repeatedCommand;\n }\n }\n else {\n result.push(coordsParsed);\n }\n }\n\n return result;\n };\n\n /**\n *\n * Converts points to a smooth SVG path\n * @param {{ x: number,y: number }[]} points Array of points\n * @param {number} [correction] Apply a correction to the path (usually we use `width / 1000`). If value is undefined 0 is used as the correction value.\n * @return {(string|number)[][]} An array of SVG path commands\n */\n function getSmoothPathFromPoints(points, correction) {\n var path = [], i,\n p1 = new fabric.Point(points[0].x, points[0].y),\n p2 = new fabric.Point(points[1].x, points[1].y),\n len = points.length, multSignX = 1, multSignY = 0, manyPoints = len > 2;\n correction = correction || 0;\n\n if (manyPoints) {\n multSignX = points[2].x < p2.x ? -1 : points[2].x === p2.x ? 0 : 1;\n multSignY = points[2].y < p2.y ? -1 : points[2].y === p2.y ? 0 : 1;\n }\n path.push(['M', p1.x - multSignX * correction, p1.y - multSignY * correction]);\n for (i = 1; i < len; i++) {\n if (!p1.eq(p2)) {\n var midPoint = p1.midPointFrom(p2);\n // p1 is our bezier control point\n // midpoint is our endpoint\n // start point is p(i-1) value.\n path.push(['Q', p1.x, p1.y, midPoint.x, midPoint.y]);\n }\n p1 = points[i];\n if ((i + 1) < points.length) {\n p2 = points[i + 1];\n }\n }\n if (manyPoints) {\n multSignX = p1.x > points[i - 2].x ? 1 : p1.x === points[i - 2].x ? 0 : -1;\n multSignY = p1.y > points[i - 2].y ? 1 : p1.y === points[i - 2].y ? 0 : -1;\n }\n path.push(['L', p1.x + multSignX * correction, p1.y + multSignY * correction]);\n return path;\n }\n /**\n * Transform a path by transforming each segment.\n * it has to be a simplified path or it won't work.\n * WARNING: this depends from pathOffset for correct operation\n * @param {Array} path fabricJS parsed and simplified path commands\n * @param {Array} transform matrix that represent the transformation\n * @param {Object} [pathOffset] the fabric.Path pathOffset\n * @param {Number} pathOffset.x\n * @param {Number} pathOffset.y\n * @returns {Array} the transformed path\n */\n function transformPath(path, transform, pathOffset) {\n if (pathOffset) {\n transform = fabric.util.multiplyTransformMatrices(\n transform,\n [1, 0, 0, 1, -pathOffset.x, -pathOffset.y]\n );\n }\n return path.map(function(pathSegment) {\n var newSegment = pathSegment.slice(0), point = {};\n for (var i = 1; i < pathSegment.length - 1; i += 2) {\n point.x = pathSegment[i];\n point.y = pathSegment[i + 1];\n point = fabric.util.transformPoint(point, transform);\n newSegment[i] = point.x;\n newSegment[i + 1] = point.y;\n }\n return newSegment;\n });\n }\n\n /**\n * Join path commands to go back to svg format\n * @param {Array} pathData fabricJS parsed path commands\n * @return {String} joined path 'M 0 0 L 20 30'\n */\n fabric.util.joinPath = function(pathData) {\n return pathData.map(function (segment) { return segment.join(' '); }).join(' ');\n };\n fabric.util.parsePath = parsePath;\n fabric.util.makePathSimpler = makePathSimpler;\n fabric.util.getSmoothPathFromPoints = getSmoothPathFromPoints;\n fabric.util.getPathSegmentsInfo = getPathSegmentsInfo;\n fabric.util.getBoundsOfCurve = getBoundsOfCurve;\n fabric.util.getPointOnPath = getPointOnPath;\n fabric.util.transformPath = transformPath;\n})();\n(function() {\n\n var slice = Array.prototype.slice;\n\n /**\n * Invokes method on all items in a given array\n * @memberOf fabric.util.array\n * @param {Array} array Array to iterate over\n * @param {String} method Name of a method to invoke\n * @return {Array}\n */\n function invoke(array, method) {\n var args = slice.call(arguments, 2), result = [];\n for (var i = 0, len = array.length; i < len; i++) {\n result[i] = args.length ? array[i][method].apply(array[i], args) : array[i][method].call(array[i]);\n }\n return result;\n }\n\n /**\n * Finds maximum value in array (not necessarily \"first\" one)\n * @memberOf fabric.util.array\n * @param {Array} array Array to iterate over\n * @param {String} byProperty\n * @return {*}\n */\n function max(array, byProperty) {\n return find(array, byProperty, function(value1, value2) {\n return value1 >= value2;\n });\n }\n\n /**\n * Finds minimum value in array (not necessarily \"first\" one)\n * @memberOf fabric.util.array\n * @param {Array} array Array to iterate over\n * @param {String} byProperty\n * @return {*}\n */\n function min(array, byProperty) {\n return find(array, byProperty, function(value1, value2) {\n return value1 < value2;\n });\n }\n\n /**\n * @private\n */\n function fill(array, value) {\n var k = array.length;\n while (k--) {\n array[k] = value;\n }\n return array;\n }\n\n /**\n * @private\n */\n function find(array, byProperty, condition) {\n if (!array || array.length === 0) {\n return;\n }\n\n var i = array.length - 1,\n result = byProperty ? array[i][byProperty] : array[i];\n if (byProperty) {\n while (i--) {\n if (condition(array[i][byProperty], result)) {\n result = array[i][byProperty];\n }\n }\n }\n else {\n while (i--) {\n if (condition(array[i], result)) {\n result = array[i];\n }\n }\n }\n return result;\n }\n\n /**\n * @namespace fabric.util.array\n */\n fabric.util.array = {\n fill: fill,\n invoke: invoke,\n min: min,\n max: max\n };\n\n})();\n(function() {\n /**\n * Copies all enumerable properties of one js object to another\n * this does not and cannot compete with generic utils.\n * Does not clone or extend fabric.Object subclasses.\n * This is mostly for internal use and has extra handling for fabricJS objects\n * it skips the canvas and group properties in deep cloning.\n * @memberOf fabric.util.object\n * @param {Object} destination Where to copy to\n * @param {Object} source Where to copy from\n * @param {Boolean} [deep] Whether to extend nested objects\n * @return {Object}\n */\n\n function extend(destination, source, deep) {\n // JScript DontEnum bug is not taken care of\n // the deep clone is for internal use, is not meant to avoid\n // javascript traps or cloning html element or self referenced objects.\n if (deep) {\n if (!fabric.isLikelyNode && source instanceof Element) {\n // avoid cloning deep images, canvases,\n destination = source;\n }\n else if (source instanceof Array) {\n destination = [];\n for (var i = 0, len = source.length; i < len; i++) {\n destination[i] = extend({ }, source[i], deep);\n }\n }\n else if (source && typeof source === 'object') {\n for (var property in source) {\n if (property === 'canvas' || property === 'group') {\n // we do not want to clone this props at all.\n // we want to keep the keys in the copy\n destination[property] = null;\n }\n else if (source.hasOwnProperty(property)) {\n destination[property] = extend({ }, source[property], deep);\n }\n }\n }\n else {\n // this sounds odd for an extend but is ok for recursive use\n destination = source;\n }\n }\n else {\n for (var property in source) {\n destination[property] = source[property];\n }\n }\n return destination;\n }\n\n /**\n * Creates an empty object and copies all enumerable properties of another object to it\n * This method is mostly for internal use, and not intended for duplicating shapes in canvas. \n * @memberOf fabric.util.object\n * @param {Object} object Object to clone\n * @param {Boolean} [deep] Whether to clone nested objects\n * @return {Object}\n */\n\n //TODO: this function return an empty object if you try to clone null\n function clone(object, deep) {\n return extend({ }, object, deep);\n }\n\n /** @namespace fabric.util.object */\n fabric.util.object = {\n extend: extend,\n clone: clone\n };\n fabric.util.object.extend(fabric.util, fabric.Observable);\n})();\n(function() {\n\n /**\n * Camelizes a string\n * @memberOf fabric.util.string\n * @param {String} string String to camelize\n * @return {String} Camelized version of a string\n */\n function camelize(string) {\n return string.replace(/-+(.)?/g, function(match, character) {\n return character ? character.toUpperCase() : '';\n });\n }\n\n /**\n * Capitalizes a string\n * @memberOf fabric.util.string\n * @param {String} string String to capitalize\n * @param {Boolean} [firstLetterOnly] If true only first letter is capitalized\n * and other letters stay untouched, if false first letter is capitalized\n * and other letters are converted to lowercase.\n * @return {String} Capitalized version of a string\n */\n function capitalize(string, firstLetterOnly) {\n return string.charAt(0).toUpperCase() +\n (firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase());\n }\n\n /**\n * Escapes XML in a string\n * @memberOf fabric.util.string\n * @param {String} string String to escape\n * @return {String} Escaped version of a string\n */\n function escapeXml(string) {\n return string.replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(//g, '>');\n }\n\n /**\n * Divide a string in the user perceived single units\n * @memberOf fabric.util.string\n * @param {String} textstring String to escape\n * @return {Array} array containing the graphemes\n */\n function graphemeSplit(textstring) {\n var i = 0, chr, graphemes = [];\n for (i = 0, chr; i < textstring.length; i++) {\n if ((chr = getWholeChar(textstring, i)) === false) {\n continue;\n }\n graphemes.push(chr);\n }\n return graphemes;\n }\n\n // taken from mdn in the charAt doc page.\n function getWholeChar(str, i) {\n var code = str.charCodeAt(i);\n\n if (isNaN(code)) {\n return ''; // Position not found\n }\n if (code < 0xD800 || code > 0xDFFF) {\n return str.charAt(i);\n }\n\n // High surrogate (could change last hex to 0xDB7F to treat high private\n // surrogates as single characters)\n if (0xD800 <= code && code <= 0xDBFF) {\n if (str.length <= (i + 1)) {\n throw 'High surrogate without following low surrogate';\n }\n var next = str.charCodeAt(i + 1);\n if (0xDC00 > next || next > 0xDFFF) {\n throw 'High surrogate without following low surrogate';\n }\n return str.charAt(i) + str.charAt(i + 1);\n }\n // Low surrogate (0xDC00 <= code && code <= 0xDFFF)\n if (i === 0) {\n throw 'Low surrogate without preceding high surrogate';\n }\n var prev = str.charCodeAt(i - 1);\n\n // (could change last hex to 0xDB7F to treat high private\n // surrogates as single characters)\n if (0xD800 > prev || prev > 0xDBFF) {\n throw 'Low surrogate without preceding high surrogate';\n }\n // We can pass over low surrogates now as the second component\n // in a pair which we have already processed\n return false;\n }\n\n\n /**\n * String utilities\n * @namespace fabric.util.string\n */\n fabric.util.string = {\n camelize: camelize,\n capitalize: capitalize,\n escapeXml: escapeXml,\n graphemeSplit: graphemeSplit\n };\n})();\n(function() {\n\n var slice = Array.prototype.slice, emptyFunction = function() { },\n\n IS_DONTENUM_BUGGY = (function() {\n for (var p in { toString: 1 }) {\n if (p === 'toString') {\n return false;\n }\n }\n return true;\n })(),\n\n /** @ignore */\n addMethods = function(klass, source, parent) {\n for (var property in source) {\n\n if (property in klass.prototype &&\n typeof klass.prototype[property] === 'function' &&\n (source[property] + '').indexOf('callSuper') > -1) {\n\n klass.prototype[property] = (function(property) {\n return function() {\n\n var superclass = this.constructor.superclass;\n this.constructor.superclass = parent;\n var returnValue = source[property].apply(this, arguments);\n this.constructor.superclass = superclass;\n\n if (property !== 'initialize') {\n return returnValue;\n }\n };\n })(property);\n }\n else {\n klass.prototype[property] = source[property];\n }\n\n if (IS_DONTENUM_BUGGY) {\n if (source.toString !== Object.prototype.toString) {\n klass.prototype.toString = source.toString;\n }\n if (source.valueOf !== Object.prototype.valueOf) {\n klass.prototype.valueOf = source.valueOf;\n }\n }\n }\n };\n\n function Subclass() { }\n\n function callSuper(methodName) {\n var parentMethod = null,\n _this = this;\n\n // climb prototype chain to find method not equal to callee's method\n while (_this.constructor.superclass) {\n var superClassMethod = _this.constructor.superclass.prototype[methodName];\n if (_this[methodName] !== superClassMethod) {\n parentMethod = superClassMethod;\n break;\n }\n // eslint-disable-next-line\n _this = _this.constructor.superclass.prototype;\n }\n\n if (!parentMethod) {\n return console.log('tried to callSuper ' + methodName + ', method not found in prototype chain', this);\n }\n\n return (arguments.length > 1)\n ? parentMethod.apply(this, slice.call(arguments, 1))\n : parentMethod.call(this);\n }\n\n /**\n * Helper for creation of \"classes\".\n * @memberOf fabric.util\n * @param {Function} [parent] optional \"Class\" to inherit from\n * @param {Object} [properties] Properties shared by all instances of this class\n * (be careful modifying objects defined here as this would affect all instances)\n */\n function createClass() {\n var parent = null,\n properties = slice.call(arguments, 0);\n\n if (typeof properties[0] === 'function') {\n parent = properties.shift();\n }\n function klass() {\n this.initialize.apply(this, arguments);\n }\n\n klass.superclass = parent;\n klass.subclasses = [];\n\n if (parent) {\n Subclass.prototype = parent.prototype;\n klass.prototype = new Subclass();\n parent.subclasses.push(klass);\n }\n for (var i = 0, length = properties.length; i < length; i++) {\n addMethods(klass, properties[i], parent);\n }\n if (!klass.prototype.initialize) {\n klass.prototype.initialize = emptyFunction;\n }\n klass.prototype.constructor = klass;\n klass.prototype.callSuper = callSuper;\n return klass;\n }\n\n fabric.util.createClass = createClass;\n})();\n(function () {\n // since ie11 can use addEventListener but they do not support options, i need to check\n var couldUseAttachEvent = !!fabric.document.createElement('div').attachEvent,\n touchEvents = ['touchstart', 'touchmove', 'touchend'];\n /**\n * Adds an event listener to an element\n * @function\n * @memberOf fabric.util\n * @param {HTMLElement} element\n * @param {String} eventName\n * @param {Function} handler\n */\n fabric.util.addListener = function(element, eventName, handler, options) {\n element && element.addEventListener(eventName, handler, couldUseAttachEvent ? false : options);\n };\n\n /**\n * Removes an event listener from an element\n * @function\n * @memberOf fabric.util\n * @param {HTMLElement} element\n * @param {String} eventName\n * @param {Function} handler\n */\n fabric.util.removeListener = function(element, eventName, handler, options) {\n element && element.removeEventListener(eventName, handler, couldUseAttachEvent ? false : options);\n };\n\n function getTouchInfo(event) {\n var touchProp = event.changedTouches;\n if (touchProp && touchProp[0]) {\n return touchProp[0];\n }\n return event;\n }\n\n fabric.util.getPointer = function(event) {\n var element = event.target,\n scroll = fabric.util.getScrollLeftTop(element),\n _evt = getTouchInfo(event);\n return {\n x: _evt.clientX + scroll.left,\n y: _evt.clientY + scroll.top\n };\n };\n\n fabric.util.isTouchEvent = function(event) {\n return touchEvents.indexOf(event.type) > -1 || event.pointerType === 'touch';\n };\n})();\n(function () {\n\n /**\n * Cross-browser wrapper for setting element's style\n * @memberOf fabric.util\n * @param {HTMLElement} element\n * @param {Object} styles\n * @return {HTMLElement} Element that was passed as a first argument\n */\n function setStyle(element, styles) {\n var elementStyle = element.style;\n if (!elementStyle) {\n return element;\n }\n if (typeof styles === 'string') {\n element.style.cssText += ';' + styles;\n return styles.indexOf('opacity') > -1\n ? setOpacity(element, styles.match(/opacity:\\s*(\\d?\\.?\\d*)/)[1])\n : element;\n }\n for (var property in styles) {\n if (property === 'opacity') {\n setOpacity(element, styles[property]);\n }\n else {\n var normalizedProperty = (property === 'float' || property === 'cssFloat')\n ? (typeof elementStyle.styleFloat === 'undefined' ? 'cssFloat' : 'styleFloat')\n : property;\n elementStyle.setProperty(normalizedProperty, styles[property]);\n }\n }\n return element;\n }\n\n var parseEl = fabric.document.createElement('div'),\n supportsOpacity = typeof parseEl.style.opacity === 'string',\n supportsFilters = typeof parseEl.style.filter === 'string',\n reOpacity = /alpha\\s*\\(\\s*opacity\\s*=\\s*([^\\)]+)\\)/,\n\n /** @ignore */\n setOpacity = function (element) { return element; };\n\n if (supportsOpacity) {\n /** @ignore */\n setOpacity = function(element, value) {\n element.style.opacity = value;\n return element;\n };\n }\n else if (supportsFilters) {\n /** @ignore */\n setOpacity = function(element, value) {\n var es = element.style;\n if (element.currentStyle && !element.currentStyle.hasLayout) {\n es.zoom = 1;\n }\n if (reOpacity.test(es.filter)) {\n value = value >= 0.9999 ? '' : ('alpha(opacity=' + (value * 100) + ')');\n es.filter = es.filter.replace(reOpacity, value);\n }\n else {\n es.filter += ' alpha(opacity=' + (value * 100) + ')';\n }\n return element;\n };\n }\n\n fabric.util.setStyle = setStyle;\n\n})();\n(function() {\n\n var _slice = Array.prototype.slice;\n\n /**\n * Takes id and returns an element with that id (if one exists in a document)\n * @memberOf fabric.util\n * @param {String|HTMLElement} id\n * @return {HTMLElement|null}\n */\n function getById(id) {\n return typeof id === 'string' ? fabric.document.getElementById(id) : id;\n }\n\n var sliceCanConvertNodelists,\n /**\n * Converts an array-like object (e.g. arguments or NodeList) to an array\n * @memberOf fabric.util\n * @param {Object} arrayLike\n * @return {Array}\n */\n toArray = function(arrayLike) {\n return _slice.call(arrayLike, 0);\n };\n\n try {\n sliceCanConvertNodelists = toArray(fabric.document.childNodes) instanceof Array;\n }\n catch (err) { }\n\n if (!sliceCanConvertNodelists) {\n toArray = function(arrayLike) {\n var arr = new Array(arrayLike.length), i = arrayLike.length;\n while (i--) {\n arr[i] = arrayLike[i];\n }\n return arr;\n };\n }\n\n /**\n * Creates specified element with specified attributes\n * @memberOf fabric.util\n * @param {String} tagName Type of an element to create\n * @param {Object} [attributes] Attributes to set on an element\n * @return {HTMLElement} Newly created element\n */\n function makeElement(tagName, attributes) {\n var el = fabric.document.createElement(tagName);\n for (var prop in attributes) {\n if (prop === 'class') {\n el.className = attributes[prop];\n }\n else if (prop === 'for') {\n el.htmlFor = attributes[prop];\n }\n else {\n el.setAttribute(prop, attributes[prop]);\n }\n }\n return el;\n }\n\n /**\n * Adds class to an element\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to add class to\n * @param {String} className Class to add to an element\n */\n function addClass(element, className) {\n if (element && (' ' + element.className + ' ').indexOf(' ' + className + ' ') === -1) {\n element.className += (element.className ? ' ' : '') + className;\n }\n }\n\n /**\n * Wraps element with another element\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to wrap\n * @param {HTMLElement|String} wrapper Element to wrap with\n * @param {Object} [attributes] Attributes to set on a wrapper\n * @return {HTMLElement} wrapper\n */\n function wrapElement(element, wrapper, attributes) {\n if (typeof wrapper === 'string') {\n wrapper = makeElement(wrapper, attributes);\n }\n if (element.parentNode) {\n element.parentNode.replaceChild(wrapper, element);\n }\n wrapper.appendChild(element);\n return wrapper;\n }\n\n /**\n * Returns element scroll offsets\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to operate on\n * @return {Object} Object with left/top values\n */\n function getScrollLeftTop(element) {\n\n var left = 0,\n top = 0,\n docElement = fabric.document.documentElement,\n body = fabric.document.body || {\n scrollLeft: 0, scrollTop: 0\n };\n\n // While loop checks (and then sets element to) .parentNode OR .host\n // to account for ShadowDOM. We still want to traverse up out of ShadowDOM,\n // but the .parentNode of a root ShadowDOM node will always be null, instead\n // it should be accessed through .host. See http://stackoverflow.com/a/24765528/4383938\n while (element && (element.parentNode || element.host)) {\n\n // Set element to element parent, or 'host' in case of ShadowDOM\n element = element.parentNode || element.host;\n\n if (element === fabric.document) {\n left = body.scrollLeft || docElement.scrollLeft || 0;\n top = body.scrollTop || docElement.scrollTop || 0;\n }\n else {\n left += element.scrollLeft || 0;\n top += element.scrollTop || 0;\n }\n\n if (element.nodeType === 1 && element.style.position === 'fixed') {\n break;\n }\n }\n\n return { left: left, top: top };\n }\n\n /**\n * Returns offset for a given element\n * @function\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to get offset for\n * @return {Object} Object with \"left\" and \"top\" properties\n */\n function getElementOffset(element) {\n var docElem,\n doc = element && element.ownerDocument,\n box = { left: 0, top: 0 },\n offset = { left: 0, top: 0 },\n scrollLeftTop,\n offsetAttributes = {\n borderLeftWidth: 'left',\n borderTopWidth: 'top',\n paddingLeft: 'left',\n paddingTop: 'top'\n };\n\n if (!doc) {\n return offset;\n }\n\n for (var attr in offsetAttributes) {\n offset[offsetAttributes[attr]] += parseInt(getElementStyle(element, attr), 10) || 0;\n }\n\n docElem = doc.documentElement;\n if ( typeof element.getBoundingClientRect !== 'undefined' ) {\n box = element.getBoundingClientRect();\n }\n\n scrollLeftTop = getScrollLeftTop(element);\n\n return {\n left: box.left + scrollLeftTop.left - (docElem.clientLeft || 0) + offset.left,\n top: box.top + scrollLeftTop.top - (docElem.clientTop || 0) + offset.top\n };\n }\n\n /**\n * Returns style attribute value of a given element\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to get style attribute for\n * @param {String} attr Style attribute to get for element\n * @return {String} Style attribute value of the given element.\n */\n var getElementStyle;\n if (fabric.document.defaultView && fabric.document.defaultView.getComputedStyle) {\n getElementStyle = function(element, attr) {\n var style = fabric.document.defaultView.getComputedStyle(element, null);\n return style ? style[attr] : undefined;\n };\n }\n else {\n getElementStyle = function(element, attr) {\n var value = element.style[attr];\n if (!value && element.currentStyle) {\n value = element.currentStyle[attr];\n }\n return value;\n };\n }\n\n (function () {\n var style = fabric.document.documentElement.style,\n selectProp = 'userSelect' in style\n ? 'userSelect'\n : 'MozUserSelect' in style\n ? 'MozUserSelect'\n : 'WebkitUserSelect' in style\n ? 'WebkitUserSelect'\n : 'KhtmlUserSelect' in style\n ? 'KhtmlUserSelect'\n : '';\n\n /**\n * Makes element unselectable\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to make unselectable\n * @return {HTMLElement} Element that was passed in\n */\n function makeElementUnselectable(element) {\n if (typeof element.onselectstart !== 'undefined') {\n element.onselectstart = fabric.util.falseFunction;\n }\n if (selectProp) {\n element.style[selectProp] = 'none';\n }\n else if (typeof element.unselectable === 'string') {\n element.unselectable = 'on';\n }\n return element;\n }\n\n /**\n * Makes element selectable\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to make selectable\n * @return {HTMLElement} Element that was passed in\n */\n function makeElementSelectable(element) {\n if (typeof element.onselectstart !== 'undefined') {\n element.onselectstart = null;\n }\n if (selectProp) {\n element.style[selectProp] = '';\n }\n else if (typeof element.unselectable === 'string') {\n element.unselectable = '';\n }\n return element;\n }\n\n fabric.util.makeElementUnselectable = makeElementUnselectable;\n fabric.util.makeElementSelectable = makeElementSelectable;\n })();\n\n function getNodeCanvas(element) {\n var impl = fabric.jsdomImplForWrapper(element);\n return impl._canvas || impl._image;\n };\n\n function cleanUpJsdomNode(element) {\n if (!fabric.isLikelyNode) {\n return;\n }\n var impl = fabric.jsdomImplForWrapper(element);\n if (impl) {\n impl._image = null;\n impl._canvas = null;\n // unsure if necessary\n impl._currentSrc = null;\n impl._attributes = null;\n impl._classList = null;\n }\n }\n\n function setImageSmoothing(ctx, value) {\n ctx.imageSmoothingEnabled = ctx.imageSmoothingEnabled || ctx.webkitImageSmoothingEnabled\n || ctx.mozImageSmoothingEnabled || ctx.msImageSmoothingEnabled || ctx.oImageSmoothingEnabled;\n ctx.imageSmoothingEnabled = value;\n }\n\n /**\n * setImageSmoothing sets the context imageSmoothingEnabled property.\n * Used by canvas and by ImageObject.\n * @memberOf fabric.util\n * @since 4.0.0\n * @param {HTMLRenderingContext2D} ctx to set on\n * @param {Boolean} value true or false\n */\n fabric.util.setImageSmoothing = setImageSmoothing;\n fabric.util.getById = getById;\n fabric.util.toArray = toArray;\n fabric.util.addClass = addClass;\n fabric.util.makeElement = makeElement;\n fabric.util.wrapElement = wrapElement;\n fabric.util.getScrollLeftTop = getScrollLeftTop;\n fabric.util.getElementOffset = getElementOffset;\n fabric.util.getNodeCanvas = getNodeCanvas;\n fabric.util.cleanUpJsdomNode = cleanUpJsdomNode;\n\n})();\n(function() {\n\n function addParamToUrl(url, param) {\n return url + (/\\?/.test(url) ? '&' : '?') + param;\n }\n\n function emptyFn() { }\n\n /**\n * Cross-browser abstraction for sending XMLHttpRequest\n * @memberOf fabric.util\n * @param {String} url URL to send XMLHttpRequest to\n * @param {Object} [options] Options object\n * @param {String} [options.method=\"GET\"]\n * @param {String} [options.parameters] parameters to append to url in GET or in body\n * @param {String} [options.body] body to send with POST or PUT request\n * @param {Function} options.onComplete Callback to invoke when request is completed\n * @return {XMLHttpRequest} request\n */\n function request(url, options) {\n options || (options = { });\n\n var method = options.method ? options.method.toUpperCase() : 'GET',\n onComplete = options.onComplete || function() { },\n xhr = new fabric.window.XMLHttpRequest(),\n body = options.body || options.parameters;\n\n /** @ignore */\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n onComplete(xhr);\n xhr.onreadystatechange = emptyFn;\n }\n };\n\n if (method === 'GET') {\n body = null;\n if (typeof options.parameters === 'string') {\n url = addParamToUrl(url, options.parameters);\n }\n }\n\n xhr.open(method, url, true);\n\n if (method === 'POST' || method === 'PUT') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n }\n\n xhr.send(body);\n return xhr;\n }\n\n fabric.util.request = request;\n})();\n/**\n * Wrapper around `console.log` (when available)\n * @param {*} [values] Values to log\n */\nfabric.log = console.log;\n\n/**\n * Wrapper around `console.warn` (when available)\n * @param {*} [values] Values to log as a warning\n */\nfabric.warn = console.warn;\n(function () {\n\n var extend = fabric.util.object.extend,\n clone = fabric.util.object.clone;\n\n /**\n * @typedef {Object} AnimationOptions\n * Animation of a value or list of values.\n * When using lists, think of something like this:\n * fabric.util.animate({\n * startValue: [1, 2, 3],\n * endValue: [2, 4, 6],\n * onChange: function([a, b, c]) {\n * canvas.zoomToPoint({x: b, y: c}, a)\n * canvas.renderAll()\n * }\n * });\n * @example\n * @property {Function} [onChange] Callback; invoked on every value change\n * @property {Function} [onComplete] Callback; invoked when value change is completed\n * @example\n * // Note: startValue, endValue, and byValue must match the type\n * var animationOptions = { startValue: 0, endValue: 1, byValue: 0.25 }\n * var animationOptions = { startValue: [0, 1], endValue: [1, 2], byValue: [0.25, 0.25] }\n * @property {number | number[]} [startValue=0] Starting value\n * @property {number | number[]} [endValue=100] Ending value\n * @property {number | number[]} [byValue=100] Value to modify the property by\n * @property {Function} [easing] Easing function\n * @property {Number} [duration=500] Duration of change (in ms)\n * @property {Function} [abort] Additional function with logic. If returns true, animation aborts.\n *\n * @typedef {() => void} CancelFunction\n *\n * @typedef {Object} AnimationCurrentState\n * @property {number | number[]} currentValue value in range [`startValue`, `endValue`]\n * @property {number} completionRate value in range [0, 1]\n * @property {number} durationRate value in range [0, 1]\n *\n * @typedef {(AnimationOptions & AnimationCurrentState & { cancel: CancelFunction }} AnimationContext\n */\n\n /**\n * Array holding all running animations\n * @memberof fabric\n * @type {AnimationContext[]}\n */\n var RUNNING_ANIMATIONS = [];\n fabric.util.object.extend(RUNNING_ANIMATIONS, {\n\n /**\n * cancel all running animations at the next requestAnimFrame\n * @returns {AnimationContext[]}\n */\n cancelAll: function () {\n var animations = this.splice(0);\n animations.forEach(function (animation) {\n animation.cancel();\n });\n return animations;\n },\n\n /**\n * cancel all running animations attached to canvas at the next requestAnimFrame\n * @param {fabric.Canvas} canvas\n * @returns {AnimationContext[]}\n */\n cancelByCanvas: function (canvas) {\n if (!canvas) {\n return [];\n }\n var cancelled = this.filter(function (animation) {\n return typeof animation.target === 'object' && animation.target.canvas === canvas;\n });\n cancelled.forEach(function (animation) {\n animation.cancel();\n });\n return cancelled;\n },\n\n /**\n * cancel all running animations for target at the next requestAnimFrame\n * @param {*} target\n * @returns {AnimationContext[]}\n */\n cancelByTarget: function (target) {\n var cancelled = this.findAnimationsByTarget(target);\n cancelled.forEach(function (animation) {\n animation.cancel();\n });\n return cancelled;\n },\n\n /**\n *\n * @param {CancelFunction} cancelFunc the function returned by animate\n * @returns {number}\n */\n findAnimationIndex: function (cancelFunc) {\n return this.indexOf(this.findAnimation(cancelFunc));\n },\n\n /**\n *\n * @param {CancelFunction} cancelFunc the function returned by animate\n * @returns {AnimationContext | undefined} animation's options object\n */\n findAnimation: function (cancelFunc) {\n return this.find(function (animation) {\n return animation.cancel === cancelFunc;\n });\n },\n\n /**\n *\n * @param {*} target the object that is assigned to the target property of the animation context\n * @returns {AnimationContext[]} array of animation options object associated with target\n */\n findAnimationsByTarget: function (target) {\n if (!target) {\n return [];\n }\n return this.filter(function (animation) {\n return animation.target === target;\n });\n }\n });\n\n function noop() {\n return false;\n }\n\n function defaultEasing(t, b, c, d) {\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n }\n\n /**\n * Changes value from one to another within certain period of time, invoking callbacks as value is being changed.\n * @memberOf fabric.util\n * @param {AnimationOptions} [options] Animation options\n * @example\n * // Note: startValue, endValue, and byValue must match the type\n * fabric.util.animate({ startValue: 0, endValue: 1, byValue: 0.25 })\n * fabric.util.animate({ startValue: [0, 1], endValue: [1, 2], byValue: [0.25, 0.25] })\n * @returns {CancelFunction} cancel function\n */\n function animate(options) {\n options || (options = {});\n var cancel = false,\n context,\n removeFromRegistry = function () {\n var index = fabric.runningAnimations.indexOf(context);\n return index > -1 && fabric.runningAnimations.splice(index, 1)[0];\n };\n\n context = extend(clone(options), {\n cancel: function () {\n cancel = true;\n return removeFromRegistry();\n },\n currentValue: 'startValue' in options ? options.startValue : 0,\n completionRate: 0,\n durationRate: 0\n });\n fabric.runningAnimations.push(context);\n\n requestAnimFrame(function(timestamp) {\n var start = timestamp || +new Date(),\n duration = options.duration || 500,\n finish = start + duration, time,\n onChange = options.onChange || noop,\n abort = options.abort || noop,\n onComplete = options.onComplete || noop,\n easing = options.easing || defaultEasing,\n isMany = 'startValue' in options ? options.startValue.length > 0 : false,\n startValue = 'startValue' in options ? options.startValue : 0,\n endValue = 'endValue' in options ? options.endValue : 100,\n byValue = options.byValue || (isMany ? startValue.map(function(value, i) {\n return endValue[i] - startValue[i];\n }) : endValue - startValue);\n\n options.onStart && options.onStart();\n\n (function tick(ticktime) {\n time = ticktime || +new Date();\n var currentTime = time > finish ? duration : (time - start),\n timePerc = currentTime / duration,\n current = isMany ? startValue.map(function(_value, i) {\n return easing(currentTime, startValue[i], byValue[i], duration);\n }) : easing(currentTime, startValue, byValue, duration),\n valuePerc = isMany ? Math.abs((current[0] - startValue[0]) / byValue[0])\n : Math.abs((current - startValue) / byValue);\n // update context\n context.currentValue = isMany ? current.slice() : current;\n context.completionRate = valuePerc;\n context.durationRate = timePerc;\n if (cancel) {\n return;\n }\n if (abort(current, valuePerc, timePerc)) {\n removeFromRegistry();\n return;\n }\n if (time > finish) {\n // update context\n context.currentValue = isMany ? endValue.slice() : endValue;\n context.completionRate = 1;\n context.durationRate = 1;\n // execute callbacks\n onChange(isMany ? endValue.slice() : endValue, 1, 1);\n onComplete(endValue, 1, 1);\n removeFromRegistry();\n return;\n }\n else {\n onChange(current, valuePerc, timePerc);\n requestAnimFrame(tick);\n }\n })(start);\n });\n\n return context.cancel;\n }\n\n var _requestAnimFrame = fabric.window.requestAnimationFrame ||\n fabric.window.webkitRequestAnimationFrame ||\n fabric.window.mozRequestAnimationFrame ||\n fabric.window.oRequestAnimationFrame ||\n fabric.window.msRequestAnimationFrame ||\n function(callback) {\n return fabric.window.setTimeout(callback, 1000 / 60);\n };\n\n var _cancelAnimFrame = fabric.window.cancelAnimationFrame || fabric.window.clearTimeout;\n\n /**\n * requestAnimationFrame polyfill based on http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n * In order to get a precise start time, `requestAnimFrame` should be called as an entry into the method\n * @memberOf fabric.util\n * @param {Function} callback Callback to invoke\n * @param {DOMElement} element optional Element to associate with animation\n */\n function requestAnimFrame() {\n return _requestAnimFrame.apply(fabric.window, arguments);\n }\n\n function cancelAnimFrame() {\n return _cancelAnimFrame.apply(fabric.window, arguments);\n }\n\n fabric.util.animate = animate;\n fabric.util.requestAnimFrame = requestAnimFrame;\n fabric.util.cancelAnimFrame = cancelAnimFrame;\n fabric.runningAnimations = RUNNING_ANIMATIONS;\n})();\n(function() {\n // Calculate an in-between color. Returns a \"rgba()\" string.\n // Credit: Edwin Martin \n // http://www.bitstorm.org/jquery/color-animation/jquery.animate-colors.js\n function calculateColor(begin, end, pos) {\n var color = 'rgba('\n + parseInt((begin[0] + pos * (end[0] - begin[0])), 10) + ','\n + parseInt((begin[1] + pos * (end[1] - begin[1])), 10) + ','\n + parseInt((begin[2] + pos * (end[2] - begin[2])), 10);\n\n color += ',' + (begin && end ? parseFloat(begin[3] + pos * (end[3] - begin[3])) : 1);\n color += ')';\n return color;\n }\n\n /**\n * Changes the color from one to another within certain period of time, invoking callbacks as value is being changed.\n * @memberOf fabric.util\n * @param {String} fromColor The starting color in hex or rgb(a) format.\n * @param {String} toColor The starting color in hex or rgb(a) format.\n * @param {Number} [duration] Duration of change (in ms).\n * @param {Object} [options] Animation options\n * @param {Function} [options.onChange] Callback; invoked on every value change\n * @param {Function} [options.onComplete] Callback; invoked when value change is completed\n * @param {Function} [options.colorEasing] Easing function. Note that this function only take two arguments (currentTime, duration). Thus the regular animation easing functions cannot be used.\n * @param {Function} [options.abort] Additional function with logic. If returns true, onComplete is called.\n * @returns {Function} abort function\n */\n function animateColor(fromColor, toColor, duration, options) {\n var startColor = new fabric.Color(fromColor).getSource(),\n endColor = new fabric.Color(toColor).getSource(),\n originalOnComplete = options.onComplete,\n originalOnChange = options.onChange;\n options = options || {};\n\n return fabric.util.animate(fabric.util.object.extend(options, {\n duration: duration || 500,\n startValue: startColor,\n endValue: endColor,\n byValue: endColor,\n easing: function (currentTime, startValue, byValue, duration) {\n var posValue = options.colorEasing\n ? options.colorEasing(currentTime, duration)\n : 1 - Math.cos(currentTime / duration * (Math.PI / 2));\n return calculateColor(startValue, byValue, posValue);\n },\n // has to take in account for color restoring;\n onComplete: function(current, valuePerc, timePerc) {\n if (originalOnComplete) {\n return originalOnComplete(\n calculateColor(endColor, endColor, 0),\n valuePerc,\n timePerc\n );\n }\n },\n onChange: function(current, valuePerc, timePerc) {\n if (originalOnChange) {\n if (Array.isArray(current)) {\n return originalOnChange(\n calculateColor(current, current, 0),\n valuePerc,\n timePerc\n );\n }\n originalOnChange(current, valuePerc, timePerc);\n }\n }\n }));\n }\n\n fabric.util.animateColor = animateColor;\n\n})();\n(function(global) {\n\n 'use strict';\n\n /* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */\n\n var fabric = global.fabric || (global.fabric = { });\n\n if (fabric.Point) {\n fabric.warn('fabric.Point is already defined');\n return;\n }\n\n fabric.Point = Point;\n\n /**\n * Point class\n * @class fabric.Point\n * @memberOf fabric\n * @constructor\n * @param {Number} x\n * @param {Number} y\n * @return {fabric.Point} thisArg\n */\n function Point(x, y) {\n this.x = x;\n this.y = y;\n }\n\n Point.prototype = /** @lends fabric.Point.prototype */ {\n\n type: 'point',\n\n constructor: Point,\n\n /**\n * Adds another point to this one and returns another one\n * @param {fabric.Point} that\n * @return {fabric.Point} new Point instance with added values\n */\n add: function (that) {\n return new Point(this.x + that.x, this.y + that.y);\n },\n\n /**\n * Adds another point to this one\n * @param {fabric.Point} that\n * @return {fabric.Point} thisArg\n * @chainable\n */\n addEquals: function (that) {\n this.x += that.x;\n this.y += that.y;\n return this;\n },\n\n /**\n * Adds value to this point and returns a new one\n * @param {Number} scalar\n * @return {fabric.Point} new Point with added value\n */\n scalarAdd: function (scalar) {\n return new Point(this.x + scalar, this.y + scalar);\n },\n\n /**\n * Adds value to this point\n * @param {Number} scalar\n * @return {fabric.Point} thisArg\n * @chainable\n */\n scalarAddEquals: function (scalar) {\n this.x += scalar;\n this.y += scalar;\n return this;\n },\n\n /**\n * Subtracts another point from this point and returns a new one\n * @param {fabric.Point} that\n * @return {fabric.Point} new Point object with subtracted values\n */\n subtract: function (that) {\n return new Point(this.x - that.x, this.y - that.y);\n },\n\n /**\n * Subtracts another point from this point\n * @param {fabric.Point} that\n * @return {fabric.Point} thisArg\n * @chainable\n */\n subtractEquals: function (that) {\n this.x -= that.x;\n this.y -= that.y;\n return this;\n },\n\n /**\n * Subtracts value from this point and returns a new one\n * @param {Number} scalar\n * @return {fabric.Point}\n */\n scalarSubtract: function (scalar) {\n return new Point(this.x - scalar, this.y - scalar);\n },\n\n /**\n * Subtracts value from this point\n * @param {Number} scalar\n * @return {fabric.Point} thisArg\n * @chainable\n */\n scalarSubtractEquals: function (scalar) {\n this.x -= scalar;\n this.y -= scalar;\n return this;\n },\n\n /**\n * Multiplies this point by a value and returns a new one\n * TODO: rename in scalarMultiply in 2.0\n * @param {Number} scalar\n * @return {fabric.Point}\n */\n multiply: function (scalar) {\n return new Point(this.x * scalar, this.y * scalar);\n },\n\n /**\n * Multiplies this point by a value\n * TODO: rename in scalarMultiplyEquals in 2.0\n * @param {Number} scalar\n * @return {fabric.Point} thisArg\n * @chainable\n */\n multiplyEquals: function (scalar) {\n this.x *= scalar;\n this.y *= scalar;\n return this;\n },\n\n /**\n * Divides this point by a value and returns a new one\n * TODO: rename in scalarDivide in 2.0\n * @param {Number} scalar\n * @return {fabric.Point}\n */\n divide: function (scalar) {\n return new Point(this.x / scalar, this.y / scalar);\n },\n\n /**\n * Divides this point by a value\n * TODO: rename in scalarDivideEquals in 2.0\n * @param {Number} scalar\n * @return {fabric.Point} thisArg\n * @chainable\n */\n divideEquals: function (scalar) {\n this.x /= scalar;\n this.y /= scalar;\n return this;\n },\n\n /**\n * Returns true if this point is equal to another one\n * @param {fabric.Point} that\n * @return {Boolean}\n */\n eq: function (that) {\n return (this.x === that.x && this.y === that.y);\n },\n\n /**\n * Returns true if this point is less than another one\n * @param {fabric.Point} that\n * @return {Boolean}\n */\n lt: function (that) {\n return (this.x < that.x && this.y < that.y);\n },\n\n /**\n * Returns true if this point is less than or equal to another one\n * @param {fabric.Point} that\n * @return {Boolean}\n */\n lte: function (that) {\n return (this.x <= that.x && this.y <= that.y);\n },\n\n /**\n\n * Returns true if this point is greater another one\n * @param {fabric.Point} that\n * @return {Boolean}\n */\n gt: function (that) {\n return (this.x > that.x && this.y > that.y);\n },\n\n /**\n * Returns true if this point is greater than or equal to another one\n * @param {fabric.Point} that\n * @return {Boolean}\n */\n gte: function (that) {\n return (this.x >= that.x && this.y >= that.y);\n },\n\n /**\n * Returns new point which is the result of linear interpolation with this one and another one\n * @param {fabric.Point} that\n * @param {Number} t , position of interpolation, between 0 and 1 default 0.5\n * @return {fabric.Point}\n */\n lerp: function (that, t) {\n if (typeof t === 'undefined') {\n t = 0.5;\n }\n t = Math.max(Math.min(1, t), 0);\n return new Point(this.x + (that.x - this.x) * t, this.y + (that.y - this.y) * t);\n },\n\n /**\n * Returns distance from this point and another one\n * @param {fabric.Point} that\n * @return {Number}\n */\n distanceFrom: function (that) {\n var dx = this.x - that.x,\n dy = this.y - that.y;\n return Math.sqrt(dx * dx + dy * dy);\n },\n\n /**\n * Returns the point between this point and another one\n * @param {fabric.Point} that\n * @return {fabric.Point}\n */\n midPointFrom: function (that) {\n return this.lerp(that);\n },\n\n /**\n * Returns a new point which is the min of this and another one\n * @param {fabric.Point} that\n * @return {fabric.Point}\n */\n min: function (that) {\n return new Point(Math.min(this.x, that.x), Math.min(this.y, that.y));\n },\n\n /**\n * Returns a new point which is the max of this and another one\n * @param {fabric.Point} that\n * @return {fabric.Point}\n */\n max: function (that) {\n return new Point(Math.max(this.x, that.x), Math.max(this.y, that.y));\n },\n\n /**\n * Returns string representation of this point\n * @return {String}\n */\n toString: function () {\n return this.x + ',' + this.y;\n },\n\n /**\n * Sets x/y of this point\n * @param {Number} x\n * @param {Number} y\n * @chainable\n */\n setXY: function (x, y) {\n this.x = x;\n this.y = y;\n return this;\n },\n\n /**\n * Sets x of this point\n * @param {Number} x\n * @chainable\n */\n setX: function (x) {\n this.x = x;\n return this;\n },\n\n /**\n * Sets y of this point\n * @param {Number} y\n * @chainable\n */\n setY: function (y) {\n this.y = y;\n return this;\n },\n\n /**\n * Sets x/y of this point from another point\n * @param {fabric.Point} that\n * @chainable\n */\n setFromPoint: function (that) {\n this.x = that.x;\n this.y = that.y;\n return this;\n },\n\n /**\n * Swaps x/y of this point and another point\n * @param {fabric.Point} that\n */\n swap: function (that) {\n var x = this.x,\n y = this.y;\n this.x = that.x;\n this.y = that.y;\n that.x = x;\n that.y = y;\n },\n\n /**\n * return a cloned instance of the point\n * @return {fabric.Point}\n */\n clone: function () {\n return new Point(this.x, this.y);\n }\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n(function(global) {\n\n 'use strict';\n\n /* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */\n var fabric = global.fabric || (global.fabric = { });\n\n if (fabric.Intersection) {\n fabric.warn('fabric.Intersection is already defined');\n return;\n }\n\n /**\n * Intersection class\n * @class fabric.Intersection\n * @memberOf fabric\n * @constructor\n */\n function Intersection(status) {\n this.status = status;\n this.points = [];\n }\n\n fabric.Intersection = Intersection;\n\n fabric.Intersection.prototype = /** @lends fabric.Intersection.prototype */ {\n\n constructor: Intersection,\n\n /**\n * Appends a point to intersection\n * @param {fabric.Point} point\n * @return {fabric.Intersection} thisArg\n * @chainable\n */\n appendPoint: function (point) {\n this.points.push(point);\n return this;\n },\n\n /**\n * Appends points to intersection\n * @param {Array} points\n * @return {fabric.Intersection} thisArg\n * @chainable\n */\n appendPoints: function (points) {\n this.points = this.points.concat(points);\n return this;\n }\n };\n\n /**\n * Checks if one line intersects another\n * TODO: rename in intersectSegmentSegment\n * @static\n * @param {fabric.Point} a1\n * @param {fabric.Point} a2\n * @param {fabric.Point} b1\n * @param {fabric.Point} b2\n * @return {fabric.Intersection}\n */\n fabric.Intersection.intersectLineLine = function (a1, a2, b1, b2) {\n var result,\n uaT = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x),\n ubT = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x),\n uB = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n if (uB !== 0) {\n var ua = uaT / uB,\n ub = ubT / uB;\n if (0 <= ua && ua <= 1 && 0 <= ub && ub <= 1) {\n result = new Intersection('Intersection');\n result.appendPoint(new fabric.Point(a1.x + ua * (a2.x - a1.x), a1.y + ua * (a2.y - a1.y)));\n }\n else {\n result = new Intersection();\n }\n }\n else {\n if (uaT === 0 || ubT === 0) {\n result = new Intersection('Coincident');\n }\n else {\n result = new Intersection('Parallel');\n }\n }\n return result;\n };\n\n /**\n * Checks if line intersects polygon\n * TODO: rename in intersectSegmentPolygon\n * fix detection of coincident\n * @static\n * @param {fabric.Point} a1\n * @param {fabric.Point} a2\n * @param {Array} points\n * @return {fabric.Intersection}\n */\n fabric.Intersection.intersectLinePolygon = function(a1, a2, points) {\n var result = new Intersection(),\n length = points.length,\n b1, b2, inter, i;\n\n for (i = 0; i < length; i++) {\n b1 = points[i];\n b2 = points[(i + 1) % length];\n inter = Intersection.intersectLineLine(a1, a2, b1, b2);\n\n result.appendPoints(inter.points);\n }\n if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n return result;\n };\n\n /**\n * Checks if polygon intersects another polygon\n * @static\n * @param {Array} points1\n * @param {Array} points2\n * @return {fabric.Intersection}\n */\n fabric.Intersection.intersectPolygonPolygon = function (points1, points2) {\n var result = new Intersection(),\n length = points1.length, i;\n\n for (i = 0; i < length; i++) {\n var a1 = points1[i],\n a2 = points1[(i + 1) % length],\n inter = Intersection.intersectLinePolygon(a1, a2, points2);\n\n result.appendPoints(inter.points);\n }\n if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n return result;\n };\n\n /**\n * Checks if polygon intersects rectangle\n * @static\n * @param {Array} points\n * @param {fabric.Point} r1\n * @param {fabric.Point} r2\n * @return {fabric.Intersection}\n */\n fabric.Intersection.intersectPolygonRectangle = function (points, r1, r2) {\n var min = r1.min(r2),\n max = r1.max(r2),\n topRight = new fabric.Point(max.x, min.y),\n bottomLeft = new fabric.Point(min.x, max.y),\n inter1 = Intersection.intersectLinePolygon(min, topRight, points),\n inter2 = Intersection.intersectLinePolygon(topRight, max, points),\n inter3 = Intersection.intersectLinePolygon(max, bottomLeft, points),\n inter4 = Intersection.intersectLinePolygon(bottomLeft, min, points),\n result = new Intersection();\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n return result;\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { });\n\n if (fabric.Color) {\n fabric.warn('fabric.Color is already defined.');\n return;\n }\n\n /**\n * Color class\n * The purpose of {@link fabric.Color} is to abstract and encapsulate common color operations;\n * {@link fabric.Color} is a constructor and creates instances of {@link fabric.Color} objects.\n *\n * @class fabric.Color\n * @param {String} color optional in hex or rgb(a) or hsl format or from known color list\n * @return {fabric.Color} thisArg\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2/#colors}\n */\n function Color(color) {\n if (!color) {\n this.setSource([0, 0, 0, 1]);\n }\n else {\n this._tryParsingColor(color);\n }\n }\n\n fabric.Color = Color;\n\n fabric.Color.prototype = /** @lends fabric.Color.prototype */ {\n\n /**\n * @private\n * @param {String|Array} color Color value to parse\n */\n _tryParsingColor: function(color) {\n var source;\n\n if (color in Color.colorNameMap) {\n color = Color.colorNameMap[color];\n }\n\n if (color === 'transparent') {\n source = [255, 255, 255, 0];\n }\n\n if (!source) {\n source = Color.sourceFromHex(color);\n }\n if (!source) {\n source = Color.sourceFromRgb(color);\n }\n if (!source) {\n source = Color.sourceFromHsl(color);\n }\n if (!source) {\n //if color is not recognize let's make black as canvas does\n source = [0, 0, 0, 1];\n }\n if (source) {\n this.setSource(source);\n }\n },\n\n /**\n * Adapted from https://github.com/mjijackson\n * @private\n * @param {Number} r Red color value\n * @param {Number} g Green color value\n * @param {Number} b Blue color value\n * @return {Array} Hsl color\n */\n _rgbToHsl: function(r, g, b) {\n r /= 255; g /= 255; b /= 255;\n\n var h, s, l,\n max = fabric.util.array.max([r, g, b]),\n min = fabric.util.array.min([r, g, b]);\n\n l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n }\n else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return [\n Math.round(h * 360),\n Math.round(s * 100),\n Math.round(l * 100)\n ];\n },\n\n /**\n * Returns source of this color (where source is an array representation; ex: [200, 200, 100, 1])\n * @return {Array}\n */\n getSource: function() {\n return this._source;\n },\n\n /**\n * Sets source of this color (where source is an array representation; ex: [200, 200, 100, 1])\n * @param {Array} source\n */\n setSource: function(source) {\n this._source = source;\n },\n\n /**\n * Returns color representation in RGB format\n * @return {String} ex: rgb(0-255,0-255,0-255)\n */\n toRgb: function() {\n var source = this.getSource();\n return 'rgb(' + source[0] + ',' + source[1] + ',' + source[2] + ')';\n },\n\n /**\n * Returns color representation in RGBA format\n * @return {String} ex: rgba(0-255,0-255,0-255,0-1)\n */\n toRgba: function() {\n var source = this.getSource();\n return 'rgba(' + source[0] + ',' + source[1] + ',' + source[2] + ',' + source[3] + ')';\n },\n\n /**\n * Returns color representation in HSL format\n * @return {String} ex: hsl(0-360,0%-100%,0%-100%)\n */\n toHsl: function() {\n var source = this.getSource(),\n hsl = this._rgbToHsl(source[0], source[1], source[2]);\n\n return 'hsl(' + hsl[0] + ',' + hsl[1] + '%,' + hsl[2] + '%)';\n },\n\n /**\n * Returns color representation in HSLA format\n * @return {String} ex: hsla(0-360,0%-100%,0%-100%,0-1)\n */\n toHsla: function() {\n var source = this.getSource(),\n hsl = this._rgbToHsl(source[0], source[1], source[2]);\n\n return 'hsla(' + hsl[0] + ',' + hsl[1] + '%,' + hsl[2] + '%,' + source[3] + ')';\n },\n\n /**\n * Returns color representation in HEX format\n * @return {String} ex: FF5555\n */\n toHex: function() {\n var source = this.getSource(), r, g, b;\n\n r = source[0].toString(16);\n r = (r.length === 1) ? ('0' + r) : r;\n\n g = source[1].toString(16);\n g = (g.length === 1) ? ('0' + g) : g;\n\n b = source[2].toString(16);\n b = (b.length === 1) ? ('0' + b) : b;\n\n return r.toUpperCase() + g.toUpperCase() + b.toUpperCase();\n },\n\n /**\n * Returns color representation in HEXA format\n * @return {String} ex: FF5555CC\n */\n toHexa: function() {\n var source = this.getSource(), a;\n\n a = Math.round(source[3] * 255);\n a = a.toString(16);\n a = (a.length === 1) ? ('0' + a) : a;\n\n return this.toHex() + a.toUpperCase();\n },\n\n /**\n * Gets value of alpha channel for this color\n * @return {Number} 0-1\n */\n getAlpha: function() {\n return this.getSource()[3];\n },\n\n /**\n * Sets value of alpha channel for this color\n * @param {Number} alpha Alpha value 0-1\n * @return {fabric.Color} thisArg\n */\n setAlpha: function(alpha) {\n var source = this.getSource();\n source[3] = alpha;\n this.setSource(source);\n return this;\n },\n\n /**\n * Transforms color to its grayscale representation\n * @return {fabric.Color} thisArg\n */\n toGrayscale: function() {\n var source = this.getSource(),\n average = parseInt((source[0] * 0.3 + source[1] * 0.59 + source[2] * 0.11).toFixed(0), 10),\n currentAlpha = source[3];\n this.setSource([average, average, average, currentAlpha]);\n return this;\n },\n\n /**\n * Transforms color to its black and white representation\n * @param {Number} threshold\n * @return {fabric.Color} thisArg\n */\n toBlackWhite: function(threshold) {\n var source = this.getSource(),\n average = (source[0] * 0.3 + source[1] * 0.59 + source[2] * 0.11).toFixed(0),\n currentAlpha = source[3];\n\n threshold = threshold || 127;\n\n average = (Number(average) < Number(threshold)) ? 0 : 255;\n this.setSource([average, average, average, currentAlpha]);\n return this;\n },\n\n /**\n * Overlays color with another color\n * @param {String|fabric.Color} otherColor\n * @return {fabric.Color} thisArg\n */\n overlayWith: function(otherColor) {\n if (!(otherColor instanceof Color)) {\n otherColor = new Color(otherColor);\n }\n\n var result = [],\n alpha = this.getAlpha(),\n otherAlpha = 0.5,\n source = this.getSource(),\n otherSource = otherColor.getSource(), i;\n\n for (i = 0; i < 3; i++) {\n result.push(Math.round((source[i] * (1 - otherAlpha)) + (otherSource[i] * otherAlpha)));\n }\n\n result[3] = alpha;\n this.setSource(result);\n return this;\n }\n };\n\n /**\n * Regex matching color in RGB or RGBA formats (ex: rgb(0, 0, 0), rgba(255, 100, 10, 0.5), rgba( 255 , 100 , 10 , 0.5 ), rgb(1,1,1), rgba(100%, 60%, 10%, 0.5))\n * @static\n * @field\n * @memberOf fabric.Color\n */\n // eslint-disable-next-line max-len\n fabric.Color.reRGBa = /^rgba?\\(\\s*(\\d{1,3}(?:\\.\\d+)?\\%?)\\s*,\\s*(\\d{1,3}(?:\\.\\d+)?\\%?)\\s*,\\s*(\\d{1,3}(?:\\.\\d+)?\\%?)\\s*(?:\\s*,\\s*((?:\\d*\\.?\\d+)?)\\s*)?\\)$/i;\n\n /**\n * Regex matching color in HSL or HSLA formats (ex: hsl(200, 80%, 10%), hsla(300, 50%, 80%, 0.5), hsla( 300 , 50% , 80% , 0.5 ))\n * @static\n * @field\n * @memberOf fabric.Color\n */\n fabric.Color.reHSLa = /^hsla?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3}\\%)\\s*,\\s*(\\d{1,3}\\%)\\s*(?:\\s*,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)$/i;\n\n /**\n * Regex matching color in HEX format (ex: #FF5544CC, #FF5555, 010155, aff)\n * @static\n * @field\n * @memberOf fabric.Color\n */\n fabric.Color.reHex = /^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i;\n\n /**\n * Map of the 148 color names with HEX code\n * @static\n * @field\n * @memberOf fabric.Color\n * @see: https://www.w3.org/TR/css3-color/#svg-color\n */\n fabric.Color.colorNameMap = {\n aliceblue: '#F0F8FF',\n antiquewhite: '#FAEBD7',\n aqua: '#00FFFF',\n aquamarine: '#7FFFD4',\n azure: '#F0FFFF',\n beige: '#F5F5DC',\n bisque: '#FFE4C4',\n black: '#000000',\n blanchedalmond: '#FFEBCD',\n blue: '#0000FF',\n blueviolet: '#8A2BE2',\n brown: '#A52A2A',\n burlywood: '#DEB887',\n cadetblue: '#5F9EA0',\n chartreuse: '#7FFF00',\n chocolate: '#D2691E',\n coral: '#FF7F50',\n cornflowerblue: '#6495ED',\n cornsilk: '#FFF8DC',\n crimson: '#DC143C',\n cyan: '#00FFFF',\n darkblue: '#00008B',\n darkcyan: '#008B8B',\n darkgoldenrod: '#B8860B',\n darkgray: '#A9A9A9',\n darkgrey: '#A9A9A9',\n darkgreen: '#006400',\n darkkhaki: '#BDB76B',\n darkmagenta: '#8B008B',\n darkolivegreen: '#556B2F',\n darkorange: '#FF8C00',\n darkorchid: '#9932CC',\n darkred: '#8B0000',\n darksalmon: '#E9967A',\n darkseagreen: '#8FBC8F',\n darkslateblue: '#483D8B',\n darkslategray: '#2F4F4F',\n darkslategrey: '#2F4F4F',\n darkturquoise: '#00CED1',\n darkviolet: '#9400D3',\n deeppink: '#FF1493',\n deepskyblue: '#00BFFF',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1E90FF',\n firebrick: '#B22222',\n floralwhite: '#FFFAF0',\n forestgreen: '#228B22',\n fuchsia: '#FF00FF',\n gainsboro: '#DCDCDC',\n ghostwhite: '#F8F8FF',\n gold: '#FFD700',\n goldenrod: '#DAA520',\n gray: '#808080',\n grey: '#808080',\n green: '#008000',\n greenyellow: '#ADFF2F',\n honeydew: '#F0FFF0',\n hotpink: '#FF69B4',\n indianred: '#CD5C5C',\n indigo: '#4B0082',\n ivory: '#FFFFF0',\n khaki: '#F0E68C',\n lavender: '#E6E6FA',\n lavenderblush: '#FFF0F5',\n lawngreen: '#7CFC00',\n lemonchiffon: '#FFFACD',\n lightblue: '#ADD8E6',\n lightcoral: '#F08080',\n lightcyan: '#E0FFFF',\n lightgoldenrodyellow: '#FAFAD2',\n lightgray: '#D3D3D3',\n lightgrey: '#D3D3D3',\n lightgreen: '#90EE90',\n lightpink: '#FFB6C1',\n lightsalmon: '#FFA07A',\n lightseagreen: '#20B2AA',\n lightskyblue: '#87CEFA',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#B0C4DE',\n lightyellow: '#FFFFE0',\n lime: '#00FF00',\n limegreen: '#32CD32',\n linen: '#FAF0E6',\n magenta: '#FF00FF',\n maroon: '#800000',\n mediumaquamarine: '#66CDAA',\n mediumblue: '#0000CD',\n mediumorchid: '#BA55D3',\n mediumpurple: '#9370DB',\n mediumseagreen: '#3CB371',\n mediumslateblue: '#7B68EE',\n mediumspringgreen: '#00FA9A',\n mediumturquoise: '#48D1CC',\n mediumvioletred: '#C71585',\n midnightblue: '#191970',\n mintcream: '#F5FFFA',\n mistyrose: '#FFE4E1',\n moccasin: '#FFE4B5',\n navajowhite: '#FFDEAD',\n navy: '#000080',\n oldlace: '#FDF5E6',\n olive: '#808000',\n olivedrab: '#6B8E23',\n orange: '#FFA500',\n orangered: '#FF4500',\n orchid: '#DA70D6',\n palegoldenrod: '#EEE8AA',\n palegreen: '#98FB98',\n paleturquoise: '#AFEEEE',\n palevioletred: '#DB7093',\n papayawhip: '#FFEFD5',\n peachpuff: '#FFDAB9',\n peru: '#CD853F',\n pink: '#FFC0CB',\n plum: '#DDA0DD',\n powderblue: '#B0E0E6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#FF0000',\n rosybrown: '#BC8F8F',\n royalblue: '#4169E1',\n saddlebrown: '#8B4513',\n salmon: '#FA8072',\n sandybrown: '#F4A460',\n seagreen: '#2E8B57',\n seashell: '#FFF5EE',\n sienna: '#A0522D',\n silver: '#C0C0C0',\n skyblue: '#87CEEB',\n slateblue: '#6A5ACD',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#FFFAFA',\n springgreen: '#00FF7F',\n steelblue: '#4682B4',\n tan: '#D2B48C',\n teal: '#008080',\n thistle: '#D8BFD8',\n tomato: '#FF6347',\n turquoise: '#40E0D0',\n violet: '#EE82EE',\n wheat: '#F5DEB3',\n white: '#FFFFFF',\n whitesmoke: '#F5F5F5',\n yellow: '#FFFF00',\n yellowgreen: '#9ACD32'\n };\n\n /**\n * @private\n * @param {Number} p\n * @param {Number} q\n * @param {Number} t\n * @return {Number}\n */\n function hue2rgb(p, q, t) {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n }\n\n /**\n * Returns new color object, when given a color in RGB format\n * @memberOf fabric.Color\n * @param {String} color Color value ex: rgb(0-255,0-255,0-255)\n * @return {fabric.Color}\n */\n fabric.Color.fromRgb = function(color) {\n return Color.fromSource(Color.sourceFromRgb(color));\n };\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in RGB or RGBA format\n * @memberOf fabric.Color\n * @param {String} color Color value ex: rgb(0-255,0-255,0-255), rgb(0%-100%,0%-100%,0%-100%)\n * @return {Array} source\n */\n fabric.Color.sourceFromRgb = function(color) {\n var match = color.match(Color.reRGBa);\n if (match) {\n var r = parseInt(match[1], 10) / (/%$/.test(match[1]) ? 100 : 1) * (/%$/.test(match[1]) ? 255 : 1),\n g = parseInt(match[2], 10) / (/%$/.test(match[2]) ? 100 : 1) * (/%$/.test(match[2]) ? 255 : 1),\n b = parseInt(match[3], 10) / (/%$/.test(match[3]) ? 100 : 1) * (/%$/.test(match[3]) ? 255 : 1);\n\n return [\n parseInt(r, 10),\n parseInt(g, 10),\n parseInt(b, 10),\n match[4] ? parseFloat(match[4]) : 1\n ];\n }\n };\n\n /**\n * Returns new color object, when given a color in RGBA format\n * @static\n * @function\n * @memberOf fabric.Color\n * @param {String} color\n * @return {fabric.Color}\n */\n fabric.Color.fromRgba = Color.fromRgb;\n\n /**\n * Returns new color object, when given a color in HSL format\n * @param {String} color Color value ex: hsl(0-260,0%-100%,0%-100%)\n * @memberOf fabric.Color\n * @return {fabric.Color}\n */\n fabric.Color.fromHsl = function(color) {\n return Color.fromSource(Color.sourceFromHsl(color));\n };\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HSL or HSLA format.\n * Adapted from https://github.com/mjijackson\n * @memberOf fabric.Color\n * @param {String} color Color value ex: hsl(0-360,0%-100%,0%-100%) or hsla(0-360,0%-100%,0%-100%, 0-1)\n * @return {Array} source\n * @see http://http://www.w3.org/TR/css3-color/#hsl-color\n */\n fabric.Color.sourceFromHsl = function(color) {\n var match = color.match(Color.reHSLa);\n if (!match) {\n return;\n }\n\n var h = (((parseFloat(match[1]) % 360) + 360) % 360) / 360,\n s = parseFloat(match[2]) / (/%$/.test(match[2]) ? 100 : 1),\n l = parseFloat(match[3]) / (/%$/.test(match[3]) ? 100 : 1),\n r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n }\n else {\n var q = l <= 0.5 ? l * (s + 1) : l + s - l * s,\n p = l * 2 - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [\n Math.round(r * 255),\n Math.round(g * 255),\n Math.round(b * 255),\n match[4] ? parseFloat(match[4]) : 1\n ];\n };\n\n /**\n * Returns new color object, when given a color in HSLA format\n * @static\n * @function\n * @memberOf fabric.Color\n * @param {String} color\n * @return {fabric.Color}\n */\n fabric.Color.fromHsla = Color.fromHsl;\n\n /**\n * Returns new color object, when given a color in HEX format\n * @static\n * @memberOf fabric.Color\n * @param {String} color Color value ex: FF5555\n * @return {fabric.Color}\n */\n fabric.Color.fromHex = function(color) {\n return Color.fromSource(Color.sourceFromHex(color));\n };\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HEX format\n * @static\n * @memberOf fabric.Color\n * @param {String} color ex: FF5555 or FF5544CC (RGBa)\n * @return {Array} source\n */\n fabric.Color.sourceFromHex = function(color) {\n if (color.match(Color.reHex)) {\n var value = color.slice(color.indexOf('#') + 1),\n isShortNotation = (value.length === 3 || value.length === 4),\n isRGBa = (value.length === 8 || value.length === 4),\n r = isShortNotation ? (value.charAt(0) + value.charAt(0)) : value.substring(0, 2),\n g = isShortNotation ? (value.charAt(1) + value.charAt(1)) : value.substring(2, 4),\n b = isShortNotation ? (value.charAt(2) + value.charAt(2)) : value.substring(4, 6),\n a = isRGBa ? (isShortNotation ? (value.charAt(3) + value.charAt(3)) : value.substring(6, 8)) : 'FF';\n\n return [\n parseInt(r, 16),\n parseInt(g, 16),\n parseInt(b, 16),\n parseFloat((parseInt(a, 16) / 255).toFixed(2))\n ];\n }\n };\n\n /**\n * Returns new color object, when given color in array representation (ex: [200, 100, 100, 0.5])\n * @static\n * @memberOf fabric.Color\n * @param {Array} source\n * @return {fabric.Color}\n */\n fabric.Color.fromSource = function(source) {\n var oColor = new Color();\n oColor.setSource(source);\n return oColor;\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n scaleMap = ['e', 'se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e'],\n skewMap = ['ns', 'nesw', 'ew', 'nwse'],\n controls = {},\n LEFT = 'left', TOP = 'top', RIGHT = 'right', BOTTOM = 'bottom', CENTER = 'center',\n opposite = {\n top: BOTTOM,\n bottom: TOP,\n left: RIGHT,\n right: LEFT,\n center: CENTER,\n }, radiansToDegrees = fabric.util.radiansToDegrees,\n sign = (Math.sign || function(x) { return ((x > 0) - (x < 0)) || +x; });\n\n /**\n * Combine control position and object angle to find the control direction compared\n * to the object center.\n * @param {fabric.Object} fabricObject the fabric object for which we are rendering controls\n * @param {fabric.Control} control the control class\n * @return {Number} 0 - 7 a quadrant number\n */\n function findCornerQuadrant(fabricObject, control) {\n var cornerAngle = fabricObject.angle + radiansToDegrees(Math.atan2(control.y, control.x)) + 360;\n return Math.round((cornerAngle % 360) / 45);\n }\n\n function fireEvent(eventName, options) {\n var target = options.transform.target,\n canvas = target.canvas,\n canvasOptions = fabric.util.object.clone(options);\n canvasOptions.target = target;\n canvas && canvas.fire('object:' + eventName, canvasOptions);\n target.fire(eventName, options);\n }\n\n /**\n * Inspect event and fabricObject properties to understand if the scaling action\n * @param {Event} eventData from the user action\n * @param {fabric.Object} fabricObject the fabric object about to scale\n * @return {Boolean} true if scale is proportional\n */\n function scaleIsProportional(eventData, fabricObject) {\n var canvas = fabricObject.canvas, uniScaleKey = canvas.uniScaleKey,\n uniformIsToggled = eventData[uniScaleKey];\n return (canvas.uniformScaling && !uniformIsToggled) ||\n (!canvas.uniformScaling && uniformIsToggled);\n }\n\n /**\n * Checks if transform is centered\n * @param {Object} transform transform data\n * @return {Boolean} true if transform is centered\n */\n function isTransformCentered(transform) {\n return transform.originX === CENTER && transform.originY === CENTER;\n }\n\n /**\n * Inspect fabricObject to understand if the current scaling action is allowed\n * @param {fabric.Object} fabricObject the fabric object about to scale\n * @param {String} by 'x' or 'y' or ''\n * @param {Boolean} scaleProportionally true if we are trying to scale proportionally\n * @return {Boolean} true if scaling is not allowed at current conditions\n */\n function scalingIsForbidden(fabricObject, by, scaleProportionally) {\n var lockX = fabricObject.lockScalingX, lockY = fabricObject.lockScalingY;\n if (lockX && lockY) {\n return true;\n }\n if (!by && (lockX || lockY) && scaleProportionally) {\n return true;\n }\n if (lockX && by === 'x') {\n return true;\n }\n if (lockY && by === 'y') {\n return true;\n }\n return false;\n }\n\n /**\n * return the correct cursor style for the scale action\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {fabric.Control} control the control that is interested in the action\n * @param {fabric.Object} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\n function scaleCursorStyleHandler(eventData, control, fabricObject) {\n var notAllowed = 'not-allowed',\n scaleProportionally = scaleIsProportional(eventData, fabricObject),\n by = '';\n if (control.x !== 0 && control.y === 0) {\n by = 'x';\n }\n else if (control.x === 0 && control.y !== 0) {\n by = 'y';\n }\n if (scalingIsForbidden(fabricObject, by, scaleProportionally)) {\n return notAllowed;\n }\n var n = findCornerQuadrant(fabricObject, control);\n return scaleMap[n] + '-resize';\n }\n\n /**\n * return the correct cursor style for the skew action\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {fabric.Control} control the control that is interested in the action\n * @param {fabric.Object} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\n function skewCursorStyleHandler(eventData, control, fabricObject) {\n var notAllowed = 'not-allowed';\n if (control.x !== 0 && fabricObject.lockSkewingY) {\n return notAllowed;\n }\n if (control.y !== 0 && fabricObject.lockSkewingX) {\n return notAllowed;\n }\n var n = findCornerQuadrant(fabricObject, control) % 4;\n return skewMap[n] + '-resize';\n }\n\n /**\n * Combine skew and scale style handlers to cover fabric standard use case\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {fabric.Control} control the control that is interested in the action\n * @param {fabric.Object} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\n function scaleSkewCursorStyleHandler(eventData, control, fabricObject) {\n if (eventData[fabricObject.canvas.altActionKey]) {\n return controls.skewCursorStyleHandler(eventData, control, fabricObject);\n }\n return controls.scaleCursorStyleHandler(eventData, control, fabricObject);\n }\n\n /**\n * Inspect event, control and fabricObject to return the correct action name\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {fabric.Control} control the control that is interested in the action\n * @param {fabric.Object} fabricObject the fabric object that is interested in the action\n * @return {String} an action name\n */\n function scaleOrSkewActionName(eventData, control, fabricObject) {\n var isAlternative = eventData[fabricObject.canvas.altActionKey];\n if (control.x === 0) {\n // then is scaleY or skewX\n return isAlternative ? 'skewX' : 'scaleY';\n }\n if (control.y === 0) {\n // then is scaleY or skewX\n return isAlternative ? 'skewY' : 'scaleX';\n }\n }\n\n /**\n * Find the correct style for the control that is used for rotation.\n * this function is very simple and it just take care of not-allowed or standard cursor\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {fabric.Control} control the control that is interested in the action\n * @param {fabric.Object} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\n function rotationStyleHandler(eventData, control, fabricObject) {\n if (fabricObject.lockRotation) {\n return 'not-allowed';\n }\n return control.cursorStyle;\n }\n\n function commonEventInfo(eventData, transform, x, y) {\n return {\n e: eventData,\n transform: transform,\n pointer: {\n x: x,\n y: y,\n }\n };\n }\n\n /**\n * Wrap an action handler with saving/restoring object position on the transform.\n * this is the code that permits to objects to keep their position while transforming.\n * @param {Function} actionHandler the function to wrap\n * @return {Function} a function with an action handler signature\n */\n function wrapWithFixedAnchor(actionHandler) {\n return function(eventData, transform, x, y) {\n var target = transform.target, centerPoint = target.getCenterPoint(),\n constraint = target.translateToOriginPoint(centerPoint, transform.originX, transform.originY),\n actionPerformed = actionHandler(eventData, transform, x, y);\n target.setPositionByOrigin(constraint, transform.originX, transform.originY);\n return actionPerformed;\n };\n }\n\n /**\n * Wrap an action handler with firing an event if the action is performed\n * @param {Function} actionHandler the function to wrap\n * @return {Function} a function with an action handler signature\n */\n function wrapWithFireEvent(eventName, actionHandler) {\n return function(eventData, transform, x, y) {\n var actionPerformed = actionHandler(eventData, transform, x, y);\n if (actionPerformed) {\n fireEvent(eventName, commonEventInfo(eventData, transform, x, y));\n }\n return actionPerformed;\n };\n }\n\n /**\n * Transforms a point described by x and y in a distance from the top left corner of the object\n * bounding box.\n * @param {Object} transform\n * @param {String} originX\n * @param {String} originY\n * @param {number} x\n * @param {number} y\n * @return {Fabric.Point} the normalized point\n */\n function getLocalPoint(transform, originX, originY, x, y) {\n var target = transform.target,\n control = target.controls[transform.corner],\n zoom = target.canvas.getZoom(),\n padding = target.padding / zoom,\n localPoint = target.toLocalPoint(new fabric.Point(x, y), originX, originY);\n if (localPoint.x >= padding) {\n localPoint.x -= padding;\n }\n if (localPoint.x <= -padding) {\n localPoint.x += padding;\n }\n if (localPoint.y >= padding) {\n localPoint.y -= padding;\n }\n if (localPoint.y <= padding) {\n localPoint.y += padding;\n }\n localPoint.x -= control.offsetX;\n localPoint.y -= control.offsetY;\n return localPoint;\n }\n\n /**\n * Detect if the fabric object is flipped on one side.\n * @param {fabric.Object} target\n * @return {Boolean} true if one flip, but not two.\n */\n function targetHasOneFlip(target) {\n return target.flipX !== target.flipY;\n }\n\n /**\n * Utility function to compensate the scale factor when skew is applied on both axes\n * @private\n */\n function compensateScaleForSkew(target, oppositeSkew, scaleToCompensate, axis, reference) {\n if (target[oppositeSkew] !== 0) {\n var newDim = target._getTransformedDimensions()[axis];\n var newValue = reference / newDim * target[scaleToCompensate];\n target.set(scaleToCompensate, newValue);\n }\n }\n\n /**\n * Action handler for skewing on the X axis\n * @private\n */\n function skewObjectX(eventData, transform, x, y) {\n var target = transform.target,\n // find how big the object would be, if there was no skewX. takes in account scaling\n dimNoSkew = target._getTransformedDimensions(0, target.skewY),\n localPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y),\n // the mouse is in the center of the object, and we want it to stay there.\n // so the object will grow twice as much as the mouse.\n // this makes the skew growth to localPoint * 2 - dimNoSkew.\n totalSkewSize = Math.abs(localPoint.x * 2) - dimNoSkew.x,\n currentSkew = target.skewX, newSkew;\n if (totalSkewSize < 2) {\n // let's make it easy to go back to position 0.\n newSkew = 0;\n }\n else {\n newSkew = radiansToDegrees(\n Math.atan2((totalSkewSize / target.scaleX), (dimNoSkew.y / target.scaleY))\n );\n // now we have to find the sign of the skew.\n // it mostly depend on the origin of transformation.\n if (transform.originX === LEFT && transform.originY === BOTTOM) {\n newSkew = -newSkew;\n }\n if (transform.originX === RIGHT && transform.originY === TOP) {\n newSkew = -newSkew;\n }\n if (targetHasOneFlip(target)) {\n newSkew = -newSkew;\n }\n }\n var hasSkewed = currentSkew !== newSkew;\n if (hasSkewed) {\n var dimBeforeSkewing = target._getTransformedDimensions().y;\n target.set('skewX', newSkew);\n compensateScaleForSkew(target, 'skewY', 'scaleY', 'y', dimBeforeSkewing);\n }\n return hasSkewed;\n }\n\n /**\n * Action handler for skewing on the Y axis\n * @private\n */\n function skewObjectY(eventData, transform, x, y) {\n var target = transform.target,\n // find how big the object would be, if there was no skewX. takes in account scaling\n dimNoSkew = target._getTransformedDimensions(target.skewX, 0),\n localPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y),\n // the mouse is in the center of the object, and we want it to stay there.\n // so the object will grow twice as much as the mouse.\n // this makes the skew growth to localPoint * 2 - dimNoSkew.\n totalSkewSize = Math.abs(localPoint.y * 2) - dimNoSkew.y,\n currentSkew = target.skewY, newSkew;\n if (totalSkewSize < 2) {\n // let's make it easy to go back to position 0.\n newSkew = 0;\n }\n else {\n newSkew = radiansToDegrees(\n Math.atan2((totalSkewSize / target.scaleY), (dimNoSkew.x / target.scaleX))\n );\n // now we have to find the sign of the skew.\n // it mostly depend on the origin of transformation.\n if (transform.originX === LEFT && transform.originY === BOTTOM) {\n newSkew = -newSkew;\n }\n if (transform.originX === RIGHT && transform.originY === TOP) {\n newSkew = -newSkew;\n }\n if (targetHasOneFlip(target)) {\n newSkew = -newSkew;\n }\n }\n var hasSkewed = currentSkew !== newSkew;\n if (hasSkewed) {\n var dimBeforeSkewing = target._getTransformedDimensions().x;\n target.set('skewY', newSkew);\n compensateScaleForSkew(target, 'skewX', 'scaleX', 'x', dimBeforeSkewing);\n }\n return hasSkewed;\n }\n\n /**\n * Wrapped Action handler for skewing on the Y axis, takes care of the\n * skew direction and determine the correct transform origin for the anchor point\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function skewHandlerX(eventData, transform, x, y) {\n // step1 figure out and change transform origin.\n // if skewX > 0 and originY bottom we anchor on right\n // if skewX > 0 and originY top we anchor on left\n // if skewX < 0 and originY bottom we anchor on left\n // if skewX < 0 and originY top we anchor on right\n // if skewX is 0, we look for mouse position to understand where are we going.\n var target = transform.target, currentSkew = target.skewX, originX, originY = transform.originY;\n if (target.lockSkewingX) {\n return false;\n }\n if (currentSkew === 0) {\n var localPointFromCenter = getLocalPoint(transform, CENTER, CENTER, x, y);\n if (localPointFromCenter.x > 0) {\n // we are pulling right, anchor left;\n originX = LEFT;\n }\n else {\n // we are pulling right, anchor right\n originX = RIGHT;\n }\n }\n else {\n if (currentSkew > 0) {\n originX = originY === TOP ? LEFT : RIGHT;\n }\n if (currentSkew < 0) {\n originX = originY === TOP ? RIGHT : LEFT;\n }\n // is the object flipped on one side only? swap the origin.\n if (targetHasOneFlip(target)) {\n originX = originX === LEFT ? RIGHT : LEFT;\n }\n }\n\n // once we have the origin, we find the anchor point\n transform.originX = originX;\n var finalHandler = wrapWithFireEvent('skewing', wrapWithFixedAnchor(skewObjectX));\n return finalHandler(eventData, transform, x, y);\n }\n\n /**\n * Wrapped Action handler for skewing on the Y axis, takes care of the\n * skew direction and determine the correct transform origin for the anchor point\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function skewHandlerY(eventData, transform, x, y) {\n // step1 figure out and change transform origin.\n // if skewY > 0 and originX left we anchor on top\n // if skewY > 0 and originX right we anchor on bottom\n // if skewY < 0 and originX left we anchor on bottom\n // if skewY < 0 and originX right we anchor on top\n // if skewY is 0, we look for mouse position to understand where are we going.\n var target = transform.target, currentSkew = target.skewY, originY, originX = transform.originX;\n if (target.lockSkewingY) {\n return false;\n }\n if (currentSkew === 0) {\n var localPointFromCenter = getLocalPoint(transform, CENTER, CENTER, x, y);\n if (localPointFromCenter.y > 0) {\n // we are pulling down, anchor up;\n originY = TOP;\n }\n else {\n // we are pulling up, anchor down\n originY = BOTTOM;\n }\n }\n else {\n if (currentSkew > 0) {\n originY = originX === LEFT ? TOP : BOTTOM;\n }\n if (currentSkew < 0) {\n originY = originX === LEFT ? BOTTOM : TOP;\n }\n // is the object flipped on one side only? swap the origin.\n if (targetHasOneFlip(target)) {\n originY = originY === TOP ? BOTTOM : TOP;\n }\n }\n\n // once we have the origin, we find the anchor point\n transform.originY = originY;\n var finalHandler = wrapWithFireEvent('skewing', wrapWithFixedAnchor(skewObjectY));\n return finalHandler(eventData, transform, x, y);\n }\n\n /**\n * Action handler for rotation and snapping, without anchor point.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n * @private\n */\n function rotationWithSnapping(eventData, transform, x, y) {\n var t = transform,\n target = t.target,\n pivotPoint = target.translateToOriginPoint(target.getCenterPoint(), t.originX, t.originY);\n\n if (target.lockRotation) {\n return false;\n }\n\n var lastAngle = Math.atan2(t.ey - pivotPoint.y, t.ex - pivotPoint.x),\n curAngle = Math.atan2(y - pivotPoint.y, x - pivotPoint.x),\n angle = radiansToDegrees(curAngle - lastAngle + t.theta),\n hasRotated = true;\n\n if (target.snapAngle > 0) {\n var snapAngle = target.snapAngle,\n snapThreshold = target.snapThreshold || snapAngle,\n rightAngleLocked = Math.ceil(angle / snapAngle) * snapAngle,\n leftAngleLocked = Math.floor(angle / snapAngle) * snapAngle;\n\n if (Math.abs(angle - leftAngleLocked) < snapThreshold) {\n angle = leftAngleLocked;\n }\n else if (Math.abs(angle - rightAngleLocked) < snapThreshold) {\n angle = rightAngleLocked;\n }\n }\n\n // normalize angle to positive value\n if (angle < 0) {\n angle = 360 + angle;\n }\n angle %= 360;\n\n hasRotated = target.angle !== angle;\n target.angle = angle;\n return hasRotated;\n }\n\n /**\n * Basic scaling logic, reused with different constrain for scaling X,Y, freely or equally.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @param {Object} options additional information for scaling\n * @param {String} options.by 'x', 'y', 'equally' or '' to indicate type of scaling\n * @return {Boolean} true if some change happened\n * @private\n */\n function scaleObject(eventData, transform, x, y, options) {\n options = options || {};\n var target = transform.target,\n lockScalingX = target.lockScalingX, lockScalingY = target.lockScalingY,\n by = options.by, newPoint, scaleX, scaleY, dim,\n scaleProportionally = scaleIsProportional(eventData, target),\n forbidScaling = scalingIsForbidden(target, by, scaleProportionally),\n signX, signY, gestureScale = transform.gestureScale;\n\n if (forbidScaling) {\n return false;\n }\n if (gestureScale) {\n scaleX = transform.scaleX * gestureScale;\n scaleY = transform.scaleY * gestureScale;\n }\n else {\n newPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y);\n // use of sign: We use sign to detect change of direction of an action. sign usually change when\n // we cross the origin point with the mouse. So a scale flip for example. There is an issue when scaling\n // by center and scaling using one middle control ( default: mr, mt, ml, mb), the mouse movement can easily\n // cross many time the origin point and flip the object. so we need a way to filter out the noise.\n // This ternary here should be ok to filter out X scaling when we want Y only and vice versa.\n signX = by !== 'y' ? sign(newPoint.x) : 1;\n signY = by !== 'x' ? sign(newPoint.y) : 1;\n if (!transform.signX) {\n transform.signX = signX;\n }\n if (!transform.signY) {\n transform.signY = signY;\n }\n\n if (target.lockScalingFlip &&\n (transform.signX !== signX || transform.signY !== signY)\n ) {\n return false;\n }\n\n dim = target._getTransformedDimensions();\n // missing detection of flip and logic to switch the origin\n if (scaleProportionally && !by) {\n // uniform scaling\n var distance = Math.abs(newPoint.x) + Math.abs(newPoint.y),\n original = transform.original,\n originalDistance = Math.abs(dim.x * original.scaleX / target.scaleX) +\n Math.abs(dim.y * original.scaleY / target.scaleY),\n scale = distance / originalDistance;\n scaleX = original.scaleX * scale;\n scaleY = original.scaleY * scale;\n }\n else {\n scaleX = Math.abs(newPoint.x * target.scaleX / dim.x);\n scaleY = Math.abs(newPoint.y * target.scaleY / dim.y);\n }\n // if we are scaling by center, we need to double the scale\n if (isTransformCentered(transform)) {\n scaleX *= 2;\n scaleY *= 2;\n }\n if (transform.signX !== signX && by !== 'y') {\n transform.originX = opposite[transform.originX];\n scaleX *= -1;\n transform.signX = signX;\n }\n if (transform.signY !== signY && by !== 'x') {\n transform.originY = opposite[transform.originY];\n scaleY *= -1;\n transform.signY = signY;\n }\n }\n // minScale is taken are in the setter.\n var oldScaleX = target.scaleX, oldScaleY = target.scaleY;\n if (!by) {\n !lockScalingX && target.set('scaleX', scaleX);\n !lockScalingY && target.set('scaleY', scaleY);\n }\n else {\n // forbidden cases already handled on top here.\n by === 'x' && target.set('scaleX', scaleX);\n by === 'y' && target.set('scaleY', scaleY);\n }\n return oldScaleX !== target.scaleX || oldScaleY !== target.scaleY;\n }\n\n /**\n * Generic scaling logic, to scale from corners either equally or freely.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function scaleObjectFromCorner(eventData, transform, x, y) {\n return scaleObject(eventData, transform, x, y);\n }\n\n /**\n * Scaling logic for the X axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function scaleObjectX(eventData, transform, x, y) {\n return scaleObject(eventData, transform, x, y , { by: 'x' });\n }\n\n /**\n * Scaling logic for the Y axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function scaleObjectY(eventData, transform, x, y) {\n return scaleObject(eventData, transform, x, y , { by: 'y' });\n }\n\n /**\n * Composed action handler to either scale Y or skew X\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function scalingYOrSkewingX(eventData, transform, x, y) {\n // ok some safety needed here.\n if (eventData[transform.target.canvas.altActionKey]) {\n return controls.skewHandlerX(eventData, transform, x, y);\n }\n return controls.scalingY(eventData, transform, x, y);\n }\n\n /**\n * Composed action handler to either scale X or skew Y\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function scalingXOrSkewingY(eventData, transform, x, y) {\n // ok some safety needed here.\n if (eventData[transform.target.canvas.altActionKey]) {\n return controls.skewHandlerY(eventData, transform, x, y);\n }\n return controls.scalingX(eventData, transform, x, y);\n }\n\n /**\n * Action handler to change textbox width\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function changeWidth(eventData, transform, x, y) {\n var target = transform.target, localPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y),\n strokePadding = target.strokeWidth / (target.strokeUniform ? target.scaleX : 1),\n multiplier = isTransformCentered(transform) ? 2 : 1,\n oldWidth = target.width,\n newWidth = Math.abs(localPoint.x * multiplier / target.scaleX) - strokePadding;\n target.set('width', Math.max(newWidth, 0));\n return oldWidth !== newWidth;\n }\n\n /**\n * Action handler\n * @private\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if the translation occurred\n */\n function dragHandler(eventData, transform, x, y) {\n var target = transform.target,\n newLeft = x - transform.offsetX,\n newTop = y - transform.offsetY,\n moveX = !target.get('lockMovementX') && target.left !== newLeft,\n moveY = !target.get('lockMovementY') && target.top !== newTop;\n moveX && target.set('left', newLeft);\n moveY && target.set('top', newTop);\n if (moveX || moveY) {\n fireEvent('moving', commonEventInfo(eventData, transform, x, y));\n }\n return moveX || moveY;\n }\n\n controls.scaleCursorStyleHandler = scaleCursorStyleHandler;\n controls.skewCursorStyleHandler = skewCursorStyleHandler;\n controls.scaleSkewCursorStyleHandler = scaleSkewCursorStyleHandler;\n controls.rotationWithSnapping = wrapWithFireEvent('rotating', wrapWithFixedAnchor(rotationWithSnapping));\n controls.scalingEqually = wrapWithFireEvent('scaling', wrapWithFixedAnchor( scaleObjectFromCorner));\n controls.scalingX = wrapWithFireEvent('scaling', wrapWithFixedAnchor(scaleObjectX));\n controls.scalingY = wrapWithFireEvent('scaling', wrapWithFixedAnchor(scaleObjectY));\n controls.scalingYOrSkewingX = scalingYOrSkewingX;\n controls.scalingXOrSkewingY = scalingXOrSkewingY;\n controls.changeWidth = wrapWithFireEvent('resizing', wrapWithFixedAnchor(changeWidth));\n controls.skewHandlerX = skewHandlerX;\n controls.skewHandlerY = skewHandlerY;\n controls.dragHandler = dragHandler;\n controls.scaleOrSkewActionName = scaleOrSkewActionName;\n controls.rotationStyleHandler = rotationStyleHandler;\n controls.fireEvent = fireEvent;\n controls.wrapWithFixedAnchor = wrapWithFixedAnchor;\n controls.wrapWithFireEvent = wrapWithFireEvent;\n controls.getLocalPoint = getLocalPoint;\n fabric.controlsUtils = controls;\n\n})(typeof exports !== 'undefined' ? exports : this);\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n degreesToRadians = fabric.util.degreesToRadians,\n controls = fabric.controlsUtils;\n\n /**\n * Render a round control, as per fabric features.\n * This function is written to respect object properties like transparentCorners, cornerSize\n * cornerColor, cornerStrokeColor\n * plus the addition of offsetY and offsetX.\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @param {Number} left x coordinate where the control center should be\n * @param {Number} top y coordinate where the control center should be\n * @param {Object} styleOverride override for fabric.Object controls style\n * @param {fabric.Object} fabricObject the fabric object for which we are rendering controls\n */\n function renderCircleControl (ctx, left, top, styleOverride, fabricObject) {\n styleOverride = styleOverride || {};\n var xSize = this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,\n ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,\n transparentCorners = typeof styleOverride.transparentCorners !== 'undefined' ?\n styleOverride.transparentCorners : fabricObject.transparentCorners,\n methodName = transparentCorners ? 'stroke' : 'fill',\n stroke = !transparentCorners && (styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor),\n myLeft = left,\n myTop = top, size;\n ctx.save();\n ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor;\n ctx.strokeStyle = styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor;\n // as soon as fabric react v5, remove ie11, use proper ellipse code.\n if (xSize > ySize) {\n size = xSize;\n ctx.scale(1.0, ySize / xSize);\n myTop = top * xSize / ySize;\n }\n else if (ySize > xSize) {\n size = ySize;\n ctx.scale(xSize / ySize, 1.0);\n myLeft = left * ySize / xSize;\n }\n else {\n size = xSize;\n }\n // this is still wrong\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.arc(myLeft, myTop, size / 2, 0, 2 * Math.PI, false);\n ctx[methodName]();\n if (stroke) {\n ctx.stroke();\n }\n ctx.restore();\n }\n\n /**\n * Render a square control, as per fabric features.\n * This function is written to respect object properties like transparentCorners, cornerSize\n * cornerColor, cornerStrokeColor\n * plus the addition of offsetY and offsetX.\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @param {Number} left x coordinate where the control center should be\n * @param {Number} top y coordinate where the control center should be\n * @param {Object} styleOverride override for fabric.Object controls style\n * @param {fabric.Object} fabricObject the fabric object for which we are rendering controls\n */\n function renderSquareControl(ctx, left, top, styleOverride, fabricObject) {\n styleOverride = styleOverride || {};\n var xSize = this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,\n ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,\n transparentCorners = typeof styleOverride.transparentCorners !== 'undefined' ?\n styleOverride.transparentCorners : fabricObject.transparentCorners,\n methodName = transparentCorners ? 'stroke' : 'fill',\n stroke = !transparentCorners && (\n styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor\n ), xSizeBy2 = xSize / 2, ySizeBy2 = ySize / 2;\n ctx.save();\n ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor;\n ctx.strokeStyle = styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor;\n // this is still wrong\n ctx.lineWidth = 1;\n ctx.translate(left, top);\n ctx.rotate(degreesToRadians(fabricObject.angle));\n // this does not work, and fixed with ( && ) does not make sense.\n // to have real transparent corners we need the controls on upperCanvas\n // transparentCorners || ctx.clearRect(-xSizeBy2, -ySizeBy2, xSize, ySize);\n ctx[methodName + 'Rect'](-xSizeBy2, -ySizeBy2, xSize, ySize);\n if (stroke) {\n ctx.strokeRect(-xSizeBy2, -ySizeBy2, xSize, ySize);\n }\n ctx.restore();\n }\n\n controls.renderCircleControl = renderCircleControl;\n controls.renderSquareControl = renderSquareControl;\n\n})(typeof exports !== 'undefined' ? exports : this);\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { });\n\n function Control(options) {\n for (var i in options) {\n this[i] = options[i];\n }\n }\n\n fabric.Control = Control;\n\n fabric.Control.prototype = /** @lends fabric.Control.prototype */ {\n\n /**\n * keep track of control visibility.\n * mainly for backward compatibility.\n * if you do not want to see a control, you can remove it\n * from the controlset.\n * @type {Boolean}\n * @default true\n */\n visible: true,\n\n /**\n * Name of the action that the control will likely execute.\n * This is optional. FabricJS uses to identify what the user is doing for some\n * extra optimizations. If you are writing a custom control and you want to know\n * somewhere else in the code what is going on, you can use this string here.\n * you can also provide a custom getActionName if your control run multiple actions\n * depending on some external state.\n * default to scale since is the most common, used on 4 corners by default\n * @type {String}\n * @default 'scale'\n */\n actionName: 'scale',\n\n /**\n * Drawing angle of the control.\n * NOT used for now, but name marked as needed for internal logic\n * example: to reuse the same drawing function for different rotated controls\n * @type {Number}\n * @default 0\n */\n angle: 0,\n\n /**\n * Relative position of the control. X\n * 0,0 is the center of the Object, while -0.5 (left) or 0.5 (right) are the extremities\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n x: 0,\n\n /**\n * Relative position of the control. Y\n * 0,0 is the center of the Object, while -0.5 (top) or 0.5 (bottom) are the extremities\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n y: 0,\n\n /**\n * Horizontal offset of the control from the defined position. In pixels\n * Positive offset moves the control to the right, negative to the left.\n * It used when you want to have position of control that does not scale with\n * the bounding box. Example: rotation control is placed at x:0, y: 0.5 on\n * the boundindbox, with an offset of 30 pixels vertically. Those 30 pixels will\n * stay 30 pixels no matter how the object is big. Another example is having 2\n * controls in the corner, that stay in the same position when the object scale.\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n offsetX: 0,\n\n /**\n * Vertical offset of the control from the defined position. In pixels\n * Positive offset moves the control to the bottom, negative to the top.\n * @type {Number}\n * @default 0\n */\n offsetY: 0,\n\n /**\n * Sets the length of the control. If null, defaults to object's cornerSize.\n * Expects both sizeX and sizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n sizeX: null,\n\n /**\n * Sets the height of the control. If null, defaults to object's cornerSize.\n * Expects both sizeX and sizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n sizeY: null,\n\n /**\n * Sets the length of the touch area of the control. If null, defaults to object's touchCornerSize.\n * Expects both touchSizeX and touchSizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n touchSizeX: null,\n\n /**\n * Sets the height of the touch area of the control. If null, defaults to object's touchCornerSize.\n * Expects both touchSizeX and touchSizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n touchSizeY: null,\n\n /**\n * Css cursor style to display when the control is hovered.\n * if the method `cursorStyleHandler` is provided, this property is ignored.\n * @type {String}\n * @default 'crosshair'\n */\n cursorStyle: 'crosshair',\n\n /**\n * If controls has an offsetY or offsetX, draw a line that connects\n * the control to the bounding box\n * @type {Boolean}\n * @default false\n */\n withConnection: false,\n\n /**\n * The control actionHandler, provide one to handle action ( control being moved )\n * @param {Event} eventData the native mouse event\n * @param {Object} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n actionHandler: function(/* eventData, transformData, x, y */) { },\n\n /**\n * The control handler for mouse down, provide one to handle mouse down on control\n * @param {Event} eventData the native mouse event\n * @param {Object} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n mouseDownHandler: function(/* eventData, transformData, x, y */) { },\n\n /**\n * The control mouseUpHandler, provide one to handle an effect on mouse up.\n * @param {Event} eventData the native mouse event\n * @param {Object} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n mouseUpHandler: function(/* eventData, transformData, x, y */) { },\n\n /**\n * Returns control actionHandler\n * @param {Event} eventData the native mouse event\n * @param {fabric.Object} fabricObject on which the control is displayed\n * @param {fabric.Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getActionHandler: function(/* eventData, fabricObject, control */) {\n return this.actionHandler;\n },\n\n /**\n * Returns control mouseDown handler\n * @param {Event} eventData the native mouse event\n * @param {fabric.Object} fabricObject on which the control is displayed\n * @param {fabric.Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getMouseDownHandler: function(/* eventData, fabricObject, control */) {\n return this.mouseDownHandler;\n },\n\n /**\n * Returns control mouseUp handler\n * @param {Event} eventData the native mouse event\n * @param {fabric.Object} fabricObject on which the control is displayed\n * @param {fabric.Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getMouseUpHandler: function(/* eventData, fabricObject, control */) {\n return this.mouseUpHandler;\n },\n\n /**\n * Returns control cursorStyle for css using cursorStyle. If you need a more elaborate\n * function you can pass one in the constructor\n * the cursorStyle property\n * @param {Event} eventData the native mouse event\n * @param {fabric.Control} control the current control ( likely this)\n * @param {fabric.Object} object on which the control is displayed\n * @return {String}\n */\n cursorStyleHandler: function(eventData, control /* fabricObject */) {\n return control.cursorStyle;\n },\n\n /**\n * Returns the action name. The basic implementation just return the actionName property.\n * @param {Event} eventData the native mouse event\n * @param {fabric.Control} control the current control ( likely this)\n * @param {fabric.Object} object on which the control is displayed\n * @return {String}\n */\n getActionName: function(eventData, control /* fabricObject */) {\n return control.actionName;\n },\n\n /**\n * Returns controls visibility\n * @param {fabric.Object} object on which the control is displayed\n * @param {String} controlKey key where the control is memorized on the\n * @return {Boolean}\n */\n getVisibility: function(fabricObject, controlKey) {\n var objectVisibility = fabricObject._controlsVisibility;\n if (objectVisibility && typeof objectVisibility[controlKey] !== 'undefined') {\n return objectVisibility[controlKey];\n }\n return this.visible;\n },\n\n /**\n * Sets controls visibility\n * @param {Boolean} visibility for the object\n * @return {Void}\n */\n setVisibility: function(visibility /* name, fabricObject */) {\n this.visible = visibility;\n },\n\n\n positionHandler: function(dim, finalMatrix /*, fabricObject, currentControl */) {\n var point = fabric.util.transformPoint({\n x: this.x * dim.x + this.offsetX,\n y: this.y * dim.y + this.offsetY }, finalMatrix);\n return point;\n },\n\n /**\n * Returns the coords for this control based on object values.\n * @param {Number} objectAngle angle from the fabric object holding the control\n * @param {Number} objectCornerSize cornerSize from the fabric object holding the control (or touchCornerSize if\n * isTouch is true)\n * @param {Number} centerX x coordinate where the control center should be\n * @param {Number} centerY y coordinate where the control center should be\n * @param {boolean} isTouch true if touch corner, false if normal corner\n */\n calcCornerCoords: function(objectAngle, objectCornerSize, centerX, centerY, isTouch) {\n var cosHalfOffset,\n sinHalfOffset,\n cosHalfOffsetComp,\n sinHalfOffsetComp,\n xSize = (isTouch) ? this.touchSizeX : this.sizeX,\n ySize = (isTouch) ? this.touchSizeY : this.sizeY;\n if (xSize && ySize && xSize !== ySize) {\n // handle rectangular corners\n var controlTriangleAngle = Math.atan2(ySize, xSize);\n var cornerHypotenuse = Math.sqrt(xSize * xSize + ySize * ySize) / 2;\n var newTheta = controlTriangleAngle - fabric.util.degreesToRadians(objectAngle);\n var newThetaComp = Math.PI / 2 - controlTriangleAngle - fabric.util.degreesToRadians(objectAngle);\n cosHalfOffset = cornerHypotenuse * fabric.util.cos(newTheta);\n sinHalfOffset = cornerHypotenuse * fabric.util.sin(newTheta);\n // use complementary angle for two corners\n cosHalfOffsetComp = cornerHypotenuse * fabric.util.cos(newThetaComp);\n sinHalfOffsetComp = cornerHypotenuse * fabric.util.sin(newThetaComp);\n }\n else {\n // handle square corners\n // use default object corner size unless size is defined\n var cornerSize = (xSize && ySize) ? xSize : objectCornerSize;\n /* 0.7071067812 stands for sqrt(2)/2 */\n cornerHypotenuse = cornerSize * 0.7071067812;\n // complementary angles are equal since they're both 45 degrees\n var newTheta = fabric.util.degreesToRadians(45 - objectAngle);\n cosHalfOffset = cosHalfOffsetComp = cornerHypotenuse * fabric.util.cos(newTheta);\n sinHalfOffset = sinHalfOffsetComp = cornerHypotenuse * fabric.util.sin(newTheta);\n }\n\n return {\n tl: {\n x: centerX - sinHalfOffsetComp,\n y: centerY - cosHalfOffsetComp,\n },\n tr: {\n x: centerX + cosHalfOffset,\n y: centerY - sinHalfOffset,\n },\n bl: {\n x: centerX - cosHalfOffset,\n y: centerY + sinHalfOffset,\n },\n br: {\n x: centerX + sinHalfOffsetComp,\n y: centerY + cosHalfOffsetComp,\n },\n };\n },\n\n /**\n * Render function for the control.\n * When this function runs the context is unscaled. unrotate. Just retina scaled.\n * all the functions will have to translate to the point left,top before starting Drawing\n * if they want to draw a control where the position is detected.\n * left and top are the result of the positionHandler function\n * @param {RenderingContext2D} ctx the context where the control will be drawn\n * @param {Number} left position of the canvas where we are about to render the control.\n * @param {Number} top position of the canvas where we are about to render the control.\n * @param {Object} styleOverride\n * @param {fabric.Object} fabricObject the object where the control is about to be rendered\n */\n render: function(ctx, left, top, styleOverride, fabricObject) {\n styleOverride = styleOverride || {};\n switch (styleOverride.cornerStyle || fabricObject.cornerStyle) {\n case 'circle':\n fabric.controlsUtils.renderCircleControl.call(this, ctx, left, top, styleOverride, fabricObject);\n break;\n default:\n fabric.controlsUtils.renderSquareControl.call(this, ctx, left, top, styleOverride, fabricObject);\n }\n },\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n(function () {\n\n 'use strict';\n\n if (fabric.StaticCanvas) {\n fabric.warn('fabric.StaticCanvas is already defined.');\n return;\n }\n\n // aliases for faster resolution\n var extend = fabric.util.object.extend,\n getElementOffset = fabric.util.getElementOffset,\n removeFromArray = fabric.util.removeFromArray,\n toFixed = fabric.util.toFixed,\n transformPoint = fabric.util.transformPoint,\n invertTransform = fabric.util.invertTransform,\n getNodeCanvas = fabric.util.getNodeCanvas,\n createCanvasElement = fabric.util.createCanvasElement,\n\n CANVAS_INIT_ERROR = new Error('Could not initialize `canvas` element');\n\n /**\n * Static canvas class\n * @class fabric.StaticCanvas\n * @mixes fabric.Collection\n * @mixes fabric.Observable\n * @see {@link http://fabricjs.com/static_canvas|StaticCanvas demo}\n * @see {@link fabric.StaticCanvas#initialize} for constructor definition\n * @fires before:render\n * @fires after:render\n * @fires canvas:cleared\n * @fires object:added\n * @fires object:removed\n */\n fabric.StaticCanvas = fabric.util.createClass(fabric.CommonMethods, /** @lends fabric.StaticCanvas.prototype */ {\n\n /**\n * Constructor\n * @param {HTMLElement | String} el <canvas> element to initialize instance on\n * @param {Object} [options] Options object\n * @return {Object} thisArg\n */\n initialize: function(el, options) {\n options || (options = { });\n this.renderAndResetBound = this.renderAndReset.bind(this);\n this.requestRenderAllBound = this.requestRenderAll.bind(this);\n this._initStatic(el, options);\n },\n\n /**\n * Background color of canvas instance.\n * Should be set via {@link fabric.StaticCanvas#setBackgroundColor}.\n * @type {(String|fabric.Pattern)}\n * @default\n */\n backgroundColor: '',\n\n /**\n * Background image of canvas instance.\n * since 2.4.0 image caching is active, please when putting an image as background, add to the\n * canvas property a reference to the canvas it is on. Otherwise the image cannot detect the zoom\n * vale. As an alternative you can disable image objectCaching\n * @type fabric.Image\n * @default\n */\n backgroundImage: null,\n\n /**\n * Overlay color of canvas instance.\n * Should be set via {@link fabric.StaticCanvas#setOverlayColor}\n * @since 1.3.9\n * @type {(String|fabric.Pattern)}\n * @default\n */\n overlayColor: '',\n\n /**\n * Overlay image of canvas instance.\n * since 2.4.0 image caching is active, please when putting an image as overlay, add to the\n * canvas property a reference to the canvas it is on. Otherwise the image cannot detect the zoom\n * vale. As an alternative you can disable image objectCaching\n * @type fabric.Image\n * @default\n */\n overlayImage: null,\n\n /**\n * Indicates whether toObject/toDatalessObject should include default values\n * if set to false, takes precedence over the object value.\n * @type Boolean\n * @default\n */\n includeDefaultValues: true,\n\n /**\n * Indicates whether objects' state should be saved\n * @type Boolean\n * @default\n */\n stateful: false,\n\n /**\n * Indicates whether {@link fabric.Collection.add}, {@link fabric.Collection.insertAt} and {@link fabric.Collection.remove},\n * {@link fabric.StaticCanvas.moveTo}, {@link fabric.StaticCanvas.clear} and many more, should also re-render canvas.\n * Disabling this option will not give a performance boost when adding/removing a lot of objects to/from canvas at once\n * since the renders are quequed and executed one per frame.\n * Disabling is suggested anyway and managing the renders of the app manually is not a big effort ( canvas.requestRenderAll() )\n * Left default to true to do not break documentation and old app, fiddles.\n * @type Boolean\n * @default\n */\n renderOnAddRemove: true,\n\n /**\n * Indicates whether object controls (borders/controls) are rendered above overlay image\n * @type Boolean\n * @default\n */\n controlsAboveOverlay: false,\n\n /**\n * Indicates whether the browser can be scrolled when using a touchscreen and dragging on the canvas\n * @type Boolean\n * @default\n */\n allowTouchScrolling: false,\n\n /**\n * Indicates whether this canvas will use image smoothing, this is on by default in browsers\n * @type Boolean\n * @default\n */\n imageSmoothingEnabled: true,\n\n /**\n * The transformation (a Canvas 2D API transform matrix) which focuses the viewport\n * @type Array\n * @example Default transform\n * canvas.viewportTransform = [1, 0, 0, 1, 0, 0];\n * @example Scale by 70% and translate toward bottom-right by 50, without skewing\n * canvas.viewportTransform = [0.7, 0, 0, 0.7, 50, 50];\n * @default\n */\n viewportTransform: fabric.iMatrix.concat(),\n\n /**\n * if set to false background image is not affected by viewport transform\n * @since 1.6.3\n * @type Boolean\n * @default\n */\n backgroundVpt: true,\n\n /**\n * if set to false overlya image is not affected by viewport transform\n * @since 1.6.3\n * @type Boolean\n * @default\n */\n overlayVpt: true,\n\n /**\n * When true, canvas is scaled by devicePixelRatio for better rendering on retina screens\n * @type Boolean\n * @default\n */\n enableRetinaScaling: true,\n\n /**\n * Describe canvas element extension over design\n * properties are tl,tr,bl,br.\n * if canvas is not zoomed/panned those points are the four corner of canvas\n * if canvas is viewportTransformed you those points indicate the extension\n * of canvas element in plain untrasformed coordinates\n * The coordinates get updated with @method calcViewportBoundaries.\n * @memberOf fabric.StaticCanvas.prototype\n */\n vptCoords: { },\n\n /**\n * Based on vptCoords and object.aCoords, skip rendering of objects that\n * are not included in current viewport.\n * May greatly help in applications with crowded canvas and use of zoom/pan\n * If One of the corner of the bounding box of the object is on the canvas\n * the objects get rendered.\n * @memberOf fabric.StaticCanvas.prototype\n * @type Boolean\n * @default\n */\n skipOffscreen: true,\n\n /**\n * a fabricObject that, without stroke define a clipping area with their shape. filled in black\n * the clipPath object gets used when the canvas has rendered, and the context is placed in the\n * top left corner of the canvas.\n * clipPath will clip away controls, if you do not want this to happen use controlsAboveOverlay = true\n * @type fabric.Object\n */\n clipPath: undefined,\n\n /**\n * @private\n * @param {HTMLElement | String} el <canvas> element to initialize instance on\n * @param {Object} [options] Options object\n */\n _initStatic: function(el, options) {\n var cb = this.requestRenderAllBound;\n this._objects = [];\n this._createLowerCanvas(el);\n this._initOptions(options);\n // only initialize retina scaling once\n if (!this.interactive) {\n this._initRetinaScaling();\n }\n\n if (options.overlayImage) {\n this.setOverlayImage(options.overlayImage, cb);\n }\n if (options.backgroundImage) {\n this.setBackgroundImage(options.backgroundImage, cb);\n }\n if (options.backgroundColor) {\n this.setBackgroundColor(options.backgroundColor, cb);\n }\n if (options.overlayColor) {\n this.setOverlayColor(options.overlayColor, cb);\n }\n this.calcOffset();\n },\n\n /**\n * @private\n */\n _isRetinaScaling: function() {\n return (fabric.devicePixelRatio > 1 && this.enableRetinaScaling);\n },\n\n /**\n * @private\n * @return {Number} retinaScaling if applied, otherwise 1;\n */\n getRetinaScaling: function() {\n return this._isRetinaScaling() ? Math.max(1, fabric.devicePixelRatio) : 1;\n },\n\n /**\n * @private\n */\n _initRetinaScaling: function() {\n if (!this._isRetinaScaling()) {\n return;\n }\n var scaleRatio = fabric.devicePixelRatio;\n this.__initRetinaScaling(scaleRatio, this.lowerCanvasEl, this.contextContainer);\n if (this.upperCanvasEl) {\n this.__initRetinaScaling(scaleRatio, this.upperCanvasEl, this.contextTop);\n }\n },\n\n __initRetinaScaling: function(scaleRatio, canvas, context) {\n canvas.setAttribute('width', this.width * scaleRatio);\n canvas.setAttribute('height', this.height * scaleRatio);\n context.scale(scaleRatio, scaleRatio);\n },\n\n\n /**\n * Calculates canvas element offset relative to the document\n * This method is also attached as \"resize\" event handler of window\n * @return {fabric.Canvas} instance\n * @chainable\n */\n calcOffset: function () {\n this._offset = getElementOffset(this.lowerCanvasEl);\n return this;\n },\n\n /**\n * Sets {@link fabric.StaticCanvas#overlayImage|overlay image} for this canvas\n * @param {(fabric.Image|String)} image fabric.Image instance or URL of an image to set overlay to\n * @param {Function} callback callback to invoke when image is loaded and set as an overlay\n * @param {Object} [options] Optional options to set for the {@link fabric.Image|overlay image}.\n * @return {fabric.Canvas} thisArg\n * @chainable\n * @see {@link http://jsfiddle.net/fabricjs/MnzHT/|jsFiddle demo}\n * @example Normal overlayImage with left/top = 0\n * canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png', canvas.renderAll.bind(canvas), {\n * // Needed to position overlayImage at 0/0\n * originX: 'left',\n * originY: 'top'\n * });\n * @example overlayImage with different properties\n * canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png', canvas.renderAll.bind(canvas), {\n * opacity: 0.5,\n * angle: 45,\n * left: 400,\n * top: 400,\n * originX: 'left',\n * originY: 'top'\n * });\n * @example Stretched overlayImage #1 - width/height correspond to canvas width/height\n * fabric.Image.fromURL('http://fabricjs.com/assets/jail_cell_bars.png', function(img, isError) {\n * img.set({width: canvas.width, height: canvas.height, originX: 'left', originY: 'top'});\n * canvas.setOverlayImage(img, canvas.renderAll.bind(canvas));\n * });\n * @example Stretched overlayImage #2 - width/height correspond to canvas width/height\n * canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png', canvas.renderAll.bind(canvas), {\n * width: canvas.width,\n * height: canvas.height,\n * // Needed to position overlayImage at 0/0\n * originX: 'left',\n * originY: 'top'\n * });\n * @example overlayImage loaded from cross-origin\n * canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png', canvas.renderAll.bind(canvas), {\n * opacity: 0.5,\n * angle: 45,\n * left: 400,\n * top: 400,\n * originX: 'left',\n * originY: 'top',\n * crossOrigin: 'anonymous'\n * });\n */\n setOverlayImage: function (image, callback, options) {\n return this.__setBgOverlayImage('overlayImage', image, callback, options);\n },\n\n /**\n * Sets {@link fabric.StaticCanvas#backgroundImage|background image} for this canvas\n * @param {(fabric.Image|String)} image fabric.Image instance or URL of an image to set background to\n * @param {Function} callback Callback to invoke when image is loaded and set as background\n * @param {Object} [options] Optional options to set for the {@link fabric.Image|background image}.\n * @return {fabric.Canvas} thisArg\n * @chainable\n * @see {@link http://jsfiddle.net/djnr8o7a/28/|jsFiddle demo}\n * @example Normal backgroundImage with left/top = 0\n * canvas.setBackgroundImage('http://fabricjs.com/assets/honey_im_subtle.png', canvas.renderAll.bind(canvas), {\n * // Needed to position backgroundImage at 0/0\n * originX: 'left',\n * originY: 'top'\n * });\n * @example backgroundImage with different properties\n * canvas.setBackgroundImage('http://fabricjs.com/assets/honey_im_subtle.png', canvas.renderAll.bind(canvas), {\n * opacity: 0.5,\n * angle: 45,\n * left: 400,\n * top: 400,\n * originX: 'left',\n * originY: 'top'\n * });\n * @example Stretched backgroundImage #1 - width/height correspond to canvas width/height\n * fabric.Image.fromURL('http://fabricjs.com/assets/honey_im_subtle.png', function(img, isError) {\n * img.set({width: canvas.width, height: canvas.height, originX: 'left', originY: 'top'});\n * canvas.setBackgroundImage(img, canvas.renderAll.bind(canvas));\n * });\n * @example Stretched backgroundImage #2 - width/height correspond to canvas width/height\n * canvas.setBackgroundImage('http://fabricjs.com/assets/honey_im_subtle.png', canvas.renderAll.bind(canvas), {\n * width: canvas.width,\n * height: canvas.height,\n * // Needed to position backgroundImage at 0/0\n * originX: 'left',\n * originY: 'top'\n * });\n * @example backgroundImage loaded from cross-origin\n * canvas.setBackgroundImage('http://fabricjs.com/assets/honey_im_subtle.png', canvas.renderAll.bind(canvas), {\n * opacity: 0.5,\n * angle: 45,\n * left: 400,\n * top: 400,\n * originX: 'left',\n * originY: 'top',\n * crossOrigin: 'anonymous'\n * });\n */\n // TODO: fix stretched examples\n setBackgroundImage: function (image, callback, options) {\n return this.__setBgOverlayImage('backgroundImage', image, callback, options);\n },\n\n /**\n * Sets {@link fabric.StaticCanvas#overlayColor|foreground color} for this canvas\n * @param {(String|fabric.Pattern)} overlayColor Color or pattern to set foreground color to\n * @param {Function} callback Callback to invoke when foreground color is set\n * @return {fabric.Canvas} thisArg\n * @chainable\n * @see {@link http://jsfiddle.net/fabricjs/pB55h/|jsFiddle demo}\n * @example Normal overlayColor - color value\n * canvas.setOverlayColor('rgba(255, 73, 64, 0.6)', canvas.renderAll.bind(canvas));\n * @example fabric.Pattern used as overlayColor\n * canvas.setOverlayColor({\n * source: 'http://fabricjs.com/assets/escheresque_ste.png'\n * }, canvas.renderAll.bind(canvas));\n * @example fabric.Pattern used as overlayColor with repeat and offset\n * canvas.setOverlayColor({\n * source: 'http://fabricjs.com/assets/escheresque_ste.png',\n * repeat: 'repeat',\n * offsetX: 200,\n * offsetY: 100\n * }, canvas.renderAll.bind(canvas));\n */\n setOverlayColor: function(overlayColor, callback) {\n return this.__setBgOverlayColor('overlayColor', overlayColor, callback);\n },\n\n /**\n * Sets {@link fabric.StaticCanvas#backgroundColor|background color} for this canvas\n * @param {(String|fabric.Pattern)} backgroundColor Color or pattern to set background color to\n * @param {Function} callback Callback to invoke when background color is set\n * @return {fabric.Canvas} thisArg\n * @chainable\n * @see {@link http://jsfiddle.net/fabricjs/hXzvk/|jsFiddle demo}\n * @example Normal backgroundColor - color value\n * canvas.setBackgroundColor('rgba(255, 73, 64, 0.6)', canvas.renderAll.bind(canvas));\n * @example fabric.Pattern used as backgroundColor\n * canvas.setBackgroundColor({\n * source: 'http://fabricjs.com/assets/escheresque_ste.png'\n * }, canvas.renderAll.bind(canvas));\n * @example fabric.Pattern used as backgroundColor with repeat and offset\n * canvas.setBackgroundColor({\n * source: 'http://fabricjs.com/assets/escheresque_ste.png',\n * repeat: 'repeat',\n * offsetX: 200,\n * offsetY: 100\n * }, canvas.renderAll.bind(canvas));\n */\n setBackgroundColor: function(backgroundColor, callback) {\n return this.__setBgOverlayColor('backgroundColor', backgroundColor, callback);\n },\n\n /**\n * @private\n * @param {String} property Property to set ({@link fabric.StaticCanvas#backgroundImage|backgroundImage}\n * or {@link fabric.StaticCanvas#overlayImage|overlayImage})\n * @param {(fabric.Image|String|null)} image fabric.Image instance, URL of an image or null to set background or overlay to\n * @param {Function} callback Callback to invoke when image is loaded and set as background or overlay. The first argument is the created image, the second argument is a flag indicating whether an error occurred or not.\n * @param {Object} [options] Optional options to set for the {@link fabric.Image|image}.\n */\n __setBgOverlayImage: function(property, image, callback, options) {\n if (typeof image === 'string') {\n fabric.util.loadImage(image, function(img, isError) {\n if (img) {\n var instance = new fabric.Image(img, options);\n this[property] = instance;\n instance.canvas = this;\n }\n callback && callback(img, isError);\n }, this, options && options.crossOrigin);\n }\n else {\n options && image.setOptions(options);\n this[property] = image;\n image && (image.canvas = this);\n callback && callback(image, false);\n }\n\n return this;\n },\n\n /**\n * @private\n * @param {String} property Property to set ({@link fabric.StaticCanvas#backgroundColor|backgroundColor}\n * or {@link fabric.StaticCanvas#overlayColor|overlayColor})\n * @param {(Object|String|null)} color Object with pattern information, color value or null\n * @param {Function} [callback] Callback is invoked when color is set\n */\n __setBgOverlayColor: function(property, color, callback) {\n this[property] = color;\n this._initGradient(color, property);\n this._initPattern(color, property, callback);\n return this;\n },\n\n /**\n * @private\n */\n _createCanvasElement: function() {\n var element = createCanvasElement();\n if (!element) {\n throw CANVAS_INIT_ERROR;\n }\n if (!element.style) {\n element.style = { };\n }\n if (typeof element.getContext === 'undefined') {\n throw CANVAS_INIT_ERROR;\n }\n return element;\n },\n\n /**\n * @private\n * @param {Object} [options] Options object\n */\n _initOptions: function (options) {\n var lowerCanvasEl = this.lowerCanvasEl;\n this._setOptions(options);\n\n this.width = this.width || parseInt(lowerCanvasEl.width, 10) || 0;\n this.height = this.height || parseInt(lowerCanvasEl.height, 10) || 0;\n\n if (!this.lowerCanvasEl.style) {\n return;\n }\n\n lowerCanvasEl.width = this.width;\n lowerCanvasEl.height = this.height;\n\n lowerCanvasEl.style.width = this.width + 'px';\n lowerCanvasEl.style.height = this.height + 'px';\n\n this.viewportTransform = this.viewportTransform.slice();\n },\n\n /**\n * Creates a bottom canvas\n * @private\n * @param {HTMLElement} [canvasEl]\n */\n _createLowerCanvas: function (canvasEl) {\n // canvasEl === 'HTMLCanvasElement' does not work on jsdom/node\n if (canvasEl && canvasEl.getContext) {\n this.lowerCanvasEl = canvasEl;\n }\n else {\n this.lowerCanvasEl = fabric.util.getById(canvasEl) || this._createCanvasElement();\n }\n\n fabric.util.addClass(this.lowerCanvasEl, 'lower-canvas');\n this._originalCanvasStyle = this.lowerCanvasEl.style;\n if (this.interactive) {\n this._applyCanvasStyle(this.lowerCanvasEl);\n }\n\n this.contextContainer = this.lowerCanvasEl.getContext('2d');\n },\n\n /**\n * Returns canvas width (in px)\n * @return {Number}\n */\n getWidth: function () {\n return this.width;\n },\n\n /**\n * Returns canvas height (in px)\n * @return {Number}\n */\n getHeight: function () {\n return this.height;\n },\n\n /**\n * Sets width of this canvas instance\n * @param {Number|String} value Value to set width to\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n setWidth: function (value, options) {\n return this.setDimensions({ width: value }, options);\n },\n\n /**\n * Sets height of this canvas instance\n * @param {Number|String} value Value to set height to\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n setHeight: function (value, options) {\n return this.setDimensions({ height: value }, options);\n },\n\n /**\n * Sets dimensions (width, height) of this canvas instance. when options.cssOnly flag active you should also supply the unit of measure (px/%/em)\n * @param {Object} dimensions Object with width/height properties\n * @param {Number|String} [dimensions.width] Width of canvas element\n * @param {Number|String} [dimensions.height] Height of canvas element\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n setDimensions: function (dimensions, options) {\n var cssValue;\n\n options = options || {};\n\n for (var prop in dimensions) {\n cssValue = dimensions[prop];\n\n if (!options.cssOnly) {\n this._setBackstoreDimension(prop, dimensions[prop]);\n cssValue += 'px';\n this.hasLostContext = true;\n }\n\n if (!options.backstoreOnly) {\n this._setCssDimension(prop, cssValue);\n }\n }\n if (this._isCurrentlyDrawing) {\n this.freeDrawingBrush && this.freeDrawingBrush._setBrushStyles(this.contextTop);\n }\n this._initRetinaScaling();\n this.calcOffset();\n\n if (!options.cssOnly) {\n this.requestRenderAll();\n }\n\n return this;\n },\n\n /**\n * Helper for setting width/height\n * @private\n * @param {String} prop property (width|height)\n * @param {Number} value value to set property to\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n _setBackstoreDimension: function (prop, value) {\n this.lowerCanvasEl[prop] = value;\n\n if (this.upperCanvasEl) {\n this.upperCanvasEl[prop] = value;\n }\n\n if (this.cacheCanvasEl) {\n this.cacheCanvasEl[prop] = value;\n }\n\n this[prop] = value;\n\n return this;\n },\n\n /**\n * Helper for setting css width/height\n * @private\n * @param {String} prop property (width|height)\n * @param {String} value value to set property to\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n _setCssDimension: function (prop, value) {\n this.lowerCanvasEl.style[prop] = value;\n\n if (this.upperCanvasEl) {\n this.upperCanvasEl.style[prop] = value;\n }\n\n if (this.wrapperEl) {\n this.wrapperEl.style[prop] = value;\n }\n\n return this;\n },\n\n /**\n * Returns canvas zoom level\n * @return {Number}\n */\n getZoom: function () {\n return this.viewportTransform[0];\n },\n\n /**\n * Sets viewport transformation of this canvas instance\n * @param {Array} vpt a Canvas 2D API transform matrix\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n setViewportTransform: function (vpt) {\n var activeObject = this._activeObject,\n backgroundObject = this.backgroundImage,\n overlayObject = this.overlayImage,\n object, i, len;\n this.viewportTransform = vpt;\n for (i = 0, len = this._objects.length; i < len; i++) {\n object = this._objects[i];\n object.group || object.setCoords(true);\n }\n if (activeObject) {\n activeObject.setCoords();\n }\n if (backgroundObject) {\n backgroundObject.setCoords(true);\n }\n if (overlayObject) {\n overlayObject.setCoords(true);\n }\n this.calcViewportBoundaries();\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Sets zoom level of this canvas instance, the zoom centered around point\n * meaning that following zoom to point with the same point will have the visual\n * effect of the zoom originating from that point. The point won't move.\n * It has nothing to do with canvas center or visual center of the viewport.\n * @param {fabric.Point} point to zoom with respect to\n * @param {Number} value to set zoom to, less than 1 zooms out\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n zoomToPoint: function (point, value) {\n // TODO: just change the scale, preserve other transformations\n var before = point, vpt = this.viewportTransform.slice(0);\n point = transformPoint(point, invertTransform(this.viewportTransform));\n vpt[0] = value;\n vpt[3] = value;\n var after = transformPoint(point, vpt);\n vpt[4] += before.x - after.x;\n vpt[5] += before.y - after.y;\n return this.setViewportTransform(vpt);\n },\n\n /**\n * Sets zoom level of this canvas instance\n * @param {Number} value to set zoom to, less than 1 zooms out\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n setZoom: function (value) {\n this.zoomToPoint(new fabric.Point(0, 0), value);\n return this;\n },\n\n /**\n * Pan viewport so as to place point at top left corner of canvas\n * @param {fabric.Point} point to move to\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n absolutePan: function (point) {\n var vpt = this.viewportTransform.slice(0);\n vpt[4] = -point.x;\n vpt[5] = -point.y;\n return this.setViewportTransform(vpt);\n },\n\n /**\n * Pans viewpoint relatively\n * @param {fabric.Point} point (position vector) to move by\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n relativePan: function (point) {\n return this.absolutePan(new fabric.Point(\n -point.x - this.viewportTransform[4],\n -point.y - this.viewportTransform[5]\n ));\n },\n\n /**\n * Returns <canvas> element corresponding to this instance\n * @return {HTMLCanvasElement}\n */\n getElement: function () {\n return this.lowerCanvasEl;\n },\n\n /**\n * @private\n * @param {fabric.Object} obj Object that was added\n */\n _onObjectAdded: function(obj) {\n this.stateful && obj.setupState();\n obj._set('canvas', this);\n obj.setCoords();\n this.fire('object:added', { target: obj });\n obj.fire('added');\n },\n\n /**\n * @private\n * @param {fabric.Object} obj Object that was removed\n */\n _onObjectRemoved: function(obj) {\n this.fire('object:removed', { target: obj });\n obj.fire('removed');\n delete obj.canvas;\n },\n\n /**\n * Clears specified context of canvas element\n * @param {CanvasRenderingContext2D} ctx Context to clear\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n clearContext: function(ctx) {\n ctx.clearRect(0, 0, this.width, this.height);\n return this;\n },\n\n /**\n * Returns context of canvas where objects are drawn\n * @return {CanvasRenderingContext2D}\n */\n getContext: function () {\n return this.contextContainer;\n },\n\n /**\n * Clears all contexts (background, main, top) of an instance\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n clear: function () {\n this.remove.apply(this, this.getObjects());\n this.backgroundImage = null;\n this.overlayImage = null;\n this.backgroundColor = '';\n this.overlayColor = '';\n if (this._hasITextHandlers) {\n this.off('mouse:up', this._mouseUpITextHandler);\n this._iTextInstances = null;\n this._hasITextHandlers = false;\n }\n this.clearContext(this.contextContainer);\n this.fire('canvas:cleared');\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Renders the canvas\n * @return {fabric.Canvas} instance\n * @chainable\n */\n renderAll: function () {\n var canvasToDrawOn = this.contextContainer;\n this.renderCanvas(canvasToDrawOn, this._objects);\n return this;\n },\n\n /**\n * Function created to be instance bound at initialization\n * used in requestAnimationFrame rendering\n * Let the fabricJS call it. If you call it manually you could have more\n * animationFrame stacking on to of each other\n * for an imperative rendering, use canvas.renderAll\n * @private\n * @return {fabric.Canvas} instance\n * @chainable\n */\n renderAndReset: function() {\n this.isRendering = 0;\n this.renderAll();\n },\n\n /**\n * Append a renderAll request to next animation frame.\n * unless one is already in progress, in that case nothing is done\n * a boolean flag will avoid appending more.\n * @return {fabric.Canvas} instance\n * @chainable\n */\n requestRenderAll: function () {\n if (!this.isRendering) {\n this.isRendering = fabric.util.requestAnimFrame(this.renderAndResetBound);\n }\n return this;\n },\n\n /**\n * Calculate the position of the 4 corner of canvas with current viewportTransform.\n * helps to determinate when an object is in the current rendering viewport using\n * object absolute coordinates ( aCoords )\n * @return {Object} points.tl\n * @chainable\n */\n calcViewportBoundaries: function() {\n var points = { }, width = this.width, height = this.height,\n iVpt = invertTransform(this.viewportTransform);\n points.tl = transformPoint({ x: 0, y: 0 }, iVpt);\n points.br = transformPoint({ x: width, y: height }, iVpt);\n points.tr = new fabric.Point(points.br.x, points.tl.y);\n points.bl = new fabric.Point(points.tl.x, points.br.y);\n this.vptCoords = points;\n return points;\n },\n\n cancelRequestedRender: function() {\n if (this.isRendering) {\n fabric.util.cancelAnimFrame(this.isRendering);\n this.isRendering = 0;\n }\n },\n\n /**\n * Renders background, objects, overlay and controls.\n * @param {CanvasRenderingContext2D} ctx\n * @param {Array} objects to render\n * @return {fabric.Canvas} instance\n * @chainable\n */\n renderCanvas: function(ctx, objects) {\n var v = this.viewportTransform, path = this.clipPath;\n this.cancelRequestedRender();\n this.calcViewportBoundaries();\n this.clearContext(ctx);\n fabric.util.setImageSmoothing(ctx, this.imageSmoothingEnabled);\n this.fire('before:render', { ctx: ctx, });\n this._renderBackground(ctx);\n\n ctx.save();\n //apply viewport transform once for all rendering process\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n this._renderObjects(ctx, objects);\n ctx.restore();\n if (!this.controlsAboveOverlay && this.interactive) {\n this.drawControls(ctx);\n }\n if (path) {\n path.canvas = this;\n // needed to setup a couple of variables\n path.shouldCache();\n path._transformDone = true;\n path.renderCache({ forClipping: true });\n this.drawClipPathOnCanvas(ctx);\n }\n this._renderOverlay(ctx);\n if (this.controlsAboveOverlay && this.interactive) {\n this.drawControls(ctx);\n }\n this.fire('after:render', { ctx: ctx, });\n },\n\n /**\n * Paint the cached clipPath on the lowerCanvasEl\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawClipPathOnCanvas: function(ctx) {\n var v = this.viewportTransform, path = this.clipPath;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n // DEBUG: uncomment this line, comment the following\n // ctx.globalAlpha = 0.4;\n ctx.globalCompositeOperation = 'destination-in';\n path.transform(ctx);\n ctx.scale(1 / path.zoomX, 1 / path.zoomY);\n ctx.drawImage(path._cacheCanvas, -path.cacheTranslationX, -path.cacheTranslationY);\n ctx.restore();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Array} objects to render\n */\n _renderObjects: function(ctx, objects) {\n var i, len;\n for (i = 0, len = objects.length; i < len; ++i) {\n objects[i] && objects[i].render(ctx);\n }\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {string} property 'background' or 'overlay'\n */\n _renderBackgroundOrOverlay: function(ctx, property) {\n var fill = this[property + 'Color'], object = this[property + 'Image'],\n v = this.viewportTransform, needsVpt = this[property + 'Vpt'];\n if (!fill && !object) {\n return;\n }\n if (fill) {\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this.width, 0);\n ctx.lineTo(this.width, this.height);\n ctx.lineTo(0, this.height);\n ctx.closePath();\n ctx.fillStyle = fill.toLive\n ? fill.toLive(ctx, this)\n : fill;\n if (needsVpt) {\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n }\n ctx.transform(1, 0, 0, 1, fill.offsetX || 0, fill.offsetY || 0);\n var m = fill.gradientTransform || fill.patternTransform;\n m && ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n ctx.fill();\n ctx.restore();\n }\n if (object) {\n ctx.save();\n if (needsVpt) {\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n }\n object.render(ctx);\n ctx.restore();\n }\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderBackground: function(ctx) {\n this._renderBackgroundOrOverlay(ctx, 'background');\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderOverlay: function(ctx) {\n this._renderBackgroundOrOverlay(ctx, 'overlay');\n },\n\n /**\n * Returns coordinates of a center of canvas.\n * Returned value is an object with top and left properties\n * @return {Object} object with \"top\" and \"left\" number values\n * @deprecated migrate to `getCenterPoint`\n */\n getCenter: function () {\n return {\n top: this.height / 2,\n left: this.width / 2\n };\n },\n\n /**\n * Returns coordinates of a center of canvas.\n * @return {fabric.Point} \n */\n getCenterPoint: function () {\n return new fabric.Point(this.width / 2, this.height / 2);\n },\n\n /**\n * Centers object horizontally in the canvas\n * @param {fabric.Object} object Object to center horizontally\n * @return {fabric.Canvas} thisArg\n */\n centerObjectH: function (object) {\n return this._centerObject(object, new fabric.Point(this.getCenterPoint().x, object.getCenterPoint().y));\n },\n\n /**\n * Centers object vertically in the canvas\n * @param {fabric.Object} object Object to center vertically\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n centerObjectV: function (object) {\n return this._centerObject(object, new fabric.Point(object.getCenterPoint().x, this.getCenterPoint().y));\n },\n\n /**\n * Centers object vertically and horizontally in the canvas\n * @param {fabric.Object} object Object to center vertically and horizontally\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n centerObject: function(object) {\n var center = this.getCenterPoint();\n return this._centerObject(object, center);\n },\n\n /**\n * Centers object vertically and horizontally in the viewport\n * @param {fabric.Object} object Object to center vertically and horizontally\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n viewportCenterObject: function(object) {\n var vpCenter = this.getVpCenter();\n return this._centerObject(object, vpCenter);\n },\n\n /**\n * Centers object horizontally in the viewport, object.top is unchanged\n * @param {fabric.Object} object Object to center vertically and horizontally\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n viewportCenterObjectH: function(object) {\n var vpCenter = this.getVpCenter();\n this._centerObject(object, new fabric.Point(vpCenter.x, object.getCenterPoint().y));\n return this;\n },\n\n /**\n * Centers object Vertically in the viewport, object.top is unchanged\n * @param {fabric.Object} object Object to center vertically and horizontally\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n viewportCenterObjectV: function(object) {\n var vpCenter = this.getVpCenter();\n\n return this._centerObject(object, new fabric.Point(object.getCenterPoint().x, vpCenter.y));\n },\n\n /**\n * Calculate the point in canvas that correspond to the center of actual viewport.\n * @return {fabric.Point} vpCenter, viewport center\n * @chainable\n */\n getVpCenter: function() {\n var center = this.getCenterPoint(),\n iVpt = invertTransform(this.viewportTransform);\n return transformPoint(center, iVpt);\n },\n\n /**\n * @private\n * @param {fabric.Object} object Object to center\n * @param {fabric.Point} center Center point\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n _centerObject: function(object, center) {\n object.setPositionByOrigin(center, 'center', 'center');\n object.setCoords();\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Returns dataless JSON representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {String} json string\n */\n toDatalessJSON: function (propertiesToInclude) {\n return this.toDatalessObject(propertiesToInclude);\n },\n\n /**\n * Returns object representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function (propertiesToInclude) {\n return this._toObjectMethod('toObject', propertiesToInclude);\n },\n\n /**\n * Returns dataless object representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject: function (propertiesToInclude) {\n return this._toObjectMethod('toDatalessObject', propertiesToInclude);\n },\n\n /**\n * @private\n */\n _toObjectMethod: function (methodName, propertiesToInclude) {\n\n var clipPath = this.clipPath, data = {\n version: fabric.version,\n objects: this._toObjects(methodName, propertiesToInclude),\n };\n if (clipPath && !clipPath.excludeFromExport) {\n data.clipPath = this._toObject(this.clipPath, methodName, propertiesToInclude);\n }\n extend(data, this.__serializeBgOverlay(methodName, propertiesToInclude));\n\n fabric.util.populateWithProperties(this, data, propertiesToInclude);\n\n return data;\n },\n\n /**\n * @private\n */\n _toObjects: function(methodName, propertiesToInclude) {\n return this._objects.filter(function(object) {\n return !object.excludeFromExport;\n }).map(function(instance) {\n return this._toObject(instance, methodName, propertiesToInclude);\n }, this);\n },\n\n /**\n * @private\n */\n _toObject: function(instance, methodName, propertiesToInclude) {\n var originalValue;\n\n if (!this.includeDefaultValues) {\n originalValue = instance.includeDefaultValues;\n instance.includeDefaultValues = false;\n }\n\n var object = instance[methodName](propertiesToInclude);\n if (!this.includeDefaultValues) {\n instance.includeDefaultValues = originalValue;\n }\n return object;\n },\n\n /**\n * @private\n */\n __serializeBgOverlay: function(methodName, propertiesToInclude) {\n var data = {}, bgImage = this.backgroundImage, overlayImage = this.overlayImage,\n bgColor = this.backgroundColor, overlayColor = this.overlayColor;\n\n if (bgColor && bgColor.toObject) {\n if (!bgColor.excludeFromExport) {\n data.background = bgColor.toObject(propertiesToInclude);\n }\n }\n else if (bgColor) {\n data.background = bgColor;\n }\n\n if (overlayColor && overlayColor.toObject) {\n if (!overlayColor.excludeFromExport) {\n data.overlay = overlayColor.toObject(propertiesToInclude);\n }\n }\n else if (overlayColor) {\n data.overlay = overlayColor;\n }\n\n if (bgImage && !bgImage.excludeFromExport) {\n data.backgroundImage = this._toObject(bgImage, methodName, propertiesToInclude);\n }\n if (overlayImage && !overlayImage.excludeFromExport) {\n data.overlayImage = this._toObject(overlayImage, methodName, propertiesToInclude);\n }\n\n return data;\n },\n\n \n\n /**\n * Moves an object or the objects of a multiple selection\n * to the bottom of the stack of drawn objects\n * @param {fabric.Object} object Object to send to back\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n sendToBack: function (object) {\n if (!object) {\n return this;\n }\n var activeSelection = this._activeObject,\n i, obj, objs;\n if (object === activeSelection && object.type === 'activeSelection') {\n objs = activeSelection._objects;\n for (i = objs.length; i--;) {\n obj = objs[i];\n removeFromArray(this._objects, obj);\n this._objects.unshift(obj);\n }\n }\n else {\n removeFromArray(this._objects, object);\n this._objects.unshift(object);\n }\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the top of the stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n bringToFront: function (object) {\n if (!object) {\n return this;\n }\n var activeSelection = this._activeObject,\n i, obj, objs;\n if (object === activeSelection && object.type === 'activeSelection') {\n objs = activeSelection._objects;\n for (i = 0; i < objs.length; i++) {\n obj = objs[i];\n removeFromArray(this._objects, obj);\n this._objects.push(obj);\n }\n }\n else {\n removeFromArray(this._objects, object);\n this._objects.push(object);\n }\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Moves an object or a selection down in stack of drawn objects\n * An optional parameter, intersecting allows to move the object in behind\n * the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {Boolean} [intersecting] If `true`, send object behind next lower intersecting object\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n sendBackwards: function (object, intersecting) {\n if (!object) {\n return this;\n }\n var activeSelection = this._activeObject,\n i, obj, idx, newIdx, objs, objsMoved = 0;\n\n if (object === activeSelection && object.type === 'activeSelection') {\n objs = activeSelection._objects;\n for (i = 0; i < objs.length; i++) {\n obj = objs[i];\n idx = this._objects.indexOf(obj);\n if (idx > 0 + objsMoved) {\n newIdx = idx - 1;\n removeFromArray(this._objects, obj);\n this._objects.splice(newIdx, 0, obj);\n }\n objsMoved++;\n }\n }\n else {\n idx = this._objects.indexOf(object);\n if (idx !== 0) {\n // if object is not on the bottom of stack\n newIdx = this._findNewLowerIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n }\n }\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * @private\n */\n _findNewLowerIndex: function(object, idx, intersecting) {\n var newIdx, i;\n\n if (intersecting) {\n newIdx = idx;\n\n // traverse down the stack looking for the nearest intersecting object\n for (i = idx - 1; i >= 0; --i) {\n\n var isIntersecting = object.intersectsWithObject(this._objects[i]) ||\n object.isContainedWithinObject(this._objects[i]) ||\n this._objects[i].isContainedWithinObject(object);\n\n if (isIntersecting) {\n newIdx = i;\n break;\n }\n }\n }\n else {\n newIdx = idx - 1;\n }\n\n return newIdx;\n },\n\n /**\n * Moves an object or a selection up in stack of drawn objects\n * An optional parameter, intersecting allows to move the object in front\n * of the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {Boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n bringForward: function (object, intersecting) {\n if (!object) {\n return this;\n }\n var activeSelection = this._activeObject,\n i, obj, idx, newIdx, objs, objsMoved = 0;\n\n if (object === activeSelection && object.type === 'activeSelection') {\n objs = activeSelection._objects;\n for (i = objs.length; i--;) {\n obj = objs[i];\n idx = this._objects.indexOf(obj);\n if (idx < this._objects.length - 1 - objsMoved) {\n newIdx = idx + 1;\n removeFromArray(this._objects, obj);\n this._objects.splice(newIdx, 0, obj);\n }\n objsMoved++;\n }\n }\n else {\n idx = this._objects.indexOf(object);\n if (idx !== this._objects.length - 1) {\n // if object is not on top of stack (last item in an array)\n newIdx = this._findNewUpperIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n }\n }\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * @private\n */\n _findNewUpperIndex: function(object, idx, intersecting) {\n var newIdx, i, len;\n\n if (intersecting) {\n newIdx = idx;\n\n // traverse up the stack looking for the nearest intersecting object\n for (i = idx + 1, len = this._objects.length; i < len; ++i) {\n\n var isIntersecting = object.intersectsWithObject(this._objects[i]) ||\n object.isContainedWithinObject(this._objects[i]) ||\n this._objects[i].isContainedWithinObject(object);\n\n if (isIntersecting) {\n newIdx = i;\n break;\n }\n }\n }\n else {\n newIdx = idx + 1;\n }\n\n return newIdx;\n },\n\n /**\n * Moves an object to specified level in stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @param {Number} index Position to move to\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n moveTo: function (object, index) {\n removeFromArray(this._objects, object);\n this._objects.splice(index, 0, object);\n return this.renderOnAddRemove && this.requestRenderAll();\n },\n\n /**\n * Clears a canvas element and dispose objects\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n dispose: function () {\n // cancel eventually ongoing renders\n if (this.isRendering) {\n fabric.util.cancelAnimFrame(this.isRendering);\n this.isRendering = 0;\n }\n this.forEachObject(function(object) {\n object.dispose && object.dispose();\n });\n this._objects = [];\n if (this.backgroundImage && this.backgroundImage.dispose) {\n this.backgroundImage.dispose();\n }\n this.backgroundImage = null;\n if (this.overlayImage && this.overlayImage.dispose) {\n this.overlayImage.dispose();\n }\n this.overlayImage = null;\n this._iTextInstances = null;\n this.contextContainer = null;\n // restore canvas style\n this.lowerCanvasEl.classList.remove('lower-canvas');\n fabric.util.setStyle(this.lowerCanvasEl, this._originalCanvasStyle);\n delete this._originalCanvasStyle;\n // restore canvas size to original size in case retina scaling was applied\n this.lowerCanvasEl.setAttribute('width', this.width);\n this.lowerCanvasEl.setAttribute('height', this.height);\n fabric.util.cleanUpJsdomNode(this.lowerCanvasEl);\n this.lowerCanvasEl = undefined;\n return this;\n },\n\n /**\n * Returns a string representation of an instance\n * @return {String} string representation of an instance\n */\n toString: function () {\n return '#';\n }\n });\n\n extend(fabric.StaticCanvas.prototype, fabric.Observable);\n extend(fabric.StaticCanvas.prototype, fabric.Collection);\n extend(fabric.StaticCanvas.prototype, fabric.DataURLExporter);\n\n extend(fabric.StaticCanvas, /** @lends fabric.StaticCanvas */ {\n\n /**\n * @static\n * @type String\n * @default\n */\n EMPTY_JSON: '{\"objects\": [], \"background\": \"white\"}',\n\n /**\n * Provides a way to check support of some of the canvas methods\n * (either those of HTMLCanvasElement itself, or rendering context)\n *\n * @param {String} methodName Method to check support for;\n * Could be one of \"setLineDash\"\n * @return {Boolean | null} `true` if method is supported (or at least exists),\n * `null` if canvas element or context can not be initialized\n */\n supports: function (methodName) {\n var el = createCanvasElement();\n\n if (!el || !el.getContext) {\n return null;\n }\n\n var ctx = el.getContext('2d');\n if (!ctx) {\n return null;\n }\n\n switch (methodName) {\n\n case 'setLineDash':\n return typeof ctx.setLineDash !== 'undefined';\n\n default:\n return null;\n }\n }\n });\n\n /**\n * Returns Object representation of canvas\n * this alias is provided because if you call JSON.stringify on an instance,\n * the toJSON object will be invoked if it exists.\n * Having a toJSON method means you can do JSON.stringify(myCanvas)\n * @function\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} JSON compatible object\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#serialization}\n * @see {@link http://jsfiddle.net/fabricjs/pec86/|jsFiddle demo}\n * @example JSON without additional properties\n * var json = canvas.toJSON();\n * @example JSON with additional properties included\n * var json = canvas.toJSON(['lockMovementX', 'lockMovementY', 'lockRotation', 'lockScalingX', 'lockScalingY']);\n * @example JSON without default values\n * canvas.includeDefaultValues = false;\n * var json = canvas.toJSON();\n */\n fabric.StaticCanvas.prototype.toJSON = fabric.StaticCanvas.prototype.toObject;\n\n if (fabric.isLikelyNode) {\n fabric.StaticCanvas.prototype.createPNGStream = function() {\n var impl = getNodeCanvas(this.lowerCanvasEl);\n return impl && impl.createPNGStream();\n };\n fabric.StaticCanvas.prototype.createJPEGStream = function(opts) {\n var impl = getNodeCanvas(this.lowerCanvasEl);\n return impl && impl.createJPEGStream(opts);\n };\n }\n})();\n/**\n * BaseBrush class\n * @class fabric.BaseBrush\n * @see {@link http://fabricjs.com/freedrawing|Freedrawing demo}\n */\nfabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype */ {\n\n /**\n * Color of a brush\n * @type String\n * @default\n */\n color: 'rgb(0, 0, 0)',\n\n /**\n * Width of a brush, has to be a Number, no string literals\n * @type Number\n * @default\n */\n width: 1,\n\n /**\n * Shadow object representing shadow of this shape.\n * Backwards incompatibility note: This property replaces \"shadowColor\" (String), \"shadowOffsetX\" (Number),\n * \"shadowOffsetY\" (Number) and \"shadowBlur\" (Number) since v1.2.12\n * @type fabric.Shadow\n * @default\n */\n shadow: null,\n\n /**\n * Line endings style of a brush (one of \"butt\", \"round\", \"square\")\n * @type String\n * @default\n */\n strokeLineCap: 'round',\n\n /**\n * Corner style of a brush (one of \"bevel\", \"round\", \"miter\")\n * @type String\n * @default\n */\n strokeLineJoin: 'round',\n\n /**\n * Maximum miter length (used for strokeLineJoin = \"miter\") of a brush's\n * @type Number\n * @default\n */\n strokeMiterLimit: 10,\n\n /**\n * Stroke Dash Array.\n * @type Array\n * @default\n */\n strokeDashArray: null,\n\n /**\n * When `true`, the free drawing is limited to the whiteboard size. Default to false.\n * @type Boolean\n * @default false\n */\n\n limitedToCanvasSize: false,\n\n\n /**\n * Sets brush styles\n * @private\n * @param {CanvasRenderingContext2D} ctx\n */\n _setBrushStyles: function (ctx) {\n ctx.strokeStyle = this.color;\n ctx.lineWidth = this.width;\n ctx.lineCap = this.strokeLineCap;\n ctx.miterLimit = this.strokeMiterLimit;\n ctx.lineJoin = this.strokeLineJoin;\n ctx.setLineDash(this.strokeDashArray || []);\n },\n\n /**\n * Sets the transformation on given context\n * @param {RenderingContext2d} ctx context to render on\n * @private\n */\n _saveAndTransform: function(ctx) {\n var v = this.canvas.viewportTransform;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n },\n\n /**\n * Sets brush shadow styles\n * @private\n */\n _setShadow: function() {\n if (!this.shadow) {\n return;\n }\n\n var canvas = this.canvas,\n shadow = this.shadow,\n ctx = canvas.contextTop,\n zoom = canvas.getZoom();\n if (canvas && canvas._isRetinaScaling()) {\n zoom *= fabric.devicePixelRatio;\n }\n\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur = shadow.blur * zoom;\n ctx.shadowOffsetX = shadow.offsetX * zoom;\n ctx.shadowOffsetY = shadow.offsetY * zoom;\n },\n\n needsFullRender: function() {\n var color = new fabric.Color(this.color);\n return color.getAlpha() < 1 || !!this.shadow;\n },\n\n /**\n * Removes brush shadow styles\n * @private\n */\n _resetShadow: function() {\n var ctx = this.canvas.contextTop;\n\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n },\n\n /**\n * Check is pointer is outside canvas boundaries\n * @param {Object} pointer\n * @private\n */\n _isOutSideCanvas: function(pointer) {\n return pointer.x < 0 || pointer.x > this.canvas.getWidth() || pointer.y < 0 || pointer.y > this.canvas.getHeight();\n }\n});\n(function() {\n /**\n * PencilBrush class\n * @class fabric.PencilBrush\n * @extends fabric.BaseBrush\n */\n fabric.PencilBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric.PencilBrush.prototype */ {\n\n /**\n * Discard points that are less than `decimate` pixel distant from each other\n * @type Number\n * @default 0.4\n */\n decimate: 0.4,\n\n /**\n * Draws a straight line between last recorded point to current pointer\n * Used for `shift` functionality\n *\n * @type boolean\n * @default false\n */\n drawStraightLine: false,\n\n /**\n * The event modifier key that makes the brush draw a straight line.\n * If `null` or 'none' or any other string that is not a modifier key the feature is disabled.\n * @type {'altKey' | 'shiftKey' | 'ctrlKey' | 'none' | undefined | null}\n */\n straightLineKey: 'shiftKey',\n\n /**\n * Constructor\n * @param {fabric.Canvas} canvas\n * @return {fabric.PencilBrush} Instance of a pencil brush\n */\n initialize: function(canvas) {\n this.canvas = canvas;\n this._points = [];\n },\n\n needsFullRender: function () {\n return this.callSuper('needsFullRender') || this._hasStraightLine;\n },\n\n /**\n * Invoked inside on mouse down and mouse move\n * @param {Object} pointer\n */\n _drawSegment: function (ctx, p1, p2) {\n var midPoint = p1.midPointFrom(p2);\n ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);\n return midPoint;\n },\n\n /**\n * Invoked on mouse down\n * @param {Object} pointer\n */\n onMouseDown: function(pointer, options) {\n if (!this.canvas._isMainEvent(options.e)) {\n return;\n }\n this.drawStraightLine = options.e[this.straightLineKey];\n this._prepareForDrawing(pointer);\n // capture coordinates immediately\n // this allows to draw dots (when movement never occurs)\n this._captureDrawingPath(pointer);\n this._render();\n },\n\n /**\n * Invoked on mouse move\n * @param {Object} pointer\n */\n onMouseMove: function(pointer, options) {\n if (!this.canvas._isMainEvent(options.e)) {\n return;\n }\n this.drawStraightLine = options.e[this.straightLineKey];\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n if (this._captureDrawingPath(pointer) && this._points.length > 1) {\n if (this.needsFullRender()) {\n // redraw curve\n // clear top canvas\n this.canvas.clearContext(this.canvas.contextTop);\n this._render();\n }\n else {\n var points = this._points, length = points.length, ctx = this.canvas.contextTop;\n // draw the curve update\n this._saveAndTransform(ctx);\n if (this.oldEnd) {\n ctx.beginPath();\n ctx.moveTo(this.oldEnd.x, this.oldEnd.y);\n }\n this.oldEnd = this._drawSegment(ctx, points[length - 2], points[length - 1], true);\n ctx.stroke();\n ctx.restore();\n }\n }\n },\n\n /**\n * Invoked on mouse up\n */\n onMouseUp: function(options) {\n if (!this.canvas._isMainEvent(options.e)) {\n return true;\n }\n this.drawStraightLine = false;\n this.oldEnd = undefined;\n this._finalizeAndAddPath();\n return false;\n },\n\n /**\n * @private\n * @param {Object} pointer Actual mouse position related to the canvas.\n */\n _prepareForDrawing: function(pointer) {\n\n var p = new fabric.Point(pointer.x, pointer.y);\n\n this._reset();\n this._addPoint(p);\n this.canvas.contextTop.moveTo(p.x, p.y);\n },\n\n /**\n * @private\n * @param {fabric.Point} point Point to be added to points array\n */\n _addPoint: function(point) {\n if (this._points.length > 1 && point.eq(this._points[this._points.length - 1])) {\n return false;\n }\n if (this.drawStraightLine && this._points.length > 1) {\n this._hasStraightLine = true;\n this._points.pop();\n }\n this._points.push(point);\n return true;\n },\n\n /**\n * Clear points array and set contextTop canvas style.\n * @private\n */\n _reset: function() {\n this._points = [];\n this._setBrushStyles(this.canvas.contextTop);\n this._setShadow();\n this._hasStraightLine = false;\n },\n\n /**\n * @private\n * @param {Object} pointer Actual mouse position related to the canvas.\n */\n _captureDrawingPath: function(pointer) {\n var pointerPoint = new fabric.Point(pointer.x, pointer.y);\n return this._addPoint(pointerPoint);\n },\n\n /**\n * Draw a smooth path on the topCanvas using quadraticCurveTo\n * @private\n * @param {CanvasRenderingContext2D} [ctx]\n */\n _render: function(ctx) {\n var i, len,\n p1 = this._points[0],\n p2 = this._points[1];\n ctx = ctx || this.canvas.contextTop;\n this._saveAndTransform(ctx);\n ctx.beginPath();\n //if we only have 2 points in the path and they are the same\n //it means that the user only clicked the canvas without moving the mouse\n //then we should be drawing a dot. A path isn't drawn between two identical dots\n //that's why we set them apart a bit\n if (this._points.length === 2 && p1.x === p2.x && p1.y === p2.y) {\n var width = this.width / 1000;\n p1 = new fabric.Point(p1.x, p1.y);\n p2 = new fabric.Point(p2.x, p2.y);\n p1.x -= width;\n p2.x += width;\n }\n ctx.moveTo(p1.x, p1.y);\n\n for (i = 1, len = this._points.length; i < len; i++) {\n // we pick the point between pi + 1 & pi + 2 as the\n // end point and p1 as our control point.\n this._drawSegment(ctx, p1, p2);\n p1 = this._points[i];\n p2 = this._points[i + 1];\n }\n // Draw last line as a straight line while\n // we wait for the next point to be able to calculate\n // the bezier control point\n ctx.lineTo(p1.x, p1.y);\n ctx.stroke();\n ctx.restore();\n },\n\n /**\n * Converts points to SVG path\n * @param {Array} points Array of points\n * @return {(string|number)[][]} SVG path commands\n */\n convertPointsToSVGPath: function (points) {\n var correction = this.width / 1000;\n return fabric.util.getSmoothPathFromPoints(points, correction);\n },\n\n /**\n * @private\n * @param {(string|number)[][]} pathData SVG path commands\n * @returns {boolean}\n */\n _isEmptySVGPath: function (pathData) {\n var pathString = fabric.util.joinPath(pathData);\n return pathString === 'M 0 0 Q 0 0 0 0 L 0 0';\n },\n\n /**\n * Creates fabric.Path object to add on canvas\n * @param {(string|number)[][]} pathData Path data\n * @return {fabric.Path} Path to add on canvas\n */\n createPath: function(pathData) {\n var path = new fabric.Path(pathData, {\n fill: null,\n stroke: this.color,\n strokeWidth: this.width,\n strokeLineCap: this.strokeLineCap,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeLineJoin: this.strokeLineJoin,\n strokeDashArray: this.strokeDashArray,\n });\n if (this.shadow) {\n this.shadow.affectStroke = true;\n path.shadow = new fabric.Shadow(this.shadow);\n }\n\n return path;\n },\n\n /**\n * Decimate points array with the decimate value\n */\n decimatePoints: function(points, distance) {\n if (points.length <= 2) {\n return points;\n }\n var zoom = this.canvas.getZoom(), adjustedDistance = Math.pow(distance / zoom, 2),\n i, l = points.length - 1, lastPoint = points[0], newPoints = [lastPoint],\n cDistance;\n for (i = 1; i < l - 1; i++) {\n cDistance = Math.pow(lastPoint.x - points[i].x, 2) + Math.pow(lastPoint.y - points[i].y, 2);\n if (cDistance >= adjustedDistance) {\n lastPoint = points[i];\n newPoints.push(lastPoint);\n }\n }\n /**\n * Add the last point from the original line to the end of the array.\n * This ensures decimate doesn't delete the last point on the line, and ensures the line is > 1 point.\n */\n newPoints.push(points[l]);\n return newPoints;\n },\n\n /**\n * On mouseup after drawing the path on contextTop canvas\n * we use the points captured to create an new fabric path object\n * and add it to the fabric canvas.\n */\n _finalizeAndAddPath: function() {\n var ctx = this.canvas.contextTop;\n ctx.closePath();\n if (this.decimate) {\n this._points = this.decimatePoints(this._points, this.decimate);\n }\n var pathData = this.convertPointsToSVGPath(this._points);\n if (this._isEmptySVGPath(pathData)) {\n // do not create 0 width/height paths, as they are\n // rendered inconsistently across browsers\n // Firefox 4, for example, renders a dot,\n // whereas Chrome 10 renders nothing\n this.canvas.requestRenderAll();\n return;\n }\n\n var path = this.createPath(pathData);\n this.canvas.clearContext(this.canvas.contextTop);\n this.canvas.fire('before:path:created', { path: path });\n this.canvas.add(path);\n this.canvas.requestRenderAll();\n path.setCoords();\n this._resetShadow();\n\n\n // fire event 'path' created\n this.canvas.fire('path:created', { path: path });\n }\n });\n})();\n/**\n * CircleBrush class\n * @class fabric.CircleBrush\n */\nfabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric.CircleBrush.prototype */ {\n\n /**\n * Width of a brush\n * @type Number\n * @default\n */\n width: 10,\n\n /**\n * Constructor\n * @param {fabric.Canvas} canvas\n * @return {fabric.CircleBrush} Instance of a circle brush\n */\n initialize: function(canvas) {\n this.canvas = canvas;\n this.points = [];\n },\n\n /**\n * Invoked inside on mouse down and mouse move\n * @param {Object} pointer\n */\n drawDot: function(pointer) {\n var point = this.addPoint(pointer),\n ctx = this.canvas.contextTop;\n this._saveAndTransform(ctx);\n this.dot(ctx, point);\n ctx.restore();\n },\n\n dot: function(ctx, point) {\n ctx.fillStyle = point.fill;\n ctx.beginPath();\n ctx.arc(point.x, point.y, point.radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n },\n\n /**\n * Invoked on mouse down\n */\n onMouseDown: function(pointer) {\n this.points.length = 0;\n this.canvas.clearContext(this.canvas.contextTop);\n this._setShadow();\n this.drawDot(pointer);\n },\n\n /**\n * Render the full state of the brush\n * @private\n */\n _render: function() {\n var ctx = this.canvas.contextTop, i, len,\n points = this.points;\n this._saveAndTransform(ctx);\n for (i = 0, len = points.length; i < len; i++) {\n this.dot(ctx, points[i]);\n }\n ctx.restore();\n },\n\n /**\n * Invoked on mouse move\n * @param {Object} pointer\n */\n onMouseMove: function(pointer) {\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n if (this.needsFullRender()) {\n this.canvas.clearContext(this.canvas.contextTop);\n this.addPoint(pointer);\n this._render();\n }\n else {\n this.drawDot(pointer);\n }\n },\n\n /**\n * Invoked on mouse up\n */\n onMouseUp: function() {\n var originalRenderOnAddRemove = this.canvas.renderOnAddRemove, i, len;\n this.canvas.renderOnAddRemove = false;\n\n var circles = [];\n\n for (i = 0, len = this.points.length; i < len; i++) {\n var point = this.points[i],\n circle = new fabric.Circle({\n radius: point.radius,\n left: point.x,\n top: point.y,\n originX: 'center',\n originY: 'center',\n fill: point.fill\n });\n\n this.shadow && (circle.shadow = new fabric.Shadow(this.shadow));\n\n circles.push(circle);\n }\n var group = new fabric.Group(circles);\n group.canvas = this.canvas;\n\n this.canvas.fire('before:path:created', { path: group });\n this.canvas.add(group);\n this.canvas.fire('path:created', { path: group });\n\n this.canvas.clearContext(this.canvas.contextTop);\n this._resetShadow();\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n this.canvas.requestRenderAll();\n },\n\n /**\n * @param {Object} pointer\n * @return {fabric.Point} Just added pointer point\n */\n addPoint: function(pointer) {\n var pointerPoint = new fabric.Point(pointer.x, pointer.y),\n\n circleRadius = fabric.util.getRandomInt(\n Math.max(0, this.width - 20), this.width + 20) / 2,\n\n circleColor = new fabric.Color(this.color)\n .setAlpha(fabric.util.getRandomInt(0, 100) / 100)\n .toRgba();\n\n pointerPoint.radius = circleRadius;\n pointerPoint.fill = circleColor;\n\n this.points.push(pointerPoint);\n\n return pointerPoint;\n }\n});\n/**\n * SprayBrush class\n * @class fabric.SprayBrush\n */\nfabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric.SprayBrush.prototype */ {\n\n /**\n * Width of a spray\n * @type Number\n * @default\n */\n width: 10,\n\n /**\n * Density of a spray (number of dots per chunk)\n * @type Number\n * @default\n */\n density: 20,\n\n /**\n * Width of spray dots\n * @type Number\n * @default\n */\n dotWidth: 1,\n\n /**\n * Width variance of spray dots\n * @type Number\n * @default\n */\n dotWidthVariance: 1,\n\n /**\n * Whether opacity of a dot should be random\n * @type Boolean\n * @default\n */\n randomOpacity: false,\n\n /**\n * Whether overlapping dots (rectangles) should be removed (for performance reasons)\n * @type Boolean\n * @default\n */\n optimizeOverlapping: true,\n\n /**\n * Constructor\n * @param {fabric.Canvas} canvas\n * @return {fabric.SprayBrush} Instance of a spray brush\n */\n initialize: function(canvas) {\n this.canvas = canvas;\n this.sprayChunks = [];\n },\n\n /**\n * Invoked on mouse down\n * @param {Object} pointer\n */\n onMouseDown: function(pointer) {\n this.sprayChunks.length = 0;\n this.canvas.clearContext(this.canvas.contextTop);\n this._setShadow();\n\n this.addSprayChunk(pointer);\n this.render(this.sprayChunkPoints);\n },\n\n /**\n * Invoked on mouse move\n * @param {Object} pointer\n */\n onMouseMove: function(pointer) {\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n this.addSprayChunk(pointer);\n this.render(this.sprayChunkPoints);\n },\n\n /**\n * Invoked on mouse up\n */\n onMouseUp: function() {\n var originalRenderOnAddRemove = this.canvas.renderOnAddRemove;\n this.canvas.renderOnAddRemove = false;\n\n var rects = [];\n\n for (var i = 0, ilen = this.sprayChunks.length; i < ilen; i++) {\n var sprayChunk = this.sprayChunks[i];\n\n for (var j = 0, jlen = sprayChunk.length; j < jlen; j++) {\n\n var rect = new fabric.Rect({\n width: sprayChunk[j].width,\n height: sprayChunk[j].width,\n left: sprayChunk[j].x + 1,\n top: sprayChunk[j].y + 1,\n originX: 'center',\n originY: 'center',\n fill: this.color\n });\n rects.push(rect);\n }\n }\n\n if (this.optimizeOverlapping) {\n rects = this._getOptimizedRects(rects);\n }\n\n var group = new fabric.Group(rects);\n this.shadow && group.set('shadow', new fabric.Shadow(this.shadow));\n this.canvas.fire('before:path:created', { path: group });\n this.canvas.add(group);\n this.canvas.fire('path:created', { path: group });\n\n this.canvas.clearContext(this.canvas.contextTop);\n this._resetShadow();\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n this.canvas.requestRenderAll();\n },\n\n /**\n * @private\n * @param {Array} rects\n */\n _getOptimizedRects: function(rects) {\n\n // avoid creating duplicate rects at the same coordinates\n var uniqueRects = { }, key, i, len;\n\n for (i = 0, len = rects.length; i < len; i++) {\n key = rects[i].left + '' + rects[i].top;\n if (!uniqueRects[key]) {\n uniqueRects[key] = rects[i];\n }\n }\n var uniqueRectsArray = [];\n for (key in uniqueRects) {\n uniqueRectsArray.push(uniqueRects[key]);\n }\n\n return uniqueRectsArray;\n },\n\n /**\n * Render new chunk of spray brush\n */\n render: function(sprayChunk) {\n var ctx = this.canvas.contextTop, i, len;\n ctx.fillStyle = this.color;\n\n this._saveAndTransform(ctx);\n\n for (i = 0, len = sprayChunk.length; i < len; i++) {\n var point = sprayChunk[i];\n if (typeof point.opacity !== 'undefined') {\n ctx.globalAlpha = point.opacity;\n }\n ctx.fillRect(point.x, point.y, point.width, point.width);\n }\n ctx.restore();\n },\n\n /**\n * Render all spray chunks\n */\n _render: function() {\n var ctx = this.canvas.contextTop, i, ilen;\n ctx.fillStyle = this.color;\n\n this._saveAndTransform(ctx);\n\n for (i = 0, ilen = this.sprayChunks.length; i < ilen; i++) {\n this.render(this.sprayChunks[i]);\n }\n ctx.restore();\n },\n\n /**\n * @param {Object} pointer\n */\n addSprayChunk: function(pointer) {\n this.sprayChunkPoints = [];\n\n var x, y, width, radius = this.width / 2, i;\n\n for (i = 0; i < this.density; i++) {\n\n x = fabric.util.getRandomInt(pointer.x - radius, pointer.x + radius);\n y = fabric.util.getRandomInt(pointer.y - radius, pointer.y + radius);\n\n if (this.dotWidthVariance) {\n width = fabric.util.getRandomInt(\n // bottom clamp width to 1\n Math.max(1, this.dotWidth - this.dotWidthVariance),\n this.dotWidth + this.dotWidthVariance);\n }\n else {\n width = this.dotWidth;\n }\n\n var point = new fabric.Point(x, y);\n point.width = width;\n\n if (this.randomOpacity) {\n point.opacity = fabric.util.getRandomInt(0, 100) / 100;\n }\n\n this.sprayChunkPoints.push(point);\n }\n\n this.sprayChunks.push(this.sprayChunkPoints);\n }\n});\n/**\n * PatternBrush class\n * @class fabric.PatternBrush\n * @extends fabric.BaseBrush\n */\nfabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fabric.PatternBrush.prototype */ {\n\n getPatternSrc: function() {\n\n var dotWidth = 20,\n dotDistance = 5,\n patternCanvas = fabric.util.createCanvasElement(),\n patternCtx = patternCanvas.getContext('2d');\n\n patternCanvas.width = patternCanvas.height = dotWidth + dotDistance;\n\n patternCtx.fillStyle = this.color;\n patternCtx.beginPath();\n patternCtx.arc(dotWidth / 2, dotWidth / 2, dotWidth / 2, 0, Math.PI * 2, false);\n patternCtx.closePath();\n patternCtx.fill();\n\n return patternCanvas;\n },\n\n getPatternSrcFunction: function() {\n return String(this.getPatternSrc).replace('this.color', '\"' + this.color + '\"');\n },\n\n /**\n * Creates \"pattern\" instance property\n * @param {CanvasRenderingContext2D} ctx\n */\n getPattern: function(ctx) {\n return ctx.createPattern(this.source || this.getPatternSrc(), 'repeat');\n },\n\n /**\n * Sets brush styles\n * @param {CanvasRenderingContext2D} ctx\n */\n _setBrushStyles: function(ctx) {\n this.callSuper('_setBrushStyles', ctx);\n ctx.strokeStyle = this.getPattern(ctx);\n },\n\n /**\n * Creates path\n */\n createPath: function(pathData) {\n var path = this.callSuper('createPath', pathData),\n topLeft = path._getLeftTopCoords().scalarAdd(path.strokeWidth / 2);\n\n path.stroke = new fabric.Pattern({\n source: this.source || this.getPatternSrcFunction(),\n offsetX: -topLeft.x,\n offsetY: -topLeft.y\n });\n return path;\n }\n});\n(function() {\n\n var getPointer = fabric.util.getPointer,\n degreesToRadians = fabric.util.degreesToRadians,\n isTouchEvent = fabric.util.isTouchEvent;\n\n /**\n * Canvas class\n * @class fabric.Canvas\n * @extends fabric.StaticCanvas\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#canvas}\n * @see {@link fabric.Canvas#initialize} for constructor definition\n *\n * @fires object:modified at the end of a transform or any change when statefull is true\n * @fires object:rotating while an object is being rotated from the control\n * @fires object:scaling while an object is being scaled by controls\n * @fires object:moving while an object is being dragged\n * @fires object:skewing while an object is being skewed from the controls\n *\n * @fires before:transform before a transform is is started\n * @fires before:selection:cleared\n * @fires selection:cleared\n * @fires selection:updated\n * @fires selection:created\n *\n * @fires path:created after a drawing operation ends and the path is added\n * @fires mouse:down\n * @fires mouse:move\n * @fires mouse:up\n * @fires mouse:down:before on mouse down, before the inner fabric logic runs\n * @fires mouse:move:before on mouse move, before the inner fabric logic runs\n * @fires mouse:up:before on mouse up, before the inner fabric logic runs\n * @fires mouse:over\n * @fires mouse:out\n * @fires mouse:dblclick whenever a native dbl click event fires on the canvas.\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drop:before before drop event. same native event. This is added to handle edge cases\n * @fires drop\n * @fires after:render at the end of the render process, receives the context in the callback\n * @fires before:render at start the render process, receives the context in the callback\n *\n */\n fabric.Canvas = fabric.util.createClass(fabric.StaticCanvas, /** @lends fabric.Canvas.prototype */ {\n\n /**\n * Constructor\n * @param {HTMLElement | String} el <canvas> element to initialize instance on\n * @param {Object} [options] Options object\n * @return {Object} thisArg\n */\n initialize: function(el, options) {\n options || (options = { });\n this.renderAndResetBound = this.renderAndReset.bind(this);\n this.requestRenderAllBound = this.requestRenderAll.bind(this);\n this._initStatic(el, options);\n this._initInteractive();\n this._createCacheCanvas();\n },\n\n /**\n * When true, objects can be transformed by one side (unproportionally)\n * when dragged on the corners that normally would not do that.\n * @type Boolean\n * @default\n * @since fabric 4.0 // changed name and default value\n */\n uniformScaling: true,\n\n /**\n * Indicates which key switches uniform scaling.\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled.\n * totally wrong named. this sounds like `uniform scaling`\n * if Canvas.uniformScaling is true, pressing this will set it to false\n * and viceversa.\n * @since 1.6.2\n * @type String\n * @default\n */\n uniScaleKey: 'shiftKey',\n\n /**\n * When true, objects use center point as the origin of scale transformation.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredScaling: false,\n\n /**\n * When true, objects use center point as the origin of rotate transformation.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredRotation: false,\n\n /**\n * Indicates which key enable centered Transform\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled feature disabled.\n * @since 1.6.2\n * @type String\n * @default\n */\n centeredKey: 'altKey',\n\n /**\n * Indicates which key enable alternate action on corner\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled feature disabled.\n * @since 1.6.2\n * @type String\n * @default\n */\n altActionKey: 'shiftKey',\n\n /**\n * Indicates that canvas is interactive. This property should not be changed.\n * @type Boolean\n * @default\n */\n interactive: true,\n\n /**\n * Indicates whether group selection should be enabled\n * @type Boolean\n * @default\n */\n selection: true,\n\n /**\n * Indicates which key or keys enable multiple click selection\n * Pass value as a string or array of strings\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or empty or containing any other string that is not a modifier key\n * feature is disabled.\n * @since 1.6.2\n * @type String|Array\n * @default\n */\n selectionKey: 'shiftKey',\n\n /**\n * Indicates which key enable alternative selection\n * in case of target overlapping with active object\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * For a series of reason that come from the general expectations on how\n * things should work, this feature works only for preserveObjectStacking true.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled.\n * @since 1.6.5\n * @type null|String\n * @default\n */\n altSelectionKey: null,\n\n /**\n * Color of selection\n * @type String\n * @default\n */\n selectionColor: 'rgba(100, 100, 255, 0.3)', // blue\n\n /**\n * Default dash array pattern\n * If not empty the selection border is dashed\n * @type Array\n */\n selectionDashArray: [],\n\n /**\n * Color of the border of selection (usually slightly darker than color of selection itself)\n * @type String\n * @default\n */\n selectionBorderColor: 'rgba(255, 255, 255, 0.3)',\n\n /**\n * Width of a line used in object/group selection\n * @type Number\n * @default\n */\n selectionLineWidth: 1,\n\n /**\n * Select only shapes that are fully contained in the dragged selection rectangle.\n * @type Boolean\n * @default\n */\n selectionFullyContained: false,\n\n /**\n * Default cursor value used when hovering over an object on canvas\n * @type String\n * @default\n */\n hoverCursor: 'move',\n\n /**\n * Default cursor value used when moving an object on canvas\n * @type String\n * @default\n */\n moveCursor: 'move',\n\n /**\n * Default cursor value used for the entire canvas\n * @type String\n * @default\n */\n defaultCursor: 'default',\n\n /**\n * Cursor value used during free drawing\n * @type String\n * @default\n */\n freeDrawingCursor: 'crosshair',\n\n /**\n * Cursor value used for disabled elements ( corners with disabled action )\n * @type String\n * @since 2.0.0\n * @default\n */\n notAllowedCursor: 'not-allowed',\n\n /**\n * Default element class that's given to wrapper (div) element of canvas\n * @type String\n * @default\n */\n containerClass: 'canvas-container',\n\n /**\n * When true, object detection happens on per-pixel basis rather than on per-bounding-box\n * @type Boolean\n * @default\n */\n perPixelTargetFind: false,\n\n /**\n * Number of pixels around target pixel to tolerate (consider active) during object detection\n * @type Number\n * @default\n */\n targetFindTolerance: 0,\n\n /**\n * When true, target detection is skipped. Target detection will return always undefined.\n * click selection won't work anymore, events will fire with no targets.\n * if something is selected before setting it to true, it will be deselected at the first click.\n * area selection will still work. check the `selection` property too.\n * if you deactivate both, you should look into staticCanvas.\n * @type Boolean\n * @default\n */\n skipTargetFind: false,\n\n /**\n * When true, mouse events on canvas (mousedown/mousemove/mouseup) result in free drawing.\n * After mousedown, mousemove creates a shape,\n * and then mouseup finalizes it and adds an instance of `fabric.Path` onto canvas.\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-4#free_drawing}\n * @type Boolean\n * @default\n */\n isDrawingMode: false,\n\n /**\n * Indicates whether objects should remain in current stack position when selected.\n * When false objects are brought to top and rendered as part of the selection group\n * @type Boolean\n * @default\n */\n preserveObjectStacking: false,\n\n /**\n * Indicates the angle that an object will lock to while rotating.\n * @type Number\n * @since 1.6.7\n * @default\n */\n snapAngle: 0,\n\n /**\n * Indicates the distance from the snapAngle the rotation will lock to the snapAngle.\n * When `null`, the snapThreshold will default to the snapAngle.\n * @type null|Number\n * @since 1.6.7\n * @default\n */\n snapThreshold: null,\n\n /**\n * Indicates if the right click on canvas can output the context menu or not\n * @type Boolean\n * @since 1.6.5\n * @default\n */\n stopContextMenu: false,\n\n /**\n * Indicates if the canvas can fire right click events\n * @type Boolean\n * @since 1.6.5\n * @default\n */\n fireRightClick: false,\n\n /**\n * Indicates if the canvas can fire middle click events\n * @type Boolean\n * @since 1.7.8\n * @default\n */\n fireMiddleClick: false,\n\n /**\n * Keep track of the subTargets for Mouse Events\n * @type fabric.Object[]\n */\n targets: [],\n\n /**\n * When the option is enabled, PointerEvent is used instead of MouseEvent.\n * @type Boolean\n * @default\n */\n enablePointerEvents: false,\n\n /**\n * Keep track of the hovered target\n * @type fabric.Object\n * @private\n */\n _hoveredTarget: null,\n\n /**\n * hold the list of nested targets hovered\n * @type fabric.Object[]\n * @private\n */\n _hoveredTargets: [],\n\n /**\n * @private\n */\n _initInteractive: function() {\n this._currentTransform = null;\n this._groupSelector = null;\n this._initWrapperElement();\n this._createUpperCanvas();\n this._initEventListeners();\n\n this._initRetinaScaling();\n\n this.freeDrawingBrush = fabric.PencilBrush && new fabric.PencilBrush(this);\n\n this.calcOffset();\n },\n\n /**\n * Divides objects in two groups, one to render immediately\n * and one to render as activeGroup.\n * @return {Array} objects to render immediately and pushes the other in the activeGroup.\n */\n _chooseObjectsToRender: function() {\n var activeObjects = this.getActiveObjects(),\n object, objsToRender, activeGroupObjects;\n\n if (activeObjects.length > 0 && !this.preserveObjectStacking) {\n objsToRender = [];\n activeGroupObjects = [];\n for (var i = 0, length = this._objects.length; i < length; i++) {\n object = this._objects[i];\n if (activeObjects.indexOf(object) === -1 ) {\n objsToRender.push(object);\n }\n else {\n activeGroupObjects.push(object);\n }\n }\n if (activeObjects.length > 1) {\n this._activeObject._objects = activeGroupObjects;\n }\n objsToRender.push.apply(objsToRender, activeGroupObjects);\n }\n else {\n objsToRender = this._objects;\n }\n return objsToRender;\n },\n\n /**\n * Renders both the top canvas and the secondary container canvas.\n * @return {fabric.Canvas} instance\n * @chainable\n */\n renderAll: function () {\n if (this.contextTopDirty && !this._groupSelector && !this.isDrawingMode) {\n this.clearContext(this.contextTop);\n this.contextTopDirty = false;\n }\n if (this.hasLostContext) {\n this.renderTopLayer(this.contextTop);\n this.hasLostContext = false;\n }\n var canvasToDrawOn = this.contextContainer;\n this.renderCanvas(canvasToDrawOn, this._chooseObjectsToRender());\n return this;\n },\n\n renderTopLayer: function(ctx) {\n ctx.save();\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\n this.freeDrawingBrush && this.freeDrawingBrush._render();\n this.contextTopDirty = true;\n }\n // we render the top context - last object\n if (this.selection && this._groupSelector) {\n this._drawSelection(ctx);\n this.contextTopDirty = true;\n }\n ctx.restore();\n },\n\n /**\n * Method to render only the top canvas.\n * Also used to render the group selection box.\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n renderTop: function () {\n var ctx = this.contextTop;\n this.clearContext(ctx);\n this.renderTopLayer(ctx);\n this.fire('after:render');\n return this;\n },\n\n /**\n * @private\n */\n _normalizePointer: function (object, pointer) {\n var m = object.calcTransformMatrix(),\n invertedM = fabric.util.invertTransform(m),\n vptPointer = this.restorePointerVpt(pointer);\n return fabric.util.transformPoint(vptPointer, invertedM);\n },\n\n /**\n * Returns true if object is transparent at a certain location\n * @param {fabric.Object} target Object to check\n * @param {Number} x Left coordinate\n * @param {Number} y Top coordinate\n * @return {Boolean}\n */\n isTargetTransparent: function (target, x, y) {\n // in case the target is the activeObject, we cannot execute this optimization\n // because we need to draw controls too.\n if (target.shouldCache() && target._cacheCanvas && target !== this._activeObject) {\n var normalizedPointer = this._normalizePointer(target, {x: x, y: y}),\n targetRelativeX = Math.max(target.cacheTranslationX + (normalizedPointer.x * target.zoomX), 0),\n targetRelativeY = Math.max(target.cacheTranslationY + (normalizedPointer.y * target.zoomY), 0);\n\n var isTransparent = fabric.util.isTransparent(\n target._cacheContext, Math.round(targetRelativeX), Math.round(targetRelativeY), this.targetFindTolerance);\n\n return isTransparent;\n }\n\n var ctx = this.contextCache,\n originalColor = target.selectionBackgroundColor, v = this.viewportTransform;\n\n target.selectionBackgroundColor = '';\n\n this.clearContext(ctx);\n\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n target.render(ctx);\n ctx.restore();\n\n target.selectionBackgroundColor = originalColor;\n\n var isTransparent = fabric.util.isTransparent(\n ctx, x, y, this.targetFindTolerance);\n\n return isTransparent;\n },\n\n /**\n * takes an event and determines if selection key has been pressed\n * @private\n * @param {Event} e Event object\n */\n _isSelectionKeyPressed: function(e) {\n var selectionKeyPressed = false;\n\n if (Array.isArray(this.selectionKey)) {\n selectionKeyPressed = !!this.selectionKey.find(function(key) { return e[key] === true; });\n }\n else {\n selectionKeyPressed = e[this.selectionKey];\n }\n\n return selectionKeyPressed;\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target\n */\n _shouldClearSelection: function (e, target) {\n var activeObjects = this.getActiveObjects(),\n activeObject = this._activeObject;\n\n return (\n !target\n ||\n (target &&\n activeObject &&\n activeObjects.length > 1 &&\n activeObjects.indexOf(target) === -1 &&\n activeObject !== target &&\n !this._isSelectionKeyPressed(e))\n ||\n (target && !target.evented)\n ||\n (target &&\n !target.selectable &&\n activeObject &&\n activeObject !== target)\n );\n },\n\n /**\n * centeredScaling from object can't override centeredScaling from canvas.\n * this should be fixed, since object setting should take precedence over canvas.\n * also this should be something that will be migrated in the control properties.\n * as ability to define the origin of the transformation that the control provide.\n * @private\n * @param {fabric.Object} target\n * @param {String} action\n * @param {Boolean} altKey\n */\n _shouldCenterTransform: function (target, action, altKey) {\n if (!target) {\n return;\n }\n\n var centerTransform;\n\n if (action === 'scale' || action === 'scaleX' || action === 'scaleY' || action === 'resizing') {\n centerTransform = this.centeredScaling || target.centeredScaling;\n }\n else if (action === 'rotate') {\n centerTransform = this.centeredRotation || target.centeredRotation;\n }\n\n return centerTransform ? !altKey : altKey;\n },\n\n /**\n * should disappear before release 4.0\n * @private\n */\n _getOriginFromCorner: function(target, corner) {\n var origin = {\n x: target.originX,\n y: target.originY\n };\n\n if (corner === 'ml' || corner === 'tl' || corner === 'bl') {\n origin.x = 'right';\n }\n else if (corner === 'mr' || corner === 'tr' || corner === 'br') {\n origin.x = 'left';\n }\n\n if (corner === 'tl' || corner === 'mt' || corner === 'tr') {\n origin.y = 'bottom';\n }\n else if (corner === 'bl' || corner === 'mb' || corner === 'br') {\n origin.y = 'top';\n }\n return origin;\n },\n\n /**\n * @private\n * @param {Boolean} alreadySelected true if target is already selected\n * @param {String} corner a string representing the corner ml, mr, tl ...\n * @param {Event} e Event object\n * @param {fabric.Object} [target] inserted back to help overriding. Unused\n */\n _getActionFromCorner: function(alreadySelected, corner, e, target) {\n if (!corner || !alreadySelected) {\n return 'drag';\n }\n var control = target.controls[corner];\n return control.getActionName(e, control, target);\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target\n */\n _setupCurrentTransform: function (e, target, alreadySelected) {\n if (!target) {\n return;\n }\n\n var pointer = this.getPointer(e), corner = target.__corner,\n control = target.controls[corner],\n actionHandler = (alreadySelected && corner) ?\n control.getActionHandler(e, target, control) : fabric.controlsUtils.dragHandler,\n action = this._getActionFromCorner(alreadySelected, corner, e, target),\n origin = this._getOriginFromCorner(target, corner),\n altKey = e[this.centeredKey],\n transform = {\n target: target,\n action: action,\n actionHandler: actionHandler,\n corner: corner,\n scaleX: target.scaleX,\n scaleY: target.scaleY,\n skewX: target.skewX,\n skewY: target.skewY,\n // used by transation\n offsetX: pointer.x - target.left,\n offsetY: pointer.y - target.top,\n originX: origin.x,\n originY: origin.y,\n ex: pointer.x,\n ey: pointer.y,\n lastX: pointer.x,\n lastY: pointer.y,\n // unsure they are useful anymore.\n // left: target.left,\n // top: target.top,\n theta: degreesToRadians(target.angle),\n // end of unsure\n width: target.width * target.scaleX,\n shiftKey: e.shiftKey,\n altKey: altKey,\n original: fabric.util.saveObjectTransform(target),\n };\n\n if (this._shouldCenterTransform(target, action, altKey)) {\n transform.originX = 'center';\n transform.originY = 'center';\n }\n transform.original.originX = origin.x;\n transform.original.originY = origin.y;\n this._currentTransform = transform;\n this._beforeTransform(e);\n },\n\n /**\n * Set the cursor type of the canvas element\n * @param {String} value Cursor type of the canvas element.\n * @see http://www.w3.org/TR/css3-ui/#cursor\n */\n setCursor: function (value) {\n this.upperCanvasEl.style.cursor = value;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx to draw the selection on\n */\n _drawSelection: function (ctx) {\n var selector = this._groupSelector,\n viewportStart = new fabric.Point(selector.ex, selector.ey),\n start = fabric.util.transformPoint(viewportStart, this.viewportTransform),\n viewportExtent = new fabric.Point(selector.ex + selector.left, selector.ey + selector.top),\n extent = fabric.util.transformPoint(viewportExtent, this.viewportTransform),\n minX = Math.min(start.x, extent.x),\n minY = Math.min(start.y, extent.y),\n maxX = Math.max(start.x, extent.x),\n maxY = Math.max(start.y, extent.y),\n strokeOffset = this.selectionLineWidth / 2;\n\n if (this.selectionColor) {\n ctx.fillStyle = this.selectionColor;\n ctx.fillRect(minX, minY, maxX - minX, maxY - minY);\n }\n\n if (!this.selectionLineWidth || !this.selectionBorderColor) {\n return;\n }\n ctx.lineWidth = this.selectionLineWidth;\n ctx.strokeStyle = this.selectionBorderColor;\n\n minX += strokeOffset;\n minY += strokeOffset;\n maxX -= strokeOffset;\n maxY -= strokeOffset;\n // selection border\n fabric.Object.prototype._setLineDash.call(this, ctx, this.selectionDashArray);\n ctx.strokeRect(minX, minY, maxX - minX, maxY - minY);\n },\n\n /**\n * Method that determines what object we are clicking on\n * the skipGroup parameter is for internal use, is needed for shift+click action\n * 11/09/2018 TODO: would be cool if findTarget could discern between being a full target\n * or the outside part of the corner.\n * @param {Event} e mouse event\n * @param {Boolean} skipGroup when true, activeGroup is skipped and only objects are traversed through\n * @return {fabric.Object} the target found\n */\n findTarget: function (e, skipGroup) {\n if (this.skipTargetFind) {\n return;\n }\n\n var ignoreZoom = true,\n pointer = this.getPointer(e, ignoreZoom),\n activeObject = this._activeObject,\n aObjects = this.getActiveObjects(),\n activeTarget, activeTargetSubs,\n isTouch = isTouchEvent(e),\n shouldLookForActive = (aObjects.length > 1 && !skipGroup) || aObjects.length === 1;\n\n // first check current group (if one exists)\n // active group does not check sub targets like normal groups.\n // if active group just exits.\n this.targets = [];\n\n // if we hit the corner of an activeObject, let's return that.\n if (shouldLookForActive && activeObject._findTargetCorner(pointer, isTouch)) {\n return activeObject;\n }\n if (aObjects.length > 1 && !skipGroup && activeObject === this._searchPossibleTargets([activeObject], pointer)) {\n return activeObject;\n }\n if (aObjects.length === 1 &&\n activeObject === this._searchPossibleTargets([activeObject], pointer)) {\n if (!this.preserveObjectStacking) {\n return activeObject;\n }\n else {\n activeTarget = activeObject;\n activeTargetSubs = this.targets;\n this.targets = [];\n }\n }\n var target = this._searchPossibleTargets(this._objects, pointer);\n if (e[this.altSelectionKey] && target && activeTarget && target !== activeTarget) {\n target = activeTarget;\n this.targets = activeTargetSubs;\n }\n return target;\n },\n\n /**\n * Checks point is inside the object.\n * @param {Object} [pointer] x,y object of point coordinates we want to check.\n * @param {fabric.Object} obj Object to test against\n * @param {Object} [globalPointer] x,y object of point coordinates relative to canvas used to search per pixel target.\n * @return {Boolean} true if point is contained within an area of given object\n * @private\n */\n _checkTarget: function(pointer, obj, globalPointer) {\n if (obj &&\n obj.visible &&\n obj.evented &&\n // http://www.geog.ubc.ca/courses/klink/gis.notes/ncgia/u32.html\n // http://idav.ucdavis.edu/~okreylos/TAship/Spring2000/PointInPolygon.html\n obj.containsPoint(pointer)\n ) {\n if ((this.perPixelTargetFind || obj.perPixelTargetFind) && !obj.isEditing) {\n var isTransparent = this.isTargetTransparent(obj, globalPointer.x, globalPointer.y);\n if (!isTransparent) {\n return true;\n }\n }\n else {\n return true;\n }\n }\n },\n\n /**\n * Function used to search inside objects an object that contains pointer in bounding box or that contains pointerOnCanvas when painted\n * @param {Array} [objects] objects array to look into\n * @param {Object} [pointer] x,y object of point coordinates we want to check.\n * @return {fabric.Object} object that contains pointer\n * @private\n */\n _searchPossibleTargets: function(objects, pointer) {\n // Cache all targets where their bounding box contains point.\n var target, i = objects.length, subTarget;\n // Do not check for currently grouped objects, since we check the parent group itself.\n // until we call this function specifically to search inside the activeGroup\n while (i--) {\n var objToCheck = objects[i];\n var pointerToUse = objToCheck.group ?\n this._normalizePointer(objToCheck.group, pointer) : pointer;\n if (this._checkTarget(pointerToUse, objToCheck, pointer)) {\n target = objects[i];\n if (target.subTargetCheck && target instanceof fabric.Group) {\n subTarget = this._searchPossibleTargets(target._objects, pointer);\n subTarget && this.targets.push(subTarget);\n }\n break;\n }\n }\n return target;\n },\n\n /**\n * Returns pointer coordinates without the effect of the viewport\n * @param {Object} pointer with \"x\" and \"y\" number values\n * @return {Object} object with \"x\" and \"y\" number values\n */\n restorePointerVpt: function(pointer) {\n return fabric.util.transformPoint(\n pointer,\n fabric.util.invertTransform(this.viewportTransform)\n );\n },\n\n /**\n * Returns pointer coordinates relative to canvas.\n * Can return coordinates with or without viewportTransform.\n * ignoreZoom false gives back coordinates that represent\n * the point clicked on canvas element.\n * ignoreZoom true gives back coordinates after being processed\n * by the viewportTransform ( sort of coordinates of what is displayed\n * on the canvas where you are clicking.\n * ignoreZoom true = HTMLElement coordinates relative to top,left\n * ignoreZoom false, default = fabric space coordinates, the same used for shape position\n * To interact with your shapes top and left you want to use ignoreZoom true\n * most of the time, while ignoreZoom false will give you coordinates\n * compatible with the object.oCoords system.\n * of the time.\n * @param {Event} e\n * @param {Boolean} ignoreZoom\n * @return {Object} object with \"x\" and \"y\" number values\n */\n getPointer: function (e, ignoreZoom) {\n // return cached values if we are in the event processing chain\n if (this._absolutePointer && !ignoreZoom) {\n return this._absolutePointer;\n }\n if (this._pointer && ignoreZoom) {\n return this._pointer;\n }\n\n var pointer = getPointer(e),\n upperCanvasEl = this.upperCanvasEl,\n bounds = upperCanvasEl.getBoundingClientRect(),\n boundsWidth = bounds.width || 0,\n boundsHeight = bounds.height || 0,\n cssScale;\n\n if (!boundsWidth || !boundsHeight ) {\n if ('top' in bounds && 'bottom' in bounds) {\n boundsHeight = Math.abs( bounds.top - bounds.bottom );\n }\n if ('right' in bounds && 'left' in bounds) {\n boundsWidth = Math.abs( bounds.right - bounds.left );\n }\n }\n\n this.calcOffset();\n pointer.x = pointer.x - this._offset.left;\n pointer.y = pointer.y - this._offset.top;\n if (!ignoreZoom) {\n pointer = this.restorePointerVpt(pointer);\n }\n\n var retinaScaling = this.getRetinaScaling();\n if (retinaScaling !== 1) {\n pointer.x /= retinaScaling;\n pointer.y /= retinaScaling;\n }\n\n if (boundsWidth === 0 || boundsHeight === 0) {\n // If bounds are not available (i.e. not visible), do not apply scale.\n cssScale = { width: 1, height: 1 };\n }\n else {\n cssScale = {\n width: upperCanvasEl.width / boundsWidth,\n height: upperCanvasEl.height / boundsHeight\n };\n }\n\n return {\n x: pointer.x * cssScale.width,\n y: pointer.y * cssScale.height\n };\n },\n\n /**\n * @private\n * @throws {CANVAS_INIT_ERROR} If canvas can not be initialized\n */\n _createUpperCanvas: function () {\n var lowerCanvasClass = this.lowerCanvasEl.className.replace(/\\s*lower-canvas\\s*/, ''),\n lowerCanvasEl = this.lowerCanvasEl, upperCanvasEl = this.upperCanvasEl;\n\n // there is no need to create a new upperCanvas element if we have already one.\n if (upperCanvasEl) {\n upperCanvasEl.className = '';\n }\n else {\n upperCanvasEl = this._createCanvasElement();\n this.upperCanvasEl = upperCanvasEl;\n }\n fabric.util.addClass(upperCanvasEl, 'upper-canvas ' + lowerCanvasClass);\n\n this.wrapperEl.appendChild(upperCanvasEl);\n\n this._copyCanvasStyle(lowerCanvasEl, upperCanvasEl);\n this._applyCanvasStyle(upperCanvasEl);\n this.contextTop = upperCanvasEl.getContext('2d');\n },\n\n /**\n * Returns context of top canvas where interactions are drawn\n * @returns {CanvasRenderingContext2D}\n */\n getTopContext: function () {\n return this.contextTop;\n },\n\n /**\n * @private\n */\n _createCacheCanvas: function () {\n this.cacheCanvasEl = this._createCanvasElement();\n this.cacheCanvasEl.setAttribute('width', this.width);\n this.cacheCanvasEl.setAttribute('height', this.height);\n this.contextCache = this.cacheCanvasEl.getContext('2d');\n },\n\n /**\n * @private\n */\n _initWrapperElement: function () {\n this.wrapperEl = fabric.util.wrapElement(this.lowerCanvasEl, 'div', {\n 'class': this.containerClass\n });\n fabric.util.setStyle(this.wrapperEl, {\n width: this.width + 'px',\n height: this.height + 'px',\n position: 'relative'\n });\n fabric.util.makeElementUnselectable(this.wrapperEl);\n },\n\n /**\n * @private\n * @param {HTMLElement} element canvas element to apply styles on\n */\n _applyCanvasStyle: function (element) {\n var width = this.width || element.width,\n height = this.height || element.height;\n\n fabric.util.setStyle(element, {\n position: 'absolute',\n width: width + 'px',\n height: height + 'px',\n left: 0,\n top: 0,\n 'touch-action': this.allowTouchScrolling ? 'manipulation' : 'none',\n '-ms-touch-action': this.allowTouchScrolling ? 'manipulation' : 'none'\n });\n element.width = width;\n element.height = height;\n fabric.util.makeElementUnselectable(element);\n },\n\n /**\n * Copy the entire inline style from one element (fromEl) to another (toEl)\n * @private\n * @param {Element} fromEl Element style is copied from\n * @param {Element} toEl Element copied style is applied to\n */\n _copyCanvasStyle: function (fromEl, toEl) {\n toEl.style.cssText = fromEl.style.cssText;\n },\n\n /**\n * Returns context of canvas where object selection is drawn\n * @return {CanvasRenderingContext2D}\n */\n getSelectionContext: function() {\n return this.contextTop;\n },\n\n /**\n * Returns <canvas> element on which object selection is drawn\n * @return {HTMLCanvasElement}\n */\n getSelectionElement: function () {\n return this.upperCanvasEl;\n },\n\n /**\n * Returns currently active object\n * @return {fabric.Object} active object\n */\n getActiveObject: function () {\n return this._activeObject;\n },\n\n /**\n * Returns an array with the current selected objects\n * @return {fabric.Object} active object\n */\n getActiveObjects: function () {\n var active = this._activeObject;\n if (active) {\n if (active.type === 'activeSelection' && active._objects) {\n return active._objects.slice(0);\n }\n else {\n return [active];\n }\n }\n return [];\n },\n\n /**\n * @private\n * @param {fabric.Object} obj Object that was removed\n */\n _onObjectRemoved: function(obj) {\n // removing active object should fire \"selection:cleared\" events\n if (obj === this._activeObject) {\n this.fire('before:selection:cleared', { target: obj });\n this._discardActiveObject();\n this.fire('selection:cleared', { target: obj });\n obj.fire('deselected');\n }\n if (obj === this._hoveredTarget){\n this._hoveredTarget = null;\n this._hoveredTargets = [];\n }\n this.callSuper('_onObjectRemoved', obj);\n },\n\n /**\n * @private\n * Compares the old activeObject with the current one and fires correct events\n * @param {fabric.Object} obj old activeObject\n */\n _fireSelectionEvents: function(oldObjects, e) {\n var somethingChanged = false, objects = this.getActiveObjects(),\n added = [], removed = [];\n oldObjects.forEach(function(oldObject) {\n if (objects.indexOf(oldObject) === -1) {\n somethingChanged = true;\n oldObject.fire('deselected', {\n e: e,\n target: oldObject\n });\n removed.push(oldObject);\n }\n });\n objects.forEach(function(object) {\n if (oldObjects.indexOf(object) === -1) {\n somethingChanged = true;\n object.fire('selected', {\n e: e,\n target: object\n });\n added.push(object);\n }\n });\n if (oldObjects.length > 0 && objects.length > 0) {\n somethingChanged && this.fire('selection:updated', {\n e: e,\n selected: added,\n deselected: removed,\n });\n }\n else if (objects.length > 0) {\n this.fire('selection:created', {\n e: e,\n selected: added,\n });\n }\n else if (oldObjects.length > 0) {\n this.fire('selection:cleared', {\n e: e,\n deselected: removed,\n });\n }\n },\n\n /**\n * Sets given object as the only active object on canvas\n * @param {fabric.Object} object Object to set as an active one\n * @param {Event} [e] Event (passed along when firing \"object:selected\")\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n setActiveObject: function (object, e) {\n var currentActives = this.getActiveObjects();\n this._setActiveObject(object, e);\n this._fireSelectionEvents(currentActives, e);\n return this;\n },\n\n /**\n * This is a private method for now.\n * This is supposed to be equivalent to setActiveObject but without firing\n * any event. There is commitment to have this stay this way.\n * This is the functional part of setActiveObject.\n * @private\n * @param {Object} object to set as active\n * @param {Event} [e] Event (passed along when firing \"object:selected\")\n * @return {Boolean} true if the selection happened\n */\n _setActiveObject: function(object, e) {\n if (this._activeObject === object) {\n return false;\n }\n if (!this._discardActiveObject(e, object)) {\n return false;\n }\n if (object.onSelect({ e: e })) {\n return false;\n }\n this._activeObject = object;\n return true;\n },\n\n /**\n * This is a private method for now.\n * This is supposed to be equivalent to discardActiveObject but without firing\n * any events. There is commitment to have this stay this way.\n * This is the functional part of discardActiveObject.\n * @param {Event} [e] Event (passed along when firing \"object:deselected\")\n * @param {Object} object to set as active\n * @return {Boolean} true if the selection happened\n * @private\n */\n _discardActiveObject: function(e, object) {\n var obj = this._activeObject;\n if (obj) {\n // onDeselect return TRUE to cancel selection;\n if (obj.onDeselect({ e: e, object: object })) {\n return false;\n }\n this._activeObject = null;\n }\n return true;\n },\n\n /**\n * Discards currently active object and fire events. If the function is called by fabric\n * as a consequence of a mouse event, the event is passed as a parameter and\n * sent to the fire function for the custom events. When used as a method the\n * e param does not have any application.\n * @param {event} e\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n discardActiveObject: function (e) {\n var currentActives = this.getActiveObjects(), activeObject = this.getActiveObject();\n if (currentActives.length) {\n this.fire('before:selection:cleared', { target: activeObject, e: e });\n }\n this._discardActiveObject(e);\n this._fireSelectionEvents(currentActives, e);\n return this;\n },\n\n /**\n * Clears a canvas element and removes all event listeners\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n dispose: function () {\n var wrapper = this.wrapperEl;\n this.removeListeners();\n wrapper.removeChild(this.upperCanvasEl);\n wrapper.removeChild(this.lowerCanvasEl);\n this.contextCache = null;\n this.contextTop = null;\n ['upperCanvasEl', 'cacheCanvasEl'].forEach((function(element) {\n fabric.util.cleanUpJsdomNode(this[element]);\n this[element] = undefined;\n }).bind(this));\n if (wrapper.parentNode) {\n wrapper.parentNode.replaceChild(this.lowerCanvasEl, this.wrapperEl);\n }\n delete this.wrapperEl;\n fabric.StaticCanvas.prototype.dispose.call(this);\n return this;\n },\n\n /**\n * Clears all contexts (background, main, top) of an instance\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n clear: function () {\n // this.discardActiveGroup();\n this.discardActiveObject();\n this.clearContext(this.contextTop);\n return this.callSuper('clear');\n },\n\n /**\n * Draws objects' controls (borders/controls)\n * @param {CanvasRenderingContext2D} ctx Context to render controls on\n */\n drawControls: function(ctx) {\n var activeObject = this._activeObject;\n\n if (activeObject) {\n activeObject._renderControls(ctx);\n }\n },\n\n /**\n * @private\n */\n _toObject: function(instance, methodName, propertiesToInclude) {\n //If the object is part of the current selection group, it should\n //be transformed appropriately\n //i.e. it should be serialised as it would appear if the selection group\n //were to be destroyed.\n var originalProperties = this._realizeGroupTransformOnObject(instance),\n object = this.callSuper('_toObject', instance, methodName, propertiesToInclude);\n //Undo the damage we did by changing all of its properties\n this._unwindGroupTransformOnObject(instance, originalProperties);\n return object;\n },\n\n /**\n * Realises an object's group transformation on it\n * @private\n * @param {fabric.Object} [instance] the object to transform (gets mutated)\n * @returns the original values of instance which were changed\n */\n _realizeGroupTransformOnObject: function(instance) {\n if (instance.group && instance.group.type === 'activeSelection' && this._activeObject === instance.group) {\n var layoutProps = ['angle', 'flipX', 'flipY', 'left', 'scaleX', 'scaleY', 'skewX', 'skewY', 'top'];\n //Copy all the positionally relevant properties across now\n var originalValues = {};\n layoutProps.forEach(function(prop) {\n originalValues[prop] = instance[prop];\n });\n fabric.util.addTransformToObject(instance, this._activeObject.calcOwnMatrix());\n return originalValues;\n }\n else {\n return null;\n }\n },\n\n /**\n * Restores the changed properties of instance\n * @private\n * @param {fabric.Object} [instance] the object to un-transform (gets mutated)\n * @param {Object} [originalValues] the original values of instance, as returned by _realizeGroupTransformOnObject\n */\n _unwindGroupTransformOnObject: function(instance, originalValues) {\n if (originalValues) {\n instance.set(originalValues);\n }\n },\n\n /**\n * @private\n */\n _setSVGObject: function(markup, instance, reviver) {\n //If the object is in a selection group, simulate what would happen to that\n //object when the group is deselected\n var originalProperties = this._realizeGroupTransformOnObject(instance);\n this.callSuper('_setSVGObject', markup, instance, reviver);\n this._unwindGroupTransformOnObject(instance, originalProperties);\n },\n\n setViewportTransform: function (vpt) {\n if (this.renderOnAddRemove && this._activeObject && this._activeObject.isEditing) {\n this._activeObject.clearContextTop();\n }\n fabric.StaticCanvas.prototype.setViewportTransform.call(this, vpt);\n }\n });\n\n // copying static properties manually to work around Opera's bug,\n // where \"prototype\" property is enumerable and overrides existing prototype\n for (var prop in fabric.StaticCanvas) {\n if (prop !== 'prototype') {\n fabric.Canvas[prop] = fabric.StaticCanvas[prop];\n }\n }\n})();\n(function() {\n\n var addListener = fabric.util.addListener,\n removeListener = fabric.util.removeListener,\n RIGHT_CLICK = 3, MIDDLE_CLICK = 2, LEFT_CLICK = 1,\n addEventOptions = { passive: false };\n\n function checkClick(e, value) {\n return e.button && (e.button === value - 1);\n }\n\n fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ {\n\n /**\n * Contains the id of the touch event that owns the fabric transform\n * @type Number\n * @private\n */\n mainTouchId: null,\n\n /**\n * Adds mouse listeners to canvas\n * @private\n */\n _initEventListeners: function () {\n // in case we initialized the class twice. This should not happen normally\n // but in some kind of applications where the canvas element may be changed\n // this is a workaround to having double listeners.\n this.removeListeners();\n this._bindEvents();\n this.addOrRemove(addListener, 'add');\n },\n\n /**\n * return an event prefix pointer or mouse.\n * @private\n */\n _getEventPrefix: function () {\n return this.enablePointerEvents ? 'pointer' : 'mouse';\n },\n\n addOrRemove: function(functor, eventjsFunctor) {\n var canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n functor(fabric.window, 'resize', this._onResize);\n functor(canvasElement, eventTypePrefix + 'down', this._onMouseDown);\n functor(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n functor(canvasElement, eventTypePrefix + 'out', this._onMouseOut);\n functor(canvasElement, eventTypePrefix + 'enter', this._onMouseEnter);\n functor(canvasElement, 'wheel', this._onMouseWheel);\n functor(canvasElement, 'contextmenu', this._onContextMenu);\n functor(canvasElement, 'dblclick', this._onDoubleClick);\n functor(canvasElement, 'dragover', this._onDragOver);\n functor(canvasElement, 'dragenter', this._onDragEnter);\n functor(canvasElement, 'dragleave', this._onDragLeave);\n functor(canvasElement, 'drop', this._onDrop);\n if (!this.enablePointerEvents) {\n functor(canvasElement, 'touchstart', this._onTouchStart, addEventOptions);\n }\n if (typeof eventjs !== 'undefined' && eventjsFunctor in eventjs) {\n eventjs[eventjsFunctor](canvasElement, 'gesture', this._onGesture);\n eventjs[eventjsFunctor](canvasElement, 'drag', this._onDrag);\n eventjs[eventjsFunctor](canvasElement, 'orientation', this._onOrientationChange);\n eventjs[eventjsFunctor](canvasElement, 'shake', this._onShake);\n eventjs[eventjsFunctor](canvasElement, 'longpress', this._onLongPress);\n }\n },\n\n /**\n * Removes all event listeners\n */\n removeListeners: function() {\n this.addOrRemove(removeListener, 'remove');\n // if you dispose on a mouseDown, before mouse up, you need to clean document to...\n var eventTypePrefix = this._getEventPrefix();\n removeListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\n removeListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\n removeListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n removeListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);\n },\n\n /**\n * @private\n */\n _bindEvents: function() {\n if (this.eventsBound) {\n // for any reason we pass here twice we do not want to bind events twice.\n return;\n }\n this._onMouseDown = this._onMouseDown.bind(this);\n this._onTouchStart = this._onTouchStart.bind(this);\n this._onMouseMove = this._onMouseMove.bind(this);\n this._onMouseUp = this._onMouseUp.bind(this);\n this._onTouchEnd = this._onTouchEnd.bind(this);\n this._onResize = this._onResize.bind(this);\n this._onGesture = this._onGesture.bind(this);\n this._onDrag = this._onDrag.bind(this);\n this._onShake = this._onShake.bind(this);\n this._onLongPress = this._onLongPress.bind(this);\n this._onOrientationChange = this._onOrientationChange.bind(this);\n this._onMouseWheel = this._onMouseWheel.bind(this);\n this._onMouseOut = this._onMouseOut.bind(this);\n this._onMouseEnter = this._onMouseEnter.bind(this);\n this._onContextMenu = this._onContextMenu.bind(this);\n this._onDoubleClick = this._onDoubleClick.bind(this);\n this._onDragOver = this._onDragOver.bind(this);\n this._onDragEnter = this._simpleEventHandler.bind(this, 'dragenter');\n this._onDragLeave = this._simpleEventHandler.bind(this, 'dragleave');\n this._onDrop = this._onDrop.bind(this);\n this.eventsBound = true;\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js gesture\n * @param {Event} [self] Inner Event object\n */\n _onGesture: function(e, self) {\n this.__onTransformGesture && this.__onTransformGesture(e, self);\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js drag\n * @param {Event} [self] Inner Event object\n */\n _onDrag: function(e, self) {\n this.__onDrag && this.__onDrag(e, self);\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on wheel event\n */\n _onMouseWheel: function(e) {\n this.__onMouseWheel(e);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseOut: function(e) {\n var target = this._hoveredTarget;\n this.fire('mouse:out', { target: target, e: e });\n this._hoveredTarget = null;\n target && target.fire('mouseout', { e: e });\n\n var _this = this;\n this._hoveredTargets.forEach(function(_target){\n _this.fire('mouse:out', { target: target, e: e });\n _target && target.fire('mouseout', { e: e });\n });\n this._hoveredTargets = [];\n\n if (this._iTextInstances) {\n this._iTextInstances.forEach(function(obj) {\n if (obj.isEditing) {\n obj.hiddenTextarea.focus();\n }\n });\n }\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseenter\n */\n _onMouseEnter: function(e) {\n // This find target and consequent 'mouse:over' is used to\n // clear old instances on hovered target.\n // calling findTarget has the side effect of killing target.__corner.\n // as a short term fix we are not firing this if we are currently transforming.\n // as a long term fix we need to separate the action of finding a target with the\n // side effects we added to it.\n if (!this._currentTransform && !this.findTarget(e)) {\n this.fire('mouse:over', { target: null, e: e });\n this._hoveredTarget = null;\n this._hoveredTargets = [];\n }\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js orientation change\n * @param {Event} [self] Inner Event object\n */\n _onOrientationChange: function(e, self) {\n this.__onOrientationChange && this.__onOrientationChange(e, self);\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n * @param {Event} [self] Inner Event object\n */\n _onShake: function(e, self) {\n this.__onShake && this.__onShake(e, self);\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n * @param {Event} [self] Inner Event object\n */\n _onLongPress: function(e, self) {\n this.__onLongPress && this.__onLongPress(e, self);\n },\n\n /**\n * prevent default to allow drop event to be fired\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n */\n _onDragOver: function(e) {\n e.preventDefault();\n var target = this._simpleEventHandler('dragover', e);\n this._fireEnterLeaveEvents(target, e);\n },\n\n /**\n * `drop:before` is a an event that allow you to schedule logic\n * before the `drop` event. Prefer `drop` event always, but if you need\n * to run some drop-disabling logic on an event, since there is no way\n * to handle event handlers ordering, use `drop:before`\n * @param {Event} e\n */\n _onDrop: function (e) {\n this._simpleEventHandler('drop:before', e);\n return this._simpleEventHandler('drop', e);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onContextMenu: function (e) {\n if (this.stopContextMenu) {\n e.stopPropagation();\n e.preventDefault();\n }\n return false;\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onDoubleClick: function (e) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'dblclick');\n this._resetTransformEventData(e);\n },\n\n /**\n * Return a the id of an event.\n * returns either the pointerId or the identifier or 0 for the mouse event\n * @private\n * @param {Event} evt Event object\n */\n getPointerId: function(evt) {\n var changedTouches = evt.changedTouches;\n\n if (changedTouches) {\n return changedTouches[0] && changedTouches[0].identifier;\n }\n\n if (this.enablePointerEvents) {\n return evt.pointerId;\n }\n\n return -1;\n },\n\n /**\n * Determines if an event has the id of the event that is considered main\n * @private\n * @param {evt} event Event object\n */\n _isMainEvent: function(evt) {\n if (evt.isPrimary === true) {\n return true;\n }\n if (evt.isPrimary === false) {\n return false;\n }\n if (evt.type === 'touchend' && evt.touches.length === 0) {\n return true;\n }\n if (evt.changedTouches) {\n return evt.changedTouches[0].identifier === this.mainTouchId;\n }\n return true;\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onTouchStart: function(e) {\n e.preventDefault();\n if (this.mainTouchId === null) {\n this.mainTouchId = this.getPointerId(e);\n }\n this.__onMouseDown(e);\n this._resetTransformEventData();\n var canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n addListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\n addListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);\n // Unbind mousedown to prevent double triggers from touch devices\n removeListener(canvasElement, eventTypePrefix + 'down', this._onMouseDown);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseDown: function (e) {\n this.__onMouseDown(e);\n this._resetTransformEventData();\n var canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n removeListener(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n addListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\n addListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onTouchEnd: function(e) {\n if (e.touches.length > 0) {\n // if there are still touches stop here\n return;\n }\n this.__onMouseUp(e);\n this._resetTransformEventData();\n this.mainTouchId = null;\n var eventTypePrefix = this._getEventPrefix();\n removeListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\n removeListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);\n var _this = this;\n if (this._willAddMouseDown) {\n clearTimeout(this._willAddMouseDown);\n }\n this._willAddMouseDown = setTimeout(function() {\n // Wait 400ms before rebinding mousedown to prevent double triggers\n // from touch devices\n addListener(_this.upperCanvasEl, eventTypePrefix + 'down', _this._onMouseDown);\n _this._willAddMouseDown = 0;\n }, 400);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n _onMouseUp: function (e) {\n this.__onMouseUp(e);\n this._resetTransformEventData();\n var canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n if (this._isMainEvent(e)) {\n removeListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\n removeListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n addListener(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n }\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n _onMouseMove: function (e) {\n !this.allowTouchScrolling && e.preventDefault && e.preventDefault();\n this.__onMouseMove(e);\n },\n\n /**\n * @private\n */\n _onResize: function () {\n this.calcOffset();\n },\n\n /**\n * Decides whether the canvas should be redrawn in mouseup and mousedown events.\n * @private\n * @param {Object} target\n */\n _shouldRender: function(target) {\n var activeObject = this._activeObject;\n\n if (\n !!activeObject !== !!target ||\n (activeObject && target && (activeObject !== target))\n ) {\n // this covers: switch of target, from target to no target, selection of target\n // multiSelection with key and mouse\n return true;\n }\n else if (activeObject && activeObject.isEditing) {\n // if we mouse up/down over a editing textbox a cursor change,\n // there is no need to re render\n return false;\n }\n return false;\n },\n\n /**\n * Method that defines the actions when mouse is released on canvas.\n * The method resets the currentTransform parameters, store the image corner\n * position in the image object and render the canvas on top.\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n __onMouseUp: function (e) {\n var target, transform = this._currentTransform,\n groupSelector = this._groupSelector, shouldRender = false,\n isClick = (!groupSelector || (groupSelector.left === 0 && groupSelector.top === 0));\n this._cacheTransformEventData(e);\n target = this._target;\n this._handleEvent(e, 'up:before');\n // if right/middle click just fire events and return\n // target undefined will make the _handleEvent search the target\n if (checkClick(e, RIGHT_CLICK)) {\n if (this.fireRightClick) {\n this._handleEvent(e, 'up', RIGHT_CLICK, isClick);\n }\n return;\n }\n\n if (checkClick(e, MIDDLE_CLICK)) {\n if (this.fireMiddleClick) {\n this._handleEvent(e, 'up', MIDDLE_CLICK, isClick);\n }\n this._resetTransformEventData();\n return;\n }\n\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\n this._onMouseUpInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n if (transform) {\n this._finalizeCurrentTransform(e);\n shouldRender = transform.actionPerformed;\n }\n if (!isClick) {\n var targetWasActive = target === this._activeObject;\n this._maybeGroupObjects(e);\n if (!shouldRender) {\n shouldRender = (\n this._shouldRender(target) ||\n (!targetWasActive && target === this._activeObject)\n );\n }\n }\n var corner, pointer;\n if (target) {\n corner = target._findTargetCorner(\n this.getPointer(e, true),\n fabric.util.isTouchEvent(e)\n );\n if (target.selectable && target !== this._activeObject && target.activeOn === 'up') {\n this.setActiveObject(target, e);\n shouldRender = true;\n }\n else {\n var control = target.controls[corner],\n mouseUpHandler = control && control.getMouseUpHandler(e, target, control);\n if (mouseUpHandler) {\n pointer = this.getPointer(e);\n mouseUpHandler(e, transform, pointer.x, pointer.y);\n }\n }\n target.isMoving = false;\n }\n // if we are ending up a transform on a different control or a new object\n // fire the original mouse up from the corner that started the transform\n if (transform && (transform.target !== target || transform.corner !== corner)) {\n var originalControl = transform.target && transform.target.controls[transform.corner],\n originalMouseUpHandler = originalControl && originalControl.getMouseUpHandler(e, target, control);\n pointer = pointer || this.getPointer(e);\n originalMouseUpHandler && originalMouseUpHandler(e, transform, pointer.x, pointer.y);\n }\n this._setCursorFromEvent(e, target);\n this._handleEvent(e, 'up', LEFT_CLICK, isClick);\n this._groupSelector = null;\n this._currentTransform = null;\n // reset the target information about which corner is selected\n target && (target.__corner = 0);\n if (shouldRender) {\n this.requestRenderAll();\n }\n else if (!isClick) {\n this.renderTop();\n }\n },\n\n /**\n * @private\n * Handle event firing for target and subtargets\n * @param {Event} e event from mouse\n * @param {String} eventType event to fire (up, down or move)\n * @return {Fabric.Object} target return the the target found, for internal reasons.\n */\n _simpleEventHandler: function(eventType, e) {\n var target = this.findTarget(e),\n targets = this.targets,\n options = {\n e: e,\n target: target,\n subTargets: targets,\n };\n this.fire(eventType, options);\n target && target.fire(eventType, options);\n if (!targets) {\n return target;\n }\n for (var i = 0; i < targets.length; i++) {\n targets[i].fire(eventType, options);\n }\n return target;\n },\n\n /**\n * @private\n * Handle event firing for target and subtargets\n * @param {Event} e event from mouse\n * @param {String} eventType event to fire (up, down or move)\n * @param {fabric.Object} targetObj receiving event\n * @param {Number} [button] button used in the event 1 = left, 2 = middle, 3 = right\n * @param {Boolean} isClick for left button only, indicates that the mouse up happened without move.\n */\n _handleEvent: function(e, eventType, button, isClick) {\n var target = this._target,\n targets = this.targets || [],\n options = {\n e: e,\n target: target,\n subTargets: targets,\n button: button || LEFT_CLICK,\n isClick: isClick || false,\n pointer: this._pointer,\n absolutePointer: this._absolutePointer,\n transform: this._currentTransform\n };\n if (eventType === 'up') {\n options.currentTarget = this.findTarget(e);\n options.currentSubTargets = this.targets;\n }\n this.fire('mouse:' + eventType, options);\n target && target.fire('mouse' + eventType, options);\n for (var i = 0; i < targets.length; i++) {\n targets[i].fire('mouse' + eventType, options);\n }\n },\n\n /**\n * @private\n * @param {Event} e send the mouse event that generate the finalize down, so it can be used in the event\n */\n _finalizeCurrentTransform: function(e) {\n\n var transform = this._currentTransform,\n target = transform.target,\n options = {\n e: e,\n target: target,\n transform: transform,\n action: transform.action,\n };\n\n if (target._scaling) {\n target._scaling = false;\n }\n\n target.setCoords();\n\n if (transform.actionPerformed || (this.stateful && target.hasStateChanged())) {\n this._fire('modified', options);\n }\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseDownInDrawingMode: function(e) {\n this._isCurrentlyDrawing = true;\n if (this.getActiveObject()) {\n this.discardActiveObject(e).requestRenderAll();\n }\n var pointer = this.getPointer(e);\n this.freeDrawingBrush.onMouseDown(pointer, { e: e, pointer: pointer });\n this._handleEvent(e, 'down');\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n _onMouseMoveInDrawingMode: function(e) {\n if (this._isCurrentlyDrawing) {\n var pointer = this.getPointer(e);\n this.freeDrawingBrush.onMouseMove(pointer, { e: e, pointer: pointer });\n }\n this.setCursor(this.freeDrawingCursor);\n this._handleEvent(e, 'move');\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n _onMouseUpInDrawingMode: function(e) {\n var pointer = this.getPointer(e);\n this._isCurrentlyDrawing = this.freeDrawingBrush.onMouseUp({ e: e, pointer: pointer });\n this._handleEvent(e, 'up');\n },\n\n /**\n * Method that defines the actions when mouse is clicked on canvas.\n * The method inits the currentTransform parameters and renders all the\n * canvas so the current image can be placed on the top canvas and the rest\n * in on the container one.\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n __onMouseDown: function (e) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'down:before');\n var target = this._target;\n // if right click just fire events\n if (checkClick(e, RIGHT_CLICK)) {\n if (this.fireRightClick) {\n this._handleEvent(e, 'down', RIGHT_CLICK);\n }\n return;\n }\n\n if (checkClick(e, MIDDLE_CLICK)) {\n if (this.fireMiddleClick) {\n this._handleEvent(e, 'down', MIDDLE_CLICK);\n }\n return;\n }\n\n if (this.isDrawingMode) {\n this._onMouseDownInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n\n // ignore if some object is being transformed at this moment\n if (this._currentTransform) {\n return;\n }\n\n var pointer = this._pointer;\n // save pointer for check in __onMouseUp event\n this._previousPointer = pointer;\n var shouldRender = this._shouldRender(target),\n shouldGroup = this._shouldGroup(e, target);\n if (this._shouldClearSelection(e, target)) {\n this.discardActiveObject(e);\n }\n else if (shouldGroup) {\n this._handleGrouping(e, target);\n target = this._activeObject;\n }\n\n if (this.selection && (!target ||\n (!target.selectable && !target.isEditing && target !== this._activeObject))) {\n this._groupSelector = {\n ex: this._absolutePointer.x,\n ey: this._absolutePointer.y,\n top: 0,\n left: 0\n };\n }\n\n if (target) {\n var alreadySelected = target === this._activeObject;\n if (target.selectable && target.activeOn === 'down') {\n this.setActiveObject(target, e);\n }\n var corner = target._findTargetCorner(\n this.getPointer(e, true),\n fabric.util.isTouchEvent(e)\n );\n target.__corner = corner;\n if (target === this._activeObject && (corner || !shouldGroup)) {\n this._setupCurrentTransform(e, target, alreadySelected);\n var control = target.controls[corner],\n pointer = this.getPointer(e),\n mouseDownHandler = control && control.getMouseDownHandler(e, target, control);\n if (mouseDownHandler) {\n mouseDownHandler(e, this._currentTransform, pointer.x, pointer.y);\n }\n }\n }\n this._handleEvent(e, 'down');\n // we must renderAll so that we update the visuals\n (shouldRender || shouldGroup) && this.requestRenderAll();\n },\n\n /**\n * reset cache form common information needed during event processing\n * @private\n */\n _resetTransformEventData: function() {\n this._target = null;\n this._pointer = null;\n this._absolutePointer = null;\n },\n\n /**\n * Cache common information needed during event processing\n * @private\n * @param {Event} e Event object fired on event\n */\n _cacheTransformEventData: function(e) {\n // reset in order to avoid stale caching\n this._resetTransformEventData();\n this._pointer = this.getPointer(e, true);\n this._absolutePointer = this.restorePointerVpt(this._pointer);\n this._target = this._currentTransform ? this._currentTransform.target : this.findTarget(e) || null;\n },\n\n /**\n * @private\n */\n _beforeTransform: function(e) {\n var t = this._currentTransform;\n this.stateful && t.target.saveState();\n this.fire('before:transform', {\n e: e,\n transform: t,\n });\n },\n\n /**\n * Method that defines the actions when mouse is hovering the canvas.\n * The currentTransform parameter will define whether the user is rotating/scaling/translating\n * an image or neither of them (only hovering). A group selection is also possible and would cancel\n * all any other type of action.\n * In case of an image transformation only the top canvas will be rendered.\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n __onMouseMove: function (e) {\n this._handleEvent(e, 'move:before');\n this._cacheTransformEventData(e);\n var target, pointer;\n\n if (this.isDrawingMode) {\n this._onMouseMoveInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n\n var groupSelector = this._groupSelector;\n\n // We initially clicked in an empty area, so we draw a box for multiple selection\n if (groupSelector) {\n pointer = this._absolutePointer;\n\n groupSelector.left = pointer.x - groupSelector.ex;\n groupSelector.top = pointer.y - groupSelector.ey;\n\n this.renderTop();\n }\n else if (!this._currentTransform) {\n target = this.findTarget(e) || null;\n this._setCursorFromEvent(e, target);\n this._fireOverOutEvents(target, e);\n }\n else {\n this._transformObject(e);\n }\n this._handleEvent(e, 'move');\n this._resetTransformEventData();\n },\n\n /**\n * Manage the mouseout, mouseover events for the fabric object on the canvas\n * @param {Fabric.Object} target the target where the target from the mousemove event\n * @param {Event} e Event object fired on mousemove\n * @private\n */\n _fireOverOutEvents: function(target, e) {\n var _hoveredTarget = this._hoveredTarget,\n _hoveredTargets = this._hoveredTargets, targets = this.targets,\n length = Math.max(_hoveredTargets.length, targets.length);\n\n this.fireSyntheticInOutEvents(target, e, {\n oldTarget: _hoveredTarget,\n evtOut: 'mouseout',\n canvasEvtOut: 'mouse:out',\n evtIn: 'mouseover',\n canvasEvtIn: 'mouse:over',\n });\n for (var i = 0; i < length; i++){\n this.fireSyntheticInOutEvents(targets[i], e, {\n oldTarget: _hoveredTargets[i],\n evtOut: 'mouseout',\n evtIn: 'mouseover',\n });\n }\n this._hoveredTarget = target;\n this._hoveredTargets = this.targets.concat();\n },\n\n /**\n * Manage the dragEnter, dragLeave events for the fabric objects on the canvas\n * @param {Fabric.Object} target the target where the target from the onDrag event\n * @param {Event} e Event object fired on ondrag\n * @private\n */\n _fireEnterLeaveEvents: function(target, e) {\n var _draggedoverTarget = this._draggedoverTarget,\n _hoveredTargets = this._hoveredTargets, targets = this.targets,\n length = Math.max(_hoveredTargets.length, targets.length);\n\n this.fireSyntheticInOutEvents(target, e, {\n oldTarget: _draggedoverTarget,\n evtOut: 'dragleave',\n evtIn: 'dragenter',\n });\n for (var i = 0; i < length; i++) {\n this.fireSyntheticInOutEvents(targets[i], e, {\n oldTarget: _hoveredTargets[i],\n evtOut: 'dragleave',\n evtIn: 'dragenter',\n });\n }\n this._draggedoverTarget = target;\n },\n\n /**\n * Manage the synthetic in/out events for the fabric objects on the canvas\n * @param {Fabric.Object} target the target where the target from the supported events\n * @param {Event} e Event object fired\n * @param {Object} config configuration for the function to work\n * @param {String} config.targetName property on the canvas where the old target is stored\n * @param {String} [config.canvasEvtOut] name of the event to fire at canvas level for out\n * @param {String} config.evtOut name of the event to fire for out\n * @param {String} [config.canvasEvtIn] name of the event to fire at canvas level for in\n * @param {String} config.evtIn name of the event to fire for in\n * @private\n */\n fireSyntheticInOutEvents: function(target, e, config) {\n var inOpt, outOpt, oldTarget = config.oldTarget, outFires, inFires,\n targetChanged = oldTarget !== target, canvasEvtIn = config.canvasEvtIn, canvasEvtOut = config.canvasEvtOut;\n if (targetChanged) {\n inOpt = { e: e, target: target, previousTarget: oldTarget };\n outOpt = { e: e, target: oldTarget, nextTarget: target };\n }\n inFires = target && targetChanged;\n outFires = oldTarget && targetChanged;\n if (outFires) {\n canvasEvtOut && this.fire(canvasEvtOut, outOpt);\n oldTarget.fire(config.evtOut, outOpt);\n }\n if (inFires) {\n canvasEvtIn && this.fire(canvasEvtIn, inOpt);\n target.fire(config.evtIn, inOpt);\n }\n },\n\n /**\n * Method that defines actions when an Event Mouse Wheel\n * @param {Event} e Event object fired on mouseup\n */\n __onMouseWheel: function(e) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'wheel');\n this._resetTransformEventData();\n },\n\n /**\n * @private\n * @param {Event} e Event fired on mousemove\n */\n _transformObject: function(e) {\n var pointer = this.getPointer(e),\n transform = this._currentTransform;\n\n transform.reset = false;\n transform.shiftKey = e.shiftKey;\n transform.altKey = e[this.centeredKey];\n\n this._performTransformAction(e, transform, pointer);\n transform.actionPerformed && this.requestRenderAll();\n },\n\n /**\n * @private\n */\n _performTransformAction: function(e, transform, pointer) {\n var x = pointer.x,\n y = pointer.y,\n action = transform.action,\n actionPerformed = false,\n actionHandler = transform.actionHandler;\n // this object could be created from the function in the control handlers\n\n\n if (actionHandler) {\n actionPerformed = actionHandler(e, transform, x, y);\n }\n if (action === 'drag' && actionPerformed) {\n transform.target.isMoving = true;\n this.setCursor(transform.target.moveCursor || this.moveCursor);\n }\n transform.actionPerformed = transform.actionPerformed || actionPerformed;\n },\n\n /**\n * @private\n */\n _fire: fabric.controlsUtils.fireEvent,\n\n /**\n * Sets the cursor depending on where the canvas is being hovered.\n * Note: very buggy in Opera\n * @param {Event} e Event object\n * @param {Object} target Object that the mouse is hovering, if so.\n */\n _setCursorFromEvent: function (e, target) {\n if (!target) {\n this.setCursor(this.defaultCursor);\n return false;\n }\n var hoverCursor = target.hoverCursor || this.hoverCursor,\n activeSelection = this._activeObject && this._activeObject.type === 'activeSelection' ?\n this._activeObject : null,\n // only show proper corner when group selection is not active\n corner = (!activeSelection || !activeSelection.contains(target))\n // here we call findTargetCorner always with undefined for the touch parameter.\n // we assume that if you are using a cursor you do not need to interact with\n // the bigger touch area.\n && target._findTargetCorner(this.getPointer(e, true));\n\n if (!corner) {\n if (target.subTargetCheck){\n // hoverCursor should come from top-most subTarget,\n // so we walk the array backwards\n this.targets.concat().reverse().map(function(_target){\n hoverCursor = _target.hoverCursor || hoverCursor;\n });\n }\n this.setCursor(hoverCursor);\n }\n else {\n this.setCursor(this.getCornerCursor(corner, target, e));\n }\n },\n\n /**\n * @private\n */\n getCornerCursor: function(corner, target, e) {\n var control = target.controls[corner];\n return control.cursorStyleHandler(e, control, target);\n }\n });\n})();\n(function() {\n\n var min = Math.min,\n max = Math.max;\n\n fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ {\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target\n * @return {Boolean}\n */\n _shouldGroup: function(e, target) {\n var activeObject = this._activeObject;\n return activeObject && this._isSelectionKeyPressed(e) && target && target.selectable && this.selection &&\n (activeObject !== target || activeObject.type === 'activeSelection') && !target.onSelect({ e: e });\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target\n */\n _handleGrouping: function (e, target) {\n var activeObject = this._activeObject;\n // avoid multi select when shift click on a corner\n if (activeObject.__corner) {\n return;\n }\n if (target === activeObject) {\n // if it's a group, find target again, using activeGroup objects\n target = this.findTarget(e, true);\n // if even object is not found or we are on activeObjectCorner, bail out\n if (!target || !target.selectable) {\n return;\n }\n }\n if (activeObject && activeObject.type === 'activeSelection') {\n this._updateActiveSelection(target, e);\n }\n else {\n this._createActiveSelection(target, e);\n }\n },\n\n /**\n * @private\n */\n _updateActiveSelection: function(target, e) {\n var activeSelection = this._activeObject,\n currentActiveObjects = activeSelection._objects.slice(0);\n if (activeSelection.contains(target)) {\n activeSelection.removeWithUpdate(target);\n this._hoveredTarget = target;\n this._hoveredTargets = this.targets.concat();\n if (activeSelection.size() === 1) {\n // activate last remaining object\n this._setActiveObject(activeSelection.item(0), e);\n }\n }\n else {\n activeSelection.addWithUpdate(target);\n this._hoveredTarget = activeSelection;\n this._hoveredTargets = this.targets.concat();\n }\n this._fireSelectionEvents(currentActiveObjects, e);\n },\n\n /**\n * @private\n */\n _createActiveSelection: function(target, e) {\n var currentActives = this.getActiveObjects(), group = this._createGroup(target);\n this._hoveredTarget = group;\n // ISSUE 4115: should we consider subTargets here?\n // this._hoveredTargets = [];\n // this._hoveredTargets = this.targets.concat();\n this._setActiveObject(group, e);\n this._fireSelectionEvents(currentActives, e);\n },\n\n /**\n * @private\n * @param {Object} target\n */\n _createGroup: function(target) {\n var objects = this._objects,\n isActiveLower = objects.indexOf(this._activeObject) < objects.indexOf(target),\n groupObjects = isActiveLower\n ? [this._activeObject, target]\n : [target, this._activeObject];\n this._activeObject.isEditing && this._activeObject.exitEditing();\n return new fabric.ActiveSelection(groupObjects, {\n canvas: this\n });\n },\n\n /**\n * @private\n * @param {Event} e mouse event\n */\n _groupSelectedObjects: function (e) {\n\n var group = this._collectObjects(e),\n aGroup;\n\n // do not create group for 1 element only\n if (group.length === 1) {\n this.setActiveObject(group[0], e);\n }\n else if (group.length > 1) {\n aGroup = new fabric.ActiveSelection(group.reverse(), {\n canvas: this\n });\n this.setActiveObject(aGroup, e);\n }\n },\n\n /**\n * @private\n */\n _collectObjects: function(e) {\n var group = [],\n currentObject,\n x1 = this._groupSelector.ex,\n y1 = this._groupSelector.ey,\n x2 = x1 + this._groupSelector.left,\n y2 = y1 + this._groupSelector.top,\n selectionX1Y1 = new fabric.Point(min(x1, x2), min(y1, y2)),\n selectionX2Y2 = new fabric.Point(max(x1, x2), max(y1, y2)),\n allowIntersect = !this.selectionFullyContained,\n isClick = x1 === x2 && y1 === y2;\n // we iterate reverse order to collect top first in case of click.\n for (var i = this._objects.length; i--; ) {\n currentObject = this._objects[i];\n\n if (!currentObject || !currentObject.selectable || !currentObject.visible) {\n continue;\n }\n\n if ((allowIntersect && currentObject.intersectsWithRect(selectionX1Y1, selectionX2Y2, true)) ||\n currentObject.isContainedWithinRect(selectionX1Y1, selectionX2Y2, true) ||\n (allowIntersect && currentObject.containsPoint(selectionX1Y1, null, true)) ||\n (allowIntersect && currentObject.containsPoint(selectionX2Y2, null, true))\n ) {\n group.push(currentObject);\n // only add one object if it's a click\n if (isClick) {\n break;\n }\n }\n }\n\n if (group.length > 1) {\n group = group.filter(function(object) {\n return !object.onSelect({ e: e });\n });\n }\n\n return group;\n },\n\n /**\n * @private\n */\n _maybeGroupObjects: function(e) {\n if (this.selection && this._groupSelector) {\n this._groupSelectedObjects(e);\n }\n this.setCursor(this.defaultCursor);\n // clear selection and current transformation\n this._groupSelector = null;\n }\n });\n\n})();\n(function () {\n fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.StaticCanvas.prototype */ {\n\n /**\n * Exports canvas element to a dataurl image. Note that when multiplier is used, cropping is scaled appropriately\n * @param {Object} [options] Options object\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by, to have consistent\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 2.0.0\n * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n * @see {@link http://jsfiddle.net/fabricjs/NfZVb/|jsFiddle demo}\n * @example Generate jpeg dataURL with lower quality\n * var dataURL = canvas.toDataURL({\n * format: 'jpeg',\n * quality: 0.8\n * });\n * @example Generate cropped png dataURL (clipping of canvas)\n * var dataURL = canvas.toDataURL({\n * format: 'png',\n * left: 100,\n * top: 100,\n * width: 200,\n * height: 200\n * });\n * @example Generate double scaled png dataURL\n * var dataURL = canvas.toDataURL({\n * format: 'png',\n * multiplier: 2\n * });\n */\n toDataURL: function (options) {\n options || (options = { });\n\n var format = options.format || 'png',\n quality = options.quality || 1,\n multiplier = (options.multiplier || 1) * (options.enableRetinaScaling ? this.getRetinaScaling() : 1),\n canvasEl = this.toCanvasElement(multiplier, options);\n return fabric.util.toDataURL(canvasEl, format, quality);\n },\n\n /**\n * Create a new HTMLCanvas element painted with the current canvas content.\n * No need to resize the actual one or repaint it.\n * Will transfer object ownership to a new canvas, paint it, and set everything back.\n * This is an intermediary step used to get to a dataUrl but also it is useful to\n * create quick image copies of a canvas without passing for the dataUrl string\n * @param {Number} [multiplier] a zoom factor.\n * @param {Object} [cropping] Cropping informations\n * @param {Number} [cropping.left] Cropping left offset.\n * @param {Number} [cropping.top] Cropping top offset.\n * @param {Number} [cropping.width] Cropping width.\n * @param {Number} [cropping.height] Cropping height.\n */\n toCanvasElement: function(multiplier, cropping) {\n multiplier = multiplier || 1;\n cropping = cropping || { };\n var scaledWidth = (cropping.width || this.width) * multiplier,\n scaledHeight = (cropping.height || this.height) * multiplier,\n zoom = this.getZoom(),\n originalWidth = this.width,\n originalHeight = this.height,\n newZoom = zoom * multiplier,\n vp = this.viewportTransform,\n translateX = (vp[4] - (cropping.left || 0)) * multiplier,\n translateY = (vp[5] - (cropping.top || 0)) * multiplier,\n originalInteractive = this.interactive,\n newVp = [newZoom, 0, 0, newZoom, translateX, translateY],\n originalRetina = this.enableRetinaScaling,\n canvasEl = fabric.util.createCanvasElement(),\n originalContextTop = this.contextTop;\n canvasEl.width = scaledWidth;\n canvasEl.height = scaledHeight;\n this.contextTop = null;\n this.enableRetinaScaling = false;\n this.interactive = false;\n this.viewportTransform = newVp;\n this.width = scaledWidth;\n this.height = scaledHeight;\n this.calcViewportBoundaries();\n this.renderCanvas(canvasEl.getContext('2d'), this._objects);\n this.viewportTransform = vp;\n this.width = originalWidth;\n this.height = originalHeight;\n this.calcViewportBoundaries();\n this.interactive = originalInteractive;\n this.enableRetinaScaling = originalRetina;\n this.contextTop = originalContextTop;\n return canvasEl;\n },\n });\n\n})();\nfabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.StaticCanvas.prototype */ {\n /**\n * Populates canvas with data from the specified JSON.\n * JSON format must conform to the one of {@link fabric.Canvas#toJSON}\n * @param {String|Object} json JSON string or object\n * @param {Function} callback Callback, invoked when json is parsed\n * and corresponding objects (e.g: {@link fabric.Image})\n * are initialized\n * @param {Function} [reviver] Method for further parsing of JSON elements, called after each fabric object created.\n * @return {fabric.Canvas} instance\n * @chainable\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#deserialization}\n * @see {@link http://jsfiddle.net/fabricjs/fmgXt/|jsFiddle demo}\n * @example loadFromJSON\n * canvas.loadFromJSON(json, canvas.renderAll.bind(canvas));\n * @example loadFromJSON with reviver\n * canvas.loadFromJSON(json, canvas.renderAll.bind(canvas), function(o, object) {\n * // `o` = json object\n * // `object` = fabric.Object instance\n * // ... do some stuff ...\n * });\n */\n loadFromJSON: function (json, callback, reviver) {\n if (!json) {\n return;\n }\n\n // serialize if it wasn't already\n var serialized = (typeof json === 'string')\n ? JSON.parse(json)\n : fabric.util.object.clone(json);\n\n var _this = this,\n clipPath = serialized.clipPath,\n renderOnAddRemove = this.renderOnAddRemove;\n\n this.renderOnAddRemove = false;\n\n delete serialized.clipPath;\n\n this._enlivenObjects(serialized.objects, function (enlivenedObjects) {\n _this.clear();\n _this._setBgOverlay(serialized, function () {\n if (clipPath) {\n _this._enlivenObjects([clipPath], function (enlivenedCanvasClip) {\n _this.clipPath = enlivenedCanvasClip[0];\n _this.__setupCanvas.call(_this, serialized, enlivenedObjects, renderOnAddRemove, callback);\n });\n }\n else {\n _this.__setupCanvas.call(_this, serialized, enlivenedObjects, renderOnAddRemove, callback);\n }\n });\n }, reviver);\n return this;\n },\n\n /**\n * @private\n * @param {Object} serialized Object with background and overlay information\n * @param {Array} restored canvas objects\n * @param {Function} cached renderOnAddRemove callback\n * @param {Function} callback Invoked after all background and overlay images/patterns loaded\n */\n __setupCanvas: function(serialized, enlivenedObjects, renderOnAddRemove, callback) {\n var _this = this;\n enlivenedObjects.forEach(function(obj, index) {\n // we splice the array just in case some custom classes restored from JSON\n // will add more object to canvas at canvas init.\n _this.insertAt(obj, index);\n });\n this.renderOnAddRemove = renderOnAddRemove;\n // remove parts i cannot set as options\n delete serialized.objects;\n delete serialized.backgroundImage;\n delete serialized.overlayImage;\n delete serialized.background;\n delete serialized.overlay;\n // this._initOptions does too many things to just\n // call it. Normally loading an Object from JSON\n // create the Object instance. Here the Canvas is\n // already an instance and we are just loading things over it\n this._setOptions(serialized);\n this.renderAll();\n callback && callback();\n },\n\n /**\n * @private\n * @param {Object} serialized Object with background and overlay information\n * @param {Function} callback Invoked after all background and overlay images/patterns loaded\n */\n _setBgOverlay: function(serialized, callback) {\n var loaded = {\n backgroundColor: false,\n overlayColor: false,\n backgroundImage: false,\n overlayImage: false\n };\n\n if (!serialized.backgroundImage && !serialized.overlayImage && !serialized.background && !serialized.overlay) {\n callback && callback();\n return;\n }\n\n var cbIfLoaded = function () {\n if (loaded.backgroundImage && loaded.overlayImage && loaded.backgroundColor && loaded.overlayColor) {\n callback && callback();\n }\n };\n\n this.__setBgOverlay('backgroundImage', serialized.backgroundImage, loaded, cbIfLoaded);\n this.__setBgOverlay('overlayImage', serialized.overlayImage, loaded, cbIfLoaded);\n this.__setBgOverlay('backgroundColor', serialized.background, loaded, cbIfLoaded);\n this.__setBgOverlay('overlayColor', serialized.overlay, loaded, cbIfLoaded);\n },\n\n /**\n * @private\n * @param {String} property Property to set (backgroundImage, overlayImage, backgroundColor, overlayColor)\n * @param {(Object|String)} value Value to set\n * @param {Object} loaded Set loaded property to true if property is set\n * @param {Object} callback Callback function to invoke after property is set\n */\n __setBgOverlay: function(property, value, loaded, callback) {\n var _this = this;\n\n if (!value) {\n loaded[property] = true;\n callback && callback();\n return;\n }\n\n if (property === 'backgroundImage' || property === 'overlayImage') {\n fabric.util.enlivenObjects([value], function(enlivedObject){\n _this[property] = enlivedObject[0];\n loaded[property] = true;\n callback && callback();\n });\n }\n else {\n this['set' + fabric.util.string.capitalize(property, true)](value, function() {\n loaded[property] = true;\n callback && callback();\n });\n }\n },\n\n /**\n * @private\n * @param {Array} objects\n * @param {Function} callback\n * @param {Function} [reviver]\n */\n _enlivenObjects: function (objects, callback, reviver) {\n if (!objects || objects.length === 0) {\n callback && callback([]);\n return;\n }\n\n fabric.util.enlivenObjects(objects, function(enlivenedObjects) {\n callback && callback(enlivenedObjects);\n }, null, reviver);\n },\n\n /**\n * @private\n * @param {String} format\n * @param {Function} callback\n */\n _toDataURL: function (format, callback) {\n this.clone(function (clone) {\n callback(clone.toDataURL(format));\n });\n },\n\n /**\n * @private\n * @param {String} format\n * @param {Number} multiplier\n * @param {Function} callback\n */\n _toDataURLWithMultiplier: function (format, multiplier, callback) {\n this.clone(function (clone) {\n callback(clone.toDataURLWithMultiplier(format, multiplier));\n });\n },\n\n /**\n * Clones canvas instance\n * @param {Object} [callback] Receives cloned instance as a first argument\n * @param {Array} [properties] Array of properties to include in the cloned canvas and children\n */\n clone: function (callback, properties) {\n var data = JSON.stringify(this.toJSON(properties));\n this.cloneWithoutData(function(clone) {\n clone.loadFromJSON(data, function() {\n callback && callback(clone);\n });\n });\n },\n\n /**\n * Clones canvas instance without cloning existing data.\n * This essentially copies canvas dimensions, clipping properties, etc.\n * but leaves data empty (so that you can populate it with your own)\n * @param {Object} [callback] Receives cloned instance as a first argument\n */\n cloneWithoutData: function(callback) {\n var el = fabric.util.createCanvasElement();\n\n el.width = this.width;\n el.height = this.height;\n\n var clone = new fabric.Canvas(el);\n if (this.backgroundImage) {\n clone.setBackgroundImage(this.backgroundImage.src, function() {\n clone.renderAll();\n callback && callback(clone);\n });\n clone.backgroundImageOpacity = this.backgroundImageOpacity;\n clone.backgroundImageStretch = this.backgroundImageStretch;\n }\n else {\n callback && callback(clone);\n }\n }\n});\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n clone = fabric.util.object.clone,\n toFixed = fabric.util.toFixed,\n capitalize = fabric.util.string.capitalize,\n degreesToRadians = fabric.util.degreesToRadians,\n objectCaching = !fabric.isLikelyNode,\n ALIASING_LIMIT = 2;\n\n if (fabric.Object) {\n return;\n }\n\n /**\n * Root object class from which all 2d shape classes inherit from\n * @class fabric.Object\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#objects}\n * @see {@link fabric.Object#initialize} for constructor definition\n *\n * @fires added\n * @fires removed\n *\n * @fires selected\n * @fires deselected\n * @fires modified\n * @fires modified\n * @fires moved\n * @fires scaled\n * @fires rotated\n * @fires skewed\n *\n * @fires rotating\n * @fires scaling\n * @fires moving\n * @fires skewing\n *\n * @fires mousedown\n * @fires mouseup\n * @fires mouseover\n * @fires mouseout\n * @fires mousewheel\n * @fires mousedblclick\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drop\n */\n fabric.Object = fabric.util.createClass(fabric.CommonMethods, /** @lends fabric.Object.prototype */ {\n\n /**\n * Type of an object (rect, circle, path, etc.).\n * Note that this property is meant to be read-only and not meant to be modified.\n * If you modify, certain parts of Fabric (such as JSON loading) won't work correctly.\n * @type String\n * @default\n */\n type: 'object',\n\n /**\n * Horizontal origin of transformation of an object (one of \"left\", \"right\", \"center\")\n * See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n * @type String\n * @default\n */\n originX: 'left',\n\n /**\n * Vertical origin of transformation of an object (one of \"top\", \"bottom\", \"center\")\n * See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n * @type String\n * @default\n */\n originY: 'top',\n\n /**\n * Top position of an object. Note that by default it's relative to object top. You can change this by setting originY={top/center/bottom}\n * @type Number\n * @default\n */\n top: 0,\n\n /**\n * Left position of an object. Note that by default it's relative to object left. You can change this by setting originX={left/center/right}\n * @type Number\n * @default\n */\n left: 0,\n\n /**\n * Object width\n * @type Number\n * @default\n */\n width: 0,\n\n /**\n * Object height\n * @type Number\n * @default\n */\n height: 0,\n\n /**\n * Object scale factor (horizontal)\n * @type Number\n * @default\n */\n scaleX: 1,\n\n /**\n * Object scale factor (vertical)\n * @type Number\n * @default\n */\n scaleY: 1,\n\n /**\n * When true, an object is rendered as flipped horizontally\n * @type Boolean\n * @default\n */\n flipX: false,\n\n /**\n * When true, an object is rendered as flipped vertically\n * @type Boolean\n * @default\n */\n flipY: false,\n\n /**\n * Opacity of an object\n * @type Number\n * @default\n */\n opacity: 1,\n\n /**\n * Angle of rotation of an object (in degrees)\n * @type Number\n * @default\n */\n angle: 0,\n\n /**\n * Angle of skew on x axes of an object (in degrees)\n * @type Number\n * @default\n */\n skewX: 0,\n\n /**\n * Angle of skew on y axes of an object (in degrees)\n * @type Number\n * @default\n */\n skewY: 0,\n\n /**\n * Size of object's controlling corners (in pixels)\n * @type Number\n * @default\n */\n cornerSize: 13,\n\n /**\n * Size of object's controlling corners when touch interaction is detected\n * @type Number\n * @default\n */\n touchCornerSize: 24,\n\n /**\n * When true, object's controlling corners are rendered as transparent inside (i.e. stroke instead of fill)\n * @type Boolean\n * @default\n */\n transparentCorners: true,\n\n /**\n * Default cursor value used when hovering over this object on canvas\n * @type String\n * @default\n */\n hoverCursor: null,\n\n /**\n * Default cursor value used when moving this object on canvas\n * @type String\n * @default\n */\n moveCursor: null,\n\n /**\n * Padding between object and its controlling borders (in pixels)\n * @type Number\n * @default\n */\n padding: 0,\n\n /**\n * Color of controlling borders of an object (when it's active)\n * @type String\n * @default\n */\n borderColor: 'rgb(178,204,255)',\n\n /**\n * Array specifying dash pattern of an object's borders (hasBorder must be true)\n * @since 1.6.2\n * @type Array\n */\n borderDashArray: null,\n\n /**\n * Color of controlling corners of an object (when it's active)\n * @type String\n * @default\n */\n cornerColor: 'rgb(178,204,255)',\n\n /**\n * Color of controlling corners of an object (when it's active and transparentCorners false)\n * @since 1.6.2\n * @type String\n * @default\n */\n cornerStrokeColor: null,\n\n /**\n * Specify style of control, 'rect' or 'circle'\n * @since 1.6.2\n * @type String\n */\n cornerStyle: 'rect',\n\n /**\n * Array specifying dash pattern of an object's control (hasBorder must be true)\n * @since 1.6.2\n * @type Array\n */\n cornerDashArray: null,\n\n /**\n * When true, this object will use center point as the origin of transformation\n * when being scaled via the controls.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredScaling: false,\n\n /**\n * When true, this object will use center point as the origin of transformation\n * when being rotated via the controls.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredRotation: true,\n\n /**\n * Color of object's fill\n * takes css colors https://www.w3.org/TR/css-color-3/\n * @type String\n * @default\n */\n fill: 'rgb(0,0,0)',\n\n /**\n * Fill rule used to fill an object\n * accepted values are nonzero, evenodd\n * Backwards incompatibility note: This property was used for setting globalCompositeOperation until v1.4.12 (use `fabric.Object#globalCompositeOperation` instead)\n * @type String\n * @default\n */\n fillRule: 'nonzero',\n\n /**\n * Composite rule used for canvas globalCompositeOperation\n * @type String\n * @default\n */\n globalCompositeOperation: 'source-over',\n\n /**\n * Background color of an object.\n * takes css colors https://www.w3.org/TR/css-color-3/\n * @type String\n * @default\n */\n backgroundColor: '',\n\n /**\n * Selection Background color of an object. colored layer behind the object when it is active.\n * does not mix good with globalCompositeOperation methods.\n * @type String\n * @default\n */\n selectionBackgroundColor: '',\n\n /**\n * When defined, an object is rendered via stroke and this property specifies its color\n * takes css colors https://www.w3.org/TR/css-color-3/\n * @type String\n * @default\n */\n stroke: null,\n\n /**\n * Width of a stroke used to render this object\n * @type Number\n * @default\n */\n strokeWidth: 1,\n\n /**\n * Array specifying dash pattern of an object's stroke (stroke must be defined)\n * @type Array\n */\n strokeDashArray: null,\n\n /**\n * Line offset of an object's stroke\n * @type Number\n * @default\n */\n strokeDashOffset: 0,\n\n /**\n * Line endings style of an object's stroke (one of \"butt\", \"round\", \"square\")\n * @type String\n * @default\n */\n strokeLineCap: 'butt',\n\n /**\n * Corner style of an object's stroke (one of \"bevel\", \"round\", \"miter\")\n * @type String\n * @default\n */\n strokeLineJoin: 'miter',\n\n /**\n * Maximum miter length (used for strokeLineJoin = \"miter\") of an object's stroke\n * @type Number\n * @default\n */\n strokeMiterLimit: 4,\n\n /**\n * Shadow object representing shadow of this shape\n * @type fabric.Shadow\n * @default\n */\n shadow: null,\n\n /**\n * Opacity of object's controlling borders when object is active and moving\n * @type Number\n * @default\n */\n borderOpacityWhenMoving: 0.4,\n\n /**\n * Scale factor of object's controlling borders\n * bigger number will make a thicker border\n * border is 1, so this is basically a border thickness\n * since there is no way to change the border itself.\n * @type Number\n * @default\n */\n borderScaleFactor: 1,\n\n /**\n * Minimum allowed scale value of an object\n * @type Number\n * @default\n */\n minScaleLimit: 0,\n\n /**\n * When set to `false`, an object can not be selected for modification (using either point-click-based or group-based selection).\n * But events still fire on it.\n * @type Boolean\n * @default\n */\n selectable: true,\n\n /**\n * When set to `false`, an object can not be a target of events. All events propagate through it. Introduced in v1.3.4\n * @type Boolean\n * @default\n */\n evented: true,\n\n /**\n * When set to `false`, an object is not rendered on canvas\n * @type Boolean\n * @default\n */\n visible: true,\n\n /**\n * When set to `false`, object's controls are not displayed and can not be used to manipulate object\n * @type Boolean\n * @default\n */\n hasControls: true,\n\n /**\n * When set to `false`, object's controlling borders are not rendered\n * @type Boolean\n * @default\n */\n hasBorders: true,\n\n /**\n * When set to `true`, objects are \"found\" on canvas on per-pixel basis rather than according to bounding box\n * @type Boolean\n * @default\n */\n perPixelTargetFind: false,\n\n /**\n * When `false`, default object's values are not included in its serialization\n * @type Boolean\n * @default\n */\n includeDefaultValues: true,\n\n /**\n * When `true`, object horizontal movement is locked\n * @type Boolean\n * @default\n */\n lockMovementX: false,\n\n /**\n * When `true`, object vertical movement is locked\n * @type Boolean\n * @default\n */\n lockMovementY: false,\n\n /**\n * When `true`, object rotation is locked\n * @type Boolean\n * @default\n */\n lockRotation: false,\n\n /**\n * When `true`, object horizontal scaling is locked\n * @type Boolean\n * @default\n */\n lockScalingX: false,\n\n /**\n * When `true`, object vertical scaling is locked\n * @type Boolean\n * @default\n */\n lockScalingY: false,\n\n /**\n * When `true`, object horizontal skewing is locked\n * @type Boolean\n * @default\n */\n lockSkewingX: false,\n\n /**\n * When `true`, object vertical skewing is locked\n * @type Boolean\n * @default\n */\n lockSkewingY: false,\n\n /**\n * When `true`, object cannot be flipped by scaling into negative values\n * @type Boolean\n * @default\n */\n lockScalingFlip: false,\n\n /**\n * When `true`, object is not exported in OBJECT/JSON\n * @since 1.6.3\n * @type Boolean\n * @default\n */\n excludeFromExport: false,\n\n /**\n * When `true`, object is cached on an additional canvas.\n * When `false`, object is not cached unless necessary ( clipPath )\n * default to true\n * @since 1.7.0\n * @type Boolean\n * @default true\n */\n objectCaching: objectCaching,\n\n /**\n * When `true`, object properties are checked for cache invalidation. In some particular\n * situation you may want this to be disabled ( spray brush, very big, groups)\n * or if your application does not allow you to modify properties for groups child you want\n * to disable it for groups.\n * default to false\n * since 1.7.0\n * @type Boolean\n * @default false\n */\n statefullCache: false,\n\n /**\n * When `true`, cache does not get updated during scaling. The picture will get blocky if scaled\n * too much and will be redrawn with correct details at the end of scaling.\n * this setting is performance and application dependant.\n * default to true\n * since 1.7.0\n * @type Boolean\n * @default true\n */\n noScaleCache: true,\n\n /**\n * When `false`, the stoke width will scale with the object.\n * When `true`, the stroke will always match the exact pixel size entered for stroke width.\n * this Property does not work on Text classes or drawing call that uses strokeText,fillText methods\n * default to false\n * @since 2.6.0\n * @type Boolean\n * @default false\n * @type Boolean\n * @default false\n */\n strokeUniform: false,\n\n /**\n * When set to `true`, object's cache will be rerendered next render call.\n * since 1.7.0\n * @type Boolean\n * @default true\n */\n dirty: true,\n\n /**\n * keeps the value of the last hovered corner during mouse move.\n * 0 is no corner, or 'mt', 'ml', 'mtr' etc..\n * It should be private, but there is no harm in using it as\n * a read-only property.\n * @type number|string|any\n * @default 0\n */\n __corner: 0,\n\n /**\n * Determines if the fill or the stroke is drawn first (one of \"fill\" or \"stroke\")\n * @type String\n * @default\n */\n paintFirst: 'fill',\n\n /**\n * When 'down', object is set to active on mousedown/touchstart\n * When 'up', object is set to active on mouseup/touchend\n * Experimental. Let's see if this breaks anything before supporting officially\n * @private\n * since 4.4.0\n * @type String\n * @default 'down'\n */\n activeOn: 'down',\n\n /**\n * List of properties to consider when checking if state\n * of an object is changed (fabric.Object#hasStateChanged)\n * as well as for history (undo/redo) purposes\n * @type Array\n */\n stateProperties: (\n 'top left width height scaleX scaleY flipX flipY originX originY transformMatrix ' +\n 'stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit ' +\n 'angle opacity fill globalCompositeOperation shadow visible backgroundColor ' +\n 'skewX skewY fillRule paintFirst clipPath strokeUniform'\n ).split(' '),\n\n /**\n * List of properties to consider when checking if cache needs refresh\n * Those properties are checked by statefullCache ON ( or lazy mode if we want ) or from single\n * calls to Object.set(key, value). If the key is in this list, the object is marked as dirty\n * and refreshed at the next render\n * @type Array\n */\n cacheProperties: (\n 'fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform' +\n ' strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath'\n ).split(' '),\n\n /**\n * List of properties to consider for animating colors.\n * @type Array\n */\n colorProperties: (\n 'fill stroke backgroundColor'\n ).split(' '),\n\n /**\n * a fabricObject that, without stroke define a clipping area with their shape. filled in black\n * the clipPath object gets used when the object has rendered, and the context is placed in the center\n * of the object cacheCanvas.\n * If you want 0,0 of a clipPath to align with an object center, use clipPath.originX/Y to 'center'\n * @type fabric.Object\n */\n clipPath: undefined,\n\n /**\n * Meaningful ONLY when the object is used as clipPath.\n * if true, the clipPath will make the object clip to the outside of the clipPath\n * since 2.4.0\n * @type boolean\n * @default false\n */\n inverted: false,\n\n /**\n * Meaningful ONLY when the object is used as clipPath.\n * if true, the clipPath will have its top and left relative to canvas, and will\n * not be influenced by the object transform. This will make the clipPath relative\n * to the canvas, but clipping just a particular object.\n * WARNING this is beta, this feature may change or be renamed.\n * since 2.4.0\n * @type boolean\n * @default false\n */\n absolutePositioned: false,\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function(options) {\n if (options) {\n this.setOptions(options);\n }\n },\n\n /**\n * Create a the canvas used to keep the cached copy of the object\n * @private\n */\n _createCacheCanvas: function() {\n this._cacheProperties = {};\n this._cacheCanvas = fabric.util.createCanvasElement();\n this._cacheContext = this._cacheCanvas.getContext('2d');\n this._updateCacheCanvas();\n // if canvas gets created, is empty, so dirty.\n this.dirty = true;\n },\n\n /**\n * Limit the cache dimensions so that X * Y do not cross fabric.perfLimitSizeTotal\n * and each side do not cross fabric.cacheSideLimit\n * those numbers are configurable so that you can get as much detail as you want\n * making bargain with performances.\n * @param {Object} dims\n * @param {Object} dims.width width of canvas\n * @param {Object} dims.height height of canvas\n * @param {Object} dims.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @param {Object} dims.zoomY zoomY zoom value to unscale the canvas before drawing cache\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _limitCacheSize: function(dims) {\n var perfLimitSizeTotal = fabric.perfLimitSizeTotal,\n width = dims.width, height = dims.height,\n max = fabric.maxCacheSideLimit, min = fabric.minCacheSideLimit;\n if (width <= max && height <= max && width * height <= perfLimitSizeTotal) {\n if (width < min) {\n dims.width = min;\n }\n if (height < min) {\n dims.height = min;\n }\n return dims;\n }\n var ar = width / height, limitedDims = fabric.util.limitDimsByArea(ar, perfLimitSizeTotal),\n capValue = fabric.util.capValue,\n x = capValue(min, limitedDims.x, max),\n y = capValue(min, limitedDims.y, max);\n if (width > x) {\n dims.zoomX /= width / x;\n dims.width = x;\n dims.capped = true;\n }\n if (height > y) {\n dims.zoomY /= height / y;\n dims.height = y;\n dims.capped = true;\n }\n return dims;\n },\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @return {Object}.x width of object to be cached\n * @return {Object}.y height of object to be cached\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _getCacheCanvasDimensions: function() {\n var objectScale = this.getTotalObjectScaling(),\n // caculate dimensions without skewing\n dim = this._getTransformedDimensions(0, 0),\n neededX = dim.x * objectScale.scaleX / this.scaleX,\n neededY = dim.y * objectScale.scaleY / this.scaleY;\n return {\n // for sure this ALIASING_LIMIT is slightly creating problem\n // in situation in which the cache canvas gets an upper limit\n // also objectScale contains already scaleX and scaleY\n width: neededX + ALIASING_LIMIT,\n height: neededY + ALIASING_LIMIT,\n zoomX: objectScale.scaleX,\n zoomY: objectScale.scaleY,\n x: neededX,\n y: neededY\n };\n },\n\n /**\n * Update width and height of the canvas for cache\n * returns true or false if canvas needed resize.\n * @private\n * @return {Boolean} true if the canvas has been resized\n */\n _updateCacheCanvas: function() {\n var targetCanvas = this.canvas;\n if (this.noScaleCache && targetCanvas && targetCanvas._currentTransform) {\n var target = targetCanvas._currentTransform.target,\n action = targetCanvas._currentTransform.action;\n if (this === target && action.slice && action.slice(0, 5) === 'scale') {\n return false;\n }\n }\n var canvas = this._cacheCanvas,\n dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n minCacheSize = fabric.minCacheSideLimit,\n width = dims.width, height = dims.height, drawingWidth, drawingHeight,\n zoomX = dims.zoomX, zoomY = dims.zoomY,\n dimensionsChanged = width !== this.cacheWidth || height !== this.cacheHeight,\n zoomChanged = this.zoomX !== zoomX || this.zoomY !== zoomY,\n shouldRedraw = dimensionsChanged || zoomChanged,\n additionalWidth = 0, additionalHeight = 0, shouldResizeCanvas = false;\n if (dimensionsChanged) {\n var canvasWidth = this._cacheCanvas.width,\n canvasHeight = this._cacheCanvas.height,\n sizeGrowing = width > canvasWidth || height > canvasHeight,\n sizeShrinking = (width < canvasWidth * 0.9 || height < canvasHeight * 0.9) &&\n canvasWidth > minCacheSize && canvasHeight > minCacheSize;\n shouldResizeCanvas = sizeGrowing || sizeShrinking;\n if (sizeGrowing && !dims.capped && (width > minCacheSize || height > minCacheSize)) {\n additionalWidth = width * 0.1;\n additionalHeight = height * 0.1;\n }\n }\n if (this instanceof fabric.Text && this.path) {\n shouldRedraw = true;\n shouldResizeCanvas = true;\n additionalWidth += this.getHeightOfLine(0) * this.zoomX;\n additionalHeight += this.getHeightOfLine(0) * this.zoomY;\n }\n if (shouldRedraw) {\n if (shouldResizeCanvas) {\n canvas.width = Math.ceil(width + additionalWidth);\n canvas.height = Math.ceil(height + additionalHeight);\n }\n else {\n this._cacheContext.setTransform(1, 0, 0, 1, 0, 0);\n this._cacheContext.clearRect(0, 0, canvas.width, canvas.height);\n }\n drawingWidth = dims.x / 2;\n drawingHeight = dims.y / 2;\n this.cacheTranslationX = Math.round(canvas.width / 2 - drawingWidth) + drawingWidth;\n this.cacheTranslationY = Math.round(canvas.height / 2 - drawingHeight) + drawingHeight;\n this.cacheWidth = width;\n this.cacheHeight = height;\n this._cacheContext.translate(this.cacheTranslationX, this.cacheTranslationY);\n this._cacheContext.scale(zoomX, zoomY);\n this.zoomX = zoomX;\n this.zoomY = zoomY;\n return true;\n }\n return false;\n },\n\n /**\n * Sets object's properties from options\n * @param {Object} [options] Options object\n */\n setOptions: function(options) {\n this._setOptions(options);\n this._initGradient(options.fill, 'fill');\n this._initGradient(options.stroke, 'stroke');\n this._initPattern(options.fill, 'fill');\n this._initPattern(options.stroke, 'stroke');\n },\n\n /**\n * Transforms context when rendering an object\n * @param {CanvasRenderingContext2D} ctx Context\n */\n transform: function(ctx) {\n var needFullTransform = (this.group && !this.group._transformDone) ||\n (this.group && this.canvas && ctx === this.canvas.contextTop);\n var m = this.calcTransformMatrix(!needFullTransform);\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n },\n\n /**\n * Returns an object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS,\n\n object = {\n type: this.type,\n version: fabric.version,\n originX: this.originX,\n originY: this.originY,\n left: toFixed(this.left, NUM_FRACTION_DIGITS),\n top: toFixed(this.top, NUM_FRACTION_DIGITS),\n width: toFixed(this.width, NUM_FRACTION_DIGITS),\n height: toFixed(this.height, NUM_FRACTION_DIGITS),\n fill: (this.fill && this.fill.toObject) ? this.fill.toObject() : this.fill,\n stroke: (this.stroke && this.stroke.toObject) ? this.stroke.toObject() : this.stroke,\n strokeWidth: toFixed(this.strokeWidth, NUM_FRACTION_DIGITS),\n strokeDashArray: this.strokeDashArray ? this.strokeDashArray.concat() : this.strokeDashArray,\n strokeLineCap: this.strokeLineCap,\n strokeDashOffset: this.strokeDashOffset,\n strokeLineJoin: this.strokeLineJoin,\n strokeUniform: this.strokeUniform,\n strokeMiterLimit: toFixed(this.strokeMiterLimit, NUM_FRACTION_DIGITS),\n scaleX: toFixed(this.scaleX, NUM_FRACTION_DIGITS),\n scaleY: toFixed(this.scaleY, NUM_FRACTION_DIGITS),\n angle: toFixed(this.angle, NUM_FRACTION_DIGITS),\n flipX: this.flipX,\n flipY: this.flipY,\n opacity: toFixed(this.opacity, NUM_FRACTION_DIGITS),\n shadow: (this.shadow && this.shadow.toObject) ? this.shadow.toObject() : this.shadow,\n visible: this.visible,\n backgroundColor: this.backgroundColor,\n fillRule: this.fillRule,\n paintFirst: this.paintFirst,\n globalCompositeOperation: this.globalCompositeOperation,\n skewX: toFixed(this.skewX, NUM_FRACTION_DIGITS),\n skewY: toFixed(this.skewY, NUM_FRACTION_DIGITS),\n };\n\n if (this.clipPath && !this.clipPath.excludeFromExport) {\n object.clipPath = this.clipPath.toObject(propertiesToInclude);\n object.clipPath.inverted = this.clipPath.inverted;\n object.clipPath.absolutePositioned = this.clipPath.absolutePositioned;\n }\n\n fabric.util.populateWithProperties(this, object, propertiesToInclude);\n if (!this.includeDefaultValues) {\n object = this._removeDefaultValues(object);\n }\n\n return object;\n },\n\n /**\n * Returns (dataless) object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toDatalessObject: function(propertiesToInclude) {\n // will be overwritten by subclasses\n return this.toObject(propertiesToInclude);\n },\n\n /**\n * @private\n * @param {Object} object\n */\n _removeDefaultValues: function(object) {\n var prototype = fabric.util.getKlass(object.type).prototype,\n stateProperties = prototype.stateProperties;\n stateProperties.forEach(function(prop) {\n if (prop === 'left' || prop === 'top') {\n return;\n }\n if (object[prop] === prototype[prop]) {\n delete object[prop];\n }\n // basically a check for [] === []\n if (Array.isArray(object[prop]) && Array.isArray(prototype[prop])\n && object[prop].length === 0 && prototype[prop].length === 0) {\n delete object[prop];\n }\n });\n\n return object;\n },\n\n /**\n * Returns a string representation of an instance\n * @return {String}\n */\n toString: function() {\n return '#';\n },\n\n /**\n * Return the object scale factor counting also the group scaling\n * @return {Object} object with scaleX and scaleY properties\n */\n getObjectScaling: function() {\n // if the object is a top level one, on the canvas, we go for simple aritmetic\n // otherwise the complex method with angles will return approximations and decimals\n // and will likely kill the cache when not needed\n // https://github.com/fabricjs/fabric.js/issues/7157\n if (!this.group) {\n return {\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n };\n }\n // if we are inside a group total zoom calculation is complex, we defer to generic matrices\n var options = fabric.util.qrDecompose(this.calcTransformMatrix());\n return { scaleX: Math.abs(options.scaleX), scaleY: Math.abs(options.scaleY) };\n },\n\n /**\n * Return the object scale factor counting also the group scaling, zoom and retina\n * @return {Object} object with scaleX and scaleY properties\n */\n getTotalObjectScaling: function() {\n var scale = this.getObjectScaling(), scaleX = scale.scaleX, scaleY = scale.scaleY;\n if (this.canvas) {\n var zoom = this.canvas.getZoom();\n var retina = this.canvas.getRetinaScaling();\n scaleX *= zoom * retina;\n scaleY *= zoom * retina;\n }\n return { scaleX: scaleX, scaleY: scaleY };\n },\n\n /**\n * Return the object opacity counting also the group property\n * @return {Number}\n */\n getObjectOpacity: function() {\n var opacity = this.opacity;\n if (this.group) {\n opacity *= this.group.getObjectOpacity();\n }\n return opacity;\n },\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n * @return {fabric.Object} thisArg\n */\n _set: function(key, value) {\n var shouldConstrainValue = (key === 'scaleX' || key === 'scaleY'),\n isChanged = this[key] !== value, groupNeedsUpdate = false;\n\n if (shouldConstrainValue) {\n value = this._constrainScale(value);\n }\n if (key === 'scaleX' && value < 0) {\n this.flipX = !this.flipX;\n value *= -1;\n }\n else if (key === 'scaleY' && value < 0) {\n this.flipY = !this.flipY;\n value *= -1;\n }\n else if (key === 'shadow' && value && !(value instanceof fabric.Shadow)) {\n value = new fabric.Shadow(value);\n }\n else if (key === 'dirty' && this.group) {\n this.group.set('dirty', value);\n }\n\n this[key] = value;\n\n if (isChanged) {\n groupNeedsUpdate = this.group && this.group.isOnACache();\n if (this.cacheProperties.indexOf(key) > -1) {\n this.dirty = true;\n groupNeedsUpdate && this.group.set('dirty', true);\n }\n else if (groupNeedsUpdate && this.stateProperties.indexOf(key) > -1) {\n this.group.set('dirty', true);\n }\n }\n return this;\n },\n\n /**\n * This callback function is called by the parent group of an object every\n * time a non-delegated property changes on the group. It is passed the key\n * and value as parameters. Not adding in this function's signature to avoid\n * Travis build error about unused variables.\n */\n setOnGroup: function() {\n // implemented by sub-classes, as needed.\n },\n\n /**\n * Retrieves viewportTransform from Object's canvas if possible\n * @method getViewportTransform\n * @memberOf fabric.Object.prototype\n * @return {Array}\n */\n getViewportTransform: function() {\n if (this.canvas && this.canvas.viewportTransform) {\n return this.canvas.viewportTransform;\n }\n return fabric.iMatrix.concat();\n },\n\n /*\n * @private\n * return if the object would be visible in rendering\n * @memberOf fabric.Object.prototype\n * @return {Boolean}\n */\n isNotVisible: function() {\n return this.opacity === 0 ||\n (!this.width && !this.height && this.strokeWidth === 0) ||\n !this.visible;\n },\n\n /**\n * Renders an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render: function(ctx) {\n // do not render if width/height are zeros or object is not visible\n if (this.isNotVisible()) {\n return;\n }\n if (this.canvas && this.canvas.skipOffscreen && !this.group && !this.isOnScreen()) {\n return;\n }\n ctx.save();\n this._setupCompositeOperation(ctx);\n this.drawSelectionBackground(ctx);\n this.transform(ctx);\n this._setOpacity(ctx);\n this._setShadow(ctx, this);\n if (this.shouldCache()) {\n this.renderCache();\n this.drawCacheOnCanvas(ctx);\n }\n else {\n this._removeCacheCanvas();\n this.dirty = false;\n this.drawObject(ctx);\n if (this.objectCaching && this.statefullCache) {\n this.saveState({ propertySet: 'cacheProperties' });\n }\n }\n ctx.restore();\n },\n\n renderCache: function(options) {\n options = options || {};\n if (!this._cacheCanvas || !this._cacheContext) {\n this._createCacheCanvas();\n }\n if (this.isCacheDirty()) {\n this.statefullCache && this.saveState({ propertySet: 'cacheProperties' });\n this.drawObject(this._cacheContext, options.forClipping);\n this.dirty = false;\n }\n },\n\n /**\n * Remove cacheCanvas and its dimensions from the objects\n */\n _removeCacheCanvas: function() {\n this._cacheCanvas = null;\n this._cacheContext = null;\n this.cacheWidth = 0;\n this.cacheHeight = 0;\n },\n\n /**\n * return true if the object will draw a stroke\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an approximation and be fast.\n * wrote to avoid extra caching, it has to return true when stroke happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the stroke is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasStroke: function() {\n return this.stroke && this.stroke !== 'transparent' && this.strokeWidth !== 0;\n },\n\n /**\n * return true if the object will draw a fill\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an approximation and be fast.\n * wrote to avoid extra caching, it has to return true when fill happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the fill is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasFill: function() {\n return this.fill && this.fill !== 'transparent';\n },\n\n /**\n * When set to `true`, force the object to have its own cache, even if it is inside a group\n * it may be needed when your object behave in a particular way on the cache and always needs\n * its own isolated canvas to render correctly.\n * Created to be overridden\n * since 1.7.12\n * @returns Boolean\n */\n needsItsOwnCache: function() {\n if (this.paintFirst === 'stroke' &&\n this.hasFill() && this.hasStroke() && typeof this.shadow === 'object') {\n return true;\n }\n if (this.clipPath) {\n return true;\n }\n return false;\n },\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * Read as: cache if is needed, or if the feature is enabled but we are not already caching.\n * @return {Boolean}\n */\n shouldCache: function() {\n this.ownCaching = this.needsItsOwnCache() || (\n this.objectCaching &&\n (!this.group || !this.group.isOnACache())\n );\n return this.ownCaching;\n },\n\n /**\n * Check if this object or a child object will cast a shadow\n * used by Group.shouldCache to know if child has a shadow recursively\n * @return {Boolean}\n */\n willDrawShadow: function() {\n return !!this.shadow && (this.shadow.offsetX !== 0 || this.shadow.offsetY !== 0);\n },\n\n /**\n * Execute the drawing operation for an object clipPath\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {fabric.Object} clipPath\n */\n drawClipPathOnCache: function(ctx, clipPath) {\n ctx.save();\n // DEBUG: uncomment this line, comment the following\n // ctx.globalAlpha = 0.4\n if (clipPath.inverted) {\n ctx.globalCompositeOperation = 'destination-out';\n }\n else {\n ctx.globalCompositeOperation = 'destination-in';\n }\n //ctx.scale(1 / 2, 1 / 2);\n if (clipPath.absolutePositioned) {\n var m = fabric.util.invertTransform(this.calcTransformMatrix());\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n clipPath.transform(ctx);\n ctx.scale(1 / clipPath.zoomX, 1 / clipPath.zoomY);\n ctx.drawImage(clipPath._cacheCanvas, -clipPath.cacheTranslationX, -clipPath.cacheTranslationY);\n ctx.restore();\n },\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawObject: function(ctx, forClipping) {\n var originalFill = this.fill, originalStroke = this.stroke;\n if (forClipping) {\n this.fill = 'black';\n this.stroke = '';\n this._setClippingProperties(ctx);\n }\n else {\n this._renderBackground(ctx);\n }\n this._render(ctx);\n this._drawClipPath(ctx, this.clipPath);\n this.fill = originalFill;\n this.stroke = originalStroke;\n },\n\n /**\n * Prepare clipPath state and cache and draw it on instance's cache\n * @param {CanvasRenderingContext2D} ctx\n * @param {fabric.Object} clipPath\n */\n _drawClipPath: function (ctx, clipPath) {\n if (!clipPath) { return; }\n // needed to setup a couple of variables\n // path canvas gets overridden with this one.\n // TODO find a better solution?\n clipPath.canvas = this.canvas;\n clipPath.shouldCache();\n clipPath._transformDone = true;\n clipPath.renderCache({ forClipping: true });\n this.drawClipPathOnCache(ctx, clipPath);\n },\n\n /**\n * Paint the cached copy of the object on the target context.\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawCacheOnCanvas: function(ctx) {\n ctx.scale(1 / this.zoomX, 1 / this.zoomY);\n ctx.drawImage(this._cacheCanvas, -this.cacheTranslationX, -this.cacheTranslationY);\n },\n\n /**\n * Check if cache is dirty\n * @param {Boolean} skipCanvas skip canvas checks because this object is painted\n * on parent canvas.\n */\n isCacheDirty: function(skipCanvas) {\n if (this.isNotVisible()) {\n return false;\n }\n if (this._cacheCanvas && this._cacheContext && !skipCanvas && this._updateCacheCanvas()) {\n // in this case the context is already cleared.\n return true;\n }\n else {\n if (this.dirty ||\n (this.clipPath && this.clipPath.absolutePositioned) ||\n (this.statefullCache && this.hasStateChanged('cacheProperties'))\n ) {\n if (this._cacheCanvas && this._cacheContext && !skipCanvas) {\n var width = this.cacheWidth / this.zoomX;\n var height = this.cacheHeight / this.zoomY;\n this._cacheContext.clearRect(-width / 2, -height / 2, width, height);\n }\n return true;\n }\n }\n return false;\n },\n\n /**\n * Draws a background for the object big as its untransformed dimensions\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderBackground: function(ctx) {\n if (!this.backgroundColor) {\n return;\n }\n var dim = this._getNonTransformedDimensions();\n ctx.fillStyle = this.backgroundColor;\n\n ctx.fillRect(\n -dim.x / 2,\n -dim.y / 2,\n dim.x,\n dim.y\n );\n // if there is background color no other shadows\n // should be casted\n this._removeShadow(ctx);\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setOpacity: function(ctx) {\n if (this.group && !this.group._transformDone) {\n ctx.globalAlpha = this.getObjectOpacity();\n }\n else {\n ctx.globalAlpha *= this.opacity;\n }\n },\n\n _setStrokeStyles: function(ctx, decl) {\n var stroke = decl.stroke;\n if (stroke) {\n ctx.lineWidth = decl.strokeWidth;\n ctx.lineCap = decl.strokeLineCap;\n ctx.lineDashOffset = decl.strokeDashOffset;\n ctx.lineJoin = decl.strokeLineJoin;\n ctx.miterLimit = decl.strokeMiterLimit;\n if (stroke.toLive) {\n if (stroke.gradientUnits === 'percentage' || stroke.gradientTransform || stroke.patternTransform) {\n // need to transform gradient in a pattern.\n // this is a slow process. If you are hitting this codepath, and the object\n // is not using caching, you should consider switching it on.\n // we need a canvas as big as the current object caching canvas.\n this._applyPatternForTransformedGradient(ctx, stroke);\n }\n else {\n // is a simple gradient or pattern\n ctx.strokeStyle = stroke.toLive(ctx, this);\n this._applyPatternGradientTransform(ctx, stroke);\n }\n }\n else {\n // is a color\n ctx.strokeStyle = decl.stroke;\n }\n }\n },\n\n _setFillStyles: function(ctx, decl) {\n var fill = decl.fill;\n if (fill) {\n if (fill.toLive) {\n ctx.fillStyle = fill.toLive(ctx, this);\n this._applyPatternGradientTransform(ctx, decl.fill);\n }\n else {\n ctx.fillStyle = fill;\n }\n }\n },\n\n _setClippingProperties: function(ctx) {\n ctx.globalAlpha = 1;\n ctx.strokeStyle = 'transparent';\n ctx.fillStyle = '#000000';\n },\n\n /**\n * @private\n * Sets line dash\n * @param {CanvasRenderingContext2D} ctx Context to set the dash line on\n * @param {Array} dashArray array representing dashes\n */\n _setLineDash: function(ctx, dashArray) {\n if (!dashArray || dashArray.length === 0) {\n return;\n }\n // Spec requires the concatenation of two copies the dash list when the number of elements is odd\n if (1 & dashArray.length) {\n dashArray.push.apply(dashArray, dashArray);\n }\n ctx.setLineDash(dashArray);\n },\n\n /**\n * Renders controls and borders for the object\n * the context here is not transformed\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [styleOverride] properties to override the object style\n */\n _renderControls: function(ctx, styleOverride) {\n var vpt = this.getViewportTransform(),\n matrix = this.calcTransformMatrix(),\n options, drawBorders, drawControls;\n styleOverride = styleOverride || { };\n drawBorders = typeof styleOverride.hasBorders !== 'undefined' ? styleOverride.hasBorders : this.hasBorders;\n drawControls = typeof styleOverride.hasControls !== 'undefined' ? styleOverride.hasControls : this.hasControls;\n matrix = fabric.util.multiplyTransformMatrices(vpt, matrix);\n options = fabric.util.qrDecompose(matrix);\n ctx.save();\n ctx.translate(options.translateX, options.translateY);\n ctx.lineWidth = 1 * this.borderScaleFactor;\n if (!this.group) {\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n }\n if (this.flipX) {\n options.angle -= 180;\n }\n ctx.rotate(degreesToRadians(this.group ? options.angle : this.angle));\n if (styleOverride.forActiveSelection || this.group) {\n drawBorders && this.drawBordersInGroup(ctx, options, styleOverride);\n }\n else {\n drawBorders && this.drawBorders(ctx, styleOverride);\n }\n drawControls && this.drawControls(ctx, styleOverride);\n ctx.restore();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setShadow: function(ctx) {\n if (!this.shadow) {\n return;\n }\n\n var shadow = this.shadow, canvas = this.canvas, scaling,\n multX = (canvas && canvas.viewportTransform[0]) || 1,\n multY = (canvas && canvas.viewportTransform[3]) || 1;\n if (shadow.nonScaling) {\n scaling = { scaleX: 1, scaleY: 1 };\n }\n else {\n scaling = this.getObjectScaling();\n }\n if (canvas && canvas._isRetinaScaling()) {\n multX *= fabric.devicePixelRatio;\n multY *= fabric.devicePixelRatio;\n }\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur = shadow.blur * fabric.browserShadowBlurConstant *\n (multX + multY) * (scaling.scaleX + scaling.scaleY) / 4;\n ctx.shadowOffsetX = shadow.offsetX * multX * scaling.scaleX;\n ctx.shadowOffsetY = shadow.offsetY * multY * scaling.scaleY;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _removeShadow: function(ctx) {\n if (!this.shadow) {\n return;\n }\n\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} filler fabric.Pattern or fabric.Gradient\n * @return {Object} offset.offsetX offset for text rendering\n * @return {Object} offset.offsetY offset for text rendering\n */\n _applyPatternGradientTransform: function(ctx, filler) {\n if (!filler || !filler.toLive) {\n return { offsetX: 0, offsetY: 0 };\n }\n var t = filler.gradientTransform || filler.patternTransform;\n var offsetX = -this.width / 2 + filler.offsetX || 0,\n offsetY = -this.height / 2 + filler.offsetY || 0;\n\n if (filler.gradientUnits === 'percentage') {\n ctx.transform(this.width, 0, 0, this.height, offsetX, offsetY);\n }\n else {\n ctx.transform(1, 0, 0, 1, offsetX, offsetY);\n }\n if (t) {\n ctx.transform(t[0], t[1], t[2], t[3], t[4], t[5]);\n }\n return { offsetX: offsetX, offsetY: offsetY };\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderPaintInOrder: function(ctx) {\n if (this.paintFirst === 'stroke') {\n this._renderStroke(ctx);\n this._renderFill(ctx);\n }\n else {\n this._renderFill(ctx);\n this._renderStroke(ctx);\n }\n },\n\n /**\n * @private\n * function that actually render something on the context.\n * empty here to allow Obects to work on tests to benchmark fabric functionalites\n * not related to rendering\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(/* ctx */) {\n\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderFill: function(ctx) {\n if (!this.fill) {\n return;\n }\n\n ctx.save();\n this._setFillStyles(ctx, this);\n if (this.fillRule === 'evenodd') {\n ctx.fill('evenodd');\n }\n else {\n ctx.fill();\n }\n ctx.restore();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderStroke: function(ctx) {\n if (!this.stroke || this.strokeWidth === 0) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n if (this.strokeUniform && this.group) {\n var scaling = this.getObjectScaling();\n ctx.scale(1 / scaling.scaleX, 1 / scaling.scaleY);\n }\n else if (this.strokeUniform) {\n ctx.scale(1 / this.scaleX, 1 / this.scaleY);\n }\n this._setLineDash(ctx, this.strokeDashArray);\n this._setStrokeStyles(ctx, this);\n ctx.stroke();\n ctx.restore();\n },\n\n /**\n * This function try to patch the missing gradientTransform on canvas gradients.\n * transforming a context to transform the gradient, is going to transform the stroke too.\n * we want to transform the gradient but not the stroke operation, so we create\n * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n * this method has drwabacks: is slow, is in low resolution, needs a patch for when the size\n * is limited.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {fabric.Gradient} filler a fabric gradient instance\n */\n _applyPatternForTransformedGradient: function(ctx, filler) {\n var dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n pCanvas = fabric.util.createCanvasElement(), pCtx, retinaScaling = this.canvas.getRetinaScaling(),\n width = dims.x / this.scaleX / retinaScaling, height = dims.y / this.scaleY / retinaScaling;\n pCanvas.width = width;\n pCanvas.height = height;\n pCtx = pCanvas.getContext('2d');\n pCtx.beginPath(); pCtx.moveTo(0, 0); pCtx.lineTo(width, 0); pCtx.lineTo(width, height);\n pCtx.lineTo(0, height); pCtx.closePath();\n pCtx.translate(width / 2, height / 2);\n pCtx.scale(\n dims.zoomX / this.scaleX / retinaScaling,\n dims.zoomY / this.scaleY / retinaScaling\n );\n this._applyPatternGradientTransform(pCtx, filler);\n pCtx.fillStyle = filler.toLive(ctx);\n pCtx.fill();\n ctx.translate(-this.width / 2 - this.strokeWidth / 2, -this.height / 2 - this.strokeWidth / 2);\n ctx.scale(\n retinaScaling * this.scaleX / dims.zoomX,\n retinaScaling * this.scaleY / dims.zoomY\n );\n ctx.strokeStyle = pCtx.createPattern(pCanvas, 'no-repeat');\n },\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates\n * @private\n * @return {Object} center point from element coordinates\n */\n _findCenterFromElement: function() {\n return { x: this.left + this.width / 2, y: this.top + this.height / 2 };\n },\n\n /**\n * This function is an helper for svg import. it decompose the transformMatrix\n * and assign properties to object.\n * untransformed coordinates\n * @private\n * @chainable\n */\n _assignTransformMatrixProps: function() {\n if (this.transformMatrix) {\n var options = fabric.util.qrDecompose(this.transformMatrix);\n this.flipX = false;\n this.flipY = false;\n this.set('scaleX', options.scaleX);\n this.set('scaleY', options.scaleY);\n this.angle = options.angle;\n this.skewX = options.skewX;\n this.skewY = 0;\n }\n },\n\n /**\n * This function is an helper for svg import. it removes the transform matrix\n * and set to object properties that fabricjs can handle\n * @private\n * @param {Object} preserveAspectRatioOptions\n * @return {thisArg}\n */\n _removeTransformMatrix: function(preserveAspectRatioOptions) {\n var center = this._findCenterFromElement();\n if (this.transformMatrix) {\n this._assignTransformMatrixProps();\n center = fabric.util.transformPoint(center, this.transformMatrix);\n }\n this.transformMatrix = null;\n if (preserveAspectRatioOptions) {\n this.scaleX *= preserveAspectRatioOptions.scaleX;\n this.scaleY *= preserveAspectRatioOptions.scaleY;\n this.cropX = preserveAspectRatioOptions.cropX;\n this.cropY = preserveAspectRatioOptions.cropY;\n center.x += preserveAspectRatioOptions.offsetLeft;\n center.y += preserveAspectRatioOptions.offsetTop;\n this.width = preserveAspectRatioOptions.width;\n this.height = preserveAspectRatioOptions.height;\n }\n this.setPositionByOrigin(center, 'center', 'center');\n },\n\n /**\n * Clones an instance, using a callback method will work for every object.\n * @param {Function} callback Callback is invoked with a clone as a first argument\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n */\n clone: function(callback, propertiesToInclude) {\n var objectForm = this.toObject(propertiesToInclude);\n if (this.constructor.fromObject) {\n this.constructor.fromObject(objectForm, callback);\n }\n else {\n fabric.Object._fromObject('Object', objectForm, callback);\n }\n },\n\n /**\n * Creates an instance of fabric.Image out of an object\n * makes use of toCanvasElement.\n * Once this method was based on toDataUrl and loadImage, so it also had a quality\n * and format option. toCanvasElement is faster and produce no loss of quality.\n * If you need to get a real Jpeg or Png from an object, using toDataURL is the right way to do it.\n * toCanvasElement and then toBlob from the obtained canvas is also a good option.\n * This method is sync now, but still support the callback because we did not want to break.\n * When fabricJS 5.0 will be planned, this will probably be changed to not have a callback.\n * @param {Function} callback callback, invoked with an instance as a first argument\n * @param {Object} [options] for clone as image, passed to toDataURL\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {fabric.Object} thisArg\n */\n cloneAsImage: function(callback, options) {\n var canvasEl = this.toCanvasElement(options);\n if (callback) {\n callback(new fabric.Image(canvasEl));\n }\n return this;\n },\n\n /**\n * Converts an object into a HTMLCanvas element\n * @param {Object} options Options object\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {HTMLCanvasElement} Returns DOM element