aboutsummaryrefslogtreecommitdiff
path: root/js/controllers/elements/shapes-controller.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/controllers/elements/shapes-controller.js')
-rwxr-xr-xjs/controllers/elements/shapes-controller.js487
1 files changed, 341 insertions, 146 deletions
diff --git a/js/controllers/elements/shapes-controller.js b/js/controllers/elements/shapes-controller.js
index 5b9e4672..e9dde5fc 100755
--- a/js/controllers/elements/shapes-controller.js
+++ b/js/controllers/elements/shapes-controller.js
@@ -13,12 +13,71 @@ var Montage = require("montage/core/core").Montage,
13exports.ShapesController = Montage.create(CanvasController, { 13exports.ShapesController = Montage.create(CanvasController, {
14 14
15 setProperty: { 15 setProperty: {
16 value: function(el, p, value) { 16 value: function(el, p, value, eventType, source) {
17 var val = parseInt(value); 17 var val = parseInt(value),
18 canvas,
19 m,
20 color;
18 switch(p) { 21 switch(p) {
19 case "strokeSize": 22 case "strokeSize":
20 // TODO - For now, just handling px units. 23 // TODO - For now, just handling px units.
21 this.setShapeProperty(el, "strokeSize", value); 24 this.setShapeProperty(el, "strokeSize", value);
25 // TODO - For now, just handle Line, Rectangle and Oval. Eventually, move this into each class's
26 // setStrokeWidth code like SubPath and BrushStroke do.
27 var geomType = el.elementModel.shapeModel.GLGeomObj.geomType();
28 if( (geomType > 0) && (geomType < 4) )
29 {
30 // Changing stroke size should grow/shrink the shape from the center.
31 var delta = ~~(val - el.elementModel.shapeModel.GLGeomObj.getStrokeWidth()),
32 l = this.application.ninja.elementMediator.getProperty(el, "left", parseInt),
33 t = this.application.ninja.elementMediator.getProperty(el, "top", parseInt),
34 w = this.application.ninja.elementMediator.getProperty(el, "width", parseInt),
35 h = this.application.ninja.elementMediator.getProperty(el, "height", parseInt);
36
37 if(geomType === 3)
38 {
39 var slope = el.elementModel.shapeModel.slope;
40 // set the dimensions
41 if(slope === "horizontal")
42 {
43 h = Math.max(val, 1);
44 t -= ~~(delta/2);
45 }
46 else if(slope === "vertical")
47 {
48 w = Math.max(val, 1);
49 l -= ~~(delta/2);
50 }
51 else
52 {
53 var oldXAdj = el.elementModel.shapeModel.GLGeomObj.getXAdj();
54 var oldYAdj = el.elementModel.shapeModel.GLGeomObj.getYAdj();
55 var theta = Math.atan(el.elementModel.shapeModel.slope);
56 var xAdj = Math.abs((val/2)*Math.sin(theta));
57 var yAdj = Math.abs((val/2)*Math.cos(theta));
58 var dX = ~~(xAdj*2 - oldXAdj*2);
59 var dY = ~~(yAdj*2 - oldYAdj*2);
60
61 l -= dX;
62 t -= dY;
63 w += dX*2;
64 h += dY*2;
65
66 el.elementModel.shapeModel.GLGeomObj.setXAdj(xAdj);
67 el.elementModel.shapeModel.GLGeomObj.setYAdj(yAdj);
68 }
69 }
70 else
71 {
72 l -= ~~(delta/2);
73 t -= ~~(delta/2);
74 w += delta;
75 h += delta;
76 }
77
78 this.application.ninja.elementMediator.setProperties([{element:el, properties:{left: l + "px", top: t + "px", width: w + "px", height:h + "px"}}], eventType, source);
79
80 }
22 el.elementModel.shapeModel.GLGeomObj.setStrokeWidth(val); 81 el.elementModel.shapeModel.GLGeomObj.setStrokeWidth(val);
23 el.elementModel.shapeModel.GLGeomObj.buildBuffers(); 82 el.elementModel.shapeModel.GLGeomObj.buildBuffers();
24 el.elementModel.shapeModel.GLWorld.render(); 83 el.elementModel.shapeModel.GLWorld.render();
@@ -68,42 +127,47 @@ exports.ShapesController = Montage.create(CanvasController, {
68 el.elementModel.shapeModel.GLWorld.render(); 127 el.elementModel.shapeModel.GLWorld.render();
69 break; 128 break;
70 case "useWebGl": 129 case "useWebGl":
71 var canvas = njModule.NJUtils.makeNJElement("canvas", "Canvas", "shape", el.className, true); 130 canvas = njModule.NJUtils.makeNJElement("canvas", "Canvas", "shape", el.className, true);
72 canvas.setAttribute("data-RDGE-id", njModule.NJUtils.generateRandom()); 131 canvas.setAttribute("data-RDGE-id", njModule.NJUtils.generateRandom());
73 canvas.width = el.width; 132 canvas.width = el.width;
74 canvas.height = el.height; 133 canvas.height = el.height;
75 this.application.ninja.elementMediator.replaceElement(el, canvas); 134 canvas.elementModel = el.elementModel;
76 NJevent("elementDeleted", el); 135 this.toggleWebGlMode(canvas, value);
77 el = canvas; 136 this.application.ninja.elementMediator.replaceElement(canvas, el);
78 this.toggleWebGlMode(el, value); 137 break;
79 el.elementModel.shapeModel.GLWorld.render();
80 this.application.ninja.selectionController.selectElement(el);
81 return;
82 case "strokeMaterial": 138 case "strokeMaterial":
83 var sm = Object.create(MaterialsModel.getMaterial(value)); 139 m = Object.create(MaterialsModel.getMaterial(value));
84 if(sm) 140 if(m)
85 { 141 {
86 el.elementModel.shapeModel.GLGeomObj.setStrokeMaterial(sm); 142 el.elementModel.shapeModel.GLGeomObj.setStrokeMaterial(m);
87 el.elementModel.shapeModel.strokeMaterial = sm; 143 color = this.getMaterialColor(value);
144 if(color)
145 {
146 el.elementModel.shapeModel.GLGeomObj.setStrokeColor(color);
147 }
88 el.elementModel.shapeModel.GLGeomObj.buildBuffers(); 148 el.elementModel.shapeModel.GLGeomObj.buildBuffers();
89 el.elementModel.shapeModel.GLWorld.render(); 149 el.elementModel.shapeModel.GLWorld.render();
90 } 150 }
91 break; 151 break;
92 case "fillMaterial": 152 case "fillMaterial":
93 var fm = Object.create(MaterialsModel.getMaterial(value)); 153 m = Object.create(MaterialsModel.getMaterial(value));
94 if(fm) 154 if(m)
95 { 155 {
96 el.elementModel.shapeModel.GLGeomObj.setFillMaterial(fm); 156 el.elementModel.shapeModel.GLGeomObj.setFillMaterial(m);
97 el.elementModel.shapeModel.fillMaterial = fm; 157 color = this.getMaterialColor(value);
158 if(color)
159 {
160 el.elementModel.shapeModel.GLGeomObj.setFillColor(color);
161 }
98 el.elementModel.shapeModel.GLGeomObj.buildBuffers(); 162 el.elementModel.shapeModel.GLGeomObj.buildBuffers();
99 el.elementModel.shapeModel.GLWorld.render(); 163 el.elementModel.shapeModel.GLWorld.render();
100 } 164 }
101 break; 165 break;
102 case "editStrokeMaterial": 166 case "editStrokeMaterial":
103 NJevent("showMaterialPopup",{materialId : el.elementModel.shapeModel.strokeMaterial.getName()}); 167 NJevent("showMaterialPopup",{materialId : this.getProperty(el, "strokeMaterial")});
104 break; 168 break;
105 case "editFillMaterial": 169 case "editFillMaterial":
106 NJevent("showMaterialPopup",{materialId : el.elementModel.shapeModel.fillMaterial.getName()}); 170 NJevent("showMaterialPopup",{materialId : this.getProperty(el, "fillMaterial")});
107 break; 171 break;
108 case "animate": 172 case "animate":
109 if(value) 173 if(value)
@@ -119,9 +183,35 @@ exports.ShapesController = Montage.create(CanvasController, {
119 el.elementModel.shapeModel.GLWorld._canvas.task.stop(); 183 el.elementModel.shapeModel.GLWorld._canvas.task.stop();
120 } 184 }
121 break; 185 break;
186 case "strokeHardness":
187 this.setShapeProperty(el, "strokeHardness", value);
188 el.elementModel.shapeModel.GLGeomObj.setStrokeHardness(val);
189 el.elementModel.shapeModel.GLWorld.render();
190 break;
191 case "strokeSmoothing":
192 this.setShapeProperty(el, "strokeSmoothing", value);
193 el.elementModel.shapeModel.GLGeomObj.setSmoothingAmount(val);
194 el.elementModel.shapeModel.GLWorld.render();
195 break;
196 case "doSmoothing":
197 this.setShapeProperty(el, "doSmoothing", value);
198 el.elementModel.shapeModel.GLGeomObj.setDoSmoothing(value);
199 el.elementModel.shapeModel.GLWorld.render();
200 break;
201 case "isCalligraphic":
202 this.setShapeProperty(el, "isCalligraphic", value);
203 el.elementModel.shapeModel.GLGeomObj.setStrokeUseCalligraphic(value);
204 el.elementModel.shapeModel.GLWorld.render();
205 break;
206 case "strokeAngle":
207 this.setShapeProperty(el, "strokeAngle", value);
208 el.elementModel.shapeModel.GLGeomObj.setStrokeAngle(Math.PI * val/180);
209 el.elementModel.shapeModel.GLWorld.render();
210 break;
122 default: 211 default:
123 CanvasController.setProperty(el, p, value); 212 CanvasController.setProperty(el, p, value);
124 } 213 }
214 this.application.ninja.documentController.activeDocument.needsSave = true;
125 } 215 }
126 }, 216 },
127 217
@@ -134,17 +224,65 @@ exports.ShapesController = Montage.create(CanvasController, {
134 case "trRadius": 224 case "trRadius":
135 case "blRadius": 225 case "blRadius":
136 case "brRadius": 226 case "brRadius":
137 case "border":
138 case "background":
139 case "useWebGl": 227 case "useWebGl":
140 case "animate": 228 case "animate":
141 return this.getShapeProperty(el, p); 229 return this.getShapeProperty(el, p);
230 case "border":
231 return this.getColor(el, false);
232 case "background":
233 return this.getColor(el, tr