@syncfusion/ej2-image-editor 21.2.6 → 22.1.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/.eslintrc.json +1 -0
  2. package/CHANGELOG.md +6 -24
  3. package/dist/ej2-image-editor.umd.min.js +2 -2
  4. package/dist/ej2-image-editor.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-image-editor.es2015.js +19186 -12390
  6. package/dist/es6/ej2-image-editor.es2015.js.map +1 -1
  7. package/dist/es6/ej2-image-editor.es5.js +19217 -12390
  8. package/dist/es6/ej2-image-editor.es5.js.map +1 -1
  9. package/dist/global/ej2-image-editor.min.js +2 -2
  10. package/dist/global/ej2-image-editor.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/package.json +11 -11
  13. package/src/image-editor/action/crop.d.ts +35 -0
  14. package/src/image-editor/action/crop.js +818 -0
  15. package/src/image-editor/action/draw.d.ts +122 -0
  16. package/src/image-editor/action/draw.js +3253 -0
  17. package/src/image-editor/action/export.d.ts +23 -0
  18. package/src/image-editor/action/export.js +364 -0
  19. package/src/image-editor/action/filter.d.ts +35 -0
  20. package/src/image-editor/action/filter.js +699 -0
  21. package/src/image-editor/action/freehand-draw.d.ts +61 -0
  22. package/src/image-editor/action/freehand-draw.js +1015 -0
  23. package/src/image-editor/action/index.d.ts +9 -0
  24. package/src/image-editor/action/index.js +9 -0
  25. package/src/image-editor/action/selection.d.ts +140 -0
  26. package/src/image-editor/action/selection.js +4689 -0
  27. package/src/image-editor/action/shape.d.ts +93 -0
  28. package/src/image-editor/action/shape.js +2657 -0
  29. package/src/image-editor/action/transform.d.ts +67 -0
  30. package/src/image-editor/action/transform.js +1670 -0
  31. package/src/image-editor/action/undo-redo.d.ts +43 -0
  32. package/src/image-editor/action/undo-redo.js +800 -0
  33. package/src/image-editor/base/enum.d.ts +189 -0
  34. package/src/image-editor/base/enum.js +198 -0
  35. package/src/image-editor/{image-editor-model.d.ts → base/image-editor-model.d.ts} +131 -43
  36. package/src/image-editor/{image-editor.d.ts → base/image-editor.d.ts} +425 -1108
  37. package/src/image-editor/base/image-editor.js +2458 -0
  38. package/src/image-editor/base/index.d.ts +4 -0
  39. package/src/image-editor/base/index.js +2 -0
  40. package/src/image-editor/base/interface.d.ts +1120 -0
  41. package/src/image-editor/base/interface.js +1 -0
  42. package/src/image-editor/index.d.ts +3 -5
  43. package/src/image-editor/index.js +3 -4
  44. package/src/image-editor/renderer/index.d.ts +1 -0
  45. package/src/image-editor/renderer/index.js +1 -0
  46. package/src/image-editor/renderer/toolbar.d.ts +105 -0
  47. package/src/image-editor/renderer/toolbar.js +3019 -0
  48. package/styles/bootstrap-dark.css +69 -3
  49. package/styles/bootstrap.css +69 -3
  50. package/styles/bootstrap4.css +69 -3
  51. package/styles/bootstrap5-dark.css +69 -3
  52. package/styles/bootstrap5.css +69 -3
  53. package/styles/fabric-dark.css +69 -3
  54. package/styles/fabric.css +69 -3
  55. package/styles/fluent-dark.css +69 -3
  56. package/styles/fluent.css +69 -3
  57. package/styles/highcontrast-light.css +69 -3
  58. package/styles/highcontrast.css +69 -7
  59. package/styles/image-editor/_layout.scss +21 -7
  60. package/styles/image-editor/_material3-dark-definition.scss +1 -0
  61. package/styles/image-editor/_material3-definition.scss +11 -0
  62. package/styles/image-editor/_theme.scss +9 -2
  63. package/styles/image-editor/bootstrap-dark.css +69 -3
  64. package/styles/image-editor/bootstrap.css +69 -3
  65. package/styles/image-editor/bootstrap4.css +69 -3
  66. package/styles/image-editor/bootstrap5-dark.css +69 -3
  67. package/styles/image-editor/bootstrap5.css +69 -3
  68. package/styles/image-editor/fabric-dark.css +69 -3
  69. package/styles/image-editor/fabric.css +69 -3
  70. package/styles/image-editor/fluent-dark.css +69 -3
  71. package/styles/image-editor/fluent.css +69 -3
  72. package/styles/image-editor/highcontrast-light.css +69 -3
  73. package/styles/image-editor/highcontrast.css +69 -7
  74. package/styles/image-editor/icons/_bootstrap-dark.scss +132 -0
  75. package/styles/image-editor/icons/_bootstrap.scss +132 -0
  76. package/styles/image-editor/icons/_bootstrap4.scss +132 -0
  77. package/styles/image-editor/icons/_bootstrap5.scss +132 -0
  78. package/styles/image-editor/icons/_fabric-dark.scss +132 -0
  79. package/styles/image-editor/icons/_fabric.scss +132 -0
  80. package/styles/image-editor/icons/_fluent.scss +132 -0
  81. package/styles/image-editor/icons/_fusionnew.scss +132 -0
  82. package/styles/image-editor/icons/_highcontrast-light.scss +132 -0
  83. package/styles/image-editor/icons/_highcontrast.scss +132 -0
  84. package/styles/image-editor/icons/_material-dark.scss +132 -0
  85. package/styles/image-editor/icons/_material.scss +132 -0
  86. package/styles/image-editor/icons/_material3-dark.scss +1 -0
  87. package/styles/image-editor/icons/_material3.scss +133 -1
  88. package/styles/image-editor/icons/_tailwind.scss +132 -0
  89. package/styles/image-editor/material-dark.css +69 -3
  90. package/styles/image-editor/material.css +69 -3
  91. package/styles/image-editor/material3-dark.css +453 -0
  92. package/styles/image-editor/material3-dark.scss +14 -0
  93. package/styles/image-editor/material3.css +509 -0
  94. package/styles/image-editor/material3.scss +14 -0
  95. package/styles/image-editor/tailwind-dark.css +69 -3
  96. package/styles/image-editor/tailwind.css +69 -3
  97. package/styles/material-dark.css +69 -3
  98. package/styles/material.css +69 -3
  99. package/styles/material3-dark.css +453 -0
  100. package/styles/material3-dark.scss +3 -0
  101. package/styles/material3.css +509 -0
  102. package/styles/material3.scss +3 -0
  103. package/styles/tailwind-dark.css +69 -3
  104. package/styles/tailwind.css +69 -3
  105. package/src/image-editor/image-editor.js +0 -14784
@@ -0,0 +1,3253 @@
1
+ import { extend, isNullOrUndefined, Browser, isBlazor, getComponent } from '@syncfusion/ej2-base';
2
+ import { Dialog, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';
3
+ var Draw = /** @class */ (function () {
4
+ function Draw(parent) {
5
+ this.cancelObjColl = [];
6
+ this.cancelPointColl = [];
7
+ this.isInitialLoading = false; // Specifies whether image is loaded for the first time or not (for applying initial filter)
8
+ this.fileName = '';
9
+ this.isErrorImage = false;
10
+ this.isShapeTextInserted = false;
11
+ this.isRotateZoom = false; // To restore zoomed image on selection crop selection
12
+ this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null }; // restore stroke settings on cancel
13
+ this.tempTextSettings = { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, fontRatio: null, bold: false, italic: false, underline: false }; // restore text settings on cancel
14
+ this.tempAdjValue = ''; // for temp internal slider value
15
+ this.tempFilter = ''; // restore filter style on cancel
16
+ this.tempUndoRedoStep = 0;
17
+ this.tempFreehandCounter = 0;
18
+ this.tempCurrFhdIndex = 0;
19
+ this.tempZoomFactor = null; // Restore zoom factor on cancel
20
+ this.isCancelAction = false;
21
+ this.rotatedFlipCropSel = false;
22
+ this.zoomCrop = { width: 0, height: 0 };
23
+ this.isImageEdited = false;
24
+ this.isFileChanged = false;
25
+ this.isNewPath = false;
26
+ this.arrowDimension = { bar: { width: 10, height: 32, ratioX: null, ratioY: null },
27
+ arrow: { width: 24, height: 24, ratioX: null, ratioY: null }, arrowSolid: { width: 32, height: 32, ratioX: null, ratioY: null },
28
+ circle: { width: 10, height: 10, ratioX: null, ratioY: null }, square: { width: 20, height: 20, ratioX: null, ratioY: null } };
29
+ this.parent = parent;
30
+ this.addEventListener();
31
+ }
32
+ Draw.prototype.destroy = function () {
33
+ if (this.parent.isDestroyed) {
34
+ return;
35
+ }
36
+ this.removeEventListener();
37
+ };
38
+ Draw.prototype.addEventListener = function () {
39
+ this.parent.on('draw', this.draw, this);
40
+ this.parent.on('destroyed', this.destroy, this);
41
+ };
42
+ Draw.prototype.removeEventListener = function () {
43
+ this.parent.off('draw', this.draw);
44
+ this.parent.off('destroyed', this.destroy);
45
+ };
46
+ Draw.prototype.draw = function (args) {
47
+ this.updatePrivateVariables();
48
+ switch (args.prop) {
49
+ case 'drawObject':
50
+ this.drawObject(args.value['canvas'], args.value['obj'], args.value['isCropRatio'], args.value['points'], args.value['isPreventDrag'], args.value['saveContext'], args.value['isPreventSelection']);
51
+ break;
52
+ case 'updateActiveObject':
53
+ this.updateActiveObject(args.value['actPoint'], args.value['obj'], args.value['isMouseMove'], args.value['x'], args.value['y']);
54
+ break;
55
+ case 'clearOuterCanvas':
56
+ this.clearOuterCanvas(args.value['context']);
57
+ break;
58
+ case 'setDestPoints':
59
+ this.setDestPoints();
60
+ break;
61
+ case 'updateCurrTransState':
62
+ this.updateCurrTransState(args.value['type'], args.value['isPreventDestination'], args.value['isRotatePan']);
63
+ break;
64
+ case 'currTransState':
65
+ this.currTransState(args.value['type'], args.value['isPreventDestination'], args.value['context'], args.value['isPreventCircleCrop']);
66
+ break;
67
+ case 'setTransform':
68
+ this.setTransform(args.value['context'], args.value['value'], args.value['isReverse']);
69
+ break;
70
+ case 'render-image':
71
+ this.renderImage(args.value['isMouseWheel']);
72
+ break;
73
+ case 'draw-image-to-canvas':
74
+ this.drawImgToCanvas(args.value['dimension']);
75
+ break;
76
+ case 'update-canvas':
77
+ this.updateCanvas();
78
+ break;
79
+ case 'performCancel':
80
+ this.performCancel(args.value['isContextualToolbar']);
81
+ break;
82
+ case 'updateFlipPan':
83
+ this.updateFlipPan(args.value['tempSelectionObj']);
84
+ break;
85
+ case 'select':
86
+ this.select(args.value['type'], args.value['startX'], args.value['startY'], args.value['width'], args.value['height']);
87
+ break;
88
+ case 'callUpdateCurrTransState':
89
+ this.callUpdateCurrTransState();
90
+ break;
91
+ case 'resetPanPoints':
92
+ this.resetPanPoints();
93
+ break;
94
+ case 'setClientTransDim':
95
+ this.setClientTransDim(args.value['isPreventDimension']);
96
+ break;
97
+ case 'redrawImgWithObj':
98
+ this.redrawImgWithObj();
99
+ break;
100
+ case 'setCurrentObj':
101
+ this.setCurrentObj(args.value['obj']);
102
+ break;
103
+ case 'performPointZoom':
104
+ this.performPointZoom(args.value['x'], args.value['y'], args.value['type']);
105
+ break;
106
+ case 'open':
107
+ this.open(args.value['data']);
108
+ break;
109
+ case 'isInitialLoading':
110
+ this.isInitialLoading = args.value['isInitialLoading'];
111
+ break;
112
+ case 'isInitialLoaded':
113
+ this.getInitialLoaded(args.value['object']);
114
+ break;
115
+ case 'fileSelect':
116
+ this.fileSelect(args.value['inputElement'], args.value['args']);
117
+ break;
118
+ case 'getFileName':
119
+ args.value['obj']['fileName'] = this.fileName;
120
+ args.value['obj']['fileType'] = this.fileType;
121
+ break;
122
+ case 'getErrorImage':
123
+ args.value['obj']['isErrorImage'] = this.isErrorImage;
124
+ break;
125
+ case 'getInitialZoomValue':
126
+ args.value['obj']['initialZoomValue'] = this.initZoomValue;
127
+ break;
128
+ case 'setShapeTextInsert':
129
+ this.isShapeTextInserted = args.value['bool'];
130
+ break;
131
+ case 'resetCurrentSelectionPoint':
132
+ this.currSelPoint = null;
133
+ break;
134
+ case 'setRotateZoom':
135
+ this.isRotateZoom = args.value['isRotateZoom'];
136
+ break;
137
+ case 'setTempStrokeSettings':
138
+ this.tempStrokeSettings = args.value['tempStrokeSettings'];
139
+ break;
140
+ case 'setTempTextSettings':
141
+ this.tempTextSettings = args.value['tempTextSettings'];
142
+ break;
143
+ case 'setTempAdjustmentValue':
144
+ this.tempAdjValue = args.value['tempAdjustmentValue'];
145
+ break;
146
+ case 'getTempAdjustmentValue':
147
+ args.value['obj']['value'] = this.tempAdjValue;
148
+ break;
149
+ case 'setTempFilter':
150
+ this.tempFilter = args.value['tempFilter'];
151
+ break;
152
+ case 'setTempUndoRedoStep':
153
+ this.tempUndoRedoStep = args.value['tempUndoRedoStep'];
154
+ break;
155
+ case 'setTempFreehandCounter':
156
+ this.tempFreehandCounter = args.value['tempFreehandCounter'];
157
+ break;
158
+ case 'setTempCurrentFreehandDrawIndex':
159
+ this.tempCurrFhdIndex = args.value['tempCurrentFreehandDrawIndex'];
160
+ break;
161
+ case 'setTempZoomFactor':
162
+ this.tempZoomFactor = args.value['tempZoomFactor'];
163
+ break;
164
+ case 'setCancelAction':
165
+ this.isCancelAction = args.value['bool'];
166
+ break;
167
+ case 'getRotatedFlipCropSelection':
168
+ args.value['bool']['isSelected'] = this.rotatedFlipCropSel;
169
+ break;
170
+ case 'getPrevActObj':
171
+ args.value['obj']['prevActObj'] = this.prevActObj;
172
+ break;
173
+ case 'setPrevActObj':
174
+ this.prevActObj = args.value['prevActObj'];
175
+ break;
176
+ case 'getZoomCrop':
177
+ args.value['obj']['width'] = this.zoomCrop.width;
178
+ args.value['obj']['height'] = this.zoomCrop.height;
179
+ break;
180
+ case 'setZoomCropWidth':
181
+ this.zoomCrop.width = args.value['width'];
182
+ this.zoomCrop.height = args.value['height'];
183
+ break;
184
+ case 'setImageEdited':
185
+ this.isImageEdited = true;
186
+ break;
187
+ case 'reset':
188
+ this.reset();
189
+ break;
190
+ case 'dlgBtnClick':
191
+ this.dlgBtnClick();
192
+ break;
193
+ case 'dlgCloseBtnClick':
194
+ this.dlgCloseBtnClick();
195
+ break;
196
+ case 'setNewPath':
197
+ this.isNewPath = args.value['bool'];
198
+ break;
199
+ case 'getNewPath':
200
+ args.value['obj']['isNewPath'] = this.isNewPath;
201
+ break;
202
+ case 'getArrowDimension':
203
+ args.value['obj']['arrowDimension'] = this.arrowDimension;
204
+ break;
205
+ case 'setArrowDimension':
206
+ this.arrowDimension = args.value['arrowDimension'];
207
+ break;
208
+ }
209
+ };
210
+ Draw.prototype.getModuleName = function () {
211
+ return 'draw';
212
+ };
213
+ Draw.prototype.updatePrivateVariables = function () {
214
+ var parent = this.parent;
215
+ if (parent.lowerCanvas) {
216
+ this.lowerContext = parent.lowerCanvas.getContext('2d');
217
+ }
218
+ if (parent.upperCanvas) {
219
+ this.upperContext = parent.upperCanvas.getContext('2d');
220
+ }
221
+ if (isNullOrUndefined(this.tempZoomFactor)) {
222
+ this.tempZoomFactor = parent.transform.zoomFactor;
223
+ }
224
+ };
225
+ Draw.prototype.reset = function () {
226
+ this.isInitialLoading = this.isErrorImage = this.isNewPath = false;
227
+ this.cancelObjColl = this.cancelPointColl = [];
228
+ this.isShapeTextInserted = false;
229
+ this.initZoomValue = null;
230
+ this.tempFilter = '';
231
+ this.currSelPoint = null;
232
+ this.isRotateZoom = false;
233
+ this.tempAdjValue = '';
234
+ this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };
235
+ this.tempTextSettings =
236
+ { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, fontRatio: null, bold: false, italic: false, underline: false };
237
+ this.tempUndoRedoStep = this.tempFreehandCounter = this.tempCurrFhdIndex = 0;
238
+ this.tempZoomFactor = null;
239
+ this.isCancelAction = false;
240
+ this.rotatedFlipCropSel = false;
241
+ this.prevActObj = null;
242
+ this.arrowDimension = { bar: { width: 10, height: 32, ratioX: null, ratioY: null },
243
+ arrow: { width: 24, height: 24, ratioX: null, ratioY: null }, arrowSolid: { width: 32, height: 32, ratioX: null, ratioY: null },
244
+ circle: { width: 10, height: 10, ratioX: null, ratioY: null }, square: { width: 20, height: 20, ratioX: null, ratioY: null } };
245
+ };
246
+ Draw.prototype.drawObject = function (canvas, obj, isCropRatio, points, isPreventDrag, saveContext, isPreventSelection) {
247
+ var parent = this.parent;
248
+ var actPoint = parent.activeObj.activePoint;
249
+ this.upperContext.clearRect(0, 0, parent.upperCanvas.width, parent.upperCanvas.height);
250
+ var canvasDraw;
251
+ if (canvas.toLowerCase() === 'original') {
252
+ canvasDraw = this.lowerContext;
253
+ }
254
+ else if (canvas.toLowerCase() === 'duplicate') {
255
+ canvasDraw = this.upperContext;
256
+ }
257
+ else if (saveContext) {
258
+ canvasDraw = saveContext;
259
+ }
260
+ if (!isPreventDrag && parent.activeObj.shape) {
261
+ this.setDragLimit();
262
+ }
263
+ if (parent.currObjType.shape) {
264
+ var splitWords = parent.currObjType.shape.split('-');
265
+ if (splitWords[0].toLowerCase() === 'crop' && isCropRatio) {
266
+ this.drawCropRatio();
267
+ }
268
+ }
269
+ if (points) {
270
+ actPoint.startX = points.startX;
271
+ actPoint.startY = points.startY;
272
+ actPoint.endX = points.endX;
273
+ actPoint.endY = points.endY;
274
+ actPoint.width = points.width;
275
+ actPoint.height = points.height;
276
+ }
277
+ if (isNullOrUndefined(parent.activeObj.strokeSettings)) {
278
+ var obj_1 = { strokeSettings: {} };
279
+ parent.notify('shape', { prop: 'getStrokeSettings', onPropertyChange: false,
280
+ value: { obj: obj_1 } });
281
+ parent.activeObj.strokeSettings = obj_1['strokeSettings'];
282
+ }
283
+ if (isNullOrUndefined(parent.activeObj.strokeSettings.strokeWidth)) {
284
+ parent.activeObj.strokeSettings.strokeWidth = 2;
285
+ }
286
+ if (obj) {
287
+ parent.activeObj = extend({}, obj, {}, true);
288
+ }
289
+ this.updateActiveObject();
290
+ if (parent.currObjType.isText) {
291
+ var obj_2 = { keyHistory: '' };
292
+ parent.notify('shape', { prop: 'getKeyHistory', onPropertyChange: false, value: { obj: obj_2 } });
293
+ parent.activeObj.keyHistory = obj_2['keyHistory'];
294
+ }
295
+ if (canvas.toLowerCase() !== 'original') {
296
+ var splitWords = void 0;
297
+ var isCrop = false;
298
+ if (parent.activeObj.shape) {
299
+ splitWords = parent.activeObj.shape.split('-');
300
+ if (splitWords[0] === 'crop') {
301
+ isCrop = true;
302
+ }
303
+ }
304
+ if (isCrop) {
305
+ this.upperContext.fillStyle = 'rgb(0, 0, 0, 0.25)';
306
+ this.upperContext.fillRect(0, 0, parent.lowerCanvas.width, parent.lowerCanvas.height);
307
+ this.upperContext.clearRect(actPoint.startX, actPoint.startY, actPoint.width, actPoint.height);
308
+ }
309
+ if (isNullOrUndefined(isPreventSelection) && (canvasDraw === this.lowerContext || canvasDraw === this.upperContext)) {
310
+ this.rotateContext('initial', canvasDraw);
311
+ this.drawOuterSelection(canvasDraw);
312
+ this.rotateContext('reverse', canvasDraw);
313
+ }
314
+ }
315
+ parent.currObjType.isActiveObj = true;
316
+ var object = { keyHistory: '' };
317
+ parent.notify('shape', { prop: 'getKeyHistory', onPropertyChange: false, value: { obj: object } });
318
+ if (obj) {
319
+ this.drawShapeObj(canvas, obj.shape, saveContext, isPreventSelection);
320
+ }
321
+ else if (object['keyHistory'] !== '' && parent.currObjType.isText) {
322
+ this.drawShapeObj(canvas, 'text', saveContext, isPreventSelection);
323
+ }
324
+ else if (parent.activeObj.shape) {
325
+ this.drawShapeObj(canvas, parent.activeObj.shape, saveContext, isPreventSelection);
326
+ }
327
+ else {
328
+ this.drawShapeObj(canvas, undefined, saveContext, isPreventSelection);
329
+ }
330
+ };
331
+ Draw.prototype.rotateContext = function (type, ctx) {
332
+ var parent = this.parent;
333
+ var activePoint = extend({}, parent.activeObj.activePoint, {}, true);
334
+ if (parent.activeObj.shape === 'line' || parent.activeObj.shape === 'arrow') {
335
+ return;
336
+ }
337
+ var rotationAngle = (type === 'initial') ? parent.activeObj.rotatedAngle : -parent.activeObj.rotatedAngle;
338
+ ctx.translate(activePoint.startX + (activePoint.width / 2), activePoint.startY + (activePoint.height / 2));
339
+ ctx.rotate(rotationAngle);
340
+ ctx.translate(-(activePoint.startX + (activePoint.width / 2)), -(activePoint.startY + (activePoint.height / 2)));
341
+ };
342
+ Draw.prototype.setDragLimit = function () {
343
+ var parent = this.parent;
344
+ var actPoint = parent.activeObj.activePoint;
345
+ if (actPoint && parent.activeObj.rotatedAngle === 0) {
346
+ if (actPoint.startX < parent.img.destLeft) {
347
+ actPoint.startX = parent.img.destLeft;
348
+ actPoint.endX = actPoint.startX + actPoint.width;
349
+ }
350
+ else if (actPoint.endX > parent.img.destLeft + parent.img.destWidth) {
351
+ actPoint.endX = parent.img.destLeft + parent.img.destWidth;
352
+ actPoint.startX = actPoint.endX - actPoint.width;
353
+ }
354
+ if (actPoint.startY < parent.img.destTop) {
355
+ actPoint.startY = parent.img.destTop;
356
+ }
357
+ else if (actPoint.endY > parent.img.destTop + parent.img.destHeight) {
358
+ actPoint.endY = parent.img.destTop + parent.img.destHeight;
359
+ actPoint.startY = actPoint.endY - actPoint.height;
360
+ }
361
+ parent.activeObj = this.updateWidthHeight(parent.activeObj);
362
+ }
363
+ };
364
+ Draw.prototype.drawCropRatio = function () {
365
+ var parent = this.parent;
366
+ var actPoint = parent.activeObj.activePoint;
367
+ var x;
368
+ var y;
369
+ var width;
370
+ var height;
371
+ if (parent.transform.zoomFactor > 0 && this.currSelPoint) {
372
+ var activeObj = extend({}, parent.activeObj, {}, true);
373
+ this.drawCustomSelection('crop-custom', null, null, null, null);
374
+ if (parent.transform.degree % 90 === 0 && parent.transform.degree % 180 !== 0) {
375
+ width = parent.activeObj.activePoint.width < parent.activeObj.activePoint.height ?
376
+ parent.activeObj.activePoint.width : parent.activeObj.activePoint.height;
377
+ height = width;
378
+ }
379
+ else {
380
+ if (parent.img.destLeft + parent.img.destLeft + parent.img.destWidth <= parent.lowerCanvas.clientWidth) {
381
+ width = actPoint.width;
382
+ }
383
+ else {
384
+ width = parent.lowerCanvas.clientWidth - parent.img.destLeft;
385
+ }
386
+ if (parent.img.destTop + parent.img.destTop + parent.img.destHeight <= parent.lowerCanvas.clientHeight) {
387
+ height = actPoint.height;
388
+ }
389
+ else {
390
+ height = parent.lowerCanvas.clientHeight - parent.img.destTop;
391
+ }
392
+ }
393
+ parent.notify('shape', { prop: 'refreshActiveObj', onPropertyChange: false });
394
+ parent.activeObj = activeObj;
395
+ parent.currObjType.shape = activeObj.shape;
396
+ this.upperContext.clearRect(0, 0, parent.upperCanvas.width, parent.upperCanvas.height);
397
+ parent.currObjType.isCustomCrop = false;
398
+ }
399
+ else {
400
+ width = parent.img.destWidth;
401
+ height = parent.img.destHeight;
402
+ if (parent.img.destLeft < 0) {
403
+ width += parent.img.destLeft;
404
+ }
405
+ if (parent.img.destTop < 0) {
406
+ height += parent.img.destTop;
407
+ }
408
+ if (parent.currObjType.shape.toLowerCase() !== 'crop-square' && parent.currObjType.shape.toLowerCase() !== 'crop-circle') {
409
+ if (parent.img.destLeft + parent.img.destWidth > parent.lowerCanvas.width) {
410
+ width -= (parent.img.destLeft + parent.img.destWidth - parent.lowerCanvas.width);
411
+ }
412
+ if (parent.img.destTop + parent.img.destHeight > parent.lowerCanvas.height) {
413
+ height -= (parent.img.destTop + parent.img.destHeight - parent.lowerCanvas.height);
414
+ }
415
+ }
416
+ }
417
+ switch (parent.currObjType.shape.toLowerCase()) {
418
+ case 'crop-square':
419
+ case 'crop-circle':
420
+ parent.notify('selection', { prop: 'setDragDirection', onPropertyChange: false, value: { width: width, height: height } });
421
+ actPoint = parent.activeObj.activePoint;
422
+ if (parent.lowerCanvas.width < (actPoint.endX - actPoint.startX)) {
423
+ actPoint.startX = 7.5;
424
+ actPoint.endX = parent.lowerCanvas.width - 7.5;
425
+ }
426
+ if (parent.lowerCanvas.height < (actPoint.endY - actPoint.startY)) {
427
+ actPoint.startY = 7.5;
428
+ actPoint.endY = parent.lowerCanvas.height - 7.5;
429
+ }
430
+ if (width === parent.img.destWidth && height === parent.img.destHeight) {
431
+ actPoint.startX += parent.img.destLeft;
432
+ actPoint.startY +=
433
+ parent.img.destTop;
434
+ actPoint.endX += parent.img.destLeft;
435
+ actPoint.endY +=
436
+ parent.img.destTop;
437
+ }
438
+ if (parent.lowerCanvas.width > parent.lowerCanvas.height) {
439
+ actPoint.height = actPoint.endY - actPoint.startY;
440
+ actPoint.width = actPoint.height;
441
+ actPoint.endX = actPoint.startX +
442
+ actPoint.width;
443
+ }
444
+ else {
445
+ actPoint.width = actPoint.endX - actPoint.startX;
446
+ actPoint.height = actPoint.width;
447
+ actPoint.endY = actPoint.startY +
448
+ actPoint.height;
449
+ }
450
+ break;
451
+ case 'crop-3:2':
452
+ x = 3;
453
+ y = 2;
454
+ break;
455
+ case 'crop-4:3':
456
+ x = 4;
457
+ y = 3;
458
+ break;
459
+ case 'crop-5:4':
460
+ x = 5;
461
+ y = 4;
462
+ break;
463
+ case 'crop-7:5':
464
+ x = 7;
465
+ y = 5;
466
+ break;
467
+ case 'crop-16:9':
468
+ x = 16;
469
+ y = 9;
470
+ break;
471
+ }
472
+ if (x !== undefined && y !== undefined) {
473
+ parent.notify('selection', { prop: 'calcShapeRatio', onPropertyChange: false,
474
+ value: { x: x, y: y, imgWidth: width, imgHeight: height } });
475
+ if (width === parent.img.destWidth && height === parent.img.destHeight) {
476
+ this.updatePoints();
477
+ }
478
+ actPoint = parent.activeObj.activePoint;
479
+ }
480
+ if (actPoint.startX < parent.img.destLeft) {
481
+ var diff = (parent.img.destLeft - actPoint.startX) + 7.5;
482
+ actPoint.startX += diff;
483
+ actPoint.endX += diff;
484
+ }
485
+ if (actPoint.startY < parent.img.destTop) {
486
+ var diff = (parent.img.destTop - actPoint.startY) + 7.5;
487
+ actPoint.startY += diff;
488
+ actPoint.endY += diff;
489
+ }
490
+ parent.activeObj = this.updateWidthHeight(parent.activeObj);
491
+ this.adjToCenter();
492
+ };
493
+ Draw.prototype.adjToCenter = function () {
494
+ var parent = this.parent;
495
+ var diffX = ((parent.lowerCanvas.width) / 2) - (parent.activeObj.activePoint.endX - parent.activeObj.activePoint.width / 2);
496
+ var diffY = ((parent.lowerCanvas.height) / 2) - (parent.activeObj.activePoint.endY - parent.activeObj.activePoint.height / 2);
497
+ parent.activeObj.activePoint.startX += diffX;
498
+ parent.activeObj.activePoint.endX += diffX;
499
+ parent.activeObj.activePoint.startY += diffY;
500
+ parent.activeObj.activePoint.endY += diffY;
501
+ if (parent.activeObj.activePoint.startX < (parent.img.destLeft >= 7.5 ? parent.img.destLeft : 7.5)) {
502
+ var diff = ((parent.img.destLeft >= 7.5 ? parent.img.destLeft : 0) - parent.activeObj.activePoint.startX) + 7.5;
503
+ parent.activeObj.activePoint.startX += diff;
504
+ parent.activeObj.activePoint.endX += diff;
505
+ }
506
+ else if (parent.activeObj.activePoint.endX > parent.img.destLeft + parent.img.destWidth) {
507
+ var diff = (parent.activeObj.activePoint.endX - (parent.img.destLeft + parent.img.destWidth)) + 7.5;
508
+ parent.activeObj.activePoint.startX -= diff;
509
+ parent.activeObj.activePoint.endX -= diff;
510
+ }
511
+ if (parent.activeObj.activePoint.startY < (parent.img.destTop > 7.5 ? parent.img.destTop : 7.5)) {
512
+ var diff = ((parent.img.destTop > 7.5 ? parent.img.destTop : 0) - parent.activeObj.activePoint.startY) + 7.5;
513
+ parent.activeObj.activePoint.startY += diff;
514
+ parent.activeObj.activePoint.endY += diff;
515
+ }
516
+ else if (parent.activeObj.activePoint.endY > parent.img.destTop + parent.img.destHeight) {
517
+ var diff = (parent.activeObj.activePoint.endY - (parent.img.destTop + parent.img.destHeight)) + 7.5;
518
+ parent.activeObj.activePoint.startY -= diff;
519
+ parent.activeObj.activePoint.endY -= diff;
520
+ }
521
+ };
522
+ Draw.prototype.updateActiveObject = function (actPoint, obj, isMouseMove, x, y) {
523
+ actPoint = actPoint ? actPoint : extend({}, this.parent.activeObj.activePoint, {}, true);
524
+ obj = obj ? obj : extend({}, this.parent.activeObj, {}, true);
525
+ actPoint.width = actPoint.endX - actPoint.startX;
526
+ actPoint.height = actPoint.endY - actPoint.startY;
527
+ x = x ? x : 0;
528
+ y = y ? y : 0;
529
+ var horCircleWidth = actPoint.width / 2;
530
+ var verCircleHeight = actPoint.height / 2;
531
+ var radius = 7.5;
532
+ obj.horTopLine = { startX: actPoint.startX + x, startY: actPoint.startY - y,
533
+ endX: actPoint.endX + x, endY: actPoint.endY + y };
534
+ obj.horBottomLine = { startX: actPoint.startX - x, startY: actPoint.endY - y,
535
+ endX: actPoint.endX - x, endY: actPoint.endY + y };
536
+ obj.verLeftLine = { startX: actPoint.startX + x, startY: actPoint.startY - y,
537
+ endX: actPoint.startX - y, endY: actPoint.endY - y };
538
+ obj.verRightLine = { startX: actPoint.endX + x, startY: actPoint.startY + y,
539
+ endX: actPoint.endX - x, endY: actPoint.endY + y };
540
+ obj.topLeftCircle = { startX: actPoint.startX, startY: actPoint.startY,
541
+ radius: obj.horTopLine.endX ? (radius) : 0 };
542
+ obj.topCenterCircle = { startX: actPoint.startX + horCircleWidth, startY: actPoint.startY,
543
+ radius: obj.horTopLine.endX ? (radius) : 0 };
544
+ obj.topRightCircle = { startX: actPoint.endX, startY: actPoint.startY,
545
+ radius: obj.horTopLine.endX ? (radius) : 0 };
546
+ obj.centerLeftCircle = { startX: actPoint.startX, startY: actPoint.startY + verCircleHeight,
547
+ radius: obj.horTopLine.endX ? (radius) : 0 };
548
+ obj.centerRightCircle = { startX: actPoint.endX, startY: actPoint.startY + verCircleHeight,
549
+ radius: obj.horTopLine.endX ? (radius) : 0 };
550
+ obj.bottomLeftCircle = { startX: actPoint.startX, startY: actPoint.endY,
551
+ radius: obj.horTopLine.endX ? (radius) : 0 };
552
+ obj.bottomCenterCircle = { startX: actPoint.startX + horCircleWidth, startY: actPoint.endY,
553
+ radius: obj.horTopLine.endX ? (radius) : 0 };
554
+ obj.bottomRightCircle = { startX: actPoint.endX, startY: actPoint.endY,
555
+ radius: obj.horTopLine.endX ? (radius) : 0 };
556
+ if (obj.rotatedAngle === 0) {
557
+ obj.rotationCirclePoint = { x: obj.bottomCenterCircle.startX,
558
+ y: obj.bottomCenterCircle.startY + 25 };
559
+ obj.rotationCirclePoint.ratioX = (obj.rotationCirclePoint.x - this.parent.img.destLeft) / this.parent.img.destWidth;
560
+ obj.rotationCirclePoint.ratioY = (obj.rotationCirclePoint.y - this.parent.img.destTop) / this.parent.img.destHeight;
561
+ }
562
+ obj.activePoint = actPoint;
563
+ if (isNullOrUndefined(isMouseMove)) {
564
+ this.parent.activeObj = extend({}, obj, {}, true);
565
+ }
566
+ };
567
+ Draw.prototype.drawOuterSelection = function (canvasDraw, isCropCircle) {
568
+ var splitWords;
569
+ var parent = this.parent;
570
+ var actPoint = parent.activeObj.activePoint;
571
+ canvasDraw.lineWidth = (0.5);
572
+ if (parent.activeObj.shape !== undefined) {
573
+ splitWords = parent.activeObj.shape.split('-');
574
+ }
575
+ var tempObj = extend({}, parent.activeObj, {}, true);
576
+ if (parent.activeObj.shape !== undefined) {
577
+ splitWords = parent.activeObj.shape.split('-');
578
+ }
579
+ if (((splitWords !== undefined && splitWords[0] === 'crop') || parent.activeObj.shape === undefined) && !isCropCircle) {
580
+ this.upperContext.fillStyle = 'rgb(0, 0, 0, 0.25)';
581
+ this.upperContext.fillRect(0, 0, parent.lowerCanvas.width, parent.lowerCanvas.height);
582
+ this.upperContext.clearRect(actPoint.startX, actPoint.startY, actPoint.width, actPoint.height);
583
+ }
584
+ canvasDraw.strokeStyle = parent.themeColl[parent.theme]['primaryColor'];
585
+ canvasDraw.fillStyle = parent.themeColl[parent.theme]['secondaryColor'];
586
+ var degree;
587
+ if (tempObj.shapeDegree === 0) {
588
+ degree = parent.transform.degree;
589
+ }
590
+ else {
591
+ degree = parent.transform.degree - tempObj.shapeDegree;
592
+ }
593
+ if (degree < 0) {
594
+ degree = 360 + degree;
595
+ }
596
+ if (parent.activeObj.shape === 'arrow' || parent.activeObj.shape === 'line') {
597
+ canvasDraw.beginPath();
598
+ canvasDraw.moveTo(actPoint.startX, actPoint.startY);
599
+ canvasDraw.lineTo(actPoint.endX, actPoint.endY);
600
+ canvasDraw.stroke();
601
+ }
602
+ else if (parent.activeObj.shape === 'path') {
603
+ canvasDraw.beginPath();
604
+ var activeObj = extend({}, parent.activeObj, {}, true);
605
+ canvasDraw.moveTo(activeObj.pointColl[0].x, activeObj.pointColl[0].y);
606
+ if (activeObj.pointColl.length > 1) {
607
+ for (var i = 1, len = activeObj.pointColl.length; i < len; i++) {
608
+ actPoint.endX = activeObj.pointColl[i].x;
609
+ actPoint.endY = activeObj.pointColl[i].y;
610
+ canvasDraw.lineTo(actPoint.endX, actPoint.endY);
611
+ }
612
+ }
613
+ var obj = { shape: null };
614
+ parent.notify('selection', { prop: 'getCurrentDrawingShape', value: { obj: obj } });
615
+ if (obj['shape'] === 'path') {
616
+ parent.activeObj = activeObj;
617
+ }
618
+ canvasDraw.lineTo(actPoint.endX, actPoint.endY);
619
+ canvasDraw.stroke();
620
+ }
621
+ else {
622
+ canvasDraw.beginPath();
623
+ canvasDraw.rect(tempObj.activePoint.startX, tempObj.activePoint.startY, tempObj.activePoint.width, tempObj.activePoint.height);
624
+ canvasDraw.stroke();
625
+ canvasDraw.closePath();
626
+ if (parent.selectionSettings.showCircle) {
627
+ var strokeColor = canvasDraw.strokeStyle;
628
+ var fillColor = canvasDraw.fillStyle;
629
+ canvasDraw.strokeStyle = parent.selectionSettings.strokeColor;
630
+ canvasDraw.fillStyle = parent.selectionSettings.fillColor;
631
+ canvasDraw.lineWidth *= 2;
632
+ canvasDraw.beginPath();
633
+ canvasDraw.moveTo(tempObj.topLeftCircle.startX, tempObj.topLeftCircle.startY);
634
+ canvasDraw.arc(tempObj.topLeftCircle.startX, tempObj.topLeftCircle.startY, tempObj.topLeftCircle.radius, 0, 2 * Math.PI);
635
+ canvasDraw.moveTo(tempObj.topRightCircle.startX, tempObj.topRightCircle.startY);
636
+ canvasDraw.arc(tempObj.topRightCircle.startX, tempObj.topRightCircle.startY, tempObj.topRightCircle.radius, 0, 2 * Math.PI);
637
+ canvasDraw.moveTo(tempObj.bottomLeftCircle.startX, tempObj.bottomLeftCircle.startY);
638
+ canvasDraw.arc(tempObj.bottomLeftCircle.startX, tempObj.bottomLeftCircle.startY, tempObj.bottomLeftCircle.radius, 0, 2 * Math.PI);
639
+ canvasDraw.moveTo(tempObj.bottomRightCircle.startX, tempObj.bottomRightCircle.startY);
640
+ canvasDraw.arc(tempObj.bottomRightCircle.startX, tempObj.bottomRightCircle.startY, tempObj.bottomRightCircle.radius, 0, 2 * Math.PI);
641
+ canvasDraw.stroke();
642
+ canvasDraw.fill();
643
+ canvasDraw.closePath();
644
+ canvasDraw.lineWidth /= 2;
645
+ canvasDraw.strokeStyle = strokeColor;
646
+ canvasDraw.fillStyle = fillColor;
647
+ }
648
+ }
649
+ if (parent.selectionSettings.showCircle && (splitWords === undefined || splitWords[0] !== 'crop')) {
650
+ var strokeColor = canvasDraw.strokeStyle;
651
+ var fillColor = canvasDraw.fillStyle;
652
+ canvasDraw.strokeStyle = parent.selectionSettings.strokeColor;
653
+ canvasDraw.fillStyle = parent.selectionSettings.fillColor;
654
+ if (parent.activeObj.shape === 'text') {
655
+ // Text rotation codes
656
+ // canvasDraw.lineWidth *= 2;
657
+ // canvasDraw.beginPath();
658
+ // this.drawRotationArcLine(canvasDraw);
659
+ // canvasDraw.lineTo(parent.activeObj.rotationCirclePoint.x, parent.activeObj.rotationCirclePoint.y);
660
+ // canvasDraw.stroke(); canvasDraw.fill(); canvasDraw.closePath();
661
+ // canvasDraw.beginPath();
662
+ // canvasDraw.moveTo(parent.activeObj.rotationCirclePoint.x, parent.activeObj.rotationCirclePoint.y);
663
+ // canvasDraw.arc(parent.activeObj.rotationCirclePoint.x, parent.activeObj.rotationCirclePoint.y,
664
+ // parent.activeObj.bottomCenterCircle.radius, 0, 2 * Math.PI);
665
+ // canvasDraw.stroke();
666
+ // canvasDraw.fill();
667
+ // canvasDraw.closePath();
668
+ // canvasDraw.lineWidth /= 2;
669
+ }
670
+ else {
671
+ this.drawCenterCircles(canvasDraw);
672
+ }
673
+ canvasDraw.strokeStyle = strokeColor;
674
+ canvasDraw.fillStyle = fillColor;
675
+ }
676
+ tempObj.rotationCircleLine = parent.activeObj.rotationCircleLine;
677
+ parent.activeObj = extend({}, tempObj, {}, true);
678
+ };
679
+ Draw.prototype.drawArrowHead = function (canvasDraw, isStartHead) {
680
+ var headType = isStartHead ? this.parent.activeObj.start : this.parent.activeObj.end;
681
+ switch (headType) {
682
+ case 'arrowSolid':
683
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
684
+ isStartHead ? this.arrowSolid(canvasDraw, true) : this.arrowSolid(canvasDraw, false);
685
+ break;
686
+ case 'arrow':
687
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
688
+ isStartHead ? this.arrow(canvasDraw, true) : this.arrow(canvasDraw, false);
689
+ break;
690
+ case 'circleSolid':
691
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
692
+ isStartHead ? this.arrowCircleSolid(canvasDraw, true) : this.arrowCircleSolid(canvasDraw, false);
693
+ break;
694
+ case 'circle':
695
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
696
+ isStartHead ? this.arrowCircle(canvasDraw, true) : this.arrowCircle(canvasDraw, false);
697
+ break;
698
+ case 'bar':
699
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
700
+ isStartHead ? this.arrowBar(canvasDraw, true) : this.arrowBar(canvasDraw, false);
701
+ break;
702
+ case 'square':
703
+ case 'squareSolid':
704
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
705
+ isStartHead ? this.arrowSquareStart(canvasDraw) : this.arrowSquareEnd(canvasDraw);
706
+ break;
707
+ }
708
+ };
709
+ Draw.prototype.drawShapeObj = function (canvas, shape, saveContext, isPreventSelection) {
710
+ var parent = this.parent;
711
+ var actPoint = parent.activeObj.activePoint;
712
+ var currentShape = shape !== undefined ? shape : parent.currObjType.shape;
713
+ parent.currObjType.shape = currentShape;
714
+ var canvasDraw;
715
+ if (canvas.toLowerCase() === 'original') {
716
+ canvasDraw = this.lowerContext;
717
+ }
718
+ else if (canvas.toLowerCase() === 'duplicate') {
719
+ canvasDraw = this.upperContext;
720
+ }
721
+ else if (saveContext) {
722
+ canvasDraw = saveContext;
723
+ }
724
+ if (parent.currObjType.shape.toLowerCase() === 'rectangle' || parent.currObjType.shape.toLowerCase() === 'ellipse'
725
+ || parent.currObjType.shape.toLowerCase() === 'line' || parent.activeObj.shape === 'arrow' ||
726
+ parent.activeObj.shape === 'path') {
727
+ parent.activeObj.shape = parent.currObjType.shape;
728
+ }
729
+ canvasDraw.strokeStyle = parent.activeObj.strokeSettings.strokeColor;
730
+ if (shape === 'text' || shape === 'freehanddraw') {
731
+ canvasDraw.fillStyle = parent.activeObj.strokeSettings.strokeColor;
732
+ }
733
+ else {
734
+ canvasDraw.fillStyle = parent.activeObj.strokeSettings.fillColor;
735
+ }
736
+ var horLineWidth = actPoint.width / 3;
737
+ var verLineHeight = actPoint.height / 3;
738
+ var selectionWidth = actPoint.endX - actPoint.startX;
739
+ var selectionHeight = actPoint.endY - actPoint.startY;
740
+ this.rotateContext('initial', canvasDraw);
741
+ var degree;
742
+ var tempFillStyle = canvasDraw.fillStyle;
743
+ var activeObj;
744
+ switch (parent.currObjType.shape.toLowerCase()) {
745
+ case 'rectangle':
746
+ this.drawSquareLines(canvasDraw);
747
+ if (isNullOrUndefined(isPreventSelection) && canvasDraw === this.upperContext) {
748
+ this.drawOuterSelection(canvasDraw);
749
+ }
750
+ break;
751
+ case 'ellipse':
752
+ selectionWidth = Math.abs(selectionWidth);
753
+ selectionHeight = Math.abs(selectionHeight);
754
+ canvasDraw.beginPath();
755
+ canvasDraw.ellipse(actPoint.startX + (selectionWidth / 2), actPoint.startY + (selectionHeight / 2), selectionWidth / 2, selectionHeight / 2, 0, 0, 2 * Math.PI, false);
756
+ if (parent.activeObj.strokeSettings.fillColor !== '') {
757
+ canvasDraw.fillStyle = parent.activeObj.strokeSettings.fillColor;
758
+ canvasDraw.fill();
759
+ }
760
+ canvasDraw.ellipse(actPoint.startX + (selectionWidth / 2), actPoint.startY + (selectionHeight / 2), Math.abs((selectionWidth / 2) - (parent.activeObj.strokeSettings.strokeWidth)), Math.abs((selectionHeight / 2) - (parent.activeObj.strokeSettings.strokeWidth)), 0, 0, 2 * Math.PI, false);
761
+ canvasDraw.fillStyle = parent.activeObj.strokeSettings.strokeColor;
762
+ canvasDraw.fill('evenodd');
763
+ canvasDraw.closePath();
764
+ if (isNullOrUndefined(isPreventSelection) && canvasDraw === this.upperContext) {
765
+ this.drawOuterSelection(canvasDraw);
766
+ }
767
+ break;
768
+ case 'crop-circle':
769
+ if (canvasDraw === this.lowerContext) {
770
+ canvasDraw = this.upperContext;
771
+ }
772
+ this.shapeCircle(canvasDraw, selectionWidth, selectionHeight);
773
+ break;
774
+ case 'line':
775
+ this.shapeLine(canvasDraw, actPoint.startX, actPoint.startY, actPoint.endX, actPoint.endY);
776
+ if (isNullOrUndefined(isPreventSelection) && canvasDraw === this.upperContext) {
777
+ this.drawOuterSelection(canvasDraw);
778
+ }
779
+ break;
780
+ case 'arrow':
781
+ if (parent.activeObj.shapeDegree === 0) {
782
+ degree = parent.transform.degree;
783
+ }
784
+ else {
785
+ degree = parent.transform.degree - parent.activeObj.shapeDegree;
786
+ }
787
+ if (degree < 0) {
788
+ degree = 360 + degree;
789
+ }
790
+ canvasDraw.fillStyle = canvasDraw.strokeStyle;
791
+ if (isNullOrUndefined(parent.activeObj.triangleDirection)) {
792
+ parent.activeObj.triangleDirection = 'right';
793
+ }
794
+ if (isNullOrUndefined(parent.activeObj.start)) {
795
+ parent.activeObj.start = 'none';
796
+ }
797
+ if (isNullOrUndefined(parent.activeObj.end)) {
798
+ parent.activeObj.end = 'arrowSolid';
799
+ }
800
+ this.drawArrowHead(canvasDraw, true);
801
+ this.drawArrowHead(canvasDraw, false);
802
+ if (parent.activeObj.end === 'none') {
803
+ this.shapeLine(canvasDraw, actPoint.startX, actPoint.startY, actPoint.endX, actPoint.endY);
804
+ }
805
+ canvasDraw.fillStyle = tempFillStyle;
806
+ if (isNullOrUndefined(isPreventSelection) && canvasDraw === this.upperContext) {
807
+ this.drawOuterSelection(canvasDraw);
808
+ }
809
+ break;
810
+ case 'path':
811
+ activeObj = extend({}, parent.activeObj, {}, true);
812
+ if (activeObj.pointColl.length > 1) {
813
+ var obj = { shape: null };
814
+ parent.notify('selection', { prop: 'getCurrentDrawingShape', value: { obj: obj } });
815
+ if (obj['shape'] === 'path') {
816
+ var nextPoint = { x: 0, y: 0 };
817
+ for (var i = 0, len = activeObj.pointColl.length; i < len; i++) {
818
+ if (isNullOrUndefined(activeObj.pointColl[i + 1])) {
819
+ nextPoint.x = activeObj.activePoint.endX;
820
+ nextPoint.y = activeObj.activePoint.endY;
821
+ }
822
+ else {
823
+ nextPoint.x = activeObj.pointColl[i + 1].x;
824
+ nextPoint.y = activeObj.pointColl[i + 1].y;
825
+ }
826
+ actPoint.startX = activeObj.pointColl[i].x;
827
+ actPoint.startY = activeObj.pointColl[i].y;
828
+ actPoint.endX = nextPoint.x;
829
+ actPoint.endY = nextPoint.y;
830
+ parent.activeObj = this.updateWidthHeight(parent.activeObj);
831
+ this.shapeLine(canvasDraw, actPoint.startX, actPoint.startY, actPoint.endX, actPoint.endY);
832
+ }
833
+ }
834
+ else {
835
+ for (var i = 1, len = activeObj.pointColl.length; i < len; i++) {
836
+ actPoint.startX = activeObj.pointColl[i - 1].x;
837
+ actPoint.startY = activeObj.pointColl[i - 1].y;
838
+ actPoint.endX = activeObj.pointColl[i].x;
839
+ actPoint.endY = activeObj.pointColl[i].y;
840
+ parent.activeObj = this.updateWidthHeight(parent.activeObj);
841
+ this.shapeLine(canvasDraw, actPoint.startX, actPoint.startY, actPoint.endX, actPoint.endY);
842
+ }
843
+ }
844
+ parent.activeObj = activeObj;
845
+ }
846
+ else {
847
+ this.shapeLine(canvasDraw, actPoint.startX, actPoint.startY, actPoint.endX, actPoint.endY);
848
+ }
849
+ if (canvasDraw === this.upperContext) {
850
+ this.drawOuterSelection(canvasDraw);
851
+ }
852
+ break;
853
+ case 'text':
854
+ this.shapeText(canvasDraw);
855
+ break;
856
+ case 'crop-square':
857
+ case 'crop-3:4':
858
+ case 'crop-4:3':
859
+ case 'crop-6:9':
860
+ case 'crop-9:6':
861
+ case 'crop-9:16':
862
+ case 'crop-16:9':
863
+ if (canvasDraw === this.lowerContext) {
864
+ canvasDraw = this.upperContext;
865
+ }
866
+ this.drawSelection(horLineWidth, verLineHeight);
867
+ parent.currObjType.shape = '';
868
+ break;
869
+ default:
870
+ this.drawSelection(horLineWidth, verLineHeight);
871
+ break;
872
+ }
873
+ this.rotateContext('reverse', canvasDraw);
874
+ };
875
+ Draw.prototype.updatePoints = function () {
876
+ var parent = this.parent;
877
+ parent.activeObj.activePoint.startX += parent.img.destLeft;
878
+ parent.activeObj.activePoint.startY += parent.img.destTop;
879
+ parent.activeObj.activePoint.endX += parent.img.destLeft;
880
+ parent.activeObj.activePoint.endY += parent.img.destTop;
881
+ parent.activeObj = this.updateWidthHeight(parent.activeObj);
882
+ };
883
+ Draw.prototype.updateWidthHeight = function (obj) {
884
+ obj.activePoint.width = obj.activePoint.endX - obj.activePoint.startX;
885
+ obj.activePoint.height = obj.activePoint.endY - obj.activePoint.startY;
886
+ return obj;
887
+ };
888
+ Draw.prototype.drawCenterCircles = function (canvasDraw) {
889
+ var parent = this.parent;
890
+ var actPoint = parent.activeObj.activePoint;
891
+ canvasDraw.lineWidth *= 2;
892
+ canvasDraw.beginPath();
893
+ if (parent.activeObj.shape === 'arrow' || parent.activeObj.shape === 'line') {
894
+ canvasDraw.moveTo(actPoint.startX, actPoint.startY);
895
+ canvasDraw.arc(actPoint.startX, actPoint.startY, parent.activeObj.topCenterCircle.radius, 0, 2 * Math.PI);
896
+ canvasDraw.moveTo(actPoint.endX, actPoint.endY);
897
+ canvasDraw.arc(actPoint.endX, actPoint.endY, parent.activeObj.bottomCenterCircle.radius, 0, 2 * Math.PI);
898
+ }
899
+ else if (parent.activeObj.shape === 'path') {
900
+ var activeObj = extend({}, parent.activeObj, {}, true);
901
+ if (activeObj.pointColl.length > 1) {
902
+ for (var i = 1, len = activeObj.pointColl.length; i < len; i++) {
903
+ actPoint.startX = activeObj.pointColl[i - 1].x;
904
+ actPoint.startY = activeObj.pointColl[i - 1].y;
905
+ actPoint.endX = activeObj.pointColl[i].x;
906
+ actPoint.endY = activeObj.pointColl[i].y;
907
+ canvasDraw.moveTo(actPoint.startX, actPoint.startY);
908
+ canvasDraw.arc(actPoint.startX, actPoint.startY, parent.activeObj.topCenterCircle.radius, 0, 2 * Math.PI);
909
+ canvasDraw.moveTo(actPoint.endX, actPoint.endY);
910
+ canvasDraw.arc(actPoint.endX, actPoint.endY, parent.activeObj.bottomCenterCircle.radius, 0, 2 * Math.PI);
911
+ }
912
+ }
913
+ var obj = { shape: null };
914
+ parent.notify('selection', { prop: 'getCurrentDrawingShape', value: { obj: obj } });
915
+ if (obj['shape'] === 'path') {
916
+ parent.activeObj = activeObj;
917
+ }
918
+ canvasDraw.moveTo(actPoint.startX, actPoint.startY);
919
+ canvasDraw.arc(actPoint.startX, actPoint.startY, parent.activeObj.topCenterCircle.radius, 0, 2 * Math.PI);
920
+ canvasDraw.moveTo(actPoint.endX, actPoint.endY);
921
+ canvasDraw.arc(actPoint.endX, actPoint.endY, parent.activeObj.bottomCenterCircle.radius, 0, 2 * Math.PI);
922
+ }
923
+ else {
924
+ this.drawRotationArcLine(canvasDraw);
925
+ canvasDraw.lineTo(parent.activeObj.rotationCirclePoint.x, parent.activeObj.rotationCirclePoint.y);
926
+ }
927
+ canvasDraw.stroke();
928
+ canvasDraw.fill();
929
+ canvasDraw.closePath();
930
+ if (parent.activeObj.shape !== 'arrow' && parent.activeObj.shape !== 'line' &&
931
+ parent.activeObj.shape !== 'path') {
932
+ canvasDraw.beginPath();
933
+ canvasDraw.moveTo(parent.activeObj.rotationCirclePoint.x, parent.activeObj.rotationCirclePoint.y);
934
+ canvasDraw.arc(parent.activeObj.rotationCirclePoint.x, parent.activeObj.rotationCirclePoint.y, parent.activeObj.bottomCenterCircle.radius, 0, 2 * Math.PI);
935
+ canvasDraw.stroke();
936
+ canvasDraw.fill();
937
+ canvasDraw.closePath();
938
+ }
939
+ canvasDraw.lineWidth /= 2;
940
+ };
941
+ Draw.prototype.drawRotationArcLine = function (canvasDraw) {
942
+ var parent = this.parent;
943
+ if (isNullOrUndefined(parent.activeObj.rotationCircleLine)) {
944
+ parent.activeObj.rotationCircleLine = 22.5;
945
+ }
946
+ var degree;
947
+ var isHorizontalflip = false;
948
+ var isVerticalflip = false;
949
+ if (parent.activeObj.shapeDegree === 0) {
950
+ degree = parent.transform.degree;
951
+ }
952
+ else {
953
+ degree = parent.transform.degree - parent.activeObj.shapeDegree;
954
+ }
955
+ if (degree < 0) {
956
+ degree = 360 + degree;
957
+ }
958
+ for (var i = 0, len = parent.activeObj.flipObjColl.length; i < len; i++) {
959
+ if (parent.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {
960
+ isHorizontalflip = true;
961
+ }
962
+ else if (parent.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {
963
+ isVerticalflip = true;
964
+ }
965
+ }
966
+ switch (degree) {
967
+ case 0:
968
+ case 360:
969
+ if (isVerticalflip) {
970
+ parent.activeObj.rotationCirclePoint = { x: parent.activeObj.topCenterCircle.startX,
971
+ y: parent.activeObj.topCenterCircle.startY - parent.activeObj.rotationCircleLine };
972
+ canvasDraw.moveTo(parent.activeObj.rotationCirclePoint.x, parent.activeObj.rotationCirclePoint.y + parent.activeObj.rotationCircleLine);
973
+ }
974
+ else {
975
+ parent.activeObj.rotationCirclePoint = { x: parent.activeObj.bottomCenterCircle.startX,
976
+ y: parent.activeObj.bottomCenterCircle.startY + parent.activeObj.rotationCircleLine };
977
+ canvasDraw.moveTo(parent.activeObj.rotationCirclePoint.x, parent.activeObj.rotationCirclePoint.y - parent.activeObj.rotationCircleLine);
978
+ }
979
+ break;
980
+ case 90:
981
+ case -270:
982
+ if (isHorizontalflip) {
983
+ parent.activeObj.rotationCirclePoint = { x: parent.activeObj.centerRightCircle.startX +
984
+ parent.activeObj.rotationCircleLine, y: parent.activeObj.centerLeftCircle.startY };
985
+ canvasDraw.moveTo(parent.activeObj.rotationCirclePoint.x - parent.activeObj.rotationCircleLine, parent.activeObj.rotationCirclePoint.y);
986
+ }
987
+ else {
988
+ parent.activeObj.rotationCirclePoint = { x: parent.activeObj.centerLeftCircle.startX -
989
+ parent.activeObj.rotationCircleLine, y: parent.activeObj.centerLeftCircle.startY };
990
+ canvasDraw.moveTo(parent.activeObj.rotationCirclePoint.x + parent.activeObj.rotationCircleLine, parent.activeObj.rotationCirclePoint.y);
991
+ }
992
+ break;
993
+ case 180:
994
+ case -180:
995
+ if (isVerticalflip) {
996
+ parent.activeObj.rotationCirclePoint = { x: parent.activeObj.bottomCenterCircle.startX,
997
+ y: parent.activeObj.bottomCenterCircle.startY + parent.activeObj.rotationCircleLine };
998
+ canvasDraw.moveTo(parent.activeObj.rotationCirclePoint.x, parent.activeObj.rotationCirclePoint.y - parent.activeObj.rotationCircleLine);
999
+ }
1000
+ else {
1001
+ parent.activeObj.rotationCirclePoint = { x: parent.activeObj.topCenterCircle.startX,
1002
+ y: parent.activeObj.topCenterCircle.startY - parent.activeObj.rotationCircleLine };
1003
+ canvasDraw.moveTo(parent.activeObj.rotationCirclePoint.x, parent.activeObj.rotationCirclePoint.y + parent.activeObj.rotationCircleLine);
1004
+ }
1005
+ break;
1006
+ case 270:
1007
+ case -90:
1008
+ if (isHorizontalflip) {
1009
+ parent.activeObj.rotationCirclePoint = { x: parent.activeObj.centerLeftCircle.startX -
1010
+ parent.activeObj.rotationCircleLine, y: parent.activeObj.centerLeftCircle.startY };
1011
+ canvasDraw.moveTo(parent.activeObj.rotationCirclePoint.x + parent.activeObj.rotationCircleLine, parent.activeObj.rotationCirclePoint.y);
1012
+ }
1013
+ else {
1014
+ parent.activeObj.rotationCirclePoint = { x: parent.activeObj.centerRightCircle.startX +
1015
+ parent.activeObj.rotationCircleLine, y: parent.activeObj.centerLeftCircle.startY };
1016
+ canvasDraw.moveTo(parent.activeObj.rotationCirclePoint.x - parent.activeObj.rotationCircleLine, parent.activeObj.rotationCirclePoint.y);
1017
+ }
1018
+ break;
1019
+ }
1020
+ };
1021
+ Draw.prototype.drawSquareLines = function (canvasDraw) {
1022
+ var splitWords;
1023
+ var parent = this.parent;
1024
+ var actPoint = parent.activeObj.activePoint;
1025
+ if (parent.activeObj.shape !== undefined) {
1026
+ splitWords = parent.activeObj.shape.split('-');
1027
+ }
1028
+ if (splitWords[0] === 'crop') {
1029
+ canvasDraw.strokeStyle = '#fff';
1030
+ }
1031
+ else {
1032
+ canvasDraw.strokeStyle = parent.activeObj.strokeSettings.strokeColor;
1033
+ }
1034
+ canvasDraw.beginPath();
1035
+ canvasDraw.rect(actPoint.startX, actPoint.startY, actPoint.width, actPoint.height);
1036
+ if (parent.activeObj.strokeSettings.fillColor !== '') {
1037
+ canvasDraw.fillStyle = parent.activeObj.strokeSettings.fillColor;
1038
+ canvasDraw.fill();
1039
+ }
1040
+ canvasDraw.rect(actPoint.startX + parent.activeObj.strokeSettings.strokeWidth, actPoint.startY + parent.activeObj.strokeSettings.strokeWidth, actPoint.width - (2 * parent.activeObj.strokeSettings.strokeWidth), actPoint.height - (2 * parent.activeObj.strokeSettings.strokeWidth));
1041
+ canvasDraw.fillStyle = parent.activeObj.strokeSettings.strokeColor;
1042
+ canvasDraw.fill('evenodd');
1043
+ canvasDraw.closePath();
1044
+ };
1045
+ Draw.prototype.drawSelection = function (horLineWidth, verLineHeight) {
1046
+ var parent = this.parent;
1047
+ var actPoint = parent.activeObj.activePoint;
1048
+ this.upperContext.strokeStyle = parent.themeColl[parent.theme]['primaryColor'];
1049
+ this.upperContext.beginPath();
1050
+ parent.activeObj.horTopInnerLine = { startX: actPoint.startX, startY: actPoint.startY +
1051
+ verLineHeight, endX: actPoint.endX, endY: actPoint.endY + verLineHeight };
1052
+ parent.activeObj.horBottomInnerLine = { startX: actPoint.startX, startY: actPoint.startY + (2 * verLineHeight), endX: actPoint.endX, endY: actPoint.endY + (2 * verLineHeight) };
1053
+ parent.activeObj.verLeftInnerLine = { startX: actPoint.startX + horLineWidth,
1054
+ startY: actPoint.startY, endX: actPoint.startX + horLineWidth,
1055
+ endY: actPoint.endY };
1056
+ parent.activeObj.verRightInnerLine = { startX: actPoint.startX + (2 * horLineWidth),
1057
+ startY: actPoint.startY, endX: actPoint.startX + (2 * horLineWidth),
1058
+ endY: actPoint.endY };
1059
+ this.upperContext.moveTo(parent.activeObj.horTopInnerLine.startX, parent.activeObj.horTopInnerLine.startY);
1060
+ this.upperContext.lineTo(parent.activeObj.horTopInnerLine.endX, parent.activeObj.horTopInnerLine.startY);
1061
+ this.upperContext.moveTo(parent.activeObj.horBottomInnerLine.startX, parent.activeObj.horBottomInnerLine.startY);
1062
+ this.upperContext.lineTo(parent.activeObj.horBottomInnerLine.endX, parent.activeObj.horBottomInnerLine.startY);
1063
+ this.upperContext.moveTo(parent.activeObj.verLeftInnerLine.startX, parent.activeObj.verLeftInnerLine.startY);
1064
+ this.upperContext.lineTo(parent.activeObj.verLeftInnerLine.endX, parent.activeObj.verLeftInnerLine.endY);
1065
+ this.upperContext.moveTo(parent.activeObj.verRightInnerLine.startX, parent.activeObj.verRightInnerLine.startY);
1066
+ this.upperContext.lineTo(parent.activeObj.verRightInnerLine.endX, parent.activeObj.verRightInnerLine.endY);
1067
+ this.upperContext.stroke();
1068
+ this.upperContext.closePath();
1069
+ };
1070
+ Draw.prototype.shapeCircle = function (canvasDraw, selectionWidth, selectionHeight) {
1071
+ var parent = this.parent;
1072
+ var actPoint = parent.activeObj.activePoint;
1073
+ canvasDraw.strokeStyle = parent.themeColl[parent.theme]['primaryColor'];
1074
+ canvasDraw.clearRect(0, 0, parent.lowerCanvas.width, parent.lowerCanvas.height);
1075
+ canvasDraw.fillStyle = 'rgb(0, 0, 0, 0.25)';
1076
+ canvasDraw.fillRect(0, 0, parent.lowerCanvas.width, parent.lowerCanvas.height);
1077
+ var tempWidth = canvasDraw.lineWidth;
1078
+ canvasDraw.lineWidth = (2);
1079
+ canvasDraw.beginPath();
1080
+ canvasDraw.ellipse(parent.activeObj.horTopLine.startX + (selectionWidth / 2), parent.activeObj.horTopLine.startY
1081
+ + (selectionHeight / 2), selectionWidth / 2, selectionHeight / 2, 0, 0, 2 * Math.PI, false);
1082
+ canvasDraw.stroke();
1083
+ canvasDraw.closePath();
1084
+ canvasDraw.save();
1085
+ canvasDraw.beginPath();
1086
+ canvasDraw.arc(((actPoint.endX - actPoint.startX) / 2) + actPoint.startX, ((actPoint.endY - actPoint.startY) / 2) + actPoint.startY, (actPoint.width / 2), 0, Math.PI * 2);
1087
+ canvasDraw.closePath();
1088
+ canvasDraw.clip();
1089
+ canvasDraw.clearRect(0, 0, parent.lowerCanvas.width, parent.lowerCanvas.height);
1090
+ canvasDraw.restore();
1091
+ canvasDraw.lineWidth = tempWidth;
1092
+ this.drawOuterSelection(canvasDraw, true);
1093
+ parent.currObjType.shape = '';
1094
+ };
1095
+ Draw.prototype.shapeLine = function (canvasDraw, x1, y1, x2, y2) {
1096
+ var tempLineWidth = canvasDraw.lineWidth;
1097
+ canvasDraw.lineWidth = (this.parent.activeObj.strokeSettings.strokeWidth);
1098
+ canvasDraw.beginPath();
1099
+ canvasDraw.moveTo(x1, y1);
1100
+ canvasDraw.lineTo(x2, y2);
1101
+ canvasDraw.stroke();
1102
+ canvasDraw.lineWidth = tempLineWidth;
1103
+ };
1104
+ Draw.prototype.arrow = function (canvasDraw, start) {
1105
+ var parent = this.parent;
1106
+ var actPoint = parent.activeObj.activePoint;
1107
+ canvasDraw.lineWidth = (parent.activeObj.strokeSettings.strokeWidth);
1108
+ var x = this.arrowDimension['arrow']['width'] + parent.activeObj.strokeSettings.strokeWidth;
1109
+ var y = this.arrowDimension['arrow']['height'] + parent.activeObj.strokeSettings.strokeWidth;
1110
+ this.dx = actPoint.endX - actPoint.startX;
1111
+ this.dy = actPoint.endY - actPoint.startY;
1112
+ canvasDraw.fillStyle = parent.activeObj.strokeSettings.strokeColor;
1113
+ var angle = Math.atan2(this.dy, this.dx);
1114
+ if ((start && (parent.activeObj.triangleDirection === 'left' || parent.activeObj.triangleDirection === 'right')
1115
+ && (parent.activeObj.start === 'arrow' && parent.activeObj.end === 'none')
1116
+ || (parent.activeObj.start === 'arrow' && parent.activeObj.end !== 'circle'
1117
+ && parent.activeObj.end !== 'square')) ||
1118
+ (!start && (parent.activeObj.end === 'arrow' && parent.activeObj.start === 'none'
1119
+ || parent.activeObj.start !== 'circle' && parent.activeObj.start !== 'square'))) {
1120
+ this.shapeLine(canvasDraw, actPoint.startX, actPoint.startY, actPoint.endX, actPoint.endY);
1121
+ }
1122
+ if ((start && parent.activeObj.triangleDirection === 'left') ||
1123
+ (!start && parent.activeObj.triangleDirection === 'right')) {
1124
+ canvasDraw.translate(actPoint.endX, actPoint.endY);
1125
+ canvasDraw.rotate(angle);
1126
+ this.shapeLine(canvasDraw, 0, 0, -x, y / 2);
1127
+ this.shapeLine(canvasDraw, 0, 0, -x, -y / 2);
1128
+ canvasDraw.rotate(-angle);
1129
+ canvasDraw.translate(-actPoint.endX, -actPoint.endY);
1130
+ }
1131
+ else if ((start && parent.activeObj.triangleDirection === 'right') ||
1132
+ (!start && parent.activeObj.triangleDirection === 'left')) {
1133
+ canvasDraw.translate(actPoint.startX, actPoint.startY);
1134
+ canvasDraw.rotate(angle);
1135
+ this.shapeLine(canvasDraw, 0, 0, x, y / 2);
1136
+ this.shapeLine(canvasDraw, 0, 0, x, -y / 2);
1137
+ canvasDraw.rotate(-angle);
1138
+ canvasDraw.translate(-actPoint.startX, -actPoint.startY);
1139
+ }
1140
+ };
1141
+ Draw.prototype.arrowSolid = function (canvasDraw, start) {
1142
+ var parent = this.parent;
1143
+ var actPoint = parent.activeObj.activePoint;
1144
+ var x = this.arrowDimension['arrowSolid']['width'] + parent.activeObj.strokeSettings.strokeWidth;
1145
+ var y = this.arrowDimension['arrowSolid']['height'] + parent.activeObj.strokeSettings.strokeWidth;
1146
+ this.dx = actPoint.endX - actPoint.startX;
1147
+ this.dy = actPoint.endY - actPoint.startY;
1148
+ var angle = Math.atan2(this.dy, this.dx);
1149
+ if ((start && (parent.activeObj.start === 'arrowSolid' && parent.activeObj.end === 'none')
1150
+ || (parent.activeObj.start === 'arrowSolid' && parent.activeObj.end !== 'circle' && parent.activeObj.end !== 'square')) ||
1151
+ (!start && (parent.activeObj.end === 'arrowSolid' && parent.activeObj.start === 'none'
1152
+ || parent.activeObj.start !== 'circle' && parent.activeObj.start !== 'square'))) {
1153
+ this.shapeLine(canvasDraw, actPoint.startX, actPoint.startY, actPoint.endX, actPoint.endY);
1154
+ }
1155
+ if ((start && parent.activeObj.triangleDirection === 'left') ||
1156
+ (!start && parent.activeObj.triangleDirection === 'right')) {
1157
+ canvasDraw.translate(actPoint.endX, actPoint.endY);
1158
+ canvasDraw.rotate(angle);
1159
+ canvasDraw.beginPath();
1160
+ canvasDraw.moveTo(parent.activeObj.strokeSettings.strokeWidth, 0);
1161
+ canvasDraw.lineTo(-x + y / 2, y / 2);
1162
+ canvasDraw.lineTo(-x + y / 2, -y / 2);
1163
+ canvasDraw.closePath();
1164
+ canvasDraw.fill();
1165
+ canvasDraw.rotate(-angle);
1166
+ canvasDraw.translate(-actPoint.endX, -actPoint.endY);
1167
+ parent.activeObj.rotatedAngle = angle;
1168
+ }
1169
+ else if ((start && parent.activeObj.triangleDirection === 'right') ||
1170
+ (!start && parent.activeObj.triangleDirection === 'left')) {
1171
+ canvasDraw.translate(actPoint.startX, actPoint.startY);
1172
+ canvasDraw.rotate(angle);
1173
+ canvasDraw.beginPath();
1174
+ canvasDraw.moveTo(0 - parent.activeObj.strokeSettings.strokeWidth, 0);
1175
+ canvasDraw.lineTo(x - y / 2, y / 2);
1176
+ canvasDraw.lineTo(x - y / 2, -y / 2);
1177
+ canvasDraw.closePath();
1178
+ canvasDraw.fill();
1179
+ canvasDraw.rotate(-angle);
1180
+ canvasDraw.translate(-actPoint.startX, -actPoint.startY);
1181
+ parent.activeObj.rotatedAngle = angle;
1182
+ }
1183
+ };
1184
+ Draw.prototype.arrowSquareStart = function (canvasDraw) {
1185
+ var parent = this.parent;
1186
+ var actPoint = parent.activeObj.activePoint;
1187
+ if ((parent.activeObj.start === 'square' && parent.activeObj.end === 'none')
1188
+ || (parent.activeObj.start === 'square' && parent.activeObj.end !== 'circle'
1189
+ && parent.activeObj.start !== 'square') || (parent.activeObj.start === 'squareSolid' && parent.activeObj.end === 'circleSolid')) {
1190
+ this.shapeLine(canvasDraw, actPoint.startX, actPoint.startY, actPoint.endX, actPoint.endY);
1191
+ }
1192
+ canvasDraw.lineWidth = (parent.activeObj.strokeSettings.strokeWidth);
1193
+ canvasDraw.beginPath();
1194
+ canvasDraw.fillStyle = parent.activeObj.strokeSettings.strokeColor;
1195
+ var x = this.arrowDimension['square']['width'] + parent.activeObj.strokeSettings.strokeWidth;
1196
+ var y = this.arrowDimension['square']['height'] + parent.activeObj.strokeSettings.strokeWidth;
1197
+ this.dx = actPoint.endX - actPoint.startX;
1198
+ this.dy = actPoint.endY - actPoint.startY;
1199
+ var angle = Math.atan2(this.dy, this.dx);
1200
+ if (parent.activeObj.triangleDirection === 'left') {
1201
+ canvasDraw.translate(actPoint.endX, actPoint.endY);
1202
+ canvasDraw.rotate(angle);
1203
+ if (parent.activeObj.start === 'squareSolid') {
1204
+ canvasDraw.fillRect(-x + y / 2, -y / 2, x, y);
1205
+ }
1206
+ canvasDraw.strokeRect(-x + y / 2, -y / 2, x, y);
1207
+ canvasDraw.rotate(-angle);
1208
+ canvasDraw.translate(-actPoint.endX, -actPoint.endY);
1209
+ this.squareStartIntersectX1 = actPoint.endX - (y / 2) * Math.cos(angle);
1210
+ this.squareStartIntersectY1 = actPoint.endY - (y / 2) * Math.sin(angle);
1211
+ if (parent.activeObj.start === 'square' && parent.activeObj.end !== 'square'
1212
+ && parent.activeObj.end !== 'circle' && parent.activeObj.end !== 'square') {
1213
+ this.shapeLine(canvasDraw, actPoint.startX, actPoint.startY, this.squareStartIntersectX1, this.squareStartIntersectY1);
1214
+ }
1215
+ if (parent.activeObj.start === 'square' && parent.activeObj.end === 'circle') {
1216
+ this.shapeLine(canvasDraw, this.endCircleIntersectX1, this.endCircleIntersectY1, this.squareStartIntersectX1, this.squareStartIntersectY1);
1217
+ }
1218
+ if (parent.activeObj.start === 'squareSolid' && parent.activeObj.end === 'squareSolid') {
1219
+ this.shapeLine(canvasDraw, actPoint.startX, actPoint.startY, actPoint.endX, actPoint.endY);
1220
+ }
1221
+ }
1222
+ else if (parent.activeObj.triangleDirection === 'right') {
1223
+ canvasDraw.lineWidth = (parent.activeObj.strokeSettings.strokeWidth);
1224
+ canvasDraw.fillStyle = parent.activeObj.strokeSettings.strokeColor;
1225
+ if (parent.activeObj.start === 'squareSolid' && parent.activeObj.end === 'squareSolid') {
1226
+ this.shapeLine(canvasDraw, actPoint.startX, actPoint.startY, actPoint.endX, actPoint.endY);
1227
+ }
1228
+ canvasDraw.translate(actPoint.startX, actPoint.startY);
1229
+ canvasDraw.rotate(angle);
1230
+ if (parent.activeObj.start === 'squareSolid') {
1231
+ canvasDraw.fillRect(y / 2 - x, -y / 2, x, y);
1232
+ }
1233
+ canvasDraw.strokeRect(y / 2 - x, -y / 2, x, y);
1234
+ canvasDraw.rotate(-angle);
1235
+ canvasDraw.translate(-actPoint.startX, -actPoint.startY);
1236
+ parent.activeObj.rotatedAngle = angle;
1237
+ this.squareStartIntersectX1 = actPoint.startX + (y / 2) * Math.cos(angle);
1238
+ this.squareStartIntersectY1 = actPoint.startY + (y / 2) * Math.sin(angle);
1239
+ if (parent.activeObj.start === 'square' && parent.activeObj.end !== 'square'
1240
+ && parent.activeObj.end !== 'circle' && parent.activeObj.end !== 'square') {
1241
+ this.shapeLine(canvasDraw, actPoint.endX, actPoint.endY, this.squareStartIntersectX1, this.squareStartIntersectY1);
1242
+ }
1243
+ if (parent.activeObj.start === 'square' && parent.activeObj.end === 'circle') {
1244
+ this.shapeLine(canvasDraw, this.endCircleIntersectX1, this.endCircleIntersectY1, this.squareStartIntersectX1, this.squareStartIntersectY1);
1245
+ }
1246
+ }
1247
+ };
1248
+ Draw.prototype.arrowSquareEnd = function (canvasDraw) {
1249
+ var parent = this.parent;
1250
+ var actPoint = parent.activeObj.activePoint;
1251
+ var x = this.arrowDimension['square']['width'] + parent.activeObj.strokeSettings.strokeWidth;
1252
+ var y = this.arrowDimension['square']['height'] + parent.activeObj.strokeSettings.strokeWidth;
1253
+ this.dx = actPoint.endX - actPoint.startX;
1254
+ this.dy = actPoint.endY - actPoint.startY;
1255
+ var angle = Math.atan2(this.dy, this.dx);
1256
+ canvasDraw.lineWidth = (parent.activeObj.strokeSettings.strokeWidth);
1257
+ if (parent.activeObj.triangleDirection === 'right') {
1258
+ canvasDraw.fillStyle = parent.activeObj.strokeSettings.strokeColor;
1259
+ if (parent.activeObj.end === 'squareSolid' && parent.activeObj.start === 'none') {
1260
+ this.shapeLine(canvasDraw, actPoint.startX, actPoint.startY, actPoint.endX, actPoint.endY);
1261
+ }
1262
+ canvasDraw.translate(actPoint.endX, actPoint.endY);
1263
+ canvasDraw.rotate(angle);
1264
+ if (parent.activeObj.end === 'squareSolid') {
1265
+ canvasDraw.fillRect(-x + y / 2, -y / 2, x, y);
1266
+ }
1267
+ canvasDraw.strokeRect(-x + y / 2, -y / 2, x, y);
1268
+ canvasDraw.rotate(-angle);
1269
+ canvasDraw.translate(-actPoint.endX, -actPoint.endY);
1270
+ parent.activeObj.rotatedAngle = angle;
1271
+ this.squareEndIntersectX1 = actPoint.endX - (y / 2) * Math.cos(angle);
1272
+ this.squareEndIntersectY1 = actPoint.endY - (y / 2) * Math.sin(angle);
1273
+ if (parent.activeObj.end === 'square' && parent.activeObj.start !== 'square' && parent.activeObj.start !== 'circle'
1274
+ && parent.activeObj.end === 'square') {
1275
+ this.shapeLine(canvasDraw, actPoint.startX, actPoint.startY, this.squareEndIntersectX1, this.squareEndIntersectY1);
1276
+ }
1277
+ else if ((parent.activeObj.start === 'circle') && parent.activeObj.end === 'square') {
1278
+ this.shapeLine(canvasDraw, this.squareEndIntersectX1, this.squareEndIntersectY1, this.startCircleIntersectX1, this.startCircleIntersectY1);
1279
+ }
1280
+ else if ((parent.activeObj.start === 'square') && parent.activeObj.end === 'square') {
1281
+ this.shapeLine(canvasDraw, this.squareEndIntersectX1, this.squareEndIntersectY1, this.squareStartIntersectX1, this.squareStartIntersectY1);
1282
+ }
1283
+ }
1284
+ else if (parent.activeObj.triangleDirection === 'left') {
1285
+ canvasDraw.translate(actPoint.startX, actPoint.startY);
1286
+ canvasDraw.rotate(angle);
1287
+ if (parent.activeObj.end === 'squareSolid') {
1288
+ canvasDraw.fillRect(y / 2 - x, -y / 2, x, y);
1289
+ }
1290
+ canvasDraw.strokeRect(y / 2 - x, -y / 2, x, y);
1291
+ canvasDraw.rotate(-angle);
1292
+ canvasDraw.translate(-actPoint.startX, -actPoint.startY);
1293
+ parent.activeObj.rotatedAngle = angle;
1294
+ this.squareEndIntersectX1 = actPoint.startX + (y / 2) * Math.cos(angle);
1295
+ this.squareEndIntersectY1 = actPoint.startY + (y / 2) * Math.sin(angle);
1296
+ if (parent.activeObj.end === 'square' && parent.activeObj.start !== 'square' &&
1297
+ parent.activeObj.start !== 'circle' && parent.activeObj.end === 'square') {
1298
+ this.shapeLine(canvasDraw, actPoint.endX, actPoint.endY, this.squareEndIntersectX1, this.squareEndIntersectY1);
1299
+ }
1300
+ else if ((parent.activeObj.start === 'circle') && parent.activeObj.end === 'square') {
1301
+ this.shapeLine(canvasDraw, this.squareEndIntersectX1, this.squareEndIntersectY1, this.startCircleIntersectX1, this.startCircleIntersectY1);
1302
+ }
1303
+ else if ((parent.activeObj.start === 'square') && parent.activeObj.end === 'square') {
1304
+ this.shapeLine(canvasDraw, this.squareEndIntersectX1, this.squareEndIntersectY1, this.squareStartIntersectX1, this.squareStartIntersectY1);
1305
+ }
1306
+ }
1307
+ };
1308
+ Draw.prototype.arrowCircle = function (canvasDraw, start) {
1309
+ var parent = this.parent;
1310
+ var actPoint = parent.activeObj.activePoint;
1311
+ if ((start && parent.activeObj.triangleDirection === 'left') ||
1312
+ (!start && parent.activeObj.triangleDirection === 'right')) {
1313
+ canvasDraw.lineWidth = (parent.activeObj.strokeSettings.strokeWidth);
1314
+ var circleRadius = this.arrowDimension['circle']['width'] + parent.activeObj.strokeSettings.strokeWidth;
1315
+ canvasDraw.beginPath();
1316
+ canvasDraw.arc(actPoint.endX, actPoint.endY, circleRadius, 0, 2 * Math.PI);
1317
+ canvasDraw.stroke();
1318
+ canvasDraw.closePath();
1319
+ this.dx = actPoint.endX - actPoint.startX;
1320
+ this.dy = actPoint.endY - actPoint.startY;
1321
+ var a = this.dx * this.dx + this.dy * this.dy;
1322
+ var b = 2 * (this.dx * (actPoint.startX - actPoint.endX) + this.dy * (actPoint.startY - actPoint.endY));
1323
+ var c = (actPoint.startX - actPoint.endX) *
1324
+ (actPoint.startX - actPoint.endX) +
1325
+ (actPoint.startY - actPoint.endY) *
1326
+ (actPoint.startY - actPoint.endY) - circleRadius * circleRadius;
1327
+ var intersect = b * b - 4 * a * c;
1328
+ if (intersect >= 0) {
1329
+ canvasDraw.fillStyle = parent.activeObj.strokeSettings.strokeColor;
1330
+ var t2 = (-b - Math.sqrt(intersect)) / (2 * a);
1331
+ var intersectionX1 = actPoint.startX + this.dx * t2;
1332
+ var intersectionY1 = actPoint.startY + this.dy * t2;
1333
+ if (start) {
1334
+ this.startCircleIntersectX1 = intersectionX1;
1335
+ this.startCircleIntersectY1 = intersectionY1;
1336
+ canvasDraw.beginPath();
1337
+ canvasDraw.fill();
1338
+ canvasDraw.beginPath();
1339
+ if (parent.activeObj.start === 'circle' && parent.activeObj.end === 'circle') {
1340
+ this.shapeLine(canvasDraw, this.startCircleIntersectX1, this.startCircleIntersectY1, this.endCircleIntersectX1, this.endCircleIntersectY1);
1341
+ }
1342
+ else if (parent.activeObj.start === 'circle' && parent.activeObj.end !== 'circle' && parent.activeObj.end !== 'square') {
1343
+ this.shapeLine(canvasDraw, actPoint.startX, actPoint.startY, this.startCircleIntersectX1, this.startCircleIntersectY1);
1344
+ }
1345
+ canvasDraw.stroke();
1346
+ canvasDraw.closePath();
1347
+ }
1348
+ else {
1349
+ this.endCircleIntersectX1 = intersectionX1;
1350
+ this.endCircleIntersectY1 = intersectionY1;
1351
+ if (parent.activeObj.end === 'circle' && (parent.activeObj.start !== 'circle' && parent.activeObj.start !== 'square')) {
1352
+ this.shapeLine(canvasDraw, actPoint.startX, actPoint.startY, this.endCircleIntersectX1, this.endCircleIntersectY1);
1353
+ }
1354
+ }
1355
+ }
1356
+ var angle = Math.atan2(this.dy, this.dx);
1357
+ parent.activeObj.rotatedAngle = angle;
1358
+ }
1359
+ else if ((start && parent.activeObj.triangleDirection === 'right') ||
1360
+ (!start && parent.activeObj.triangleDirection === 'left')) {
1361
+ canvasDraw.lineWidth = (parent.activeObj.strokeSettings.strokeWidth);
1362
+ var circleRadius = this.arrowDimension['circle']['width'] + parent.activeObj.strokeSettings.strokeWidth;
1363
+ canvasDraw.beginPath();
1364
+ canvasDraw.arc(actPoint.startX, actPoint.startY, circleRadius, 0, 2 * Math.PI);
1365
+ canvasDraw.stroke();
1366
+ canvasDraw.closePath();
1367
+ this.dx = actPoint.startX - actPoint.endX;
1368
+ this.dy = actPoint.startY - actPoint.endY;
1369
+ var a = this.dx * this.dx + this.dy * this.dy;
1370
+ var b = 2 * (this.dx * (actPoint.endX - actPoint.startX) +
1371
+ this.dy * (actPoint.endY - actPoint.startY));
1372
+ var c = (actPoint.endX - actPoint.startX) *
1373
+ (actPoint.endX - actPoint.startX) +
1374
+ (actPoint.endY - actPoint.startY) *
1375
+ (actPoint.endY - actPoint.startY) - circleRadius * circleRadius;
1376
+ var intersect = b * b - 4 * a * c;
1377
+ if (intersect >= 0) {
1378
+ canvasDraw.fillStyle = parent.activeObj.strokeSettings.strokeColor;
1379
+ var t2 = (-b - Math.sqrt(intersect)) / (2 * a);
1380
+ var intersectionX1 = actPoint.endX + this.dx * t2;
1381
+ var intersectionY1 = actPoint.endY + this.dy * t2;
1382
+ if (start) {
1383
+ this.startCircleIntersectX1 = intersectionX1;
1384
+ this.startCircleIntersectY1 = intersectionY1;
1385
+ if (parent.activeObj.start === 'circle' && parent.activeObj.end === 'circle') {
1386
+ this.shapeLine(canvasDraw, this.endCircleIntersectX1, this.endCircleIntersectY1, this.startCircleIntersectX1, this.startCircleIntersectY1);
1387
+ }
1388
+ else if (parent.activeObj.start === 'circle' && parent.activeObj.end !== 'circle' && parent.activeObj.end !== 'square') {
1389
+ this.shapeLine(canvasDraw, actPoint.endX, actPoint.endY, this.startCircleIntersectX1, this.startCircleIntersectY1);
1390
+ }
1391
+ }
1392
+ else {
1393
+ this.endCircleIntersectX1 = intersectionX1;
1394
+ this.endCircleIntersectY1 = intersectionY1;
1395
+ canvasDraw.beginPath();
1396
+ canvasDraw.fill();
1397
+ canvasDraw.beginPath();
1398
+ if (parent.activeObj.end === 'circle' && (parent.activeObj.start !== 'circle' && parent.activeObj.start !== 'square')) {
1399
+ this.shapeLine(canvasDraw, actPoint.endX, actPoint.endY, this.endCircleIntersectX1, this.endCircleIntersectY1);
1400
+ }
1401
+ }
1402
+ }
1403
+ var angle = Math.atan2(this.dy, this.dx);
1404
+ parent.activeObj.rotatedAngle = angle;
1405
+ }
1406
+ };
1407
+ Draw.prototype.arrowCircleSolid = function (canvasDraw, start) {
1408
+ var parent = this.parent;
1409
+ var actPoint = parent.activeObj.activePoint;
1410
+ if ((start && parent.activeObj.triangleDirection === 'left') ||
1411
+ (!start && parent.activeObj.triangleDirection === 'right')) {
1412
+ canvasDraw.lineWidth = (parent.activeObj.strokeSettings.strokeWidth);
1413
+ canvasDraw.beginPath();
1414
+ canvasDraw.fillStyle = parent.activeObj.strokeSettings.strokeColor;
1415
+ if ((start && (parent.activeObj.start === 'circleSolid' && parent.activeObj.end === 'none') ||
1416
+ (parent.activeObj.start === 'circleSolid' && parent.activeObj.end !== 'circle' && parent.activeObj.end !== 'square')) ||
1417
+ (!start && (parent.activeObj.end === 'circleSolid' && parent.activeObj.start === 'none'))) {
1418
+ this.shapeLine(canvasDraw, actPoint.startX, actPoint.startY, actPoint.endX, actPoint.endY);
1419
+ }
1420
+ var circleRadius = this.arrowDimension['circle']['width'] + parent.activeObj.strokeSettings.strokeWidth;
1421
+ this.dx = actPoint.endX - actPoint.startX;
1422
+ this.dy = actPoint.endY - actPoint.startY;
1423
+ canvasDraw.save();
1424
+ canvasDraw.beginPath();
1425
+ canvasDraw.arc(actPoint.endX, actPoint.endY, circleRadius, 0, 2 * Math.PI);
1426
+ canvasDraw.stroke();
1427
+ canvasDraw.fill();
1428
+ canvasDraw.closePath();
1429
+ parent.activeObj.rotatedAngle = Math.atan2(this.dy, this.dx);
1430
+ }
1431
+ else if ((start && parent.activeObj.triangleDirection === 'right') ||
1432
+ (!start && parent.activeObj.triangleDirection === 'left')) {
1433
+ canvasDraw.lineWidth = (parent.activeObj.strokeSettings.strokeWidth);
1434
+ canvasDraw.beginPath();
1435
+ canvasDraw.fillStyle = parent.activeObj.strokeSettings.strokeColor;
1436
+ if ((start && (parent.activeObj.start === 'circleSolid' && parent.activeObj.end === 'none') ||
1437
+ (parent.activeObj.start === 'circleSolid' && parent.activeObj.end !== 'circle' && parent.activeObj.end !== 'square')) ||
1438
+ !start && (parent.activeObj.end === 'circleSolid' && parent.activeObj.start === 'none')) {
1439
+ this.shapeLine(canvasDraw, actPoint.startX, actPoint.startY, actPoint.endX, actPoint.endY);
1440
+ }
1441
+ var circleRadius = this.arrowDimension['circle']['width'] + parent.activeObj.strokeSettings.strokeWidth;
1442
+ this.dx = actPoint.endX - actPoint.startX;
1443
+ this.dy = actPoint.endY - actPoint.startY;
1444
+ canvasDraw.save();
1445
+ canvasDraw.beginPath();
1446
+ canvasDraw.arc(actPoint.startX, actPoint.startY, circleRadius, 0, 2 * Math.PI);
1447
+ canvasDraw.stroke();
1448
+ canvasDraw.fill();
1449
+ canvasDraw.closePath();
1450
+ parent.activeObj.rotatedAngle = Math.atan2(this.dy, this.dx);
1451
+ }
1452
+ };
1453
+ Draw.prototype.arrowBar = function (canvasDraw, start) {
1454
+ var parent = this.parent;
1455
+ var actPoint = parent.activeObj.activePoint;
1456
+ if ((start && parent.activeObj.triangleDirection === 'left') ||
1457
+ (!start && parent.activeObj.triangleDirection === 'right')) {
1458
+ canvasDraw.lineWidth = (parent.activeObj.strokeSettings.strokeWidth);
1459
+ canvasDraw.beginPath();
1460
+ canvasDraw.fillStyle = parent.activeObj.strokeSettings.strokeColor;
1461
+ if ((start && (parent.activeObj.start === 'bar' && parent.activeObj.end === 'none') ||
1462
+ (parent.activeObj.start === 'bar' && (parent.activeObj.end !== 'circle' && parent.activeObj.end !== 'square'))) ||
1463
+ (!start && ((parent.activeObj.end === 'bar' && parent.activeObj.start === 'none') ||
1464
+ (parent.activeObj.end === 'bar' && (parent.activeObj.start !== 'circle' && parent.activeObj.start !== 'square'))))) {
1465
+ this.shapeLine(canvasDraw, actPoint.startX, actPoint.startY, actPoint.endX, actPoint.endY);
1466
+ }
1467
+ var x = this.arrowDimension['bar']['width'] + parent.activeObj.strokeSettings.strokeWidth;
1468
+ var y = this.arrowDimension['bar']['height'] + parent.activeObj.strokeSettings.strokeWidth;
1469
+ this.dx = actPoint.endX - actPoint.startX;
1470
+ this.dy = actPoint.endY - actPoint.startY;
1471
+ var angle = Math.atan2(this.dy, this.dx);
1472
+ canvasDraw.translate(actPoint.endX, actPoint.endY);
1473
+ canvasDraw.rotate(angle);
1474
+ canvasDraw.fillRect(-x + y / 4, -y / 2, x, y);
1475
+ canvasDraw.rotate(-angle);
1476
+ canvasDraw.translate(-actPoint.endX, -actPoint.endY);
1477
+ parent.activeObj.rotatedAngle = angle;
1478
+ }
1479
+ else if ((start && parent.activeObj.triangleDirection === 'right') ||
1480
+ (!start && parent.activeObj.triangleDirection === 'left')) {
1481
+ canvasDraw.lineWidth = (parent.activeObj.strokeSettings.strokeWidth);
1482
+ canvasDraw.beginPath();
1483
+ canvasDraw.fillStyle = parent.activeObj.strokeSettings.strokeColor;
1484
+ if ((start && (parent.activeObj.start === 'bar' && parent.activeObj.end === 'none')
1485
+ || (parent.activeObj.start === 'bar' && (parent.activeObj.end !== 'circle' && parent.activeObj.end !== 'square'))) ||
1486
+ (!start && (parent.activeObj.end === 'bar' && parent.activeObj.start === 'none'))) {
1487
+ this.shapeLine(canvasDraw, actPoint.startX, actPoint.startY, actPoint.endX, actPoint.endY);
1488
+ }
1489
+ var x = this.arrowDimension['bar']['width'] + parent.activeObj.strokeSettings.strokeWidth;
1490
+ var y = this.arrowDimension['bar']['height'] + parent.activeObj.strokeSettings.strokeWidth;
1491
+ this.dx = actPoint.endX - actPoint.startX;
1492
+ this.dy = actPoint.endY - actPoint.startY;
1493
+ var angle = Math.atan2(this.dy, this.dx);
1494
+ canvasDraw.translate(actPoint.startX, actPoint.startY);
1495
+ canvasDraw.rotate(angle);
1496
+ canvasDraw.fillRect(y / 4 - x, -y / 2, x, y);
1497
+ canvasDraw.rotate(-angle);
1498
+ canvasDraw.translate(-actPoint.startX, -actPoint.startY);
1499
+ parent.activeObj.rotatedAngle = angle;
1500
+ }
1501
+ };
1502
+ Draw.prototype.shapeText = function (canvasDraw) {
1503
+ var parent = this.parent;
1504
+ var actPoint = parent.activeObj.activePoint;
1505
+ var rows = parent.activeObj.keyHistory.split('\n');
1506
+ var height = parent.activeObj.textSettings.fontSize + parent.activeObj.textSettings.fontSize * 0.25;
1507
+ var lineHeight = ((height * rows.length) - (parent.activeObj.textSettings.fontSize * rows.length)) / rows.length;
1508
+ for (var i = 0; i < rows.length; i++) {
1509
+ var text = rows[i];
1510
+ var yPoint = ((i + 1) * parent.activeObj.textSettings.fontSize * 0.85) + (i * lineHeight);
1511
+ if (parent.transform.degree === -360) {
1512
+ parent.transform.degree = 0;
1513
+ }
1514
+ if (parent.transform.degree === 0 || parent.transform.degree === 180) {
1515
+ if (parent.activeObj.textSettings.fontSize > actPoint.height) {
1516
+ parent.activeObj.textSettings.fontSize = actPoint.height -
1517
+ (actPoint.height * 0.1);
1518
+ }
1519
+ }
1520
+ else {
1521
+ if (parent.activeObj.textSettings.fontSize > actPoint.width) {
1522
+ parent.activeObj.textSettings.fontSize = actPoint.width -
1523
+ (actPoint.width * 0.1);
1524
+ }
1525
+ }
1526
+ canvasDraw.strokeStyle = parent.activeObj.strokeSettings.strokeColor;
1527
+ canvasDraw.fillStyle = parent.activeObj.strokeSettings.strokeColor;
1528
+ var textStyle = '';
1529
+ if (parent.activeObj.textSettings.bold) {
1530
+ textStyle = 'bold ';
1531
+ }
1532
+ if (parent.activeObj.textSettings.italic) {
1533
+ textStyle = 'italic ';
1534
+ }
1535
+ if (parent.activeObj.textSettings.bold && parent.activeObj.textSettings.italic) {
1536
+ textStyle = 'italic bold ';
1537
+ }
1538
+ canvasDraw.font = textStyle + parent.activeObj.textSettings.fontSize + 'px' + ' ' +
1539
+ parent.activeObj.textSettings.fontFamily;
1540
+ if (parent.activeObj.flipObjColl.length === 4) {
1541
+ parent.activeObj.flipObjColl = [];
1542
+ }
1543
+ for (var j = 0, len = parent.activeObj.flipObjColl.length; j < len; j++) {
1544
+ if (parent.activeObj.flipObjColl[j].toLowerCase() === 'horizontal') {
1545
+ canvasDraw.translate(canvasDraw.canvas.width, 0);
1546
+ canvasDraw.scale(-1, 1);
1547
+ this.updateActPoint('horizontal', canvasDraw);
1548
+ }
1549
+ else if (parent.activeObj.flipObjColl[j].toLowerCase() === 'vertical') {
1550
+ canvasDraw.translate(0, canvasDraw.canvas.height);
1551
+ canvasDraw.scale(1, -1);
1552
+ this.updateActPoint('vertical', canvasDraw);
1553
+ }
1554
+ }
1555
+ if (parent.activeObj.shapeDegree !== parent.transform.degree) {
1556
+ this.rotateText(canvasDraw);
1557
+ }
1558
+ else {
1559
+ canvasDraw.fillText(text, actPoint.startX + parent.activeObj.textSettings.fontSize * 0.1, actPoint.startY + yPoint);
1560
+ }
1561
+ for (var k = 0, len = parent.activeObj.flipObjColl.length; k < len; k++) {
1562
+ if (parent.activeObj.flipObjColl[k].toLowerCase() === 'horizontal') {
1563
+ canvasDraw.translate(canvasDraw.canvas.width, 0);
1564
+ canvasDraw.scale(-1, 1);
1565
+ this.updateActPoint('horizontal', canvasDraw);
1566
+ }
1567
+ else if (parent.activeObj.flipObjColl[k].toLowerCase() === 'vertical') {
1568
+ canvasDraw.translate(0, canvasDraw.canvas.height);
1569
+ canvasDraw.scale(1, -1);
1570
+ this.updateActPoint('vertical', canvasDraw);
1571
+ }
1572
+ }
1573
+ }
1574
+ parent.currObjType.isText = false;
1575
+ };
1576
+ Draw.prototype.updateActPoint = function (degree, canvasDraw) {
1577
+ var parent = this.parent;
1578
+ var actPoint = parent.activeObj.activePoint;
1579
+ if (degree.toLowerCase() === 'horizontal') {
1580
+ if (actPoint.startX <= canvasDraw.canvas.width / 2) {
1581
+ actPoint.startX = canvasDraw.canvas.width / 2 + ((canvasDraw.canvas.width / 2) -
1582
+ actPoint.endX);
1583
+ actPoint.endX = actPoint.startX +
1584
+ actPoint.width;
1585
+ this.updateActiveObject(actPoint, parent.activeObj);
1586
+ }
1587
+ else if (actPoint.startX >= canvasDraw.canvas.width / 2) {
1588
+ actPoint.startX = canvasDraw.canvas.width - actPoint.endX;
1589
+ actPoint.endX = actPoint.startX +
1590
+ actPoint.width;
1591
+ this.updateActiveObject(actPoint, parent.activeObj);
1592
+ }
1593
+ }
1594
+ else if (degree.toLowerCase() === 'vertical') {
1595
+ if (actPoint.startY <= canvasDraw.canvas.height / 2) {
1596
+ actPoint.startY = canvasDraw.canvas.height / 2 + ((canvasDraw.canvas.height / 2) - actPoint.endY);
1597
+ actPoint.endY = actPoint.startY + actPoint.height;
1598
+ this.updateActiveObject(actPoint, parent.activeObj);
1599
+ }
1600
+ else if (actPoint.startY >= canvasDraw.canvas.height / 2) {
1601
+ actPoint.startY = canvasDraw.canvas.height - actPoint.endY;
1602
+ actPoint.endY = actPoint.startY + actPoint.height;
1603
+ this.updateActiveObject(actPoint, parent.activeObj);
1604
+ }
1605
+ }
1606
+ };
1607
+ Draw.prototype.rotateText = function (canvasDraw) {
1608
+ var parent = this.parent;
1609
+ var startX = parent.activeObj.activePoint.startX;
1610
+ var startY = parent.activeObj.activePoint.startY;
1611
+ var degree;
1612
+ var actPoint = parent.activeObj.activePoint;
1613
+ if (parent.activeObj.shapeDegree === 0) {
1614
+ degree = parent.transform.degree;
1615
+ }
1616
+ else {
1617
+ degree = parent.transform.degree - parent.activeObj.shapeDegree;
1618
+ }
1619
+ if (degree < 0) {
1620
+ degree = 360 + degree;
1621
+ }
1622
+ if (degree % 360 === 0 && (parent.transform.degree !== -360 || parent.transform.currFlipState === '')) {
1623
+ startX = actPoint.startX + parent.activeObj.textSettings.fontSize * 0.15;
1624
+ startY = actPoint.startY + (actPoint.endY - actPoint.startY);
1625
+ var rows = parent.activeObj.keyHistory.split('\n');
1626
+ for (var i = 0; i < rows.length; i++) {
1627
+ startY = actPoint.startY + (i * parent.activeObj.textSettings.fontSize + parent.activeObj.textSettings.fontSize * 0.25);
1628
+ canvasDraw.fillText(rows[i], startX, startY);
1629
+ }
1630
+ }
1631
+ else if (degree % 90 === 0 && degree % 180 !== 0) {
1632
+ canvasDraw.translate(parent.lowerCanvas.width / 2, parent.lowerCanvas.height / 2);
1633
+ canvasDraw.rotate(Math.PI / 180 * degree);
1634
+ canvasDraw.translate(-parent.lowerCanvas.height / 2, -parent.lowerCanvas.width / 2);
1635
+ if (degree % 90 === 0 && degree % 270 !== 0) {
1636
+ startY = (parent.lowerCanvas.width - actPoint.endX) +
1637
+ parent.activeObj.textSettings.fontSize * 0.4;
1638
+ startX = actPoint.startY;
1639
+ }
1640
+ else if (degree % 270 === 0) {
1641
+ startX = parent.lowerCanvas.height - actPoint.endY;
1642
+ startY = actPoint.startX + parent.activeObj.textSettings.fontSize * 0.4;
1643
+ }
1644
+ this.textFlipDegree(canvasDraw, startX, startY);
1645
+ canvasDraw.translate(parent.lowerCanvas.height / 2, parent.lowerCanvas.width / 2);
1646
+ canvasDraw.rotate(Math.PI / 180 * -degree);
1647
+ canvasDraw.translate(-parent.lowerCanvas.width / 2, -parent.lowerCanvas.height / 2);
1648
+ }
1649
+ else {
1650
+ canvasDraw.translate(parent.lowerCanvas.width / 2, parent.lowerCanvas.height / 2);
1651
+ canvasDraw.rotate(Math.PI / 180 * degree);
1652
+ startX = parent.lowerCanvas.width - actPoint.endX;
1653
+ startY = (parent.lowerCanvas.height - actPoint.endY) +
1654
+ parent.activeObj.textSettings.fontSize * 0.4;
1655
+ canvasDraw.translate(-parent.lowerCanvas.width / 2, -parent.lowerCanvas.height / 2);
1656
+ this.textFlipDegree(canvasDraw, startX, startY);
1657
+ canvasDraw.translate(parent.lowerCanvas.width / 2, parent.lowerCanvas.height / 2);
1658
+ canvasDraw.rotate(Math.PI / 180 * -degree);
1659
+ canvasDraw.translate(-parent.lowerCanvas.width / 2, -parent.lowerCanvas.height / 2);
1660
+ }
1661
+ if (parent.transform.degree === 360 || parent.transform.degree === -360) {
1662
+ parent.transform.degree = 0;
1663
+ }
1664
+ };
1665
+ Draw.prototype.textFlipDegree = function (canvasDraw, startX, startY) {
1666
+ var parent = this.parent;
1667
+ var rows = parent.activeObj.keyHistory.split('\n');
1668
+ var height = parent.activeObj.textSettings.fontSize;
1669
+ var lineHeight = ((height * rows.length) - (parent.activeObj.textSettings.fontSize * rows.length)) / rows.length;
1670
+ var yPoint = (parent.activeObj.textSettings.fontSize * 0.85) + lineHeight;
1671
+ for (var i = 0; i < rows.length; i++) {
1672
+ var text = rows[i];
1673
+ if (i > 0) {
1674
+ if (i === 1) {
1675
+ yPoint -= (parent.activeObj.textSettings.fontSize * 0.85);
1676
+ }
1677
+ yPoint += parent.activeObj.textSettings.fontSize + parent.activeObj.textSettings.fontSize * 0.15;
1678
+ }
1679
+ canvasDraw.fillText(text, startX + parent.activeObj.textSettings.fontSize * 0.15, startY +
1680
+ yPoint + (i > 0 ? parent.activeObj.textSettings.fontSize * 0.25 : -parent.activeObj.textSettings.fontSize * 0.35));
1681
+ }
1682
+ };
1683
+ Draw.prototype.clearOuterCanvas = function (context) {
1684
+ var parent = this.parent;
1685
+ var destLeft = parent.img.destLeft;
1686
+ var destTop = parent.img.destTop;
1687
+ if (parent.img.destWidth < parent.lowerCanvas.width) {
1688
+ var left = parent.img.destLeft > 0 ? parent.img.destLeft : 0;
1689
+ context.clearRect(0, 0, left, parent.lowerCanvas.height);
1690
+ context.clearRect(parent.img.destLeft + parent.img.destWidth, 0, left, parent.lowerCanvas.height);
1691
+ }
1692
+ if (parent.img.destHeight < parent.lowerCanvas.height) {
1693
+ var top_1 = parent.img.destTop > 0 ? parent.img.destTop : 0;
1694
+ context.clearRect(0, 0, parent.lowerCanvas.width, top_1);
1695
+ context.clearRect(0, parent.img.destTop + parent.img.destHeight, parent.lowerCanvas.width, top_1);
1696
+ }
1697
+ if (parent.transform.currFlipState !== '') {
1698
+ parent.img.destLeft = destLeft;
1699
+ parent.img.destTop = destTop;
1700
+ }
1701
+ };
1702
+ Draw.prototype.setDestPoints = function () {
1703
+ var maxDimension;
1704
+ var parent = this.parent;
1705
+ if (parent.transform.degree % 90 === 0 && parent.transform.degree % 180 !== 0) {
1706
+ var obj = { width: 0, height: 0 };
1707
+ parent.notify('transform', { prop: 'calcMaxDimension', onPropertyChange: false,
1708
+ value: { width: parent.img.srcHeight, height: parent.img.srcWidth, obj: obj } });
1709
+ maxDimension = obj;
1710
+ if (this.isRotateZoom) {
1711
+ maxDimension.width += (maxDimension.width * parent.transform.zoomFactor);
1712
+ maxDimension.height += (maxDimension.height * parent.transform.zoomFactor);
1713
+ parent.img.destWidth = maxDimension.height;
1714
+ parent.img.destHeight = maxDimension.width;
1715
+ }
1716
+ parent.img.destLeft = (parent.lowerCanvas.clientWidth - maxDimension.height) / 2;
1717
+ parent.img.destTop = (parent.lowerCanvas.clientHeight - maxDimension.width) / 2;
1718
+ parent.img.destWidth = maxDimension.height;
1719
+ parent.img.destHeight = maxDimension.width;
1720
+ }
1721
+ else {
1722
+ var obj = { width: 0, height: 0 };
1723
+ parent.notify('transform', { prop: 'calcMaxDimension', onPropertyChange: false,
1724
+ value: { width: parent.img.srcWidth, height: parent.img.srcHeight, obj: obj } });
1725
+ maxDimension = obj;
1726
+ if (this.isRotateZoom) {
1727
+ maxDimension.width += (maxDimension.width * parent.transform.zoomFactor);
1728
+ maxDimension.height += (maxDimension.height * parent.transform.zoomFactor);
1729
+ parent.img.destWidth = maxDimension.width;
1730
+ parent.img.destHeight = maxDimension.height;
1731
+ }
1732
+ parent.img.destLeft = (parent.lowerCanvas.clientWidth - maxDimension.width) / 2;
1733
+ parent.img.destTop = (parent.lowerCanvas.clientHeight - maxDimension.height) / 2;
1734
+ parent.img.destWidth = maxDimension.width;
1735
+ parent.img.destHeight = maxDimension.height;
1736
+ }
1737
+ };
1738
+ Draw.prototype.updateCurrTransState = function (type, isPreventDestination, isRotatePan) {
1739
+ var parent = this.parent;
1740
+ var destLeft = parent.img.destLeft;
1741
+ var destTop = parent.img.destTop;
1742
+ if (type === 'initial') {
1743
+ this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);
1744
+ if (isNullOrUndefined(isPreventDestination)) {
1745
+ this.setDestPoints();
1746
+ }
1747
+ }
1748
+ this.currTransState(type, null, null, isRotatePan);
1749
+ if (parent.transform.degree === 0 && parent.transform.currFlipState === '') {
1750
+ parent.img.destLeft = destLeft;
1751
+ parent.img.destTop = destTop;
1752
+ }
1753
+ if (parent.isCircleCrop || (parent.currSelectionPoint && parent.currSelectionPoint.shape === 'crop-circle')) {
1754
+ if (isRotatePan) {
1755
+ parent.img.destLeft += parent.panPoint.totalPannedClientPoint.x;
1756
+ parent.img.destTop +=
1757
+ parent.panPoint.totalPannedClientPoint.y;
1758
+ }
1759
+ parent.notify('crop', { prop: 'cropCircle', onPropertyChange: false,
1760
+ value: { context: this.lowerContext, isSave: null, isFlip: null } });
1761
+ if (isRotatePan) {
1762
+ parent.img.destLeft -= parent.panPoint.totalPannedClientPoint.x;
1763
+ parent.img.destTop -=
1764
+ parent.panPoint.totalPannedClientPoint.y;
1765
+ }
1766
+ }
1767
+ };
1768
+ Draw.prototype.currTransState = function (type, isPreventDimension, context, isPreventCircleCrop) {
1769
+ var parent = this.parent;
1770
+ context = context ? context : this.lowerContext;
1771
+ if (type === 'initial') {
1772
+ this.setTransformColl(context, type);
1773
+ }
1774
+ else if (type === 'reverse') {
1775
+ this.setTransformColl(context, type);
1776
+ this.setClientTransDim(isPreventDimension);
1777
+ if (parent.isCircleCrop || (parent.currSelectionPoint && parent.currSelectionPoint.shape === 'crop-circle'
1778
+ && isNullOrUndefined(isPreventCircleCrop))) {
1779
+ if (isPreventCircleCrop) {
1780
+ parent.img.destLeft += parent.panPoint.totalPannedClientPoint.x;
1781
+ parent.img.destTop += parent.panPoint.totalPannedClientPoint.y;
1782
+ }
1783
+ parent.notify('crop', { prop: 'cropCircle', onPropertyChange: false,
1784
+ value: { context: this.lowerContext, isSave: null, isFlip: null } });
1785
+ if (isPreventCircleCrop) {
1786
+ parent.img.destLeft -= parent.panPoint.totalPannedClientPoint.x;
1787
+ parent.img.destTop -= parent.panPoint.totalPannedClientPoint.y;
1788
+ }
1789
+ }
1790
+ }
1791
+ };
1792
+ Draw.prototype.setTransformColl = function (context, type) {
1793
+ var parent = this.parent;
1794
+ if (type === 'initial') {
1795
+ for (var i = 0, len = parent.rotateFlipColl.length; i < len; i++) {
1796
+ this.setTransform(context, parent.rotateFlipColl[i]);
1797
+ }
1798
+ }
1799
+ else if (type === 'reverse') {
1800
+ for (var i = parent.rotateFlipColl.length - 1; i >= 0; i--) {
1801
+ this.setTransform(context, parent.rotateFlipColl[i], true);
1802
+ }
1803
+ }
1804
+ };
1805
+ Draw.prototype.setTransform = function (context, value, isReverse) {
1806
+ var parent = this.parent;
1807
+ if (isReverse && value === 90) {
1808
+ value = -90;
1809
+ }
1810
+ else if (isReverse && value === -90) {
1811
+ value = 90;
1812
+ }
1813
+ if (value === 'horizontal' && parent.transform.degree % 90 === 0 && parent.transform.degree % 180 !== 0) {
1814
+ value = 'vertical';
1815
+ }
1816
+ else if (value === 'vertical' && parent.transform.degree % 90 === 0 && parent.transform.degree % 180 !== 0) {
1817
+ value = 'horizontal';
1818
+ }
1819
+ parent.notify('transform', { prop: 'setReverseRotate', onPropertyChange: false, value: { bool: true } });
1820
+ parent.notify('transform', { prop: 'setReverseFlip', onPropertyChange: false, value: { isReverseFlip: true } });
1821
+ if (isNullOrUndefined(isReverse)) {
1822
+ context.clearRect(0, 0, context.canvas.width, context.canvas.height);
1823
+ }
1824
+ switch (value) {
1825
+ case 90:
1826
+ case -90:
1827
+ context.translate(context.canvas.width / 2, context.canvas.height / 2);
1828
+ context.rotate(Math.PI / 180 * value);
1829
+ context.translate(-context.canvas.width / 2, -context.canvas.height / 2);
1830
+ break;
1831
+ case 'horizontal':
1832
+ context.translate(context.canvas.width, 0);
1833
+ context.scale(-1, 1);
1834
+ break;
1835
+ case 'vertical':
1836
+ context.translate(0, context.canvas.height);
1837
+ context.scale(1, -1);
1838
+ break;
1839
+ }
1840
+ parent.notify('transform', { prop: 'setReverseRotate', onPropertyChange: false, value: { bool: false } });
1841
+ parent.notify('transform', { prop: 'setReverseFlip', onPropertyChange: false, value: { isReverseFlip: false } });
1842
+ };
1843
+ Draw.prototype.drawImgToCanvas = function (maxDimension) {
1844
+ var parent = this.parent;
1845
+ this.lowerContext.clearRect(0, 0, parent.lowerCanvas.width, parent.lowerCanvas.height);
1846
+ parent.img.destWidth = maxDimension.width;
1847
+ parent.img.destHeight = maxDimension.height;
1848
+ if (this.isInitialLoading) {
1849
+ parent.notify('filter', { prop: 'initFilter', onPropertyChange: false });
1850
+ this.isInitialLoading = false;
1851
+ }
1852
+ var temp = this.lowerContext.filter;
1853
+ parent.notify('filter', { prop: 'updateBrightFilter', onPropertyChange: false });
1854
+ this.lowerContext.clearRect(0, 0, parent.lowerCanvas.width, parent.lowerCanvas.height);
1855
+ this.lowerContext.drawImage(parent.baseImg, parent.img.srcLeft, parent.img.srcTop, parent.img.srcWidth, parent.img.srcHeight, parent.img.destLeft, parent.img.destTop, parent.img.destWidth, parent.img.destHeight);
1856
+ if ((parent.currSelectionPoint && parent.currSelectionPoint.shape === 'crop-circle') || parent.isCircleCrop) {
1857
+ parent.notify('crop', { prop: 'cropCircle', onPropertyChange: false,
1858
+ value: { context: this.lowerContext, isSave: null, isFlip: null } });
1859
+ }
1860
+ this.lowerContext.filter = temp;
1861
+ };
1862
+ Draw.prototype.renderImage = function (isMouseWheel) {
1863
+ var parent = this.parent;
1864
+ var temp = this.lowerContext.filter;
1865
+ parent.notify('shape', { prop: 'applyActObj', onPropertyChange: false, value: { isMouseDown: null } });
1866
+ this.upperContext.clearRect(0, 0, parent.lowerCanvas.width, parent.lowerCanvas.height);
1867
+ this.lowerContext.clearRect(0, 0, parent.lowerCanvas.width, parent.lowerCanvas.height);
1868
+ if (isMouseWheel) {
1869
+ this.setTransformColl(this.lowerContext, 'initial');
1870
+ }
1871
+ else {
1872
+ if (parent.transform.zoomFactor > 0) {
1873
+ this.isRotateZoom = true;
1874
+ }
1875
+ this.updateCurrTransState('initial');
1876
+ }
1877
+ parent.notify('filter', { prop: 'updateBrightFilter', onPropertyChange: false });
1878
+ parent.notify('transform', { prop: 'setDestPointsForFlipState', onPropertyChange: false });
1879
+ this.lowerContext.drawImage(parent.baseImg, parent.img.srcLeft, parent.img.srcTop, parent.img.srcWidth, parent.img.srcHeight, parent.img.destLeft, parent.img.destTop, parent.img.destWidth, parent.img.destHeight);
1880
+ parent.notify('transform', { prop: 'setDestPointsForFlipState', onPropertyChange: false });
1881
+ if (isMouseWheel) {
1882
+ this.setTransformColl(this.lowerContext, 'reverse');
1883
+ }
1884
+ else {
1885
+ this.updateCurrTransState('reverse');
1886
+ this.isRotateZoom = false;
1887
+ }
1888
+ this.lowerContext.filter = 'none';
1889
+ parent.notify('shape', { prop: 'iterateObjColl', onPropertyChange: false });
1890
+ parent.notify('freehand-draw', { prop: 'freehandRedraw', onPropertyChange: false,
1891
+ value: { context: this.lowerContext, points: null } });
1892
+ this.lowerContext.filter = temp;
1893
+ if (parent.isCircleCrop || (parent.currSelectionPoint && parent.currSelectionPoint.shape === 'crop-circle')) {
1894
+ parent.notify('crop', { prop: 'cropCircle', onPropertyChange: false,
1895
+ value: { context: this.lowerContext, isSave: null, isFlip: null } });
1896
+ }
1897
+ };
1898
+ Draw.prototype.imageOnLoad = function (src) {
1899
+ var _this = this;
1900
+ var parent = this.parent;
1901
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
1902
+ var proxy = this;
1903
+ parent.baseImg.src = src;
1904
+ parent.baseImg.onload = function () {
1905
+ parent.notify('filter', { prop: 'update-finetunes', onPropertyChange: false });
1906
+ proxy.lowerContext.drawImage(parent.baseImg, 0, 0, proxy.parent.lowerCanvas.width, proxy.parent.lowerCanvas.height);
1907
+ hideSpinner(parent.element);
1908
+ parent.element.style.opacity = '1';
1909
+ proxy.updateCanvas();
1910
+ if (parent.currObjType.isUndoZoom) {
1911
+ parent.currObjType.isUndoZoom = false;
1912
+ proxy.parent.lowerCanvas.style.display = 'block';
1913
+ }
1914
+ parent.isUndoRedo = _this.isErrorImage = false;
1915
+ if (!isBlazor()) {
1916
+ if (Browser.isDevice) {
1917
+ parent.notify('toolbar', { prop: 'destroy-top-toolbar', onPropertyChange: false });
1918
+ parent.notify('toolbar', { prop: 'destroy-bottom-toolbar', onPropertyChange: false });
1919
+ var eventargs = { isApplyBtn: false, isDevice: Browser.isDevice, isOkBtn: null };
1920
+ parent.notify('toolbar', { prop: 'init-main-toolbar', onPropertyChange: false, value: eventargs });
1921
+ parent.notify('toolbar', { prop: 'create-bottom-toolbar', onPropertyChange: false });
1922
+ }
1923
+ else {
1924
+ parent.notify('toolbar', { prop: 'destroy-top-toolbar', onPropertyChange: false });
1925
+ var eventargs = { isApplyBtn: false, isDevice: false, isOkBtn: null };
1926
+ parent.notify('toolbar', { prop: 'init-main-toolbar', onPropertyChange: false, value: eventargs });
1927
+ }
1928
+ }
1929
+ else {
1930
+ parent.updateToolbar(parent.element, 'imageLoaded', 'initial');
1931
+ if (Browser.isDevice) {
1932
+ parent.element.querySelector('.e-bottom-toolbar-area').style.display = 'block';
1933
+ parent.element.querySelector('.e-canvas-wrapper').style.height = (parent.element.offsetHeight
1934
+ - parent.toolbarHeight * 2) - 3 + 'px';
1935
+ }
1936
+ }
1937
+ };
1938
+ parent.baseImg.onerror = function () {
1939
+ hideSpinner(parent.element);
1940
+ // proxy.reset();
1941
+ // proxy.parent.baseImg.src = proxy.baseImgSrc;
1942
+ proxy.isErrorImage = true;
1943
+ };
1944
+ };
1945
+ Draw.prototype.updateCanvas = function () {
1946
+ var parent = this.parent;
1947
+ var fileOpened = { fileName: this.fileName, fileType: this.fileType };
1948
+ parent.img.srcWidth = parent.baseImg.width;
1949
+ parent.img.srcHeight = parent.baseImg.height;
1950
+ var obj = { width: 0, height: 0 };
1951
+ parent.notify('transform', { prop: 'calcMaxDimension', onPropertyChange: false,
1952
+ value: { width: parent.img.srcWidth, height: parent.img.srcHeight, obj: obj } });
1953
+ var maxDimension = obj;
1954
+ parent.img.destLeft = (parent.lowerCanvas.clientWidth - maxDimension.width) / 2;
1955
+ parent.img.destTop = (parent.lowerCanvas.clientHeight - maxDimension.height) / 2;
1956
+ this.drawImgToCanvas(maxDimension);
1957
+ this.zoomCrop.width = parent.img.destWidth;
1958
+ this.zoomCrop.height = parent.img.destHeight;
1959
+ parent.notify('transform', { prop: 'setCropDimension', onPropertyChange: false,
1960
+ value: { width: parent.img.destWidth, height: parent.img.destHeight } });
1961
+ var point = { startX: parent.img.destLeft, startY: parent.img.destTop, width: parent.img.destWidth,
1962
+ height: parent.img.destHeight };
1963
+ parent.notify('crop', { prop: 'setCropDestPoints', onPropertyChange: false, value: { point: point } });
1964
+ var temp = this.lowerContext.filter;
1965
+ this.lowerContext.filter = 'none';
1966
+ parent.notify('shape', { prop: 'iterateObjColl', onPropertyChange: false });
1967
+ parent.notify('freehand-draw', { prop: 'zoomFHDColl', onPropertyChange: false, value: { isPreventApply: null } });
1968
+ this.lowerContext.filter = temp;
1969
+ if (parent.img.destWidth > 0 && parent.img.destHeight > 0) {
1970
+ parent.isImageLoaded = true;
1971
+ }
1972
+ if (parent.isUndoRedo) {
1973
+ if (parent.transform.currFlipState !== '') {
1974
+ parent.notify('transform', { prop: 'flipImage', onPropertyChange: false,
1975
+ value: { direction: parent.toPascalCase(parent.transform.currFlipState) } });
1976
+ }
1977
+ }
1978
+ if (parent.disabled) {
1979
+ parent.element.setAttribute('class', 'e-disabled');
1980
+ }
1981
+ if (parent.isImageLoaded && parent.element.style.opacity !== '0.5') {
1982
+ if (isBlazor() && parent.events && parent.events.fileOpened.hasDelegate === true) {
1983
+ parent.dotNetRef.invokeMethodAsync('FileOpenEventAsync', 'FileOpened', fileOpened);
1984
+ }
1985
+ else {
1986
+ parent.trigger('fileOpened', fileOpened);
1987
+ }
1988
+ }
1989
+ if (parent.zoomSettings.zoomFactor !== 1 || parent.zoomSettings.zoomPoint) {
1990
+ parent.zoom(parent.zoomSettings.zoomFactor, parent.zoomSettings.zoomPoint);
1991
+ }
1992
+ if (isNullOrUndefined(this.initZoomValue)) {
1993
+ this.initZoomValue = parent.zoomSettings.zoomFactor;
1994
+ }
1995
+ this.isImageEdited = false;
1996
+ };
1997
+ Draw.prototype.performCancel = function (isContextualToolbar) {
1998
+ var parent = this.parent;
1999
+ isContextualToolbar = isContextualToolbar ? isContextualToolbar : false;
2000
+ var obj = { bool: false };
2001
+ parent.notify('selection', { prop: 'getFreehandDrawEditing', onPropertyChange: false, value: { obj: obj } });
2002
+ if (obj['bool']) {
2003
+ parent.notify('freehand-draw', { prop: 'cancelFhd', onPropertyChange: false });
2004
+ if (!isBlazor()) {
2005
+ parent.notify('toolbar', { prop: 'destroy-qa-toolbar', onPropertyChange: false });
2006
+ }
2007
+ else {
2008
+ parent.updateToolbar(parent.element, 'destroyQuickAccessToolbar');
2009
+ }
2010
+ parent.notify('undo-redo', { prop: 'updateCurrUrc', value: { type: 'cancel' } });
2011
+ }
2012
+ else if (parent.textArea.style.display === 'block') {
2013
+ parent.textArea.style.display = 'none';
2014
+ parent.textArea.value = '';
2015
+ parent.textArea.style.transform = '';
2016
+ if (this.prevActObj) {
2017
+ parent.activeObj = this.prevActObj;
2018
+ this.prevActObj = null;
2019
+ }
2020
+ else {
2021
+ parent.activeObj.strokeSettings = this.tempStrokeSettings;
2022
+ parent.activeObj.textSettings = this.tempTextSettings;
2023
+ }
2024
+ parent.notify('undo-redo', { prop: 'updateCurrUrc', value: { type: 'cancel' } });
2025
+ if (this.isShapeTextInserted) {
2026
+ parent.notify('shape', { prop: 'refreshActiveObj', onPropertyChange: false });
2027
+ }
2028
+ parent.notify('shape', { prop: 'applyActObj', onPropertyChange: false, value: { isMouseDown: true } });
2029
+ if (!isBlazor()) {
2030
+ parent.notify('toolbar', { prop: 'refresh-main-toolbar', onPropertyChange: false });
2031
+ }
2032
+ else {
2033
+ parent.updateToolbar(parent.element, 'imageLoaded');
2034
+ }
2035
+ }
2036
+ else if ((!isBlazor() && document.querySelector('#' + parent.element.id + '_sliderWrapper')) || (isBlazor() && !parent.element.querySelector('.e-ie-contextual-slider').classList.contains('e-hidden')) ||
2037
+ parent.currObjType.isFiltered) {
2038
+ this.lowerContext.filter = this.tempAdjValue;
2039
+ parent.canvasFilter = this.tempAdjValue;
2040
+ parent.notify('filter', { prop: 'setAdjustmentValue', onPropertyChange: false, value: { adjustmentValue: this.tempAdjValue } });
2041
+ parent.initialAdjustmentValue = this.tempAdjValue;
2042
+ if (this.lowerContext.filter.split(' ').length > 1 &&
2043
+ this.lowerContext.filter.split(' ')[0].split('(')[1].split(')')[0] === '1') {
2044
+ parent.notify('filter', { prop: 'setBrightnessAdjusted', onPropertyChange: false, value: { isBrightnessAdjusted: false } });
2045
+ }
2046
+ parent.currentFilter = this.tempFilter;
2047
+ this.lowerContext.clearRect(0, 0, parent.lowerCanvas.width, parent.lowerCanvas.height);
2048
+ this.redrawImgWithObj();
2049
+ parent.currObjType.isFiltered = false;
2050
+ var obj_3 = { tempAdjustmentLevel: null };
2051
+ parent.notify('filter', { prop: 'getTempAdjustmentLevel', onPropertyChange: false, value: { obj: obj_3 } });
2052
+ parent.notify('filter', { prop: 'setAdjustmentLevel', onPropertyChange: false,
2053
+ value: { adjustmentLevel: extend({}, obj_3['tempAdjustmentLevel'], {}, true) } });
2054
+ parent.notify('undo-redo', { prop: 'setUndoRedoStep', onPropertyChange: false, value: { step: this.tempUndoRedoStep } });
2055
+ parent.upperCanvas.style.cursor = parent.cursor = 'default';
2056
+ parent.currObjType.isCustomCrop = false;
2057
+ this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };
2058
+ this.clearOuterCanvas(this.lowerContext);
2059
+ if ((parent.currSelectionPoint && parent.currSelectionPoint.shape === 'crop-circle') || parent.isCircleCrop) {
2060
+ parent.notify('crop', { prop: 'cropCircle', onPropertyChange: false,
2061
+ value: { context: this.lowerContext, isSave: null, isFlip: null } });
2062
+ }
2063
+ var eventargs = { type: 'main', isApplyBtn: null, isCropping: null, isZooming: null };
2064
+ if (!isBlazor()) {
2065
+ parent.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');
2066
+ parent.notify('toolbar', { prop: 'refresh-toolbar', onPropertyChange: false, value: eventargs });
2067
+ }
2068
+ else {
2069
+ parent.updateToolbar(parent.element, 'imageLoaded');
2070
+ }
2071
+ parent.notify('undo-redo', { prop: 'updateCurrUrc', value: { type: 'cancel' } });
2072
+ }
2073
+ else {
2074
+ if (isContextualToolbar) {
2075
+ var eventargs = { type: 'main', isApplyBtn: null, isCropping: null, isZooming: null };
2076
+ if (!isBlazor()) {
2077
+ parent.notify('toolbar', { prop: 'refresh-toolbar', onPropertyChange: false, value: eventargs });
2078
+ }
2079
+ else {
2080
+ parent.updateToolbar(parent.element, 'imageLoaded');
2081
+ }
2082
+ }
2083
+ else {
2084
+ this.cancelItems();
2085
+ parent.togglePan = false;
2086
+ parent.notify('selection', { prop: 'setDragCanvas', value: { bool: false } });
2087
+ }
2088
+ }
2089
+ this.isShapeTextInserted = false;
2090
+ this.isNewPath = false;
2091
+ if (!isBlazor()) {
2092
+ parent.notify('toolbar', { prop: 'refresh-dropdown-btn', value: { isDisabled: false } });
2093
+ parent.notify('toolbar', { prop: 'setCurrentToolbar', value: { type: 'main' } });
2094
+ }
2095
+ };
2096
+ Draw.prototype.cancelItems = function () {
2097
+ var parent = this.parent;
2098
+ var isCropSelection = false;
2099
+ var splitWords;
2100
+ var shapes = ['rectangle', 'ellipse', 'line', 'arrow', 'path'];
2101
+ if (parent.activeObj.shape !== undefined) {
2102
+ splitWords = parent.activeObj.shape.split('-');
2103
+ }
2104
+ if (splitWords === undefined && parent.currObjType.isCustomCrop) {
2105
+ isCropSelection = true;
2106
+ }
2107
+ else if (splitWords !== undefined && splitWords[0] === 'crop') {
2108
+ isCropSelection = true;
2109
+ }
2110
+ if (isCropSelection && parent.isCropTab) {
2111
+ parent.isCropTab = false;
2112
+ parent.transform.zoomFactor = parent.transform.defaultZoomFactor;
2113
+ }
2114
+ if (parent.togglePen) {
2115
+ this.cancelPen();
2116
+ }
2117
+ else if (parent.activeObj.shape === 'text') {
2118
+ this.cancelText(isCropSelection);
2119
+ }
2120
+ else if (shapes.indexOf(parent.activeObj.shape) !== -1) {
2121
+ this.cancelShape();
2122
+ }
2123
+ else if (isCropSelection) {
2124
+ this.cancelSelection();
2125
+ }
2126
+ else if ((parent.transform.zoomFactor !== this.tempZoomFactor) || isCropSelection &&
2127
+ isNullOrUndefined(parent.currSelectionPoint)) {
2128
+ this.cancelZoom();
2129
+ }
2130
+ else {
2131
+ parent.notify('shape', { prop: 'refreshActiveObj', onPropertyChange: false });
2132
+ this.upperContext.clearRect(0, 0, parent.upperCanvas.width, parent.upperCanvas.height);
2133
+ parent.notify('undo-redo', { prop: 'updateCurrUrc', value: { type: 'cancel' } });
2134
+ }
2135
+ parent.notify('selection', { prop: 'setCurrentDrawingShape', onPropertyChange: false, value: { value: '' } });
2136
+ parent.upperCanvas.style.cursor = parent.cursor = 'default';
2137
+ parent.currObjType.isCustomCrop = false;
2138
+ this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };
2139
+ var eventargs = { type: 'main', isApplyBtn: null, isCropping: false, isZooming: null };
2140
+ if (!isBlazor()) {
2141
+ parent.notify('toolbar', { prop: 'refresh-toolbar', onPropertyChange: false, value: eventargs });
2142
+ }
2143
+ else {
2144
+ parent.updateToolbar(parent.element, 'imageLoaded');
2145
+ }
2146
+ };
2147
+ Draw.prototype.cancelPen = function () {
2148
+ var parent = this.parent;
2149
+ var isCropSelection = false;
2150
+ this.upperContext.clearRect(0, 0, parent.upperCanvas.width, parent.upperCanvas.height);
2151
+ parent.togglePen = false;
2152
+ parent.upperCanvas.style.cursor = parent.cursor = 'default';
2153
+ // eslint-disable-next-line
2154
+ var tempPointsColl = extend([], parent.pointColl, [], true);
2155
+ parent.pointColl = {};
2156
+ for (var i = 0; i < this.tempFreehandCounter; i++) {
2157
+ parent.pointColl[i] = tempPointsColl[i];
2158
+ }
2159
+ parent.freehandCounter = this.tempFreehandCounter;
2160
+ parent.notify('freehand-draw', { prop: 'setCurrentFreehandDrawIndex', value: { value: this.tempCurrFhdIndex } });
2161
+ parent.activeObj.strokeSettings = this.tempStrokeSettings;
2162
+ parent.notify('shape', { prop: 'setStrokeSettings',
2163
+ value: { strokeSettings: parent.activeObj.strokeSettings, strokeColor: null, fillColor: null, strokeWidth: null } });
2164
+ parent.notify('undo-redo', { prop: 'updateCurrUrc', value: { type: 'cancel' } });
2165
+ parent.notify('selection', { prop: 'setFreehandDrawCustomized', value: { isFreehandDrawCustomized: false } });
2166
+ };
2167
+ Draw.prototype.cancelText = function (isCropSelection) {
2168
+ var parent = this.parent;
2169
+ parent.notify('shape', { prop: 'setTextSettings', onPropertyChange: false,
2170
+ value: { textSettings: this.tempTextSettings, fontFamily: null, fontSize: null } });
2171
+ parent.notify('shape', { prop: 'setStrokeSettings',
2172
+ value: { strokeSettings: this.tempStrokeSettings, strokeColor: null, fillColor: null, strokeWidth: null } });
2173
+ if (isNullOrUndefined(parent.activeObj.currIndex)) {
2174
+ parent.notify('shape', { prop: 'refreshActiveObj', onPropertyChange: false });
2175
+ this.upperContext.clearRect(0, 0, parent.upperCanvas.width, parent.upperCanvas.height);
2176
+ }
2177
+ else {
2178
+ var object = { appliedUndoRedoColl: [] };
2179
+ parent.notify('undo-redo', { prop: 'getAppliedUndoRedoColl', value: { obj: object } });
2180
+ var len = object['appliedUndoRedoColl'].length;
2181
+ if (this.prevActObj && object['appliedUndoRedoColl'][len - 1] &&
2182
+ object['appliedUndoRedoColl'][len - 1].currentObjColl[object['appliedUndoRedoColl'][len - 1].currentObjColl.length - 1].currIndex
2183
+ === this.prevActObj.currIndex) {
2184
+ parent.activeObj = this.prevActObj;
2185
+ this.prevActObj = null;
2186
+ }
2187
+ else {
2188
+ parent.notify('shape', { prop: 'refreshActiveObj', onPropertyChange: false });
2189
+ this.upperContext.clearRect(0, 0, parent.upperCanvas.width, parent.upperCanvas.height);
2190
+ }
2191
+ if (parent.activeObj.shape && parent.activeObj.keyHistory === 'Enter Text') {
2192
+ parent.notify('shape', { prop: 'refreshActiveObj', onPropertyChange: false });
2193
+ this.upperContext.clearRect(0, 0, parent.upperCanvas.width, parent.upperCanvas.height);
2194
+ parent.notify('shape', { prop: 'draw-shape-text' });
2195
+ parent.notify('undo-redo', { prop: 'updateCurrUrc', value: { type: 'cancel' } });
2196
+ parent.notify('shape', { prop: 'applyActObj', onPropertyChange: false, value: { isMouseDown: true } });
2197
+ }
2198
+ else if (parent.activeObj.shape) {
2199
+ parent.notify('shape', { prop: 'redraw-text' });
2200
+ parent.notify('selection', { prop: 'redrawShape', onPropertyChange: false, value: { obj: parent.activeObj } });
2201
+ if (!isCropSelection && parent.activeObj.topLeftCircle !== undefined) {
2202
+ parent.notify('shape', { prop: 'applyActObj', onPropertyChange: false, value: { isMouseDown: true } });
2203
+ }
2204
+ parent.clearSelection();
2205
+ }
2206
+ }
2207
+ if (!isBlazor()) {
2208
+ parent.notify('toolbar', { prop: 'destroy-qa-toolbar', onPropertyChange: false });
2209
+ }
2210
+ else {
2211
+ parent.updateToolbar(parent.element, 'destroyQuickAccessToolbar');
2212
+ }
2213
+ this.tempTextSettings = { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, fontRatio: null, bold: false,
2214
+ italic: false, underline: false };
2215
+ };
2216
+ Draw.prototype.cancelShape = function () {
2217
+ var parent = this.parent;
2218
+ parent.notify('shape', { prop: 'setStrokeSettings',
2219
+ value: { strokeSettings: this.tempStrokeSettings, strokeColor: null, fillColor: null, strokeWidth: null } });
2220
+ if (isNullOrUndefined(parent.activeObj.currIndex)) {
2221
+ parent.notify('shape', { prop: 'refreshActiveObj', onPropertyChange: false });
2222
+ this.upperContext.clearRect(0, 0, parent.upperCanvas.width, parent.upperCanvas.height);
2223
+ }
2224
+ else if (this.isNewPath) {
2225
+ parent.notify('shape', { prop: 'refreshActiveObj', onPropertyChange: false });
2226
+ this.upperContext.clearRect(0, 0, parent.upperCanvas.width, parent.upperCanvas.height);
2227
+ this.renderImage();
2228
+ }
2229
+ else {
2230
+ var object = { appliedUndoRedoColl: [] };
2231
+ parent.notify('undo-redo', { prop: 'getAppliedUndoRedoColl', value: { obj: object } });
2232
+ var len = object['appliedUndoRedoColl'].length;
2233
+ if (this.prevActObj && object['appliedUndoRedoColl'][len - 1] &&
2234
+ object['appliedUndoRedoColl'][len - 1].currentObjColl[object['appliedUndoRedoColl'][len - 1].currentObjColl.length - 1].currIndex
2235
+ === this.prevActObj.currIndex) {
2236
+ parent.activeObj = this.prevActObj;
2237
+ this.prevActObj = null;
2238
+ parent.notify('selection', { prop: 'redrawShape', onPropertyChange: false, value: { obj: parent.activeObj } });
2239
+ parent.notify('undo-redo', { prop: 'updateCurrUrc', value: { type: 'cancel' } });
2240
+ parent.notify('shape', { prop: 'applyActObj', onPropertyChange: false, value: { isMouseDown: true } });
2241
+ }
2242
+ else {
2243
+ parent.notify('shape', { prop: 'refreshActiveObj', onPropertyChange: false });
2244
+ this.upperContext.clearRect(0, 0, parent.upperCanvas.width, parent.upperCanvas.height);
2245
+ }
2246
+ }
2247
+ parent.currObjType.isDragging = false;
2248
+ if (!isBlazor()) {
2249
+ parent.notify('toolbar', { prop: 'destroy-qa-toolbar', onPropertyChange: false });
2250
+ }
2251
+ else {
2252
+ parent.updateToolbar(parent.element, 'destroyQuickAccessToolbar');
2253
+ }
2254
+ };
2255
+ Draw.prototype.cancelSelection = function () {
2256
+ var parent = this.parent;
2257
+ if (parent.cancelCropSelection) {
2258
+ parent.cropObj = extend({}, parent.cancelCropSelection.previousCropObj, {}, true);
2259
+ parent.afterCropActions = parent.cancelCropSelection.previousObj.afterCropActions;
2260
+ parent.notify('undo-redo', { prop: 'undoDefault', onPropertyChange: false, value: { obj: parent.cancelCropSelection } });
2261
+ parent.currSelectionPoint = extend({}, parent.cancelCropSelection.previousCropObj.activeObj, true);
2262
+ if (parent.currSelectionPoint && isNullOrUndefined(parent.currSelectionPoint.shape)) {
2263
+ parent.currSelectionPoint = null;
2264
+ }
2265
+ this.clearOuterCanvas(this.lowerContext);
2266
+ if (parent.isCircleCrop || (parent.currSelectionPoint && parent.currSelectionPoint.shape === 'crop-circle')) {
2267
+ parent.notify('crop', { prop: 'cropCircle', onPropertyChange: false,
2268
+ value: { context: this.lowerContext, isSave: null, isFlip: null } });
2269
+ }
2270
+ }
2271
+ };
2272
+ Draw.prototype.cancelZoom = function () {
2273
+ var parent = this.parent;
2274
+ var length = parent.transform.cropZoomFactor - this.tempZoomFactor;
2275
+ parent.transform.zoomFactor = parent.transform.cropZoomFactor;
2276
+ if (isNullOrUndefined(parent.cropObj.activeObj.shape)) {
2277
+ if ((parent.transform.degree === 0 && parent.panPoint.totalPannedPoint.x === 0 && parent.panPoint.totalPannedPoint.y === 0)
2278
+ || (parent.transform.degree !== 0 && parent.panPoint.totalPannedInternalPoint.x === 0 &&
2279
+ parent.panPoint.totalPannedInternalPoint.y === 0 && parent.panPoint.totalPannedClientPoint.x === 0 &&
2280
+ parent.panPoint.totalPannedClientPoint.y === 0)) {
2281
+ this.upperContext.clearRect(0, 0, parent.upperCanvas.width, parent.upperCanvas.height);
2282
+ parent.notify('shape', { prop: 'refreshActiveObj', onPropertyChange: false });
2283
+ if (length > 0) {
2284
+ parent.notify('transform', { prop: 'zoomAction', onPropertyChange: false,
2285
+ value: { zoomFactor: -length, zoomPoint: null } });
2286
+ }
2287
+ else {
2288
+ parent.notify('transform', { prop: 'zoomAction', onPropertyChange: false,
2289
+ value: { zoomFactor: Math.abs(length), zoomPoint: null } });
2290
+ }
2291
+ parent.transform.cropZoomFactor = this.tempZoomFactor;
2292
+ parent.currObjType.isCustomCrop = false;
2293
+ parent.upperCanvas.style.cursor = parent.cursor = 'default';
2294
+ parent.currObjType.isCustomCrop = false;
2295
+ this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };
2296
+ var eventargs = { type: 'main', isApplyBtn: null, isCropping: false, isZooming: null };
2297
+ if (!isBlazor()) {
2298
+ parent.notify('toolbar', { prop: 'refresh-toolbar', onPropertyChange: false, value: eventargs });
2299
+ }
2300
+ else {
2301
+ parent.updateToolbar(parent.element, 'imageLoaded');
2302
+ }
2303
+ return;
2304
+ }
2305
+ }
2306
+ if (isNullOrUndefined(parent.cropObj.activeObj.shape)) {
2307
+ if (parent.transform.degree === 0) {
2308
+ var activeObj = extend({}, parent.activeObj, {});
2309
+ parent.img.destLeft += (-parent.panPoint.totalPannedPoint.x);
2310
+ parent.img.destTop += (-parent.panPoint.totalPannedPoint.y);
2311
+ parent.notify('transform', { prop: 'drawPannImage', onPropertyChange: false,
2312
+ value: { point: { x: -parent.panPoint.totalPannedPoint.x, y: -parent.panPoint.totalPannedPoint.y } } });
2313
+ this.updateFlipPan(activeObj);
2314
+ parent.panPoint.totalPannedPoint = { x: 0, y: 0 };
2315
+ }
2316
+ else {
2317
+ parent.panPoint.totalPannedClientPoint = { x: -parent.panPoint.totalPannedClientPoint.x,
2318
+ y: -parent.panPoint.totalPannedClientPoint.y };
2319
+ parent.panPoint.totalPannedInternalPoint = { x: -parent.panPoint.totalPannedInternalPoint.x,
2320
+ y: -parent.panPoint.totalPannedInternalPoint.y };
2321
+ parent.notify('transform', { prop: 'rotatePan', onPropertyChange: false,
2322
+ value: { isCropSelection: true, isDefaultZoom: null } });
2323
+ parent.panPoint.totalPannedClientPoint = { x: 0, y: 0 };
2324
+ parent.panPoint.totalPannedInternalPoint = { x: 0, y: 0 };
2325
+ parent.panPoint.currentPannedPoint = { x: 0, y: 0 };
2326
+ }
2327
+ parent.notify('shape', { prop: 'refreshActiveObj', onPropertyChange: false });
2328
+ this.upperContext.clearRect(0, 0, parent.upperCanvas.width, parent.upperCanvas.height);
2329
+ if (length > 0) {
2330
+ parent.notify('transform', { prop: 'zoomAction', onPropertyChange: false,
2331
+ value: { zoomFactor: -length, zoomPoint: null } });
2332
+ }
2333
+ else {
2334
+ parent.notify('transform', { prop: 'zoomAction', onPropertyChange: false,
2335
+ value: { zoomFactor: Math.abs(length), zoomPoint: null } });
2336
+ }
2337
+ parent.transform.cropZoomFactor = this.tempZoomFactor;
2338
+ }
2339
+ else {
2340
+ this.isCancelAction = true;
2341
+ parent.objColl = [];
2342
+ parent.pointColl = [];
2343
+ var freehandCounter = parent.freehandCounter;
2344
+ parent.freehandCounter = 0;
2345
+ var object = { selPointColl: null };
2346
+ parent.notify('freehand-draw', { prop: 'getSelPointColl', onPropertyChange: false,
2347
+ value: { obj: object } });
2348
+ var cropSelPointColl = object['selPointColl'];
2349
+ parent.notify('freehand-draw', { prop: 'setSelPointColl', onPropertyChange: false,
2350
+ value: { obj: { selPointColl: [] } } });
2351
+ var cropObj = extend({}, parent.cropObj, {});
2352
+ var afterCropActions = extend([], parent.afterCropActions, {}, true);
2353
+ this.setCurrentObj();
2354
+ parent.notify('crop', { prop: 'cropImg', onPropertyChange: false, value: { isRotateCrop: null } });
2355
+ parent.cropObj = cropObj;
2356
+ parent.afterCropActions = afterCropActions;
2357
+ parent.objColl = extend([], this.cancelObjColl, [], true);
2358
+ parent.pointColl = extend([], this.cancelPointColl, [], true);
2359
+ parent.freehandCounter = freehandCounter;
2360
+ parent.notify('freehand-draw', { prop: 'setSelPointColl', onPropertyChange: false,
2361
+ value: { obj: { selPointColl: cropSelPointColl } } });
2362
+ parent.notify('shape', { prop: 'iterateObjColl', onPropertyChange: false });
2363
+ parent.notify('freehand-draw', { prop: 'freehandRedraw', onPropertyChange: false,
2364
+ value: { context: this.lowerContext, points: null } });
2365
+ this.clearOuterCanvas(this.lowerContext);
2366
+ if (parent.isCircleCrop) {
2367
+ parent.notify('crop', { prop: 'cropCircle', onPropertyChange: false,
2368
+ value: { context: this.lowerContext, isSave: null, isFlip: null } });
2369
+ }
2370
+ this.isCancelAction = false;
2371
+ }
2372
+ parent.transform.zoomFactor = parent.transform.defaultZoomFactor;
2373
+ if (!isBlazor()) {
2374
+ parent.notify('toolbar', { prop: 'enable-disable-btns', onPropertyChange: false });
2375
+ }
2376
+ else {
2377
+ parent.updateToolbar(parent.element, 'enableDisableToolbarBtn');
2378
+ }
2379
+ };
2380
+ Draw.prototype.updateFlipPan = function (tempSelectionObj) {
2381
+ var parent = this.parent;
2382
+ if (parent.transform.currFlipState !== '') {
2383
+ var temp = this.lowerContext.filter;
2384
+ parent.notify('shape', { prop: 'refreshActiveObj', onPropertyChange: false });
2385
+ parent.notify('transform', { prop: 'rotatedFlip', onPropertyChange: false });
2386
+ this.lowerContext.filter = 'none';
2387
+ parent.notify('freehand-draw', { prop: 'freehandRedraw', onPropertyChange: false,
2388
+ value: { context: this.lowerContext, points: null } });
2389
+ this.lowerContext.filter = temp;
2390
+ this.upperContext.clearRect(0, 0, parent.upperCanvas.width, parent.upperCanvas.height);
2391
+ if (tempSelectionObj) {
2392
+ this.drawObject('duplicate', tempSelectionObj);
2393
+ }
2394
+ }
2395
+ };
2396
+ Draw.prototype.select = function (type, startX, startY, width, height) {
2397
+ var parent = this.parent;
2398
+ if (!parent.disabled && parent.isImageLoaded) {
2399
+ var object = { currObj: {} };
2400
+ parent.notify('filter', { prop: 'getCurrentObj', onPropertyChange: false, value: { object: object } });
2401
+ var previousObj = object['currObj'];
2402
+ previousObj.objColl = extend([], parent.objColl, [], true);
2403
+ previousObj.pointColl = extend([], parent.pointColl, [], true);
2404
+ previousObj.afterCropActions = parent.afterCropActions;
2405
+ var selPointCollObj = { selPointColl: null };
2406
+ parent.notify('freehand-draw', { prop: 'getSelPointColl', onPropertyChange: false,
2407
+ value: { obj: selPointCollObj } });
2408
+ previousObj.selPointColl = extend([], selPointCollObj['selPointColl'], [], true);
2409
+ parent.notify('crop', { prop: 'setPreviousCropCurrentObj', onPropertyChange: false, value: { obj: previousObj } });
2410
+ if (parent.transform.zoomFactor > 0 && parent.activeObj.shape && parent.activeObj.shape.split('-')[0] === 'crop' && isNullOrUndefined(this.currSelPoint)) {
2411
+ this.currSelPoint = extend({}, parent.activeObj, {}, true);
2412
+ }
2413
+ var isPrevent = false;
2414
+ var splitWords = void 0;
2415
+ if (parent.activeObj.shape !== undefined) {
2416
+ splitWords = parent.activeObj.shape.split('-');
2417
+ }
2418
+ if (splitWords === undefined && parent.currObjType.isCustomCrop) {
2419
+ isPrevent = true;
2420
+ }
2421
+ else if (splitWords !== undefined && splitWords[0] === 'crop') {
2422
+ isPrevent = true;
2423
+ }
2424
+ var obj = { currObj: {} };
2425
+ parent.notify('filter', { prop: 'getCurrentObj', onPropertyChange: false, value: { object: obj } });
2426
+ var prevObj = obj['currObj'];
2427
+ prevObj.objColl = extend([], parent.objColl, [], true);
2428
+ prevObj.pointColl = extend([], parent.pointColl, [], true);
2429
+ prevObj.afterCropActions = extend([], parent.afterCropActions, [], true);
2430
+ parent.notify('shape', { prop: 'redrawActObj', onPropertyChange: false,
2431
+ value: { x: null, y: null, isMouseDown: null } });
2432
+ parent.notify('shape', { prop: 'refreshActiveObj', onPropertyChange: false });
2433
+ parent.notify('shape', { prop: 'setKeyHistory', onPropertyChange: false, value: { keyHistory: '' } });
2434
+ this.upperContext.clearRect(0, 0, parent.upperCanvas.width, parent.upperCanvas.height);
2435
+ parent.upperCanvas.style.display = 'block';
2436
+ if (parent.currSelectionPoint || parent.transform.defaultZoomFactor !== 0 ||
2437
+ (parent.transform.degree !== 0 && parent.panPoint.totalPannedInternalPoint.x !== 0 &&
2438
+ parent.panPoint.totalPannedInternalPoint.y !== 0 && !isPrevent)) {
2439
+ parent.isCircleCrop = false;
2440
+ if (parent.transform.defaultZoomFactor !== 0) {
2441
+ var isCropTab = parent.isCropTab;
2442
+ parent.isCropTab = false;
2443
+ parent.notify('transform', { prop: 'resetZoom', onPropertyChange: false });
2444
+ parent.isCropTab = isCropTab;
2445
+ this.resetPanPoints();
2446
+ }
2447
+ this.cancelObjColl = extend([], parent.objColl, [], true);
2448
+ this.cancelPointColl = extend([], parent.pointColl, [], true);
2449
+ parent.notify('freehand-draw', { prop: 'updateFHDColl', onPropertyChange: false });
2450
+ parent.isCropTab = true;
2451
+ parent.isCircleCrop = false;
2452
+ parent.notify('crop', { prop: 'setCurrSelPoints', onPropertyChange: false, value: { isSetDimension: true } });
2453
+ parent.transform.zoomFactor = parent.transform.cropZoomFactor;
2454
+ if (isNullOrUndefined(parent.cropObj.activeObj.shape)) {
2455
+ parent.currObjType.shape = 'crop-' + type.toLowerCase();
2456
+ this.drawNewSelection(type, startX, startY, width, height);
2457
+ }
2458
+ }
2459
+ else {
2460
+ if (type === 'custom') {
2461
+ parent.currObjType.shape = '';
2462
+ }
2463
+ this.drawNewSelection(type, startX, startY, width, height);
2464
+ }
2465
+ }
2466
+ };
2467
+ Draw.prototype.drawNewSelection = function (type, startX, startY, width, height) {
2468
+ var parent = this.parent;
2469
+ var points;
2470
+ var cropShape = 'crop-' + type;
2471
+ if (cropShape.toLowerCase() === 'crop-custom') {
2472
+ if (parent.currObjType.shape === '' || parent.currObjType.shape === 'crop-custom') {
2473
+ this.drawCustomSelection('crop-custom', startX, startY, width, height);
2474
+ }
2475
+ }
2476
+ else if (cropShape.toLowerCase() === 'crop-canvas') {
2477
+ parent.upperCanvas.style.display = 'block';
2478
+ parent.notify('selection', { prop: 'setDragCanvas', value: { bool: true } });
2479
+ }
2480
+ else {
2481
+ parent.currObjType.isCustomCrop = false;
2482
+ parent.currObjType.shape = cropShape.toLowerCase();
2483
+ if (width && height) {
2484
+ points = { startX: startX, startY: startY, endX: startX + width, endY: startY + height,
2485
+ width: width, height: height };
2486
+ }
2487
+ else if (width && cropShape === 'crop-circle') {
2488
+ points = { startX: startX, startY: startY, endX: startX + width, endY: startY + width,
2489
+ width: width, height: width };
2490
+ }
2491
+ parent.activeObj.shape = cropShape.toLowerCase();
2492
+ this.updateSelectionInsert(points);
2493
+ }
2494
+ };
2495
+ Draw.prototype.updateSelectionInsert = function (points) {
2496
+ var _this = this;
2497
+ var parent = this.parent;
2498
+ var actPoint = parent.activeObj.activePoint;
2499
+ var obj = { shapeSettingsObj: {} };
2500
+ parent.notify('selection', { prop: 'updatePrevShapeSettings', onPropertyChange: false, value: { obj: obj } });
2501
+ var selectionSettings = { type: parent.getSelectionType(obj['shapeSettingsObj']['type']), startX: obj['shapeSettingsObj']['startX'],
2502
+ startY: obj['shapeSettingsObj']['startY'], width: obj['shapeSettingsObj']['width'], height: obj['shapeSettingsObj']['height'] };
2503
+ var selectionChangingArgs = { action: 'insert', previousSelectionSettings: selectionSettings,
2504
+ currentSelectionSettings: selectionSettings };
2505
+ if (isBlazor() && parent.events && parent.events.onSelectionResizeStart.hasDelegate === true) {
2506
+ /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
2507
+ parent.dotNetRef.invokeMethodAsync('SelectionEventAsync', 'OnSelectionResizeStart', selectionChangingArgs).then(function (selectionChangingArgs) {
2508
+ parent.notify('shape', { prop: 'updSelChangeEventArgs', onPropertyChange: false,
2509
+ value: { selectionSettings: selectionChangingArgs.currentSelectionSettings } });
2510
+ if (selectionChangingArgs.currentSelectionSettings.type === 'Custom') {
2511
+ _this.drawObject('duplicate', parent.activeObj, null, null, true);
2512
+ }
2513
+ else {
2514
+ if (actPoint.startX !== 0 || actPoint.startY !== 0 ||
2515
+ actPoint.width !== 0 || actPoint.height !== 0) {
2516
+ points = { startX: actPoint.startX, startY: actPoint.startY,
2517
+ endX: actPoint.endX, endY: actPoint.endY,
2518
+ width: actPoint.width, height: actPoint.height };
2519
+ }
2520
+ _this.drawObject('duplicate', null, true, points);
2521
+ }
2522
+ });
2523
+ }
2524
+ else {
2525
+ parent.trigger('selectionChanging', selectionChangingArgs);
2526
+ parent.notify('shape', { prop: 'updSelChangeEventArgs', onPropertyChange: false,
2527
+ value: { selectionSettings: selectionChangingArgs.currentSelectionSettings } });
2528
+ if (selectionChangingArgs.currentSelectionSettings.type === 'Custom') {
2529
+ this.drawObject('duplicate', parent.activeObj, null, null, true);
2530
+ }
2531
+ else {
2532
+ if (actPoint.startX !== 0 || actPoint.startY !== 0 ||
2533
+ actPoint.width !== 0 || actPoint.height !== 0) {
2534
+ points = { startX: actPoint.startX, startY: actPoint.startY,
2535
+ endX: actPoint.endX, endY: actPoint.endY,
2536
+ width: actPoint.width, height: actPoint.height };
2537
+ }
2538
+ this.drawObject('duplicate', null, true, points);
2539
+ }
2540
+ }
2541
+ };
2542
+ Draw.prototype.drawCustomSelection = function (cropShape, startX, startY, width, height) {
2543
+ var parent = this.parent;
2544
+ var actPoint = parent.activeObj.activePoint;
2545
+ parent.currObjType.isCustomCrop = true;
2546
+ this.upperContext.clearRect(0, 0, parent.upperCanvas.width, parent.upperCanvas.height);
2547
+ parent.currObjType.shape = parent.activeObj.shape = cropShape.toLowerCase();
2548
+ if (!isNullOrUndefined(startX) && !isNullOrUndefined(startY) && !isNullOrUndefined(width) && !isNullOrUndefined(height)) {
2549
+ actPoint.startX = startX;
2550
+ actPoint.startY = startY;
2551
+ actPoint.endX = startX + width;
2552
+ actPoint.endY = startY + height;
2553
+ actPoint.width = width;
2554
+ actPoint.height = height;
2555
+ }
2556
+ else {
2557
+ if (isNullOrUndefined(parent.transform.zoomFactor) || parent.transform.zoomFactor === 0) {
2558
+ var imgLeft_1 = parent.img.destLeft;
2559
+ var imgTop_1 = parent.img.destTop;
2560
+ var imgWidth_1 = parent.img.destWidth;
2561
+ var imgHeight_1 = parent.img.destHeight;
2562
+ var lowerCanvasWidth_1 = parent.lowerCanvas.width;
2563
+ var lowerCanvasHeight_1 = parent.lowerCanvas.height;
2564
+ var activePoint_1 = actPoint;
2565
+ if (imgLeft_1 >= 0 && imgTop_1 >= 0) {
2566
+ activePoint_1.startX = imgLeft_1;
2567
+ activePoint_1.startY = imgTop_1;
2568
+ activePoint_1.endX = imgLeft_1 + imgWidth_1;
2569
+ activePoint_1.endY = imgTop_1 + imgHeight_1;
2570
+ }
2571
+ else if (imgLeft_1 >= 0) {
2572
+ activePoint_1.startX = imgLeft_1;
2573
+ activePoint_1.startY = 7.5;
2574
+ activePoint_1.endX = imgLeft_1 + imgWidth_1;
2575
+ activePoint_1.endY = lowerCanvasHeight_1 - 15;
2576
+ }
2577
+ else if (imgTop_1 >= 0) {
2578
+ activePoint_1.startX = 7.5;
2579
+ activePoint_1.startY = imgTop_1;
2580
+ activePoint_1.endX = lowerCanvasWidth_1 - 15;
2581
+ activePoint_1.endY = imgTop_1 + imgHeight_1;
2582
+ }
2583
+ else {
2584
+ activePoint_1.startX = 7.5;
2585
+ activePoint_1.startY = 7.5;
2586
+ activePoint_1.endX = lowerCanvasWidth_1 - 15;
2587
+ activePoint_1.endY = lowerCanvasHeight_1 - 15;
2588
+ }
2589
+ }
2590
+ else {
2591
+ var imgLeft_2 = parent.img.destLeft;
2592
+ var imgTop_2 = parent.img.destTop;
2593
+ var imgWidth_2 = parent.img.destWidth;
2594
+ var imgHeight_2 = parent.img.destHeight;
2595
+ var lowerCanvasWidth_2 = parent.lowerCanvas.width;
2596
+ var lowerCanvasHeight_2 = parent.lowerCanvas.height;
2597
+ var activePoint_2 = actPoint;
2598
+ activePoint_2.startX = Math.max(imgLeft_2 > 0 ? imgLeft_2 : 7.5, imgLeft_2);
2599
+ activePoint_2.startY = Math.max(imgTop_2 > 0 ? imgTop_2 : 7.5, imgTop_2);
2600
+ activePoint_2.endX = Math.min(imgLeft_2 + imgWidth_2 + 15 < lowerCanvasWidth_2 ? imgLeft_2 + imgWidth_2 - 15 :
2601
+ lowerCanvasWidth_2 - 15, imgLeft_2 + imgWidth_2);
2602
+ activePoint_2.endY = Math.min(imgTop_2 + imgHeight_2 + 15 < lowerCanvasHeight_2 ? imgTop_2 + imgHeight_2 - 15 :
2603
+ lowerCanvasHeight_2 - 15, imgTop_2 + imgHeight_2);
2604
+ }
2605
+ var imgLeft = parent.img.destLeft;
2606
+ var imgTop = parent.img.destTop;
2607
+ var imgWidth = parent.img.destWidth;
2608
+ var imgHeight = parent.img.destHeight;
2609
+ var lowerCanvasWidth = parent.lowerCanvas.clientWidth;
2610
+ var lowerCanvasHeight = parent.lowerCanvas.clientHeight;
2611
+ var activePoint = actPoint;
2612
+ activePoint.startX = Math.max(activePoint.startX, imgLeft);
2613
+ activePoint.startY = Math.max(activePoint.startY, imgTop);
2614
+ activePoint.endX = Math.min(activePoint.endX, imgLeft + imgWidth);
2615
+ activePoint.endY = Math.min(activePoint.endY, imgTop + imgHeight);
2616
+ if (activePoint.startX === imgLeft && imgLeft + imgWidth > lowerCanvasWidth) {
2617
+ activePoint.endX = lowerCanvasWidth - 15;
2618
+ }
2619
+ if (activePoint.startY === imgTop && imgTop + imgHeight > lowerCanvasHeight) {
2620
+ activePoint.endY = lowerCanvasHeight - 15;
2621
+ }
2622
+ parent.activeObj = this.updateWidthHeight(parent.activeObj);
2623
+ this.updateActiveObject(actPoint, parent.activeObj);
2624
+ }
2625
+ this.updateSelectionInsert();
2626
+ };
2627
+ Draw.prototype.callUpdateCurrTransState = function () {
2628
+ var parent = this.parent;
2629
+ var tempObjColl = extend([], parent.objColl, [], true);
2630
+ var tempActiveObj = extend({}, parent.activeObj, {}, true);
2631
+ parent.objColl = [];
2632
+ parent.notify('shape', { prop: 'refreshActiveObj', onPropertyChange: false });
2633
+ this.isRotateZoom = true;
2634
+ this.updateCurrTransState('initial');
2635
+ this.lowerContext.clearRect(0, 0, parent.lowerCanvas.width, parent.lowerCanvas.height);
2636
+ if (parent.transform.degree === 0 && parent.rotateFlipColl.length > 0) {
2637
+ parent.img.destLeft += parent.panPoint.totalPannedPoint.x;
2638
+ parent.img.destTop += parent.panPoint.totalPannedPoint.y;
2639
+ }
2640
+ parent.img.destLeft += parent.panPoint.totalPannedInternalPoint.x;
2641
+ parent.img.destTop += parent.panPoint.totalPannedInternalPoint.y;
2642
+ var temp = this.lowerContext.filter;
2643
+ if (parent.transform.degree === 0) {
2644
+ parent.notify('transform', { prop: 'setDestPointsForFlipState', onPropertyChange: false });
2645
+ }
2646
+ parent.notify('filter', { prop: 'updateBrightFilter', onPropertyChange: false });
2647
+ this.lowerContext.drawImage(parent.baseImg, parent.img.srcLeft, parent.img.srcTop, parent.img.srcWidth, parent.img.srcHeight, parent.img.destLeft, parent.img.destTop, parent.img.destWidth, parent.img.destHeight);
2648
+ this.updateCurrTransState('reverse');
2649
+ if (parent.transform.degree === 0 && parent.rotateFlipColl.length > 0) {
2650
+ parent.img.destLeft += parent.panPoint.totalPannedPoint.x;
2651
+ parent.img.destTop += parent.panPoint.totalPannedPoint.y;
2652
+ }
2653
+ this.isRotateZoom = false;
2654
+ parent.objColl = tempObjColl;
2655
+ var tempTogglePen = parent.togglePen;
2656
+ parent.togglePen = false;
2657
+ this.lowerContext.filter = 'none';
2658
+ parent.notify('shape', { prop: 'iterateObjColl', onPropertyChange: false });
2659
+ parent.img.destLeft += parent.panPoint.totalPannedInternalPoint.x;
2660
+ parent.img.destTop += parent.panPoint.totalPannedInternalPoint.y;
2661
+ parent.notify('freehand-draw', { prop: 'freehandRedraw', onPropertyChange: false,
2662
+ value: { context: this.lowerContext, points: null } });
2663
+ parent.img.destLeft -= parent.panPoint.totalPannedInternalPoint.x;
2664
+ parent.img.destTop -= parent.panPoint.totalPannedInternalPoint.y;
2665
+ parent.togglePen = tempTogglePen;
2666
+ this.lowerContext.filter = temp;
2667
+ parent.activeObj = tempActiveObj;
2668
+ };
2669
+ Draw.prototype.resetPanPoints = function () {
2670
+ this.parent.panPoint.totalPannedPoint = { x: 0, y: 0 };
2671
+ this.parent.panPoint.totalPannedClientPoint = { x: 0, y: 0 };
2672
+ this.parent.panPoint.totalPannedInternalPoint = { x: 0, y: 0 };
2673
+ };
2674
+ Draw.prototype.setClientTransDim = function (isPreventDimension) {
2675
+ var parent = this.parent;
2676
+ if (parent.transform.degree % 90 === 0 && parent.transform.degree % 180 !== 0) {
2677
+ parent.img.destLeft = (parent.lowerCanvas.width - parent.img.destHeight) / 2;
2678
+ parent.img.destTop = (parent.lowerCanvas.height - parent.img.destWidth) / 2;
2679
+ var temp = parent.img.destWidth;
2680
+ parent.img.destWidth = parent.img.destHeight;
2681
+ parent.img.destHeight = temp;
2682
+ }
2683
+ else {
2684
+ if (isNullOrUndefined(isPreventDimension)) {
2685
+ parent.img.destLeft = (parent.lowerCanvas.width - parent.img.destWidth) / 2;
2686
+ parent.img.destTop = (parent.lowerCanvas.height - parent.img.destHeight) / 2;
2687
+ }
2688
+ }
2689
+ };
2690
+ Draw.prototype.redrawImgWithObj = function () {
2691
+ var parent = this.parent;
2692
+ var obj = { canvasFilter: parent.canvasFilter };
2693
+ this.lowerContext.filter = obj['canvasFilter'];
2694
+ if (parent.rotateFlipColl.length !== 0) {
2695
+ var totalPannedInternalPoint = extend({}, parent.panPoint.totalPannedInternalPoint, {}, true);
2696
+ var destPoints = { startX: parent.img.destLeft, startY: parent.img.destTop, width: parent.img.destWidth,
2697
+ height: parent.img.destHeight };
2698
+ this.callUpdateCurrTransState();
2699
+ parent.panPoint.totalPannedInternalPoint = totalPannedInternalPoint;
2700
+ parent.img.destLeft = destPoints.startX;
2701
+ parent.img.destTop = destPoints.startY;
2702
+ parent.img.destWidth = destPoints.width;
2703
+ parent.img.destHeight = destPoints.height;
2704
+ }
2705
+ else {
2706
+ this.callUpdateCurrTransState();
2707
+ }
2708
+ if (parent.isCircleCrop) {
2709
+ parent.notify('crop', { prop: 'cropCircle', onPropertyChange: false,
2710
+ value: { context: this.lowerContext, isSave: null, isFlip: null } });
2711
+ }
2712
+ var tempFilter = this.lowerContext.filter;
2713
+ this.lowerContext.filter = parent.getDefaultFilter();
2714
+ parent.notify('shape', { prop: 'iterateObjColl', onPropertyChange: false });
2715
+ parent.notify('freehand-draw', { prop: 'freehandRedraw', onPropertyChange: false,
2716
+ value: { context: this.lowerContext, points: null } });
2717
+ this.lowerContext.filter = tempFilter;
2718
+ };
2719
+ Draw.prototype.setCurrentObj = function (obj) {
2720
+ var parent = this.parent;
2721
+ var isObj = obj ? true : false;
2722
+ obj = obj ? obj : parent.cropObj;
2723
+ parent.transform.cropZoomFactor = obj.cropZoom;
2724
+ parent.transform.defaultZoomFactor = obj.defaultZoom;
2725
+ if (!isObj) {
2726
+ parent.transform.zoomFactor = obj.cropZoom;
2727
+ }
2728
+ else {
2729
+ if (obj.activeObj.shape && obj.activeObj.shape.split('-')[0] === 'crop') {
2730
+ parent.transform.zoomFactor = obj.cropZoom;
2731
+ }
2732
+ else {
2733
+ parent.transform.zoomFactor = obj.defaultZoom;
2734
+ }
2735
+ }
2736
+ parent.setProperties({ zoomSettings: { zoomFactor: obj.zoomFactor } }, true);
2737
+ parent.notify('transform', { prop: 'setPreviousZoomValue', onPropertyChange: false, value: { previousZoomValue: obj.previousZoomValue } });
2738
+ parent.panPoint.totalPannedPoint = extend({}, obj.totalPannedPoint, {}, true);
2739
+ parent.panPoint.totalPannedClientPoint = extend({}, obj.totalPannedClientPoint, {}, true);
2740
+ parent.panPoint.totalPannedInternalPoint = extend({}, obj.totalPannedInternalPoint, {}, true);
2741
+ var point = extend({}, obj.tempFlipPanPoint, {}, true);
2742
+ parent.notify('crop', { prop: 'setTempFlipPanPoint', onPropertyChange: false, value: { point: point } });
2743
+ parent.rotateFlipColl = extend([], obj.rotateFlipColl, [], true);
2744
+ parent.transform.degree = obj.degree;
2745
+ parent.transform.currFlipState = obj.currFlipState;
2746
+ parent.img.destLeft = obj.destPoints.startX;
2747
+ parent.img.destTop = obj.destPoints.startY;
2748
+ parent.img.destWidth = obj.destPoints.width;
2749
+ parent.img.destHeight = obj.destPoints.height;
2750
+ parent.img.srcLeft = obj.srcPoints.startX;
2751
+ parent.img.srcTop = obj.srcPoints.startY;
2752
+ parent.img.srcWidth = obj.srcPoints.width;
2753
+ parent.img.srcHeight = obj.srcPoints.height;
2754
+ if (obj.afterCropActions) {
2755
+ parent.afterCropActions = obj.afterCropActions;
2756
+ }
2757
+ this.lowerContext.filter = obj.filter;
2758
+ parent.notify('filter', { prop: 'setBrightnessAdjusted', onPropertyChange: false, value: { isBrightnessAdjusted: false } });
2759
+ var isCircleCrop = parent.isCircleCrop;
2760
+ var currSelectionPoint;
2761
+ if (isNullOrUndefined(parent.currSelectionPoint)) {
2762
+ currSelectionPoint = null;
2763
+ }
2764
+ else {
2765
+ currSelectionPoint = extend({}, parent.currSelectionPoint, {}, true);
2766
+ parent.currSelectionPoint = null;
2767
+ }
2768
+ parent.isCircleCrop = false;
2769
+ this.drawCropSelectionImage(obj, false);
2770
+ if (parent.transform.degree !== 0) {
2771
+ if (parent.transform.currFlipState === '') {
2772
+ parent.notify('transform', { prop: 'rotatePan', onPropertyChange: false,
2773
+ value: { isCropSelection: null, isDefaultZoom: null } });
2774
+ }
2775
+ else {
2776
+ parent.notify('transform', { prop: 'drawPannedImage', value: { xDiff: 0, yDiff: 0 } });
2777
+ }
2778
+ parent.img.destLeft = obj.destPoints.startX;
2779
+ parent.img.destTop = obj.destPoints.startY;
2780
+ parent.panPoint.totalPannedClientPoint = extend({}, obj.totalPannedClientPoint, {}, true);
2781
+ parent.panPoint.totalPannedInternalPoint = extend({}, obj.totalPannedInternalPoint, {}, true);
2782
+ }
2783
+ parent.activeObj = extend({}, obj.activeObj, {}, true);
2784
+ this.upperContext.clearRect(0, 0, parent.upperCanvas.width, parent.upperCanvas.height);
2785
+ if (parent.activeObj.activePoint.width !== 0 && parent.activeObj.activePoint.height !== 0) {
2786
+ this.drawObject('duplicate', null, null, null, true);
2787
+ }
2788
+ var activeObj = extend({}, obj.activeObj, {}, true);
2789
+ var isAfterCropAction = false;
2790
+ if (parent.afterCropActions.length > 0) {
2791
+ var object = { collection: parent.afterCropActions };
2792
+ parent.notify('shape', { prop: 'alignRotateFlipColl', onPropertyChange: false,
2793
+ value: { collection: parent.afterCropActions, isRotateFlipCollection: null, obj: object } });
2794
+ parent.afterCropActions = object['collection'];
2795
+ }
2796
+ var afterCropActions = extend([], parent.afterCropActions, [], true);
2797
+ if (!isObj && afterCropActions.length > 0) {
2798
+ isAfterCropAction = true;
2799
+ for (var i = 0; i < afterCropActions.length; i++) {
2800
+ if (afterCropActions[i] === 'horizontalflip' || afterCropActions[i] === 'verticalflip') {
2801
+ parent.activeObj = extend({}, currSelectionPoint, {}, true);
2802
+ this.rotatedFlipCropSel = true;
2803
+ }
2804
+ parent.notify('transform', { prop: 'updateTransform', onPropertyChange: false, value: { text: afterCropActions[i] } });
2805
+ }
2806
+ activeObj = extend({}, parent.activeObj, {}, true);
2807
+ this.resetPanPoints();
2808
+ parent.activeObj = activeObj;
2809
+ this.upperContext.clearRect(0, 0, parent.upperCanvas.width, parent.upperCanvas.height);
2810
+ if (parent.activeObj.activePoint.width !== 0 && parent.activeObj.activePoint.height !== 0) {
2811
+ this.drawObject('duplicate', null, null, null, true);
2812
+ }
2813
+ if (obj.degree !== parent.transform.degree) {
2814
+ parent.transform.cropZoomFactor = null;
2815
+ parent.transform.zoomFactor = 0;
2816
+ }
2817
+ parent.notify('freehand-draw', { prop: 'updateFHDColl', onPropertyChange: false });
2818
+ if (this.rotatedFlipCropSel) {
2819
+ this.rotatedFlipCropSel = false;
2820
+ }
2821
+ }
2822
+ parent.afterCropActions = afterCropActions;
2823
+ if (!this.isCancelAction && !isAfterCropAction) {
2824
+ parent.notify('freehand-draw', { prop: 'updateFHDColl', onPropertyChange: false });
2825
+ parent.notify('freehand-draw', { prop: 'zoomFHDColl', onPropertyChange: false, value: { isPreventApply: null } });
2826
+ parent.img.destLeft = obj.destPoints.startX;
2827
+ parent.img.destTop = obj.destPoints.startY;
2828
+ }
2829
+ parent.activeObj = activeObj;
2830
+ parent.isCircleCrop = isCircleCrop;
2831
+ if (isNullOrUndefined(currSelectionPoint)) {
2832
+ parent.currSelectionPoint = null;
2833
+ }
2834
+ else {
2835
+ parent.currSelectionPoint = extend({}, currSelectionPoint, {}, true);
2836
+ if (parent.currSelectionPoint && isNullOrUndefined(parent.currSelectionPoint.shape)) {
2837
+ parent.currSelectionPoint = null;
2838
+ }
2839
+ }
2840
+ };
2841
+ Draw.prototype.drawCropSelectionImage = function (obj, isObj) {
2842
+ var parent = this.parent;
2843
+ var temp = this.lowerContext.filter;
2844
+ parent.clearContext(this.lowerContext);
2845
+ parent.clearContext(this.upperContext);
2846
+ this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);
2847
+ if (isObj) {
2848
+ this.updateCurrTransState('initial');
2849
+ }
2850
+ else {
2851
+ this.setTransformColl(this.lowerContext, 'initial');
2852
+ }
2853
+ parent.notify('transform', { prop: 'setDestPointsForFlipState', onPropertyChange: false });
2854
+ this.lowerContext.drawImage(parent.baseImg, parent.img.srcLeft, parent.img.srcTop, parent.img.srcWidth, parent.img.srcHeight, parent.img.destLeft, parent.img.destTop, parent.img.destWidth, parent.img.destHeight);
2855
+ if (isObj) {
2856
+ this.updateCurrTransState('reverse');
2857
+ }
2858
+ else {
2859
+ this.setTransformColl(this.lowerContext, 'reverse');
2860
+ }
2861
+ parent.img.destLeft = parent.cropObj.destPoints.startX;
2862
+ parent.img.destTop = parent.cropObj.destPoints.startY;
2863
+ var activeObj = extend({}, obj.activeObj, {}, true);
2864
+ this.lowerContext.filter = 'none';
2865
+ if (this.isCancelAction) {
2866
+ parent.notify('shape', { prop: 'zoomObjColl', onPropertyChange: false, value: { isPreventApply: null } });
2867
+ parent.notify('freehand-draw', { prop: 'zoomFHDColl', onPropertyChange: false, value: { isPreventApply: null } });
2868
+ }
2869
+ else {
2870
+ parent.img.destLeft = obj.destPoints.startX;
2871
+ parent.img.destTop = obj.destPoints.startY;
2872
+ parent.img.destWidth = obj.destPoints.width;
2873
+ parent.img.destHeight = obj.destPoints.height;
2874
+ parent.img.srcLeft = obj.srcPoints.startX;
2875
+ parent.img.srcTop = obj.srcPoints.startY;
2876
+ parent.img.srcWidth = obj.srcPoints.width;
2877
+ parent.img.srcHeight = obj.srcPoints.height;
2878
+ var destPoints = { startX: parent.img.destLeft, startY: parent.img.destTop, width: parent.img.destWidth,
2879
+ height: parent.img.destHeight };
2880
+ parent.img.destLeft = obj.activeObj.activePoint.startX;
2881
+ parent.img.destTop = obj.activeObj.activePoint.startY;
2882
+ parent.img.destWidth = obj.activeObj.activePoint.width;
2883
+ parent.img.destHeight = obj.activeObj.activePoint.height;
2884
+ parent.notify('shape', { prop: 'zoomObjColl', onPropertyChange: false, value: { isPreventApply: null } });
2885
+ parent.notify('freehand-draw', { prop: 'zoomFHDColl', onPropertyChange: false, value: { isPreventApply: null } });
2886
+ parent.img.destLeft = destPoints.startX;
2887
+ parent.img.destTop = destPoints.startY;
2888
+ parent.img.destWidth = destPoints.width;
2889
+ parent.img.destHeight = destPoints.height;
2890
+ }
2891
+ parent.activeObj = activeObj;
2892
+ this.lowerContext.filter = temp;
2893
+ };
2894
+ Draw.prototype.performPointZoom = function (x, y, type) {
2895
+ var parent = this.parent;
2896
+ var ratioX = (x - parent.img.destLeft) / parent.img.destWidth;
2897
+ var ratioY = (y - parent.img.destTop) / parent.img.destHeight;
2898
+ var isUndoRedo = parent.isUndoRedo;
2899
+ parent.isUndoRedo = true;
2900
+ parent.setProperties({ zoomSettings: { zoomPoint: { x: x, y: y } } }, true);
2901
+ if (type === 'zoomIn') {
2902
+ parent.notify('transform', { prop: 'zoomAction', onPropertyChange: false,
2903
+ value: { zoomFactor: .1, zoomPoint: null } });
2904
+ }
2905
+ else if (type === 'zoomOut') {
2906
+ parent.notify('transform', { prop: 'zoomAction', onPropertyChange: false,
2907
+ value: { zoomFactor: -.1, zoomPoint: null } });
2908
+ }
2909
+ parent.isUndoRedo = isUndoRedo;
2910
+ if (parent.transform.zoomFactor > 0) {
2911
+ var destLeft = parent.img.destLeft;
2912
+ var destTop = parent.img.destTop;
2913
+ var activeObj = extend({}, parent.activeObj, {}, true);
2914
+ if (parent.transform.degree === 0) {
2915
+ parent.img.destLeft = x - (ratioX * parent.img.destWidth);
2916
+ parent.img.destTop = y - (ratioY * parent.img.destHeight);
2917
+ this.drawZoomPanImage(parent.img.destLeft - destLeft, parent.img.destTop - destTop);
2918
+ }
2919
+ else {
2920
+ var isCropTab = parent.isCropTab;
2921
+ parent.isCropTab = true;
2922
+ var objColl = extend([], parent.objColl, [], true);
2923
+ var pointColl = extend([], parent.pointColl, [], true);
2924
+ parent.objColl = [];
2925
+ parent.pointColl = [];
2926
+ parent.freehandCounter = 0;
2927
+ var object = { selPointColl: null };
2928
+ parent.notify('freehand-draw', { prop: 'getSelPointColl', onPropertyChange: false,
2929
+ value: { obj: object } });
2930
+ var cropSelPointColl = object['selPointColl'];
2931
+ parent.notify('freehand-draw', { prop: 'setSelPointColl', onPropertyChange: false,
2932
+ value: { obj: { selPointColl: [] } } });
2933
+ parent.panPoint.currentPannedPoint = { x: (x - (ratioX * parent.img.destWidth)) - destLeft,
2934
+ y: (y - (ratioY * parent.img.destHeight)) - destTop };
2935
+ parent.notify('transform', { prop: 'rotatePan', onPropertyChange: false,
2936
+ value: { isCropSelection: null, isDefaultZoom: null } });
2937
+ parent.isCropTab = isCropTab;
2938
+ parent.objColl = objColl;
2939
+ parent.pointColl = pointColl;
2940
+ parent.freehandCounter = parent.pointColl.length;
2941
+ parent.notify('freehand-draw', { prop: 'setSelPointColl', onPropertyChange: false,
2942
+ value: { obj: { selPointColl: cropSelPointColl } } });
2943
+ parent.notify('shape', { prop: 'panObjColl', onPropertyChange: false,
2944
+ value: { xDiff: parent.panPoint.currentPannedPoint.x, yDiff: parent.panPoint.currentPannedPoint.y, panRegion: '' } });
2945
+ parent.notify('freehand-draw', { prop: 'panFHDColl', onPropertyChange: false,
2946
+ value: { xDiff: parent.panPoint.currentPannedPoint.x, yDiff: parent.panPoint.currentPannedPoint.y, panRegion: '' } });
2947
+ }
2948
+ this.adjustPanning(activeObj);
2949
+ parent.activeObj = activeObj;
2950
+ if (parent.activeObj.activePoint.width !== 0 && parent.activeObj.activePoint.height !== 0) {
2951
+ this.drawObject('duplicate', null, null, null, true);
2952
+ }
2953
+ }
2954
+ };
2955
+ Draw.prototype.adjustPanning = function (activeObj) {
2956
+ var parent = this.parent;
2957
+ if (activeObj.activePoint.width !== 0 && activeObj.activePoint.height !== 0) {
2958
+ var destLeft = parent.img.destLeft;
2959
+ var destTop = parent.img.destTop;
2960
+ var point = { x: 0, y: 0 };
2961
+ if (parent.img.destLeft > activeObj.activePoint.startX) {
2962
+ point.x = parent.img.destLeft - activeObj.activePoint.startX;
2963
+ }
2964
+ else if (parent.img.destLeft + parent.img.destWidth < activeObj.activePoint.startX + activeObj.activePoint.width) {
2965
+ point.x = (parent.img.destLeft + parent.img.destWidth) - (activeObj.activePoint.startX + activeObj.activePoint.width);
2966
+ }
2967
+ if (parent.img.destTop > activeObj.activePoint.startY) {
2968
+ point.y = parent.img.destTop - activeObj.activePoint.startY;
2969
+ }
2970
+ else if (parent.img.destTop + parent.img.destHeight < activeObj.activePoint.startY + activeObj.activePoint.height) {
2971
+ point.y = (parent.img.destTop + parent.img.destHeight) - (activeObj.activePoint.startY + activeObj.activePoint.height);
2972
+ }
2973
+ if (parent.transform.degree === 0) {
2974
+ parent.img.destLeft -= point.x;
2975
+ parent.img.destTop -= point.y;
2976
+ this.drawZoomPanImage(parent.img.destLeft - destLeft, parent.img.destTop - destTop);
2977
+ }
2978
+ else {
2979
+ var isCropTab = parent.isCropTab;
2980
+ parent.isCropTab = true;
2981
+ var objColl = extend([], parent.objColl, [], true);
2982
+ var pointColl = extend([], parent.pointColl, [], true);
2983
+ parent.objColl = [];
2984
+ parent.pointColl = [];
2985
+ parent.freehandCounter = 0;
2986
+ var object = { selPointColl: null };
2987
+ parent.notify('freehand-draw', { prop: 'getSelPointColl', onPropertyChange: false,
2988
+ value: { obj: object } });
2989
+ var cropSelPointColl = object['selPointColl'];
2990
+ parent.notify('freehand-draw', { prop: 'setSelPointColl', onPropertyChange: false,
2991
+ value: { obj: { selPointColl: [] } } });
2992
+ parent.img.destLeft -= point.x;
2993
+ parent.img.destTop -= point.y;
2994
+ parent.panPoint.currentPannedPoint = { x: parent.img.destLeft - destLeft, y: parent.img.destTop - destTop };
2995
+ parent.notify('transform', { prop: 'rotatePan', onPropertyChange: false,
2996
+ value: { isCropSelection: null, isDefaultZoom: null } });
2997
+ parent.isCropTab = isCropTab;
2998
+ parent.objColl = objColl;
2999
+ parent.pointColl = pointColl;
3000
+ parent.freehandCounter = parent.pointColl.length;
3001
+ parent.notify('freehand-draw', { prop: 'setSelPointColl', onPropertyChange: false,
3002
+ value: { obj: { selPointColl: cropSelPointColl } } });
3003
+ parent.notify('shape', { prop: 'panObjColl', onPropertyChange: false,
3004
+ value: { xDiff: parent.panPoint.currentPannedPoint.x, yDiff: parent.panPoint.currentPannedPoint.y, panRegion: '' } });
3005
+ parent.notify('freehand-draw', { prop: 'panFHDColl', onPropertyChange: false,
3006
+ value: { xDiff: parent.panPoint.currentPannedPoint.x, yDiff: parent.panPoint.currentPannedPoint.y, panRegion: '' } });
3007
+ }
3008
+ }
3009
+ };
3010
+ Draw.prototype.drawZoomPanImage = function (x, y) {
3011
+ var parent = this.parent;
3012
+ parent.notify('shape', { prop: 'panObjColl', onPropertyChange: false,
3013
+ value: { xDiff: x, yDiff: y, panRegion: '' } });
3014
+ parent.notify('freehand-draw', { prop: 'panFHDColl', onPropertyChange: false,
3015
+ value: { xDiff: x, yDiff: y, panRegion: '' } });
3016
+ this.renderImage(true);
3017
+ var obj = { width: 0, height: 0 };
3018
+ parent.notify('transform', { prop: 'calcMaxDimension', onPropertyChange: false,
3019
+ value: { width: parent.img.srcWidth, height: parent.img.srcHeight, obj: obj } });
3020
+ var maxDimension = obj;
3021
+ maxDimension.width += (maxDimension.width * parent.transform.zoomFactor);
3022
+ maxDimension.height += (maxDimension.height * parent.transform.zoomFactor);
3023
+ parent.panPoint.totalPannedPoint.x += x;
3024
+ parent.panPoint.totalPannedPoint.y += y;
3025
+ parent.notify('crop', { prop: 'setTempFlipPanPoint', onPropertyChange: false, value: { point: { x: 0, y: 0 } } });
3026
+ };
3027
+ Draw.prototype.openNewImage = function () {
3028
+ var parent = this.parent;
3029
+ var inMemoryContext = parent.inMemoryCanvas.getContext('2d');
3030
+ showSpinner(parent.element);
3031
+ parent.element.style.opacity = '0.5';
3032
+ var toolbar = document.querySelector('#' + parent.element.id + '_currPos');
3033
+ if (toolbar) {
3034
+ toolbar.style.display = 'none';
3035
+ }
3036
+ var obj = { defToolbarItems: null };
3037
+ if (!isBlazor()) {
3038
+ parent.notify('toolbar', { prop: 'getDefToolbarItems', value: { obj: obj } });
3039
+ if (obj['defToolbarItems'].length === 0 &&
3040
+ (isNullOrUndefined(document.getElementById(parent.element.id + '_toolbar')))) {
3041
+ if (isNullOrUndefined(parent.toolbarTemplate)) {
3042
+ parent.notify('toolbar', { prop: 'setToolbarHeight', value: { height: 0 } });
3043
+ }
3044
+ else if (parent.element.querySelector('#' + parent.element.id + '_toolbarArea')) {
3045
+ var height = parent.element.querySelector('#' + parent.element.id + '_toolbarArea').clientHeight;
3046
+ parent.notify('toolbar', { prop: 'setToolbarHeight', value: { height: height } });
3047
+ }
3048
+ }
3049
+ }
3050
+ else {
3051
+ if (parent.element.querySelector('#' + parent.element.id + '_toolbar')) {
3052
+ parent.toolbarHeight = parent.element.querySelector('#' + parent.element.id + '_toolbar').clientHeight;
3053
+ }
3054
+ else {
3055
+ parent.toolbarHeight = 0;
3056
+ }
3057
+ }
3058
+ parent.reset();
3059
+ parent.update();
3060
+ parent.transform.degree = 0;
3061
+ parent.transform.zoomFactor = 0;
3062
+ parent.isImageLoaded = false;
3063
+ parent.currSelectionPoint = null;
3064
+ var type = typeof (this.openURL);
3065
+ if (type === 'string') {
3066
+ var fileName = this.openURL.split('.');
3067
+ if (fileName.length > 1) {
3068
+ fileName = fileName[fileName.length - 2].split('/');
3069
+ this.fileName = fileName[fileName.length - 1];
3070
+ }
3071
+ else {
3072
+ this.fileName = 'ImageEditor';
3073
+ }
3074
+ this.fileType = this.getFileExtensionFromURL(this.openURL);
3075
+ if (this.fileType) {
3076
+ this.fileType = parent.toPascalCase(this.fileType);
3077
+ var fileType = this.fileType.toLowerCase();
3078
+ if (fileType === 'jpg' || fileType === 'jpeg') {
3079
+ this.fileType = 'Jpeg';
3080
+ fileType = 'jpeg';
3081
+ }
3082
+ if (fileType !== 'jpeg' && fileType !== 'png' && fileType !== 'svg') {
3083
+ this.fileType = null;
3084
+ }
3085
+ }
3086
+ this.imageOnLoad(this.openURL);
3087
+ }
3088
+ else {
3089
+ this.fileName = 'ImageEditor';
3090
+ this.fileType = null;
3091
+ parent.lowerCanvas = document.querySelector('#' + parent.element.id + '_lowerCanvas');
3092
+ parent.upperCanvas = document.querySelector('#' + parent.element.id + '_upperCanvas');
3093
+ this.lowerContext = parent.lowerCanvas.getContext('2d');
3094
+ this.upperContext = parent.upperCanvas.getContext('2d');
3095
+ parent.clearContext(this.lowerContext);
3096
+ parent.clearContext(this.upperContext);
3097
+ parent.clearContext(inMemoryContext);
3098
+ parent.inMemoryCanvas.width = parent.baseImg.width = this.openURL.width;
3099
+ parent.inMemoryCanvas.height = parent.baseImg.height = this.openURL.height;
3100
+ inMemoryContext.putImageData(this.openURL, 0, 0);
3101
+ parent.baseImg.src = parent.inMemoryCanvas.toDataURL();
3102
+ }
3103
+ };
3104
+ Draw.prototype.dlgBtnClick = function () {
3105
+ var parent = this.parent;
3106
+ parent.export();
3107
+ if (this.isFileChanged) {
3108
+ parent.isImageLoaded = this.isFileChanged = false;
3109
+ parent.reset();
3110
+ this.checkToolbarTemplate(this.inputElem, this.openURL);
3111
+ }
3112
+ else {
3113
+ this.reset();
3114
+ this.openNewImage();
3115
+ }
3116
+ if (!isBlazor()) {
3117
+ getComponent(document.getElementById(parent.element.id + '_dialog'), 'dialog').destroy();
3118
+ }
3119
+ this.isImageEdited = false;
3120
+ };
3121
+ Draw.prototype.dlgCloseBtnClick = function () {
3122
+ var parent = this.parent;
3123
+ this.baseImgSrc = parent.baseImg.src;
3124
+ if (this.isFileChanged) {
3125
+ parent.isImageLoaded = this.isFileChanged = false;
3126
+ parent.reset();
3127
+ this.checkToolbarTemplate(this.inputElem, this.openURL);
3128
+ }
3129
+ else {
3130
+ this.reset();
3131
+ this.openNewImage();
3132
+ }
3133
+ if (!isBlazor()) {
3134
+ getComponent(document.getElementById(parent.element.id + '_dialog'), 'dialog').destroy();
3135
+ }
3136
+ this.isImageEdited = false;
3137
+ };
3138
+ Draw.prototype.showDialogPopup = function () {
3139
+ this.parent.element.querySelector('#' + this.parent.element.id + '_dialog').style.display = 'block';
3140
+ var dialog = new Dialog({
3141
+ header: 'Confirm Save Changes',
3142
+ closeOnEscape: true,
3143
+ content: '<span>Do you want to save the changes you made to the image?</span>',
3144
+ target: document.getElementById('target'),
3145
+ width: '285px',
3146
+ isModal: true,
3147
+ animationSettings: { effect: 'Zoom' },
3148
+ close: this.dlgCloseBtnClick.bind(this),
3149
+ buttons: [
3150
+ { click: this.dlgCloseBtnClick.bind(this),
3151
+ buttonModel: { content: 'No', iconCss: 'e-icons e-close' }
3152
+ },
3153
+ { click: this.dlgBtnClick.bind(this),
3154
+ buttonModel: { content: 'Yes', isPrimary: true, iconCss: 'e-icons e-check' } }
3155
+ ]
3156
+ });
3157
+ dialog.appendTo('#' + this.parent.element.id + '_dialog');
3158
+ };
3159
+ Draw.prototype.restoreOldImage = function () {
3160
+ if (this.parent.isImageLoaded) {
3161
+ // if (this.isImageEdited || this.parent.pointColl.length > 0 || this.parent.objColl.length > 0) {
3162
+ // this.showDialogPopup();
3163
+ // } else {
3164
+ // this.reset();
3165
+ // this.openNewImage();
3166
+ // }
3167
+ // const data: ImageData = this.parent.getImageData();
3168
+ // const canvas: HTMLCanvasElement = document.createElement('canvas');
3169
+ // canvas.width = data.width; canvas.height = data.height;
3170
+ // canvas.getContext('2d').putImageData(data, 0, 0);
3171
+ // this.baseImgSrc = canvas.toDataURL();
3172
+ this.reset();
3173
+ this.openNewImage();
3174
+ }
3175
+ else {
3176
+ this.openNewImage();
3177
+ }
3178
+ };
3179
+ Draw.prototype.open = function (data) {
3180
+ if (!this.parent.disabled) {
3181
+ this.openURL = data;
3182
+ this.restoreOldImage();
3183
+ }
3184
+ };
3185
+ Draw.prototype.getInitialLoaded = function (object) {
3186
+ object['isInitialLoaded'] = this.isInitialLoading;
3187
+ };
3188
+ Draw.prototype.getFileExtensionFromURL = function (url) {
3189
+ var lastDotIndex = url.lastIndexOf(".");
3190
+ if (lastDotIndex !== -1) {
3191
+ return url.slice(lastDotIndex + 1).toLowerCase();
3192
+ }
3193
+ return null;
3194
+ };
3195
+ Draw.prototype.fileSelect = function (inputElement, args) {
3196
+ var parent = this.parent;
3197
+ if (!parent.disabled) {
3198
+ /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
3199
+ var filesData = args.target.files[0];
3200
+ /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
3201
+ var fileData = filesData;
3202
+ var fileExtension = fileData.name && fileData.name.split('.')[1].toLowerCase();
3203
+ if (fileExtension && ['jpg', 'jpeg', 'png', 'svg'].indexOf(fileExtension) === -1) {
3204
+ return;
3205
+ }
3206
+ showSpinner(parent.element);
3207
+ parent.element.style.opacity = '0.5';
3208
+ this.inputElem = inputElement;
3209
+ fileExtension = fileData.name && fileData.name.split('.')[1];
3210
+ if (fileExtension) {
3211
+ var fileType = parent.toPascalCase(fileExtension);
3212
+ if (fileType === 'JPG' || fileType === 'Jpg') {
3213
+ this.fileType = 'Jpeg';
3214
+ }
3215
+ else {
3216
+ this.fileType = fileType;
3217
+ }
3218
+ }
3219
+ else {
3220
+ this.fileType = null;
3221
+ }
3222
+ /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
3223
+ var URL_1 = window.URL;
3224
+ var url = URL_1.createObjectURL(filesData);
3225
+ this.openURL = url;
3226
+ if (parent.isImageLoaded && (this.isImageEdited || parent.pointColl.length > 0 || parent.objColl.length > 0)) {
3227
+ this.isFileChanged = true;
3228
+ if (!isBlazor()) {
3229
+ this.showDialogPopup();
3230
+ }
3231
+ else {
3232
+ parent.dotNetRef.invokeMethodAsync('UpdateDialog');
3233
+ }
3234
+ }
3235
+ else {
3236
+ this.checkToolbarTemplate(inputElement, url);
3237
+ }
3238
+ }
3239
+ };
3240
+ Draw.prototype.checkToolbarTemplate = function (inputElement, url) {
3241
+ var parent = this.parent;
3242
+ if (isNullOrUndefined(parent.toolbarTemplate)) {
3243
+ parent.reset();
3244
+ parent.update();
3245
+ }
3246
+ this.fileName = inputElement.value.split('\\')[inputElement.value.split('\\').length - 1];
3247
+ this.fileName = this.fileName.split('.')[0];
3248
+ this.imageOnLoad(url.toString());
3249
+ inputElement.value = '';
3250
+ };
3251
+ return Draw;
3252
+ }());
3253
+ export { Draw };