UNPKG

74.1 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","emptyCanvas","mousePosition","x","y","cropStartingPosition","canvas","freeDrawingBrush","width","Object","defineProperty","prototype","getObjects","backgroundImage","getActiveObject","getActiveObjects","dispose","fabric","Canvas","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","height","left","top","fill","stroke","strokeWidth","cornerSize","radius","createHorizontalLine","line","setControlsVisibility","bl","br","tl","tr","mt","mb","createVerticalLine","ml","mr","horizontalLine","verticalLine","toggleFreeDrawing","isDrawingMode","setFreeDrawingBrushColor","color","zoom","addText","inputText","text","IText","fontFamily","fontStyle","setColor","addImage","imageURL","Promise","resolve","reject","_this","image","Image","onload","img","fabricImage","angle","scaleX","scaleY","src","resize","resizeCanvasAndComputeScaleFactor","f_img","scaleData","setBackgroundImage","bind","scaleFactor","container","document","getElementsByClassName","setWidth","clientWidth","setHeight","clientHeight","canvasWidth","getWidth","canvasHeight","getHeight","onOrientationChange","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","objectScale","objects","selectable","selection","exportImageAsDataURL","toDataURL","selectItem","itemNumber","setActiveObject","item","getIndexOf","activeObject","indexOf","selectLastObject","enterEditing","activeObjects_6","activeObjects_6_1","addSelectionRectangle","cropRectangle","originX","originY","strokeDashArray","opacity","visible","ajustCropRectangleFromMouse","event","Math","min","layerX","layerY","w","abs","h","startSelectingCropRectangleFromMouse","setCoords","moveAllObjectsInCanvas","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","point","center","getZoom","additionalEvent","zoomToPoint","absolutePan","freeDrawingBrushWidthFromZoom","Injectable","MobileSketchToolComponent","actionSheetCtrl","canvasManagerService","translate","EventEmitter","isCropping","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","pinchEvent","icons","addShape","source","iconsPath","changeStrokeColor","bringFoward","crop","deleteSelection","mouseUp","mouseMove","mouseDown","preventDefault","undo","onColorClicked","draw","isDrawing","disableDrawing","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';\nimport { fabric } from 'fabric';\n\nimport { AvailableGeometricShape } from './../constants/available-geometric-shapes';\nimport { SHAPE_DATA } from './../constants/shape-data';\n\ninterface ScaleData {\n scaleFactor: number;\n left: number;\n top: number;\n}\n\ninterface Position {\n x: number;\n y: number;\n}\n\n@Injectable()\nexport class CanvasManagerService {\n public canvas;\n\n private cropRectangle: fabric.Rect;\n private mousePosition: Position;\n private cropStartingPosition: Position;\n private lastPanPosition: fabric.Point;\n\n constructor() {\n this.emptyCanvas();\n this.mousePosition = {x: 0, y: 0};\n this.cropStartingPosition = {x: 0, y: 0};\n this.canvas.freeDrawingBrush.width = SHAPE_DATA.freeDrawingBrushWidth;\n }\n\n get backgroundImage() {\n return this.canvas;\n }\n\n get canvasObjects() {\n return this.canvas.getObjects();\n }\n\n get canvasBackgroundImage() {\n return this.canvas.backgroundImage;\n }\n\n get activeObject() {\n return this.canvas.getActiveObject();\n }\n\n get activeGroup() {\n return this.canvas.getActiveObjects();\n }\n\n public emptyCanvas(): void {\n if (this.canvas) {\n this.canvas.dispose();\n }\n this.canvas = new fabric.Canvas('canvas');\n this.canvas.clear();\n this.canvas.remove(this.canvas.getObjects());\n }\n\n public loadNewImage(backgroundImageURL?: string): void {\n this.emptyCanvas();\n if (backgroundImageURL) {\n this.setBackgroundFromURL(backgroundImageURL);\n }\n }\n\n public renderCanvas(): void {\n this.markSelectedObjectsDirty();\n this.canvas.renderAll();\n }\n\n public addGeometricShape(strokeColor: string, fillColor: string, shape: AvailableGeometricShape): void {\n switch (shape) {\n case AvailableGeometricShape.Rectangle:\n this.addRectangle(strokeColor, fillColor);\n break;\n case AvailableGeometricShape.Circle:\n this.addCircle(strokeColor, fillColor);\n break;\n case AvailableGeometricShape.Triangle:\n this.addTriangle(strokeColor, fillColor);\n break;\n case AvailableGeometricShape.Line:\n this.addHorizontalLine(strokeColor, fillColor);\n break;\n case AvailableGeometricShape.Cross:\n this.addCross(strokeColor, fillColor);\n break;\n }\n }\n\n private addRectangle(strokeColor: string, fillColor: string): void {\n this.canvas.add(\n new fabric.Rect({\n width: SHAPE_DATA.width,\n height: SHAPE_DATA.height,\n left: SHAPE_DATA.left,\n top: SHAPE_DATA.top,\n fill: fillColor,\n stroke: strokeColor,\n strokeWidth: SHAPE_DATA.stroke,\n cornerSize: SHAPE_DATA.cornerSize\n })\n );\n }\n\n private addCircle(strokeColor: string, fillColor: string): void {\n this.canvas.add(\n new fabric.Circle({\n left: SHAPE_DATA.left,\n top: SHAPE_DATA.top,\n radius: SHAPE_DATA.radius,\n stroke: strokeColor,\n strokeWidth: SHAPE_DATA.stroke,\n fill: fillColor,\n cornerSize: SHAPE_DATA.cornerSize\n })\n );\n }\n\n private addTriangle(strokeColor: string, fillColor: string): void {\n this.canvas.add(\n new fabric.Triangle({\n width: SHAPE_DATA.width,\n height: SHAPE_DATA.height,\n left: SHAPE_DATA.left,\n top: SHAPE_DATA.top,\n fill: fillColor,\n stroke: strokeColor,\n strokeWidth: SHAPE_DATA.stroke,\n cornerSize: SHAPE_DATA.cornerSize\n })\n );\n }\n\n private addHorizontalLine(strokeColor: string, fillColor: string): void {\n this.canvas.add(this.createHorizontalLine(strokeColor));\n }\n\n private createHorizontalLine(strokeColor: string): fabric.Line {\n const line = new fabric.Line([100, 150, 200, 150], {\n left: 50,\n top: 100,\n stroke: strokeColor,\n strokeWidth: 5,\n cornerSize: SHAPE_DATA.cornerSize\n });\n\n line.setControlsVisibility({\n bl: false,\n br: false,\n tl: false,\n tr: false,\n mt: false,\n mb: false\n });\n\n return line;\n }\n\n private createVerticalLine(strokeColor: string): fabric.Line {\n const line = new fabric.Line([150, 100, 150, 200], {\n left: 100,\n top: 50,\n stroke: strokeColor,\n strokeWidth: 5,\n cornerSize: SHAPE_DATA.cornerSize\n });\n\n line.setControlsVisibility({\n bl: false,\n br: false,\n tl: false,\n tr: false,\n ml: false,\n mr: false\n });\n\n return line;\n }\n\n private addCross(strokeColor: string, fillColor: string): void {\n const horizontalLine = this.createHorizontalLine(strokeColor);\n const verticalLine = this.createVerticalLine(strokeColor);\n this.canvas.add(horizontalLine);\n this.canvas.add(verticalLine);\n }\n\n public toggleFreeDrawing(): void {\n this.canvas.isDrawingMode = !this.canvas.isDrawingMode;\n }\n\n public setFreeDrawingBrushColor(color: string): void {\n this.canvas.freeDrawingBrush.color = color;\n }\n\n set freeDrawingBrushWidthFromZoom(zoom) {\n this.canvas.freeDrawingBrush.width = SHAPE_DATA.freeDrawingBrushWidth * (1 / zoom);\n }\n\n public addText(color: string, inputText: string): void {\n const text = new fabric.IText('text', {\n fontFamily: 'arial black',\n fontStyle: 'bold',\n left: SHAPE_DATA.left,\n top: SHAPE_DATA.top,\n cornerSize: SHAPE_DATA.cornerSize\n });\n\n text.setColor(color);\n\n this.canvas.add(text);\n }\n\n public addImage(imageURL: string): Promise<void> {\n return new Promise(\n (resolve, reject): void => {\n const canvas = this.canvas;\n\n const image = new Image();\n image.onload = function(img) {\n const fabricImage = new fabric.Image(image, {\n angle: 0,\n width: image.width,\n height: image.height,\n left: SHAPE_DATA.left,\n top: SHAPE_DATA.top,\n scaleX: 1,\n scaleY: 1,\n cornerSize: SHAPE_DATA.cornerSize\n });\n canvas.add(fabricImage);\n resolve();\n };\n image.src = imageURL;\n }\n );\n }\n\n public setBackgroundFromURL(backgroundImageURL: string): Promise<void> {\n const canvas = this.canvas;\n const resize = this.resizeCanvasAndComputeScaleFactor;\n\n return new Promise(\n (resolve, reject): void => {\n if (backgroundImageURL == null) {\n return reject();\n }\n const image = new Image();\n image.onload = function() {\n const f_img = new fabric.Image(image, {});\n\n const scaleData = resize(f_img, canvas);\n\n canvas.setBackgroundImage(f_img, canvas.renderAll.bind(canvas), {\n scaleX: scaleData.scaleFactor,\n scaleY: scaleData.scaleFactor\n });\n\n canvas.renderAll();\n resolve();\n };\n image.src = backgroundImageURL;\n }\n );\n }\n\n private resizeCanvasAndComputeScaleFactor(f_img: fabric.Image, canvas: fabric.Canvas): ScaleData {\n const container = document.getElementsByClassName(\n 'div-canvas-container'\n )[0];\n\n canvas.setWidth(container.clientWidth);\n canvas.setHeight(container.clientHeight);\n\n const canvasWidth = canvas.getWidth();\n const canvasHeight = canvas.getHeight();\n\n const canvasAspect = canvasWidth / canvasHeight;\n const imgAspect = f_img.width / f_img.height;\n let left, top, scaleFactor;\n\n if (canvasAspect <= imgAspect) {\n scaleFactor = canvasWidth / f_img.width;\n left = 0;\n top = -(f_img.height * scaleFactor - canvasHeight) / 2;\n } else {\n scaleFactor = canvasHeight / f_img.height;\n top = 0;\n left = -(f_img.width * scaleFactor - canvasWidth) / 2;\n }\n return { scaleFactor: scaleFactor, left: left, top: top };\n }\n\n public onOrientationChange() {\n this.mousePosition = {x: this.canvas.getWidth, y: this.canvas.getHeight };\n this.cropImage();\n }\n\n public changeSelectedObjectsFillColor(color: string): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n for (const object of activeObjects) {\n object.setColor(color);\n this.canvas.renderAll();\n }\n }\n }\n\n public changeSelectedObjectsStrokeColor(color: string): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n for (const object of activeObjects) {\n if (object.type === 'i-text') {\n object.setColor(color);\n } else {\n object.stroke = color;\n object.set('dirty', true);\n }\n }\n this.canvas.renderAll();\n }\n }\n\n public deleteSelectedObjects(): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n for (const object of activeObjects) {\n this.canvas.remove(object);\n }\n this.canvas.discardActiveObject();\n this.canvas.renderAll();\n }\n }\n\n public bringSelectedObjectsToFront(): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n for (const object of activeObjects) {\n this.canvas.bringToFront(object);\n }\n }\n }\n\n public sendSelectedObjectsToBack(): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n for (const object of activeObjects) {\n this.canvas.sendToBack(object);\n }\n }\n }\n\n public jsonFromCanvas(): JSON {\n return this.canvas.toJSON();\n }\n\n public loadfromJson(json: JSON): Promise<void> {\n const container = document.getElementsByClassName(\n 'div-canvas-container'\n )[0];\n\n this.canvas.setWidth(container.clientWidth);\n this.canvas.setHeight(container.clientHeight);\n\n return new Promise(\n (resolve, reject): void => {\n this.adjustCanvas(json);\n this.canvas.loadFromJSON(json, this.canvas.renderAll.bind(this.canvas));\n resolve();\n }\n );\n }\n\n public adjustCanvas(json: JSON): void {\n const backgroundImage = json['backgroundImage'];\n\n const container = document.getElementsByClassName(\n 'div-canvas-container'\n )[0];\n\n const width = backgroundImage['width'];\n const height = backgroundImage['height'];\n\n const canvasWidth = container.clientWidth;\n const canvasHeight = container.clientHeight;\n\n const canvasAspect = canvasWidth / canvasHeight;\n const imgAspect = width / height;\n let scaleFactor;\n\n if (canvasAspect <= imgAspect) {\n scaleFactor = canvasWidth / width;\n } else {\n scaleFactor = canvasHeight / height;\n }\n\n const objectScale = scaleFactor / backgroundImage['scaleX'];\n\n backgroundImage['scaleX'] = scaleFactor;\n backgroundImage['scaleY'] = scaleFactor;\n\n this.canvas.setWidth(width * scaleFactor);\n this.canvas.setHeight(height * scaleFactor);\n\n const objects = json['objects'];\n\n for (let i = 0; i < objects.length; i++) {\n objects[i]['left'] *= objectScale;\n objects[i]['top'] *= objectScale;\n objects[i]['scaleX'] *= objectScale;\n objects[i]['scaleY'] *= objectScale;\n }\n\n this.canvas.selectable = true;\n this.canvas.selection = true;\n\n this.canvas.renderAll();\n }\n\n public exportImageAsDataURL(): string {\n return this.canvas.toDataURL('image/png');\n }\n\n public selectItem(itemNumber: number): void {\n this.canvas.setActiveObject(this.canvas.item(itemNumber));\n }\n\n public getIndexOf(activeObject): number {\n return this.canvas.getObjects().indexOf(activeObject);\n }\n\n private selectLastObject(): void {\n const itemNumber = this.canvas.getObjects().length - 1;\n const object = this.canvas.item(itemNumber);\n this.canvas.setActiveObject(object);\n object.enterEditing();\n }\n\n private markSelectedObjectsDirty(): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n for (const object of activeObjects) {\n object.set('dirty', true);\n }\n }\n }\n\n public addSelectionRectangle(): void {\n this.cropRectangle = new fabric.Rect({\n fill: 'transparent',\n originX: 'left',\n originY: 'top',\n stroke: '#ccc',\n strokeDashArray: [2, 2],\n opacity: 1,\n width: 1,\n height: 1\n });\n\n this.cropRectangle.visible = false;\n this.canvas.add(this.cropRectangle);\n }\n\n public ajustCropRectangleFromMouse(event: MouseEvent): boolean {\n const x = Math.min(event.layerX, this.mousePosition.x),\n y = Math.min(event.layerY, this.mousePosition.y),\n w = Math.abs(event.layerX - this.mousePosition.x),\n h = Math.abs(event.layerY - this.mousePosition.y);\n\n if (!w || !h) {\n return false;\n }\n\n this.cropRectangle\n .set('top', y)\n .set('left', x)\n .set('width', w)\n .set('height', h);\n\n this.canvas.renderAll();\n\n return true;\n }\n\n public startSelectingCropRectangleFromMouse(event: MouseEvent): void {\n this.cropStartingPosition = { x: this.canvas.left, y: this.canvas.top };\n\n this.cropRectangle.left = event.layerX;\n this.cropRectangle.top = event.layerY;\n this.cropRectangle.setCoords();\n\n this.mousePosition = {x: event.layerX, y: event.layerY };\n\n this.canvas.renderAll();\n this.cropRectangle.visible = true;\n this.canvas.bringToFront(this.cropRectangle);\n }\n\n public cropImage(): void {\n const left = this.cropRectangle.left;\n const top = this.cropRectangle.top;\n\n const width = this.cropRectangle.width;\n const height = this.cropRectangle.height;\n\n const container = document.getElementsByClassName(\n 'div-canvas-container'\n )[0];\n\n const canvasWidth = container.clientWidth;\n const canvasHeight = container.clientHeight;\n\n const canvasAspect = canvasWidth / canvasHeight;\n const imgAspect = width / height;\n let scaleFactor;\n\n if (canvasAspect <= imgAspect) {\n scaleFactor = canvasWidth / width;\n } else {\n scaleFactor = canvasHeight / height;\n }\n\n this.canvas.setWidth(width * scaleFactor);\n this.canvas.setHeight(height * scaleFactor);\n\n this.canvas.backgroundImage.scaleX *= scaleFactor;\n this.canvas.backgroundImage.scaleY *= scaleFactor;\n\n this.canvas.backgroundImage.left -= left;\n this.canvas.backgroundImage.left *= scaleFactor;\n this.canvas.backgroundImage.top -= top - scaleFactor;\n this.canvas.backgroundImage.top *= scaleFactor;\n\n this.moveAllObjectsInCanvas(-1 * left, -1 * top, scaleFactor);\n\n this.canvas.selectable = true;\n this.canvas.selection = true;\n this.cropRectangle.visible = false;\n\n this.canvas.remove(this.cropRectangle);\n\n this.canvas.renderAll();\n }\n\n public ajustCropRectangle(event): boolean {\n const touch = event.touches[0];\n\n const rect = event.target.getBoundingClientRect();\n\n const x = Math.min(touch.clientX - rect.left, this.mousePosition.x),\n y = Math.min(touch.clientY - rect.top, this.mousePosition.y),\n w = Math.abs(touch.clientX - rect.left - this.mousePosition.x),\n h = Math.abs(touch.clientY - rect.top - this.mousePosition.y);\n\n if (!w || !h) {\n return false;\n }\n\n this.cropRectangle\n .set('left', x)\n .set('top', y)\n .set('width', w)\n .set('height', h);\n\n this.canvas.renderAll();\n\n return true;\n }\n\n public startSelectingCropRectangle(event): void {\n this.cropStartingPosition = { x: this.canvas.left, y: this.canvas.top };\n\n const touch = event.touches[0];\n const rect = event.target.getBoundingClientRect();\n\n this.cropRectangle.left = touch.clientX - rect.left;\n this.cropRectangle.top = touch.clientY - rect.top;\n this.cropRectangle.setCoords();\n\n this.mousePosition = { x: touch.clientX - rect.left, y: touch.clientY - rect.top };\n\n this.canvas.renderAll();\n this.cropRectangle.visible = true;\n this.canvas.bringToFront(this.cropRectangle);\n }\n\n public disableSelection() {\n this.canvas.selection = false;\n }\n\n private moveAllObjectsInCanvas(x: number, y: number, scaleFactor: number): void {\n const objects = this.canvas.getObjects();\n for (const obj of objects) {\n obj.left += x;\n obj.left *= scaleFactor;\n obj.scaleX *= scaleFactor;\n obj.top += y;\n obj.scaleY *= scaleFactor;\n obj.top *= scaleFactor;\n obj.setCoords();\n }\n }\n\n public groupSelectedObjects(): void {\n const activeObjects = this.canvas.getActiveObjects();\n\n if (activeObjects) {\n const objects = [];\n\n for (const object of activeObjects) {\n objects.push(object);\n }\n this.deleteSelectedObjects();\n\n const group = new fabric.Group(objects);\n this.canvas.add(group);\n group.setCoords();\n\n this.canvas.setActiveObject(group);\n\n this.canvas.renderAll();\n }\n }\n\n public setLastPanPosition(event) {\n this.lastPanPosition = new fabric.Point(event.touches[0].clientX, event.touches[0].clientY);\n }\n\n public panCanvas(event): void {\n const delta = new fabric.Point(\n event.touches[0].clientX - this.lastPanPosition.x,\n event.touches[0].clientY - this.lastPanPosition.y\n );\n\n this.canvas.relativePan(delta);\n this.preventPanOutsideCanvas();\n\n this.canvas.renderAll();\n this.setLastPanPosition(event);\n }\n\n private preventPanOutsideCanvas() {\n const canvasViewPort = this.canvas.viewportTransform;\n\n const imageHeight = this.canvas.height * canvasViewPort[0];\n const imageWidth = this.canvas.width * canvasViewPort[0];\n\n const bottomEndPoint = this.canvas.height * (canvasViewPort[0] - 1);\n if (canvasViewPort[5] >= 0 || -bottomEndPoint > canvasViewPort[5]) {\n canvasViewPort[5] = (canvasViewPort[5] >= 0) ? 0 : -bottomEndPoint;\n }\n\n const rightEndPoint = this.canvas.width * (canvasViewPort[0] - 1);\n if (canvasViewPort[4] >= 0 || -rightEndPoint > canvasViewPort[4]) {\n canvasViewPort[4] = (canvasViewPort[4] >= 0) ? 0 : -rightEndPoint;\n }\n }\n\n public zoom(event): void {\n const point = new fabric.Point(event.center.x, event.center.y);\n\n let zoom = this.canvas.getZoom();\n if (event.additionalEvent === 'pinchout') {\n zoom *= 1.05;\n }\n if (event.additionalEvent === 'pinchin') {\n zoom /= 1.05;\n }\n\n if (zoom < 1) {\n zoom = 1;\n this.canvas.zoomToPoint(new fabric.Point(0, 0), zoom);\n this.canvas.absolutePan(new fabric.Point(0, 0));\n } else {\n if (zoom > 10) {\n zoom = 10;\n }\n this.canvas.zoomToPoint(point, zoom);\n }\n\n this.freeDrawingBrushWidthFromZoom(zoom);\n this.canvas.renderAll();\n }\n}\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\n class=\"div-canvas-container\"\n (touchstart)=\"mouseDown($event)\"\n (touchmove)=\"mouseMove($event)\"\n (touchend)=\"mouseUp($event)\"\n #pinchElement\n >\n <canvas id=\"canvas\"></canvas>\n\n <div\n class=\"color-picker\"\n *ngIf=\"isSelectingColor\"\n >\n <ion-grid fixed>\n <ion-row>\n <ion-col\n style=\"background:#660000\"\n (tap)=\"setColor('#660000')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#663300\"\n (tap)=\"setColor('#663300')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#666600\"\n (tap)=\"setColor('#666600')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#006600\"\n (tap)=\"setColor('#006600')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#000066\"\n (tap)=\"setColor('#000066')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#660066\"\n (tap)=\"setColor('#660066')\"\n > \n </ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col\n style=\"background:#CC0000\"\n (tap)=\"setColor('#CC0000')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#CC6600\"\n (tap)=\"setColor('#CC6600')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#CCCC00\"\n (tap)=\"setColor('#CCCC00')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#00CC00\"\n (tap)=\"setColor('#00CC00')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#0000CC\"\n (tap)=\"setColor('#0000CC')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#CC00CC\"\n (tap)=\"setColor('#CC00CC')\"\n > \n </ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col\n style=\"background:#FF0000\"\n (tap)=\"setColor('#FF0000')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#FF8000\"\n (tap)=\"setColor('#FF8000')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#FFFF00\"\n (tap)=\"setColor('#FFFF00')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#00FF00\"\n (tap)=\"setColor('#00FF00')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#0000FF\"\n (tap)=\"setColor('#0000FF')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#FF00FF\"\n (tap)=\"setColor('#FF00FF')\"\n > \n </ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col\n style=\"background:#FF6666\"\n (tap)=\"setColor('#FF6666')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#FFB266\"\n (tap)=\"setColor('#FFB266')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#FFFF66\"\n (tap)=\"setColor('#FFFF66')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#66FF66\"\n (tap)=\"setColor('#66FF66')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#6666FF\"\n (tap)=\"setColor('#6666FF')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#FF66FF\"\n (tap)=\"setColor('#FF66FF')\"\n > \n </ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col\n style=\"background:#FF9999\"\n (tap)=\"setColor('#FF9999')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#FFCC99\"\n (tap)=\"setColor('#FFCC99')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#FFFF99\"\n (tap)=\"setColor('#FFFF99')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#99FF99\"\n (tap)=\"setColor('#99FF99')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#9999FF\"\n (tap)=\"setColor('#9999FF')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#FF99FF\"\n (tap)=\"setColor('#FF99FF')\"\n > \n </ion-col>\n\n </ion-row>\n <ion-row>\n <ion-col\n style=\"background:#FFFFFF\"\n (tap)=\"setColor('#FFFFFF')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#C0C0C0\"\n (tap)=\"setColor('#C0C0C0')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#808080\"\n (tap)=\"setColor('#808080')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#606060\"\n (tap)=\"setColor('#606060')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#303030\"\n (tap)=\"setColor('#606060')\"\n > \n </ion-col>\n <ion-col\n style=\"background:#000000\"\n (tap)=\"setColor('#000000')\"\n > \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\n class=\"button-edit-toolbar\"\n ion-button\n large\n [clear]=\"true\"\n (click)=\"presentShapeActionSheet()\"\n >\n <i\n class=\"fas fa-shapes\"\n id=\"icon\"\n ></i>\n </button>\n\n <button\n class=\"button-edit-toolbar\"\n ion-button\n large\n [clear]=\"true\"\n (click)=\"presentPictogramsActionSheet()\"\n *ngIf=\"hasPictograms\"\n >\n <i\n class=\"fas fa-images\"\n id=\"icon\"\n ></i>\n </button>\n\n <button\n class=\"button-edit-toolbar\"\n ion-button\n large\n [clear]=\"true\"\n (click)=\"presentEditActionSheet()\"\n >\n <i\n class=\"fas fa-edit\"\n id=\"icon\"\n ></i>\n </button>\n\n <button\n class=\"button-edit-toolbar\"\n ion-button\n large\n [clear]=\"true\"\n (click)=\"draw()\"\n >\n <i\n class=\"fas fa-pencil-alt\"\n id=\"icon\"\n ></i>\n </button>\n\n <button\n class=\"button-edit-toolbar\"\n ion-button\n large\n [clear]=\"true\"\n (click)=\"onColorClicked()\"\n >\n <i\n class=\"fas fa-palette\"\n id=\"icon\"\n ></i>\n </button>\n\n <button\n class=\"button-edit-toolbar\"\n ion-button\n large\n [clear]=\"true\"\n (click)=\"undo()\"\n *ngIf=\"isUndoAvailable\"\n >\n <i\n class=\"fas fa-undo\"\n id=\"icon\"\n ></i>\n </button>\n\n </div>\n </ion-toolbar>\n</ion-footer>\n`,\n styles: [`.div-canvas-container{text-align:center;height:100%;width:100%;-o-object-fit:contain;object-fit:contain}.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}`],\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\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 isPanning: 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.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 private pinchEvent(event) {\n this.canvasManagerService.emptyCanvas();\n }\n\n get hasPictograms(): boolean {\n return !(!this.icons);\n }\n\n public addText() {\n this.canvasManagerService.addText(this.strokeColor, 'text ');\n this.emitCanvas();\n }\n\n public addShape(shape: string) {\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.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.canvasManagerService.bringSelectedObjectsToFront();\n this.emitCanvas();\n }\n\n public sendToBack() {\n this.canvasManagerService.sendSelectedObjectsToBack();\n this.emitCanvas();\n }\n\n public crop() {\n this.isCropping = true;\n this.canvasManagerService.disableSelection();\n this.canvasManagerService.addSelectionRectangle();\n this.isUndoAvailable = true;\n this.previousJson = this.canvasManagerService.jsonFromCanvas();\n this.emitCanvas();\n }\n\n public deleteSelection() {\n this.canvasManagerService.deleteSelectedObjects();\n this.emitCanvas();\n }\n\n public mouseUp(event) {\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 (event.touches.length === 3) {\n this.canvasManagerService.panCanvas(event);\n }\n }\n\n public mouseDown(event) {\n if (this.isCropping) {\n this.canvasManagerService.startSelectingCropRectangle(event);\n } else if (event.touches.length === 3) {\n this.canvasManagerService.setLastPanPosition(event);\n }\n }\n\n public pinch(event) {\n event.preventDefault();\n this.canvasManagerService.zoom(event);\n }\n\n public group() {\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 }\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\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