Blame view

app/scripts/controllers/tshirtdesign.js 12.4 KB
6f105dbd5   Truong LD   add source code i...
1
  define(['app'], function (app) {
c8bfdfd96   DANG   event click object
2
  	//'use strict';
6f105dbd5   Truong LD   add source code i...
3

422e7837d   DANG   Change color t-shirt
4
  	app.controller('TshirtdesignCtrl', function ($scope, $rootScope, $illustration) {
6f105dbd5   Truong LD   add source code i...
5
6
  		var canvas = new fabric.Canvas('main-design-container');
  		fabric.Object.prototype.transparentCorners = false;
cc65fa102   DANG   Custom control
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
  		fabric.Object.prototype.hasRotatingPoint = false;
  		var ctrVisible = {tl: false, ml:false, bl:false, mb: false, br: true, mr: false, tr: true, mt: true, mtr: false};
  		for(key in ctrVisible) {
  			fabric.Object.prototype.setControlVisible(key,ctrVisible[key]);
  		}
  		fabric.Object.prototype.customiseCornerIcons({
  			settings: {
  				borderColor: '#0000ff',
  				cornerSize: 25,
  				cornerShape: 'circle',
  				cornerBackgroundColor: '#0171b4',
  				cornerPadding: 6
  			},
  			mt: {
  				icon: 'images/control-icon/ok.png'
  			},
  			br: {
  				icon: 'images/control-icon/resize.png'
  			},
  			tr: {
  				icon: 'images/control-icon/rotate.png'
  			}
  		});
  
  		fabric.Canvas.prototype.customiseControls({
  			mt: {
  				cursor: 'pointer',
  				action: function (e, target) {
  					target.hasControls = false;
  					target.hasBorders = false;
  					canvas.deactivateAll().renderAll();
  					setTimeout(function() {
  						target.hasControls = true;
  						target.hasBorders = true;
  					}, 1);
  				}
  			},
  			br: {
  
  			},
  			tr: {
  				action: 'rotate',
  				cursor: 'crosshair'
  			}
  		});
6f105dbd5   Truong LD   add source code i...
52
53
  
  		canvas.on('after:render', function() {
0181c19ff   TRUONG   fix bugs and opti...
54
  			// console.log('after render');
6f105dbd5   Truong LD   add source code i...
55
56
  		});
  		canvas.on({
cc65fa102   DANG   Custom control
57
  			'mouse:up'          : mouseUp,
92271fd7c   DANG   add event
58
  			'object:added'      : onIllustrationAdded,
c3bee6bb3   TRUONG   fix trash icon ef...
59
  			'object:moving'     : onIllustrationMoving,
92271fd7c   DANG   add event
60
61
62
63
64
  			'object:scaling'    : onIllustrationChange,
  			'object:rotating'   : onIllustrationChange,
  			'object:selected'   : onObjectSelected,
  			'object:modified'   : onIllustrationModifield,
  			'selection:cleared' : onObjectOut,
6f105dbd5   Truong LD   add source code i...
65
  		});
aff3eb043   TRUONG   update illustrati...
66
67
68
69
70
71
72
73
  		
  		var currentObj;
  		var listObj = [];
  		var stateObj = [];
  		var indexCurr = 0;
  		var indexCurr2 = 0;
  		var actionObj = false;
  		var refreshObj = true;
92271fd7c   DANG   add event
74
  		var spacingNum = 0;
cc65fa102   DANG   Custom control
75
76
77
78
79
80
  
  		function mouseUp(e) {
  			currentObj = canvas.getActiveObject();
  			console.log(currentObj);
  			currentObj.activate();
  		}
aff3eb043   TRUONG   update illustrati...
81
82
83
  		
  		function onIllustrationAdded(options){
  			var object = options.target;
0181c19ff   TRUONG   fix bugs and opti...
84
  		    // console.log('object:added');
aff3eb043   TRUONG   update illustrati...
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
  		
  		    if (actionObj === true) {
  		        stateObj = [stateObj[indexCurr2]];
  		        listObj = [listObj[indexCurr2]];
  		
  		        actionObj = false;
  		        console.log(stateObj);
  		        indexCurr = 1;
  		    }
  		    object.saveState();
  		
  		    console.log(object.originalState);
  		    stateObj[indexCurr] = JSON.stringify(object.originalState);
  		    listObj[indexCurr] = object;
  		    indexCurr++;
  		    indexCurr2 = indexCurr - 1;
  		    refreshObj = true;
  		}
  		
1d6ddfa62   TRUONG   merge
104
  		function onIllustrationModifield(options){
c3bee6bb3   TRUONG   fix trash icon ef...
105
106
107
108
109
110
111
112
113
  			//
  		    var pointer = canvas.getPointer(options.e);
  			if (pointer.x >= 567 && pointer.y >= 620 && pointer.x <= 600 && pointer.y <= 670){
  				canvas.getActiveObject().remove();
  				$('.design-content .trash-design').css({'opacity':'1'});
  				return;
  			}
  			
  			//
aff3eb043   TRUONG   update illustrati...
114
  			var objOffset = canvas.getActiveObject().getBoundingRect();
c3bee6bb3   TRUONG   fix trash icon ef...
115
  			var cH = canvas.height, cW = canvas.width, H0 = 20, W0 = 20;
1d6ddfa62   TRUONG   merge
116
  			//console.log(objOffset,canvas.height,canvas.width);
aff3eb043   TRUONG   update illustrati...
117
118
119
120
121
122
123
124
125
126
  			if (objOffset.left<W0-objOffset.width || objOffset.left>cW-W0 || objOffset.top<H0-objOffset.height || objOffset.top>cH-H0){
  				if (confirm('削除してもよろしいですか')){
  					canvas.getActiveObject().remove();
  				}else{
  					undoCanvas();
  					return;
  				}
  			}
  			
  			var object = options.target;
0181c19ff   TRUONG   fix bugs and opti...
127
  		    // console.log('object:modified');
aff3eb043   TRUONG   update illustrati...
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
  		    if (actionObj === true) {
  		        stateObj = [stateObj[indexCurr2]];
  		        listObj = [listObj[indexCurr2]];
  		
  		        actionObj = false;
  		        console.log(stateObj);
  		        indexCurr = 1;
  		    }
  		
  		    object.saveState();
  		
  		    stateObj[indexCurr] = JSON.stringify(object.originalState);
  		    listObj[indexCurr] = object;
  		    indexCurr++;
  		    indexCurr2 = indexCurr - 1;
80ff9bbd4   TRUONG   fix bugs and optimal
143
  		    // console.log(stateObj);
aff3eb043   TRUONG   update illustrati...
144
145
146
  		    refreshObj = true;
  		}
  		
6f105dbd5   Truong LD   add source code i...
147
  		function onIllustrationChange(options) {
d75c45c56   Truong LD   remove test showcase
148
149
150
151
152
  			// options.target.setCoords();
  			// canvas.forEachObject(function(obj) {
  			// if (obj === options.target) return;
  			// 	obj.setOpacity(options.target.intersectsWithObject(obj) ? 0.5 : 1);
  			// });
6f105dbd5   Truong LD   add source code i...
153
  		}
c3bee6bb3   TRUONG   fix trash icon ef...
154
155
156
157
158
159
160
161
162
  		
  		function onIllustrationMoving(options) {
  			var pointer = canvas.getPointer(options.e);
  			if (pointer.x >= 567 && pointer.y >= 620 && pointer.x <= 600 && pointer.y <= 670){
  				$('.design-content .trash-design').css({'opacity':'0.5'});
  			}else{
  				$('.design-content .trash-design').css({'opacity':'1'});
  			}
  		}
6f105dbd5   Truong LD   add source code i...
163

92271fd7c   DANG   add event
164
165
166
  		function onObjectOut() {
  			delete currentObj;
  			$scope.designTextValue = '';
aff3eb043   TRUONG   update illustrati...
167
  		}
6f105dbd5   Truong LD   add source code i...
168

aff3eb043   TRUONG   update illustrati...
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
  		function undoCanvas() {
  		    if (indexCurr <= 0) {
  		        indexCurr = 0;
  		        return;
  		    }
  		
  		    if (refreshObj === true) {
  		        indexCurr--;
  		        refreshObj = false;
  		    }
  		
  		    console.log('undo');
  		
  		    indexCurr2 = indexCurr - 1;
  		    currentObj = listObj[indexCurr2];
  		    if (currentObj){
  		    	currentObj.setOptions(JSON.parse(indexCurr[indexCurr2]));
  		    }
  		
  		    indexCurr--;
  		    currentObj.setCoords();
  		    canvas.renderAll();
  		    actionObj = true;
  		}
  		
  		function redoCanvas() {
  		    actionObj = true;
  		    if (indexCurr >= stateObj.length - 1) {
  		        return;
  		    }
  		
  		    console.log('redo');
  		
  		    indexCurr2 = indexCurr + 1;
  		    currentObj = listObj[indexCurr2];
  		    currentObj.setOptions(JSON.parse(indexCurr[indexCurr2]));
  		
  		    indexCurr++;
  		    currentObj.setCoords();
  		    canvas.renderAll();
6f105dbd5   Truong LD   add source code i...
209
  		}
80ff9bbd4   TRUONG   fix bugs and optimal
210
211
  		
  		$scope.canvasClearAll = function(){
60b61386b   TRUONG   fix text
212
  			if (confirm('配置されたすべての文字や画像を消去します')){
80ff9bbd4   TRUONG   fix bugs and optimal
213
214
215
  				canvas.clear();
  			}
  		}
92271fd7c   DANG   add event
216
217
218
  
  		function onObjectSelected(options) {
  			var currentObj = options.target;
cc65fa102   DANG   Custom control
219
220
221
222
  			//Set default
  			console.log('selected object');
  			// currentObj.hasControls = true;
  			// currentObj.hasBorders = true;
92271fd7c   DANG   add event
223
  			$scope.typeObject = currentObj.type;
c8bfdfd96   DANG   event click object
224
225
  			switch ($scope.typeObject) {
  				case 'i-text' :
c8bfdfd96   DANG   event click object
226
  					$rootScope.isShowLeftPanel = 'text';
92271fd7c   DANG   add event
227
228
229
230
231
  					var text = currentObj.text;
  					if(text != '') {
  						$scope.designText = text;
  						$scope.designTextValue = text;
  					}
c8bfdfd96   DANG   event click object
232
233
234
235
236
  					break;
  
  				case 'path-group' :
  					$rootScope.isShowLeftPanel = 'illustration';
  					break;
e5669639a   TRUONG   merge #1759
237
238
239
240
  					
  				case 'image':
  					$rootScope.isShowLeftPanel = 'image';
  					break;
c8bfdfd96   DANG   event click object
241
242
243
244
245
246
  
  				default :
  					$rootScope.isShowLeftPanel = 'default';
  					break;
  			}
  			$rootScope.safeApply();
6f105dbd5   Truong LD   add source code i...
247
248
249
250
251
  		}
  
  		// Illustration process
  		$scope.changeIllustrationCategory = function(currentIllustration){
  			$scope.currentIllustrationCate = $illustration.getList(currentIllustration);
c8bfdfd96   DANG   event click object
252
  			//console.log($scope.currentIllustrationCate);
422e7837d   DANG   Change color t-shirt
253
  		};
6f105dbd5   Truong LD   add source code i...
254
255
256
257
  
  		$scope.insertSvg = function(item){
  			fabric.loadSVGFromURL(item.path, function(objects, options) {
  				var shape = fabric.util.groupSVGElements(objects, options);
80ff9bbd4   TRUONG   fix bugs and optimal
258
  				//shape.setFill('green');
6f105dbd5   Truong LD   add source code i...
259
260
261
262
263
  				canvas.add(shape.scale(0.6));
  				shape.set({ left: 150, top: 200 }).setCoords();
  				canvas.renderAll();
  				canvas.setActiveObject(shape);
  			});
422e7837d   DANG   Change color t-shirt
264
  		};
6f105dbd5   Truong LD   add source code i...
265
266
  
  		// color pattern
6f105dbd5   Truong LD   add source code i...
267
  		$scope.listColorPatterns = [
aff3eb043   TRUONG   update illustrati...
268
269
270
271
  			'#000000','#ffff00','#ff6600','#ff0000','#ff6262','#ffa19c','#ff9933','#c45d01','#5d2b03','#ffffcc',
  			'#ffff99','#ffd500','#c0db50','#21a52a','#00663f','#abfcab','#36ffaa','#89eaea','#00938c','#005450',
  			'#0badff','#006cff','#839aff','#0410a0','#ffb2ff','#f93fff','#6600ca','#ff6699','#999999','#666666',
  			'#333333'
422e7837d   DANG   Change color t-shirt
272
  		];
80ff9bbd4   TRUONG   fix bugs and optimal
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
  		
  		$scope.changeColorPattern = function(color){
  			var obj = canvas.getActiveObject();
  			if (!color){
  				color = 'none';
  			}
  			if (obj instanceof fabric.PathGroup) {
  			  obj.getObjects().forEach(function(o) {
  			  	o.fill = color;
  			  });
  			}
  			else {
  			  obj.fill = color;
  			}
  			canvas.renderAll();
  			// if (canvas.getActiveObject()){
  			// 	canvas.getActiveObject().set("fill", color);
  				// canvas.renderAll();
  			// }
  		};
  		
04cbb68af   DANG   design text basic
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
  		//Font
  		$scope.listFontFamily = [
  			{
  				name : 'GN Aki iro Sesami Cookies',
  				slug : 'gn_aki_iro_sesami_cookies',
  			},
  			{
  				name : 'GN-Fuyu-iro_Script_Bold',
  				slug : 'gn_fuyu_iro_script_bold'
  			},
  			{
  				name : 'GN Killgothic U Kanana',
  				slug : 'gn_killgothic_u_kanana'
  			},
  			{
  				name : 'GN-Kin-iro_Alphabet_Cookies',
  				slug : 'gn_kin_iro_alphabet_cookies'
  
  			},
  			{
  				name : 'GN-Kin-iro_SansSerif',
  				slug : 'gn_kin_iro_sansserif'
  
  			},
  			{
  				name : 'GN-Koharuiro_Sunray',
  				slug : 'gn_koharuiro_sunray'
  
  			},
  			{
  				name : 'GN-Kyu-pin',
  				slug : 'gn_kyu_pin'
  			},
  			{
  				name : 'gn_natsu_iro_schedule',
  				slug : 'gn_natsu_iro_schedule'
  
  			},
  			{
  				name : 'gnkana_kiniro_sansserif_l',
  				slug : 'gnkana_kiniro_sansserif_l'
  
  			},
  			{
  				name : 'gnkana_kiniro_sansserif_st',
  				slug : 'gnkana_kiniro_sansserif_st'
  			},
  			{
  				name : 'gnkana_kon_iro_nightfall',
  				slug : 'gnkana_kon_iro_nightfall'
  
  			},
  			{
  				name : 'ms_gothic',
  				slug : 'ms_gothic'
  
  			},
  			{
  				name : 'msmincho',
  				slug : 'msmincho'
  			},
  			{
  				name : 'ufonts_com_ms_pgothic',
  				slug : 'ufonts_com_ms_pgothic'
  			}
  		];
682a3b12d   TRUONG   fix illustration ...
360
  		
682a3b12d   TRUONG   fix illustration ...
361
  		// layer process
92271fd7c   DANG   add event
362
363
364
365
366
  		$scope.layerProcess = function(mode) {
  			// console.log('layerProcess');
  			var activeObject = canvas.getActiveObject();
  
  			console.log(activeObject);
682a3b12d   TRUONG   fix illustration ...
367
368
369
  			if (activeObject){
  				switch (mode) {
  					case 1:
92271fd7c   DANG   add event
370
  						// canvas.bringForward(activeObject);
682a3b12d   TRUONG   fix illustration ...
371
372
373
  						activeObject.bringForward();
  						break;
  					case 2:
92271fd7c   DANG   add event
374
  						// canvas.sendBackwards(activeObject);
682a3b12d   TRUONG   fix illustration ...
375
376
377
  						activeObject.sendBackwards();
  						break;
  					case 3:
92271fd7c   DANG   add event
378
  						// canvas.bringToFront(activeObject);
682a3b12d   TRUONG   fix illustration ...
379
380
381
  						activeObject.bringToFront();
  						break;
  					case 4:
92271fd7c   DANG   add event
382
  						// canvas.sendToBack(activeObject);
682a3b12d   TRUONG   fix illustration ...
383
384
385
  						activeObject.sendToBack();
  						break;
  				}
e0ee74c15   TRUONG   update fix layer ...
386
  				canvas.deactivateAll().renderAll();
682a3b12d   TRUONG   fix illustration ...
387
  			}
04cbb68af   DANG   design text basic
388
  		};
422e7837d   DANG   Change color t-shirt
389

92271fd7c   DANG   add event
390
391
392
  		$scope.focusInputText = function(text) {
  			currentObj = canvas.getActiveObject();
  			if(typeof currentObj == 'undefined' || currentObj == null) {
ba689b493   DANG   canvas font text
393
394
395
396
397
  				$scope.iText = new fabric.IText('', {
  					left: 150,
  					top: 200,
  					fontFamily: 'Arial',
  					fontWeight: 'normal',
92271fd7c   DANG   add event
398
  					textAlign:  'center',
ba689b493   DANG   canvas font text
399
400
401
  					fontSize: 28,
  					fill: 'black'
  				});
92271fd7c   DANG   add event
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
  			} else {
  				if(currentObj.type != 'i-text') {
  					$scope.iText = new fabric.IText('', {
  						left: 150,
  						top: 200,
  						fontFamily: 'Arial',
  						fontWeight: 'normal',
  						textAlign:  'center',
  						fontSize: 28,
  						fill: 'black'
  					});
  				} else{
  					$scope.iText = currentObj;
  				}
  			}
c8bfdfd96   DANG   event click object
417
  		};
422e7837d   DANG   Change color t-shirt
418

98acd3acd   DANG   Change text
419
420
  		//Design text
  		$scope.inputText = function(e) {
92271fd7c   DANG   add event
421
422
  			if(typeof $scope.iText != "undefined") {
  				var iText = $scope.iText;
ba689b493   DANG   canvas font text
423
  				iText.text = e;
ba689b493   DANG   canvas font text
424
425
426
427
  				canvas.add(iText);
  				canvas.renderAll();
  				canvas.setActiveObject(iText);
  			}
c8bfdfd96   DANG   event click object
428
  		};
ba689b493   DANG   canvas font text
429
430
  		$scope.setFontFamily = function(font) {
  			if(canvas.getActiveObject()) {
92271fd7c   DANG   add event
431
432
433
  				var currentObj = canvas.getActiveObject();
  				if(currentObj.type == 'i-text') {
  					currentObj.set('fontFamily', font);
ba689b493   DANG   canvas font text
434
  					canvas.renderAll();
92271fd7c   DANG   add event
435
  					canvas.setActiveObject(currentObj);
ba689b493   DANG   canvas font text
436
437
438
  				}
  
  			}
04cbb68af   DANG   design text basic
439
440
  		};
  		//Set letter spacing text
04cbb68af   DANG   design text basic
441
442
  		$scope.setLetterSpacingText = function(e) {
  			if(canvas.getActiveObject()) {
92271fd7c   DANG   add event
443
444
  				var currentObj = canvas.getActiveObject();
  				if(currentObj.type == 'i-text') {
04cbb68af   DANG   design text basic
445
446
  					if(e == 'plus')
  						spacingNum = spacingNum + 30;
92271fd7c   DANG   add event
447
  					else if (spacingNum >= 30){
04cbb68af   DANG   design text basic
448
449
  						spacingNum = spacingNum - 30;
  					}
92271fd7c   DANG   add event
450
  					currentObj.set('charSpacing', spacingNum);
04cbb68af   DANG   design text basic
451
  					canvas.renderAll();
92271fd7c   DANG   add event
452
  					canvas.setActiveObject(currentObj);
04cbb68af   DANG   design text basic
453
  				}
04cbb68af   DANG   design text basic
454
  			}
ba689b493   DANG   canvas font text
455
  		}
e5669639a   TRUONG   merge #1759
456
457
458
459
  		
  		
  		/**** process insert image */
  		$scope.chooseImage = function(e){console.log(e);
0181c19ff   TRUONG   fix bugs and opti...
460
  			if (e.target.files[0] && e.target.files[0].size > 5*1024*1024){
60b61386b   TRUONG   fix text
461
  				alert('アップロードできませんでした');
0181c19ff   TRUONG   fix bugs and opti...
462
463
  				return;
  			}
e5669639a   TRUONG   merge #1759
464
  			var reader = new FileReader();
0181c19ff   TRUONG   fix bugs and opti...
465
466
  		    reader.onload = function (event) {
  		        var imgObj = new Image();//console.log(event.target);
e5669639a   TRUONG   merge #1759
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
  		        imgObj.src = event.target.result;
  		        imgObj.onload = function () {
  		            // start fabricJS stuff
  		            
  		            var image = new fabric.Image(imgObj);
  		            image.set({
  		                left: 50,
  		                top: 50
  		            });
  		            //image.scale(getRandomNum(0.1, 0.25)).setCoords();
  		            image.scaleToWidth(200);
  		            canvas.add(image);
  		        }
  		    }
      		reader.readAsDataURL(e.target.files[0]);
  		}
e4a2f2dbc   TRUONG   merge conflict
483
  	
92271fd7c   DANG   add event
484
485
486
487
488
489
490
491
492
493
494
  		//Traslation text
  		$scope.rotateText =  function(style) {
  			if(canvas.getActiveObject()) {
  				var currentObj = canvas.getActiveObject();
  				if(currentObj.type == 'i-text') {
  					currentObj.set('rotate', Math.PI / 4);
  					canvas.renderAll();
  					canvas.setActiveObject(currentObj);
  				}
  			}
  		};
80ff9bbd4   TRUONG   fix bugs and optimal
495
496
497
498
499
500
501
502
  		
  		
  		/* Process output */
  		$scope.outputDesign = function(){
  			$rootScope.outputImage = canvas.toDataURL('png');
  			// console.log();
  			$('#tshirt-design').modal('hide');
  		}
6f105dbd5   Truong LD   add source code i...
503
504
  	});
  });