UNPKG

72.5 kBSource Map (JSON)View Raw
1{"version":3,"sources":["null","ng://lib-sketch-tool/app/lib-sketch-tool/constants/shape-data.ts","ng://lib-sketch-tool/app/lib-sketch-tool/services/canvas-manager.service.ts","ng://lib-sketch-tool/app/lib-sketch-tool/mobile-component/mobile-sketch-tool.component.ts","ng://lib-sketch-tool/app/lib-sketch-tool/sketch-tool.module.ts"],"names":["__values","o","m","Symbol","iterator","i","call","next","length","value","done","SHAPE_DATA","CanvasManagerService","this","mousePosition","x","y","left","Object","defineProperty","prototype","canvas","getObjects","backgroundImage","getActiveObject","getActiveObjects","collection","document","getElementsByClassName","createCanvas","canvasId","fabric","Canvas","emptyCanvas","dispose","clear","remove","loadNewImage","backgroundImageURL","setBackgroundFromURL","renderCanvas","markSelectedObjectsDirty","renderAll","addGeometricShape","strokeColor","fillColor","shape","AvailableGeometricShape","Rectangle","addRectangle","Circle","addCircle","Triangle","addTriangle","Line","addHorizontalLine","Cross","addCross","add","Rect","width","height","top","fill","stroke","strokeWidth","cornerSize","radius","createHorizontalLine","line","setControlsVisibility","bl","br","tl","tr","mt","mb","createVerticalLine","ml","mr","horizontalLine","verticalLine","toggleFreeDrawing","isDrawingMode","setFreeDrawingBrushColor","color","freeDrawingBrush","setFreeDrawingBrushWidthFromZoom","getZoom","zoom","addText","inputText","text","IText","fontFamily","fontStyle","setColor","addImage","imageURL","Promise","resolve","reject","_this","image","Image","onload","img","fabricImage","angle","scaleX","scaleY","src","container","divCanvasContainer","setCanvasSize","clientWidth","clientHeight","f_img","scaleData","computeScaleFactor","setBackgroundImage","bind","scaleFactor","onOrientationChange","getWidth","getHeight","cropImage","changeSelectedObjectsFillColor","activeObjects","activeObjects_1","tslib_1.__values","activeObjects_1_1","changeSelectedObjectsStrokeColor","activeObjects_2","activeObjects_2_1","object","type","set","deleteSelectedObjects","activeObjects_3","activeObjects_3_1","discardActiveObject","bringSelectedObjectsToFront","activeObjects_4","activeObjects_4_1","bringToFront","sendSelectedObjectsToBack","activeObjects_5","activeObjects_5_1","sendToBack","jsonFromCanvas","toJSON","loadfromJson","json","adjustCanvas","loadFromJSON","canvasWidth","canvasHeight","objects","exportImageAsDataURL","toDataURL","selectItem","itemNumber","setActiveObject","item","getIndexOf","activeObject","indexOf","activeObjects_6","activeObjects_6_1","addSelectionRectangle","cropRectangle","originX","originY","strokeDashArray","opacity","visible","ajustCropRectangleFromMouse","event","Math","min","offsetX","offsetY","w","abs","h","startSelectingCropRectangleFromMouse","setCoords","moveAllObjectsInCanvas","enableSlection","selectable","selection","ajustCropRectangle","touch","touches","rect","target","getBoundingClientRect","clientX","clientY","startSelectingCropRectangle","disableSelection","objects_1","objects_1_1","obj","groupSelectedObjects","activeObjects_7","activeObjects_7_1","push","group","Group","setLastPanPosition","lastPanPosition","Point","panCanvas","delta","relativePan","preventPanOutsideCanvas","canvasViewPort","viewportTransform","bottomEndPoint","rightEndPoint","overallVelocity","point","center","scale","zoomToPoint","absolutePan","setWidth","setHeight","resetZoom","Injectable","MobileSketchToolComponent","actionSheetCtrl","canvasManagerService","translate","EventEmitter","isCropping","isPanning","isLoaded","isUndoAvailable","isSelectingColor","ngOnInit","imageData","loadedJson","previousJson","JSON","parse","currentJson","previousImageData","emitCanvas","ngOnChanges","stringify","ngAfterViewInit","gesture","Gesture","element","nativeElement","listen","on","$event","pinch","ngOnDestroy","destroy","icons","disableAllStates","addShape","source","iconsPath","changeStrokeColor","bringFoward","crop","disableCroppping","deleteSelection","mouseUp","mouseMove","mouseDown","preventDefault","disableDrawing","undo","onColorClicked","stopPanning","onMoveClicked","disablePanning","draw","isDrawing","translateShapeButtonsText","translationArray","instant","presentShapeActionSheet","titleText","buttonsText","create","title","buttons","handler","present","translateEditButtonsText","presentEditActionSheet","presentPictogramsActionSheet","actionSheetStyles","images","style","createElement","innerHTML","this_1","getElementsByTagName","appendChild","role","cssClass","actionSheet","onDidDismiss","parentNode","removeChild","emit","Component","args","selector","template","styles","providers","ActionSheetController","TranslateService","ViewChild","Input","Output","SketchToolModule","NgModule","imports","CommonModule","IonicModule","declarations","exports"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","export const SHAPE_DATA = {\n width: 200,\n height: 200,\n left: 50,\n top: 50,\n radius: 100,\n stroke: 10,\n freeDrawingBrushWidth: 10,\n cornerSize: 20\n};\n","import { Injectable } from '@angular/core';\r\nimport { fabric } from 'fabric';\r\n\r\nimport { AvailableGeometricShape } from './../constants/available-geometric-shapes';\r\nimport { SHAPE_DATA } from './../constants/shape-data';\r\n\r\ninterface ScaleData {\r\n scaleFactor: number;\r\n left: number;\r\n top: number;\r\n}\r\n\r\ninterface Position {\r\n x: number;\r\n y: number;\r\n}\r\n\r\n@Injectable()\r\nexport class CanvasManagerService {\r\n public canvas;\r\n public left;\r\n\r\n private cropRectangle: fabric.Rect;\r\n private mousePosition: Position;\r\n private lastPanPosition: fabric.Point;\r\n private canvasId = 'canvas';\r\n\r\n constructor() {\r\n this.mousePosition = {x: 0, y: 0};\r\n this.left = 0;\r\n }\r\n\r\n get canvasObjects() {\r\n return this.canvas.getObjects();\r\n }\r\n\r\n get canvasBackgroundImage() {\r\n return this.canvas.backgroundImage;\r\n }\r\n\r\n get activeObject() {\r\n return this.canvas.getActiveObject();\r\n }\r\n\r\n get activeGroup() {\r\n return this.canvas.getActiveObjects();\r\n }\r\n\r\n get divCanvasContainer() {\r\n let collection = document.getElementsByClassName('div-canvas-container');\r\n return collection[collection.length -1];\r\n }\r\n\r\n public createCanvas(canvasId: string): void {\r\n this.canvasId = canvasId;\r\n this.canvas = new fabric.Canvas(this.canvasId);\r\n }\r\n\r\n public emptyCanvas(): void {\r\n if (this.canvas) {\r\n this.canvas.dispose();\r\n }\r\n this.canvas = new fabric.Canvas(this.canvasId);\r\n this.canvas.clear();\r\n this.canvas.remove(this.canvas.getObjects());\r\n }\r\n\r\n public loadNewImage(backgroundImageURL?: string): void {\r\n this.emptyCanvas();\r\n if (backgroundImageURL) {\r\n this.setBackgroundFromURL(backgroundImageURL);\r\n }\r\n }\r\n\r\n public renderCanvas(): void {\r\n this.markSelectedObjectsDirty();\r\n this.canvas.renderAll();\r\n }\r\n\r\n public addGeometricShape(strokeColor: string, fillColor: string, shape: AvailableGeometricShape): void {\r\n switch (shape) {\r\n case AvailableGeometricShape.Rectangle:\r\n this.addRectangle(strokeColor, fillColor);\r\n break;\r\n case AvailableGeometricShape.Circle:\r\n this.addCircle(strokeColor, fillColor);\r\n break;\r\n case AvailableGeometricShape.Triangle:\r\n this.addTriangle(strokeColor, fillColor);\r\n break;\r\n case AvailableGeometricShape.Line:\r\n this.addHorizontalLine(strokeColor, fillColor);\r\n break;\r\n case AvailableGeometricShape.Cross:\r\n this.addCross(strokeColor, fillColor);\r\n break;\r\n }\r\n }\r\n\r\n private addRectangle(strokeColor: string, fillColor: string): void {\r\n this.canvas.add(\r\n new fabric.Rect({\r\n width: SHAPE_DATA.width,\r\n height: SHAPE_DATA.height,\r\n left: SHAPE_DATA.left,\r\n top: SHAPE_DATA.top,\r\n fill: fillColor,\r\n stroke: strokeColor,\r\n strokeWidth: SHAPE_DATA.stroke,\r\n cornerSize: SHAPE_DATA.cornerSize\r\n })\r\n );\r\n }\r\n\r\n private addCircle(strokeColor: string, fillColor: string): void {\r\n this.canvas.add(\r\n new fabric.Circle({\r\n left: SHAPE_DATA.left,\r\n top: SHAPE_DATA.top,\r\n radius: SHAPE_DATA.radius,\r\n stroke: strokeColor,\r\n strokeWidth: SHAPE_DATA.stroke,\r\n fill: fillColor,\r\n cornerSize: SHAPE_DATA.cornerSize\r\n })\r\n );\r\n }\r\n\r\n private addTriangle(strokeColor: string, fillColor: string): void {\r\n this.canvas.add(\r\n new fabric.Triangle({\r\n width: SHAPE_DATA.width,\r\n height: SHAPE_DATA.height,\r\n left: SHAPE_DATA.left,\r\n top: SHAPE_DATA.top,\r\n fill: fillColor,\r\n stroke: strokeColor,\r\n strokeWidth: SHAPE_DATA.stroke,\r\n cornerSize: SHAPE_DATA.cornerSize\r\n })\r\n );\r\n }\r\n\r\n private addHorizontalLine(strokeColor: string, fillColor: string): void {\r\n this.canvas.add(this.createHorizontalLine(strokeColor));\r\n }\r\n\r\n private createHorizontalLine(strokeColor: string): fabric.Line {\r\n const line = new fabric.Line([100, 150, 200, 150], {\r\n left: 50,\r\n top: 100,\r\n stroke: strokeColor,\r\n strokeWidth: 5,\r\n cornerSize: SHAPE_DATA.cornerSize\r\n });\r\n\r\n line.setControlsVisibility({\r\n bl: false,\r\n br: false,\r\n tl: false,\r\n tr: false,\r\n mt: false,\r\n mb: false\r\n });\r\n\r\n return line;\r\n }\r\n\r\n private createVerticalLine(strokeColor: string): fabric.Line {\r\n const line = new fabric.Line([150, 100, 150, 200], {\r\n left: 100,\r\n top: 50,\r\n stroke: strokeColor,\r\n strokeWidth: 5,\r\n cornerSize: SHAPE_DATA.cornerSize\r\n });\r\n\r\n line.setControlsVisibility({\r\n bl: false,\r\n br: false,\r\n tl: false,\r\n tr: false,\r\n ml: false,\r\n mr: false\r\n });\r\n\r\n return line;\r\n }\r\n\r\n private addCross(strokeColor: string, fillColor: string): void {\r\n const horizontalLine = this.createHorizontalLine(strokeColor);\r\n const verticalLine = this.createVerticalLine(strokeColor);\r\n this.canvas.add(horizontalLine);\r\n this.canvas.add(verticalLine);\r\n }\r\n\r\n public toggleFreeDrawing(): void {\r\n this.canvas.isDrawingMode = !this.canvas.isDrawingMode;\r\n }\r\n\r\n public setFreeDrawingBrushColor(color: string): void {\r\n this.canvas.freeDrawingBrush.color = color;\r\n this.setFreeDrawingBrushWidthFromZoom(this.canvas.getZoom());\r\n }\r\n\r\n private setFreeDrawingBrushWidthFromZoom(zoom: number) {\r\n this.canvas.freeDrawingBrush.width = SHAPE_DATA.freeDrawingBrushWidth * (1 / zoom);\r\n }\r\n\r\n public addText(color: string, inputText: string): void {\r\n const text = new fabric.IText('text', {\r\n fontFamily: 'arial black',\r\n fontStyle: 'bold',\r\n left: SHAPE_DATA.left,\r\n top: SHAPE_DATA.top,\r\n cornerSize: SHAPE_DATA.cornerSize\r\n });\r\n\r\n text.setColor(color);\r\n\r\n this.canvas.add(text);\r\n }\r\n\r\n public addImage(imageURL: string): Promise<void> {\r\n return new Promise(\r\n (resolve, reject): void => {\r\n const canvas = this.canvas;\r\n\r\n const image = new Image();\r\n image.onload = function(img) {\r\n const fabricImage = new fabric.Image(image, {\r\n angle: 0,\r\n width: image.width,\r\n height: image.height,\r\n left: SHAPE_DATA.left,\r\n top: SHAPE_DATA.top,\r\n scaleX: 1,\r\n scaleY: 1,\r\n cornerSize: SHAPE_DATA.cornerSize\r\n });\r\n canvas.add(fabricImage);\r\n resolve();\r\n };\r\n image.src = imageURL;\r\n }\r\n );\r\n }\r\n\r\n public setBackgroundFromURL(backgroundImageURL: string): Promise<void> {\r\n const container = this.divCanvasContainer;\r\n this.setCanvasSize(container.clientWidth, container.clientHeight);\r\n\r\n return new Promise(\r\n (resolve, reject): void => {\r\n if (backgroundImageURL == null) {\r\n return reject();\r\n }\r\n const image = new Image();\r\n image.onload = () => {\r\n const f_img = new fabric.Image(image, {});\r\n\r\n const scaleData = this.computeScaleFactor(f_img, this.canvas);\r\n\r\n this.canvas.setBackgroundImage(f_img, this.canvas.renderAll.bind(this.canvas), {\r\n scaleX: scaleData.scaleFactor,\r\n scaleY: scaleData.scaleFactor\r\n });\r\n\r\n this.setCanvasSize(f_img.width * scaleData.scaleFactor, f_img.height * scaleData.scaleFactor);\r\n\r\n this.canvas.renderAll();\r\n resolve();\r\n };\r\n image.src = backgroundImageURL;\r\n }\r\n );\r\n }\r\n\r\n private computeScaleFactor(f_img: fabric.Image, canvas: fabric.Canvas): ScaleData {\r\n const container = this.divCanvasContainer;\r\n\r\n const canvasAspect = container.clientWidth / container.clientHeight;\r\n const imgAspect = f_img.width / f_img.height;\r\n let left, top, scaleFactor;\r\n\r\n if (canvasAspect <= imgAspect) {\r\n scaleFactor = container.clientWidth / f_img.width;\r\n left = 0;\r\n top = -(f_img.height * scaleFactor - container.clientHeight) / 2;\r\n } else {\r\n scaleFactor = container.clientHeight / f_img.height;\r\n top = 0;\r\n left = -(f_img.width * scaleFactor - container.clientWidth) / 2;\r\n }\r\n\r\n this.left = left;\r\n\r\n return { scaleFactor: scaleFactor, left: left, top: top };\r\n }\r\n\r\n public onOrientationChange() {\r\n this.mousePosition = {x: this.canvas.getWidth, y: this.canvas.getHeight };\r\n this.cropImage();\r\n }\r\n\r\n public changeSelectedObjectsFillColor(color: string): void {\r\n const activeObjects = this.canvas.getActiveObjects();\r\n\r\n if (activeObjects) {\r\n for (const object of activeObjects) {\r\n object.setColor(color);\r\n this.canvas.renderAll();\r\n }\r\n }\r\n }\r\n\r\n public changeSelectedObjectsStrokeColor(color: string): void {\r\n const activeObjects = this.canvas.getActiveObjects();\r\n\r\n if (activeObjects) {\r\n for (const object of activeObjects) {\r\n if (object.type === 'i-text') {\r\n object.setColor(color);\r\n } else {\r\n object.stroke = color;\r\n object.set('dirty', true);\r\n }\r\n }\r\n this.canvas.renderAll();\r\n }\r\n }\r\n\r\n public deleteSelectedObjects(): void {\r\n const activeObjects = this.canvas.getActiveObjects();\r\n\r\n if (activeObjects) {\r\n for (const object of activeObjects) {\r\n this.canvas.remove(object);\r\n }\r\n this.canvas.discardActiveObject();\r\n this.canvas.renderAll();\r\n }\r\n }\r\n\r\n public bringSelectedObjectsToFront(): void {\r\n const activeObjects = this.canvas.getActiveObjects();\r\n\r\n if (activeObjects) {\r\n for (const object of activeObjects) {\r\n this.canvas.bringToFront(object);\r\n }\r\n }\r\n }\r\n\r\n public sendSelectedObjectsToBack(): void {\r\n const activeObjects = this.canvas.getActiveObjects();\r\n\r\n if (activeObjects) {\r\n for (const object of activeObjects) {\r\n this.canvas.sendToBack(object);\r\n }\r\n }\r\n }\r\n\r\n public jsonFromCanvas(): JSON {\r\n return this.canvas.toJSON(['width', 'height']);\r\n }\r\n\r\n public loadfromJson(json: JSON): Promise<void> {\r\n const container = this.divCanvasContainer;\r\n\r\n this.setCanvasSize(container.clientWidth, container.clientHeight);\r\n\r\n return new Promise(\r\n (resolve, reject): void => {\r\n this.adjustCanvas(json);\r\n this.canvas.loadFromJSON(json, this.canvas.renderAll.bind(this.canvas));\r\n this.canvas.renderAll();\r\n resolve();\r\n }\r\n );\r\n }\r\n\r\n public adjustCanvas(json: JSON): void {\r\n const backgroundImage = json['backgroundImage'];\r\n\r\n const container = this.divCanvasContainer;\r\n\r\n const width = json['width'];\r\n const height = json['height'];\r\n\r\n const canvasWidth = container.clientWidth;\r\n const canvasHeight = container.clientHeight;\r\n\r\n const canvasAspect = canvasWidth / canvasHeight;\r\n const imgAspect = width / height;\r\n let scaleFactor, left;\r\n\r\n if (canvasAspect <= imgAspect) {\r\n scaleFactor = canvasWidth / width;\r\n left = 0;\r\n } else {\r\n scaleFactor = canvasHeight / height;\r\n left = -(width * scaleFactor - container.clientWidth) / 2;\r\n }\r\n\r\n this.left = left;\r\n\r\n backgroundImage['scaleX'] *= scaleFactor;\r\n backgroundImage['scaleY'] *= scaleFactor;\r\n\r\n this.setCanvasSize(width * scaleFactor, height * scaleFactor);\r\n\r\n const objects = json['objects'];\r\n\r\n for (let i = 0; i < objects.length; i++) {\r\n objects[i]['left'] *= scaleFactor;\r\n objects[i]['top'] *= scaleFactor;\r\n objects[i]['scaleX'] *= scaleFactor;\r\n objects[i]['scaleY'] *= scaleFactor;\r\n }\r\n }\r\n\r\n public exportImageAsDataURL(): string {\r\n return this.canvas.toDataURL('image/png');\r\n }\r\n\r\n public selectItem(itemNumber: number): void {\r\n this.canvas.setActiveObject(this.canvas.item(itemNumber));\r\n }\r\n\r\n public getIndexOf(activeObject): number {\r\n return this.canvas.getObjects().indexOf(activeObject);\r\n }\r\n\r\n private markSelectedObjectsDirty(): void {\r\n const activeObjects = this.canvas.getActiveObjects();\r\n\r\n if (activeObjects) {\r\n for (const object of activeObjects) {\r\n object.set('dirty', true);\r\n }\r\n }\r\n }\r\n\r\n public addSelectionRectangle(): void {\r\n this.cropRectangle = new fabric.Rect({\r\n fill: 'transparent',\r\n originX: 'left',\r\n originY: 'top',\r\n stroke: '#ccc',\r\n strokeDashArray: [2, 2],\r\n opacity: 1,\r\n width: 0,\r\n height: 0\r\n });\r\n\r\n this.cropRectangle.visible = false;\r\n this.canvas.add(this.cropRectangle);\r\n }\r\n\r\n public ajustCropRectangleFromMouse(event: MouseEvent): boolean {\r\n\r\n const x = Math.min(event.offsetX, this.mousePosition.x),\r\n y = Math.min(event.offsetY, this.mousePosition.y),\r\n w = Math.abs(event.offsetX - this.mousePosition.x),\r\n h = Math.abs(event.offsetY - this.mousePosition.y);\r\n\r\n if (!w || !h) {\r\n return false;\r\n }\r\n\r\n this.cropRectangle\r\n .set('top', y)\r\n .set('left', x)\r\n .set('width', w)\r\n .set('height', h);\r\n\r\n this.canvas.renderAll();\r\n\r\n return true;\r\n }\r\n\r\n public startSelectingCropRectangleFromMouse(event: MouseEvent): void {\r\n this.cropRectangle.left = event.offsetX;\r\n this.cropRectangle.top = event.offsetY;\r\n this.cropRectangle.setCoords();\r\n\r\n this.mousePosition = {x: event.offsetX, y: event.offsetY };\r\n\r\n this.cropRectangle.visible = true;\r\n this.canvas.bringToFront(this.cropRectangle);\r\n }\r\n\r\n public cropImage(): void {\r\n const left = this.cropRectangle.left;\r\n const top = this.cropRectangle.top;\r\n\r\n const width = this.cropRectangle.width;\r\n const height = this.cropRectangle.height;\r\n\r\n const container = this.divCanvasContainer;\r\n\r\n const canvasWidth = container.clientWidth;\r\n const canvasHeight = container.clientHeight;\r\n\r\n const canvasAspect = canvasWidth / canvasHeight;\r\n const imgAspect = width / height;\r\n let scaleFactor;\r\n\r\n if (canvasAspect <= imgAspect) {\r\n scaleFactor = canvasWidth / width;\r\n } else {\r\n scaleFactor = canvasHeight / height;\r\n }\r\n\r\n this.setCanvasSize(width * scaleFactor, height * scaleFactor);\r\n\r\n this.canvas.backgroundImage.scaleX *= scaleFactor;\r\n this.canvas.backgroundImage.scaleY *= scaleFactor;\r\n\r\n this.canvas.backgroundImage.left -= left;\r\n this.canvas.backgroundImage.left *= scaleFactor;\r\n this.canvas.backgroundImage.top -= top - scaleFactor;\r\n this.canvas.backgroundImage.top *= scaleFactor;\r\n\r\n this.moveAllObjectsInCanvas(-1 * left, -1 * top, scaleFactor);\r\n\r\n this.enableSlection();\r\n this.cropRectangle.visible = false;\r\n\r\n this.canvas.remove(this.cropRectangle);\r\n\r\n this.canvas.renderAll();\r\n }\r\n\r\n public enableSlection() {\r\n this.canvas.selectable = true;\r\n this.canvas.selection = true;\r\n }\r\n\r\n public ajustCropRectangle(event): boolean {\r\n const touch = event.touches[0];\r\n\r\n const rect = event.target.getBoundingClientRect();\r\n\r\n const x = Math.min(touch.clientX - rect.left, this.mousePosition.x),\r\n y = Math.min(touch.clientY - rect.top, this.mousePosition.y),\r\n w = Math.abs(touch.clientX - rect.left - this.mousePosition.x),\r\n h = Math.abs(touch.clientY - rect.top - this.mousePosition.y);\r\n\r\n if (!w || !h) {\r\n return false;\r\n }\r\n\r\n this.cropRectangle\r\n .set('left', x)\r\n .set('top', y)\r\n .set('width', w)\r\n .set('height', h);\r\n\r\n this.canvas.renderAll();\r\n\r\n return true;\r\n }\r\n\r\n public startSelectingCropRectangle(event): void {\r\n const touch = event.touches[0];\r\n const rect = event.target.getBoundingClientRect();\r\n\r\n this.cropRectangle.left = touch.clientX - rect.left;\r\n this.cropRectangle.top = touch.clientY - rect.top;\r\n this.cropRectangle.setCoords();\r\n\r\n this.mousePosition = { x: touch.clientX - rect.left, y: touch.clientY - rect.top };\r\n\r\n this.canvas.renderAll();\r\n this.cropRectangle.visible = true;\r\n this.canvas.bringToFront(this.cropRectangle);\r\n }\r\n\r\n public disableSelection() {\r\n this.canvas.selection = false;\r\n }\r\n\r\n private moveAllObjectsInCanvas(x: number, y: number, scaleFactor: number): void {\r\n const objects = this.canvas.getObjects();\r\n for (const obj of objects) {\r\n obj.left += x;\r\n obj.left *= scaleFactor;\r\n obj.scaleX *= scaleFactor;\r\n obj.top += y;\r\n obj.scaleY *= scaleFactor;\r\n obj.top *= scaleFactor;\r\n obj.setCoords();\r\n }\r\n }\r\n\r\n public groupSelectedObjects(): void {\r\n const activeObjects = this.canvas.getActiveObjects();\r\n\r\n if (activeObjects) {\r\n const objects = [];\r\n\r\n for (const object of activeObjects) {\r\n objects.push(object);\r\n }\r\n this.deleteSelectedObjects();\r\n\r\n const group = new fabric.Group(objects);\r\n this.canvas.add(group);\r\n group.setCoords();\r\n\r\n this.canvas.setActiveObject(group);\r\n\r\n this.canvas.renderAll();\r\n }\r\n }\r\n\r\n public setLastPanPosition(event) {\r\n this.lastPanPosition = new fabric.Point(event.touches[0].clientX, event.touches[0].clientY);\r\n }\r\n\r\n public panCanvas(event): void {\r\n const delta = new fabric.Point(\r\n event.touches[0].clientX - this.lastPanPosition.x,\r\n event.touches[0].clientY - this.lastPanPosition.y\r\n );\r\n\r\n this.canvas.relativePan(delta);\r\n this.preventPanOutsideCanvas();\r\n\r\n this.canvas.renderAll();\r\n this.setLastPanPosition(event);\r\n }\r\n\r\n private preventPanOutsideCanvas() {\r\n const canvasViewPort = this.canvas.viewportTransform;\r\n\r\n const bottomEndPoint = this.canvas.height * (canvasViewPort[0] - 1);\r\n if (canvasViewPort[5] >= 0 || -bottomEndPoint > canvasViewPort[5]) {\r\n canvasViewPort[5] = (canvasViewPort[5] >= 0) ? 0 : -bottomEndPoint;\r\n }\r\n\r\n const rightEndPoint = this.canvas.width * (canvasViewPort[0] - 1);\r\n if (canvasViewPort[4] >= 0 || -rightEndPoint > canvasViewPort[4]) {\r\n canvasViewPort[4] = (canvasViewPort[4] >= 0) ? 0 : -rightEndPoint;\r\n }\r\n }\r\n\r\n public zoom(event): void {\r\n if (Math.abs(event.overallVelocity) > 0.005) {\r\n const point = new fabric.Point(event.center.x, event.center.y);\r\n\r\n let zoom = this.canvas.getZoom();\r\n zoom = zoom + (event.scale - zoom) / 20;\r\n\r\n\r\n if (zoom < 1) {\r\n zoom = 1;\r\n this.canvas.zoomToPoint(new fabric.Point(0, 0), zoom);\r\n this.canvas.absolutePan(new fabric.Point(0, 0));\r\n } else {\r\n if (zoom > 10) {\r\n zoom = 10;\r\n }\r\n this.canvas.zoomToPoint(point, zoom);\r\n }\r\n\r\n this.setFreeDrawingBrushWidthFromZoom(zoom);\r\n this.canvas.renderAll();\r\n }\r\n }\r\n\r\n private setCanvasSize(width: number, height: number) {\r\n this.canvas.setWidth(width);\r\n this.canvas.setHeight(height);\r\n }\r\n\r\n public resetZoom() {\r\n this.canvas.zoomToPoint(new fabric.Point(0, 0), 1);\r\n this.canvas.absolutePan(new fabric.Point(0, 0));\r\n }\r\n}\r\n","import { Component, Input, Output, OnInit, OnChanges, AfterViewInit, EventEmitter, transition, ElementRef, ViewChild, OnDestroy } from '@angular/core';\nimport { ActionSheetController } from 'ionic-angular';\nimport { Gesture } from 'ionic-angular/gestures/gesture';\nimport { AvailableGeometricShape } from './../constants/available-geometric-shapes';\nimport { CanvasManagerService } from './../services/canvas-manager.service';\nimport { fabric } from 'fabric';\nimport { TranslateService } from '@ngx-translate/core';\n\nconst Black = '#000000';\nconst Transparent = 'transparent';\n\n@Component({\n selector: 'lib-mobile-sketch-tool',\n template: `<ion-content>\n <div class=\"div-canvas-container\" (touchstart)=\"mouseDown($event)\" (touchmove)=\"mouseMove($event)\" (touchend)=\"mouseUp()\"\n #pinchElement>\n <canvas id=\"canvas\"></canvas>\n\n <div class=\"color-picker\" *ngIf=\"isSelectingColor\">\n <ion-grid fixed>\n <ion-row>\n <ion-col style=\"background:#660000\" (tap)=\"setColor('#660000')\">\n </ion-col>\n <ion-col style=\"background:#663300\" (tap)=\"setColor('#663300')\">\n </ion-col>\n <ion-col style=\"background:#666600\" (tap)=\"setColor('#666600')\">\n </ion-col>\n <ion-col style=\"background:#006600\" (tap)=\"setColor('#006600')\">\n </ion-col>\n <ion-col style=\"background:#000066\" (tap)=\"setColor('#000066')\">\n </ion-col>\n <ion-col style=\"background:#660066\" (tap)=\"setColor('#660066')\">\n </ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col style=\"background:#CC0000\" (tap)=\"setColor('#CC0000')\">\n </ion-col>\n <ion-col style=\"background:#CC6600\" (tap)=\"setColor('#CC6600')\">\n </ion-col>\n <ion-col style=\"background:#CCCC00\" (tap)=\"setColor('#CCCC00')\">\n </ion-col>\n <ion-col style=\"background:#00CC00\" (tap)=\"setColor('#00CC00')\">\n </ion-col>\n <ion-col style=\"background:#0000CC\" (tap)=\"setColor('#0000CC')\">\n </ion-col>\n <ion-col style=\"background:#CC00CC\" (tap)=\"setColor('#CC00CC')\">\n </ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col style=\"background:#FF0000\" (tap)=\"setColor('#FF0000')\">\n </ion-col>\n <ion-col style=\"background:#FF8000\" (tap)=\"setColor('#FF8000')\">\n </ion-col>\n <ion-col style=\"background:#FFFF00\" (tap)=\"setColor('#FFFF00')\">\n </ion-col>\n <ion-col style=\"background:#00FF00\" (tap)=\"setColor('#00FF00')\">\n </ion-col>\n <ion-col style=\"background:#0000FF\" (tap)=\"setColor('#0000FF')\">\n </ion-col>\n <ion-col style=\"background:#FF00FF\" (tap)=\"setColor('#FF00FF')\">\n </ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col style=\"background:#FF6666\" (tap)=\"setColor('#FF6666')\">\n </ion-col>\n <ion-col style=\"background:#FFB266\" (tap)=\"setColor('#FFB266')\">\n </ion-col>\n <ion-col style=\"background:#FFFF66\" (tap)=\"setColor('#FFFF66')\">\n </ion-col>\n <ion-col style=\"background:#66FF66\" (tap)=\"setColor('#66FF66')\">\n </ion-col>\n <ion-col style=\"background:#6666FF\" (tap)=\"setColor('#6666FF')\">\n </ion-col>\n <ion-col style=\"background:#FF66FF\" (tap)=\"setColor('#FF66FF')\">\n </ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col style=\"background:#FF9999\" (tap)=\"setColor('#FF9999')\">\n </ion-col>\n <ion-col style=\"background:#FFCC99\" (tap)=\"setColor('#FFCC99')\">\n </ion-col>\n <ion-col style=\"background:#FFFF99\" (tap)=\"setColor('#FFFF99')\">\n </ion-col>\n <ion-col style=\"background:#99FF99\" (tap)=\"setColor('#99FF99')\">\n </ion-col>\n <ion-col style=\"background:#9999FF\" (tap)=\"setColor('#9999FF')\">\n </ion-col>\n <ion-col style=\"background:#FF99FF\" (tap)=\"setColor('#FF99FF')\">\n </ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col style=\"background:#FFFFFF\" (tap)=\"setColor('#FFFFFF')\">\n </ion-col>\n <ion-col style=\"background:#C0C0C0\" (tap)=\"setColor('#C0C0C0')\">\n </ion-col>\n <ion-col style=\"background:#808080\" (tap)=\"setColor('#808080')\">\n </ion-col>\n <ion-col style=\"background:#606060\" (tap)=\"setColor('#606060')\">\n </ion-col>\n <ion-col style=\"background:#303030\" (tap)=\"setColor('#606060')\">\n </ion-col>\n <ion-col style=\"background:#000000\" (tap)=\"setColor('#000000')\">\n </ion-col>\n </ion-row>\n </ion-grid>\n </div>\n </div>\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <div class=\"div-edit-toolbar\">\n <button class=\"button-edit-toolbar\" ion-button large [clear]=\"true\" (click)=\"presentShapeActionSheet()\">\n <i class=\"fas fa-shapes\" id=\"icon\"></i>\n </button>\n\n <button class=\"button-edit-toolbar\" ion-button large [clear]=\"true\" (click)=\"presentPictogramsActionSheet()\" *ngIf=\"hasPictograms\">\n <i class=\"fas fa-images\" id=\"icon\"></i>\n </button>\n\n <button class=\"button-edit-toolbar\" ion-button large [clear]=\"true\" (click)=\"presentEditActionSheet()\">\n <i class=\"fas fa-edit\" id=\"icon\"></i>\n </button>\n\n <button class=\"button-edit-toolbar\" ion-button large [clear]=\"!isDrawing\" (click)=\"draw()\">\n <i class=\"fas fa-pencil-alt\" id=\"icon\"></i>\n </button>\n\n <button class=\"button-edit-toolbar\" ion-button large [clear]=\"true\" (click)=\"onColorClicked()\">\n <i class=\"fas fa-palette\" id=\"icon\"></i>\n </button>\n\n <button class=\"button-edit-toolbar\" ion-button large [clear]=\"!isPanning\" (click)=\"onMoveClicked()\">\n <i class=\"fas fa-arrows-alt\" id=\"icon\"></i>\n </button>\n\n <button class=\"button-edit-toolbar\" ion-button large [clear]=\"true\" (click)=\"undo()\" *ngIf=\"isUndoAvailable\">\n <i class=\"fas fa-undo\" id=\"icon\"></i>\n </button>\n\n </div>\n </ion-toolbar>\n</ion-footer>\n`,\n styles: [`.div-canvas-container{height:100%;width:100%;-o-object-fit:contain;object-fit:contain;text-align:center;margin:0 auto;padding:0 auto}.scroll-content{padding:0!important;overflow-y:hidden}.div-edit-toolbar{text-align:center}.button-edit-toolbar{padding:4%!important;margin:0!important}.action-sheet-button{font-family:FontAwesome,Arial}.color-picker{position:absolute;width:100%;height:auto;bottom:0;left:0}#icon{color:#b32017}.col{padding:10px}`],\n providers: [CanvasManagerService]\n})\nexport class MobileSketchToolComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\n private gesture: Gesture;\n @ViewChild('pinchElement') element;\n\n public fillColor: string;\n public strokeColor: string;\n public isCropping: boolean;\n public isUndoAvailable: boolean;\n public isSelectingColor: boolean;\n public isDrawing: boolean;\n public isPanning: boolean;\n\n @Input() public imageData: string;\n @Input() public loadedJson: string;\n @Input() public iconsPath: string;\n @Input() public icons: [string];\n\n @Output() public canvas = new EventEmitter<fabric.Canvas>();\n\n private isLoaded: boolean;\n private previousImageData: string;\n private currentJson: JSON;\n private previousJson: JSON;\n\n constructor(\n public actionSheetCtrl: ActionSheetController,\n private canvasManagerService: CanvasManagerService,\n private translate: TranslateService\n ) {\n this.strokeColor = Black;\n this.fillColor = Transparent;\n this.isCropping = false;\n this.isPanning = false;\n this.isLoaded = false;\n this.isUndoAvailable = false;\n this.isSelectingColor = false;\n }\n\n ngOnInit() {\n if (this.imageData) {\n this.canvasManagerService.emptyCanvas();\n if (this.loadedJson == null || this.loadedJson.length < 10) {\n this.canvasManagerService.setBackgroundFromURL(this.imageData);\n } else {\n this.previousJson = JSON.parse(this.loadedJson);\n this.currentJson = this.previousJson;\n this.canvasManagerService\n .loadfromJson(JSON.parse(this.loadedJson));\n }\n this.isLoaded = true;\n this.previousImageData = this.imageData;\n }\n this.emitCanvas();\n }\n\n ngOnChanges() {\n if (this.isLoaded) {\n if (this.loadedJson === null || this.loadedJson.length < 10 || this.imageData !== this.previousImageData) {\n this.canvasManagerService.emptyCanvas();\n this.canvasManagerService.setBackgroundFromURL(this.imageData);\n this.previousImageData = this.imageData;\n this.currentJson = null;\n } else if (this.loadedJson !== JSON.stringify(this.currentJson)) {\n this.previousJson = JSON.parse(this.loadedJson);\n this.currentJson = this.previousJson;\n this.canvasManagerService\n .loadfromJson(JSON.parse(this.loadedJson));\n }\n }\n this.emitCanvas();\n }\n\n ngAfterViewInit() {\n this.gesture = new Gesture(this.element.nativeElement);\n this.gesture.listen();\n this.gesture.on('pinch', $event => this.pinch($event));\n }\n\n ngOnDestroy() {\n this.gesture.destroy();\n }\n\n get hasPictograms(): boolean {\n return !(!this.icons);\n }\n\n public addText() {\n this.disableAllStates();\n this.canvasManagerService.addText(this.strokeColor, 'text ');\n this.emitCanvas();\n }\n\n public addShape(shape: string) {\n this.disableAllStates();\n this.canvasManagerService.addGeometricShape(\n this.strokeColor,\n this.fillColor,\n AvailableGeometricShape[shape]\n );\n this.emitCanvas();\n }\n\n public addImage(source: string) {\n this.disableAllStates();\n this.canvasManagerService.addImage(this.iconsPath + source);\n this.emitCanvas();\n }\n\n public changeStrokeColor() {\n this.canvasManagerService.changeSelectedObjectsStrokeColor(\n this.strokeColor\n );\n this.canvasManagerService.setFreeDrawingBrushColor(this.strokeColor);\n this.emitCanvas();\n }\n\n public bringFoward() {\n this.disableAllStates();\n this.canvasManagerService.bringSelectedObjectsToFront();\n this.emitCanvas();\n }\n\n public sendToBack() {\n this.disableAllStates();\n this.canvasManagerService.sendSelectedObjectsToBack();\n this.emitCanvas();\n }\n\n public crop() {\n if (this.isCropping) {\n this.disableCroppping();\n }\n else {\n this.disableAllStates();\n this.isCropping = true;\n this.canvasManagerService.resetZoom();\n this.canvasManagerService.disableSelection();\n this.canvasManagerService.addSelectionRectangle();\n this.isUndoAvailable = true;\n this.previousJson = this.canvasManagerService.jsonFromCanvas();\n this.emitCanvas();\n }\n }\n\n private disableCroppping() {\n this.isCropping = false;\n this.canvasManagerService.enableSlection();\n this.isUndoAvailable = false;\n }\n\n public deleteSelection() {\n this.disableAllStates();\n this.canvasManagerService.deleteSelectedObjects();\n this.emitCanvas();\n }\n\n public mouseUp() {\n if (this.isCropping) {\n this.isCropping = false;\n this.canvasManagerService.cropImage();\n this.isUndoAvailable = true;\n this.emitCanvas();\n }\n }\n\n public mouseMove(event) {\n if (this.isCropping) {\n this.canvasManagerService.ajustCropRectangle(event);\n } else if (this.isPanning) {\n this.canvasManagerService.panCanvas(event);\n }\n }\n\n public mouseDown(event) {\n if (this.isCropping) {\n this.canvasManagerService.startSelectingCropRectangle(event);\n } else if (this.isPanning) {\n this.canvasManagerService.setLastPanPosition(event);\n }\n }\n\n public pinch(event) {\n event.preventDefault();\n this.disableDrawing();\n this.canvasManagerService.zoom(event);\n }\n\n public group() {\n this.disableAllStates();\n this.canvasManagerService.groupSelectedObjects();\n this.emitCanvas();\n }\n\n public undo() {\n this.canvasManagerService.loadfromJson(this.previousJson);\n this.isUndoAvailable = false;\n this.emitCanvas();\n }\n\n public onColorClicked() {\n this.isSelectingColor = true;\n this.stopPanning();\n }\n\n public onMoveClicked() {\n this.isPanning = !this.isPanning;\n this.disableDrawing();\n if (this.isPanning) {\n this.canvasManagerService.disableSelection()\n }\n else {\n this.canvasManagerService.enableSlection();\n }\n }\n\n private disablePanning() {\n this.isPanning = false;\n this.canvasManagerService.enableSlection();\n }\n\n private disableAllStates() {\n this.disableDrawing();\n this.disablePanning();\n }\n\n public stopPanning() {\n if (this.isPanning) {\n this.isPanning = false;\n this.canvasManagerService.enableSlection();\n }\n }\n\n public setColor(color: string) {\n this.strokeColor = color;\n this.changeStrokeColor();\n this.isSelectingColor = false;\n this.emitCanvas();\n }\n\n public draw() {\n this.isDrawing = !this.isDrawing;\n this.canvasManagerService.toggleFreeDrawing();\n this.canvasManagerService.setFreeDrawingBrushColor(this.strokeColor);\n\n if (this.isDrawing) {\n this.isPanning = false;\n }\n }\n\n private disableDrawing() {\n if (this.isDrawing) {\n this.isDrawing = false;\n this.canvasManagerService.toggleFreeDrawing();\n }\n }\n\n private translateShapeButtonsText(): Array<String> {\n const translationArray = [];\n translationArray.push(this.translate.instant('rectangle'));\n translationArray.push(this.translate.instant('triangle'));\n translationArray.push(this.translate.instant('circle'));\n translationArray.push(this.translate.instant('line'));\n translationArray.push(this.translate.instant('cross'));\n translationArray.push(this.translate.instant('text'));\n return translationArray;\n }\n\n public presentShapeActionSheet() {\n this.disableDrawing();\n\n const titleText = this.translate.instant('addGeometricShape');\n const buttonsText = this.translateShapeButtonsText();\n let i = 0;\n\n const actionSheet = this.actionSheetCtrl.create({\n title: titleText,\n buttons: [\n {\n text: '\\uf0c8 ' + buttonsText[i++],\n handler: () => {\n this.canvasManagerService.addGeometricShape(\n this.strokeColor,\n this.fillColor,\n AvailableGeometricShape.Rectangle\n );\n }\n },\n {\n text: '\\uf0d8 ' + buttonsText[i++],\n handler: () => {\n this.canvasManagerService.addGeometricShape(\n this.strokeColor,\n this.fillColor,\n AvailableGeometricShape.Triangle\n );\n }\n },\n {\n text: '\\uf111 ' + buttonsText[i++],\n handler: () => {\n this.canvasManagerService.addGeometricShape(\n this.strokeColor,\n this.fillColor,\n AvailableGeometricShape.Circle\n );\n }\n },\n {\n text: '\\uf068 ' + buttonsText[i++],\n handler: () => {\n this.canvasManagerService.addGeometricShape(\n this.strokeColor,\n this.fillColor,\n AvailableGeometricShape.Line\n );\n }\n },\n {\n text: '\\uf067 ' + buttonsText[i++],\n handler: () => {\n this.canvasManagerService.addGeometricShape(\n this.strokeColor,\n this.fillColor,\n AvailableGeometricShape.Cross\n );\n }\n },\n {\n text: '\\uf031 ' + buttonsText[i++],\n handler: () => {\n this.canvasManagerService.addText(this.strokeColor, '');\n }\n }\n ]\n });\n actionSheet.present();\n }\n\n private translateEditButtonsText(): Array<String> {\n const translationArray = [];\n translationArray.push(this.translate.instant('crop'));\n translationArray.push(this.translate.instant('group'));\n translationArray.push(this.translate.instant('bringToFront'));\n translationArray.push(this.translate.instant('sendToBack'));\n translationArray.push(this.translate.instant('delete'));\n return translationArray;\n }\n\n public presentEditActionSheet() {\n this.disableDrawing();\n\n const titleText = this.translate.instant('edition');\n\n const buttonsText = this.translateEditButtonsText();\n let i = 0;\n\n const actionSheet = this.actionSheetCtrl.create({\n title: titleText,\n buttons: [\n {\n text: '\\uf125 ' + buttonsText[i++],\n handler: () => {\n this.crop();\n }\n },\n {\n text: '\\uf247 ' + buttonsText[i++],\n handler: () => {\n this.group();\n }\n },\n {\n text: '\\uf0de ' + buttonsText[i++],\n handler: () => {\n this.bringFoward();\n }\n },\n {\n text: '\\uf0dd ' + buttonsText[i++],\n handler: () => {\n this.sendToBack();\n }\n },\n {\n text: '\\uf1f8 ' + buttonsText[i++],\n handler: () => {\n this.deleteSelection();\n }\n }\n ]\n });\n actionSheet.present();\n }\n\n public presentPictogramsActionSheet() {\n this.disableDrawing();\n\n const buttons = [];\n const actionSheetStyles = [];\n const images = this.icons;\n for (let i = 0; i < images.length; i++) {\n const style = document.createElement('style');\n style.type = 'text/css';\n style.innerHTML =\n '.customCSSClass' +\n i +\n '{background: url(' +\n \"'\" +\n this.iconsPath +\n images[i] +\n \"'\" +\n ') no-repeat !important;padding-left:50px !important;height:80px; background-position: left center !important;}';\n document.getElementsByTagName('head')[0].appendChild(style);\n actionSheetStyles.push(style);\n buttons.push({\n role: 'destructive',\n text: images[i],\n cssClass: 'customCSSClass' + i,\n handler: () => {\n this.addImage(images[i]);\n }\n });\n }\n\n const titleText = this.translate.instant('addPictogram');\n\n const actionSheet = this.actionSheetCtrl.create({\n title: titleText,\n buttons: buttons\n });\n actionSheet.onDidDismiss(() => {\n for (let i = 0; i < actionSheetStyles.length; i++) {\n if (actionSheetStyles[i].parentNode != null) {\n actionSheetStyles[i].parentNode.removeChild(actionSheetStyles[i]);\n }\n }\n });\n\n actionSheet.present();\n }\n\n public emitCanvas() {\n this.canvas.emit(this.canvasManagerService.canvas);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IonicModule } from 'ionic-angular';\n\nimport { MobileSketchToolComponent } from './mobile-component/mobile-sketch-tool.component';\nimport { CanvasManagerService } from './services/canvas-manager.service';\n\n@NgModule({\n imports: [CommonModule, IonicModule],\n declarations: [\n MobileSketchToolComponent,\n ],\n providers: [\n CanvasManagerService,\n ],\n exports: [MobileSketchToolComponent]\n})\nexport class SketchToolModule {}\n"]}
\No newline at end of file