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.js132
1 files changed, 120 insertions, 12 deletions
diff --git a/js/controllers/elements/shapes-controller.js b/js/controllers/elements/shapes-controller.js
index c5f22138..e764de4e 100755
--- a/js/controllers/elements/shapes-controller.js
+++ b/js/controllers/elements/shapes-controller.js
@@ -5,7 +5,8 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot
5</copyright> */ 5</copyright> */
6 6
7var Montage = require("montage/core/core").Montage, 7var Montage = require("montage/core/core").Montage,
8 CanvasController = require("js/controllers/elements/canvas-controller").CanvasController; 8 CanvasController = require("js/controllers/elements/canvas-controller").CanvasController,
9 njModule = require("js/lib/NJUtils");
9 10
10exports.ShapesController = Montage.create(CanvasController, { 11exports.ShapesController = Montage.create(CanvasController, {
11 12
@@ -56,6 +57,35 @@ exports.ShapesController = Montage.create(CanvasController, {
56 el.elementModel.shapeModel.GLWorld.setViewportFromCanvas(el); 57 el.elementModel.shapeModel.GLWorld.setViewportFromCanvas(el);
57 el.elementModel.shapeModel.GLGeomObj.buildBuffers(); 58 el.elementModel.shapeModel.GLGeomObj.buildBuffers();
58 break; 59 break;
60 case "useWebGl":
61 var canvas = njModule.NJUtils.makeNJElement("canvas", "Canvas", "shape", el.className, true);
62 canvas.width = el.width;
63 canvas.height = el.height;
64 this.application.ninja.elementMediator.replaceElement(el, canvas);
65 NJevent("elementDeleted", el);
66 this.application.ninja.selectionController.selectElement(canvas);
67 el = canvas;
68 this.toggleWebGlMode(el, value);
69 el.elementModel.shapeModel.GLGeomObj.buildBuffers();
70 break;
71 case "strokeMaterial":
72 var sm = Object.create(MaterialsLibrary.getMaterial(value));
73 if(sm)
74 {
75 el.elementModel.shapeModel.GLGeomObj.setStrokeMaterial(sm);
76 el.elementModel.shapeModel.strokeMaterial = sm;
77 el.elementModel.shapeModel.GLGeomObj.buildBuffers();
78 }
79 break;
80 case "fillMaterial":
81 var fm = Object.create(MaterialsLibrary.getMaterial(value));
82 if(fm)
83 {
84 el.elementModel.shapeModel.GLGeomObj.setFillMaterial(fm);
85 el.elementModel.shapeModel.fillMaterial = fm;
86 el.elementModel.shapeModel.GLGeomObj.buildBuffers();
87 }
88 break;
59 default: 89 default:
60 CanvasController.setProperty(el, p, value); 90 CanvasController.setProperty(el, p, value);
61 } 91 }
@@ -66,17 +96,27 @@ exports.ShapesController = Montage.create(CanvasController, {
66 getProperty: { 96 getProperty: {
67 value: function(el, p) { 97 value: function(el, p) {
68 switch(p) { 98 switch(p) {
69 case "stroke":
70 case "fill":
71 case "strokeSize": 99 case "strokeSize":
72 case "innerRadius": 100 case "innerRadius":
73 case "tlRadius": 101 case "tlRadius":
74 case "trRadius": 102 case "trRadius":
75 case "blRadius": 103 case "blRadius":
76 case "brRadius": 104 case "brRadius":
105 case "border":
106 case "background":
107 case "useWebGl":
108 return this.getShapeProperty(el, p);
77 case "strokeMaterial": 109 case "strokeMaterial":
78 case "fillMaterial": 110 case "fillMaterial":
79 return this.getShapeProperty(el, p); 111 var m = this.getShapeProperty(el, p);
112 if(m)
113 {
114 return this.getShapeProperty(el, p).getName();
115 }
116 else
117 {
118 return "FlatMaterial";
119 }
80 default: 120 default:
81 return CanvasController.getProperty(el, p); 121 return CanvasController.getProperty(el, p);
82 } 122 }
@@ -182,30 +222,44 @@ exports.ShapesController = Montage.create(CanvasController, {
182 // Routines to get/set color properties 222 // Routines to get/set color properties
183 getColor: { 223 getColor: {
184 value: function(el, isFill) { 224 value: function(el, isFill) {
225 var color,
226 css;
185 if(isFill) 227 if(isFill)
186 { 228 {
187 return this.getShapeProperty(el, "fill"); 229 if(el.elementModel.shapeModel.background)
230 {
231 return el.elementModel.shapeModel.background;
232 }
233 color = this.getShapeProperty(el, "fill");
188 } 234 }
189 else 235 else
190 { 236 {
191 return this.getShapeProperty(el, "stroke"); 237 if(el.elementModel.shapeModel.border)
238 {
239 return el.elementModel.shapeModel.border;
240 }
241 color = this.getShapeProperty(el, "stroke");
192 } 242 }
243
244 css = this.application.ninja.colorController.colorModel.webGlToCss(color);
245 return this.application.ninja.colorController.getColorObjFromCss(css);
193 } 246 }
194 }, 247 },
195 248
196 setColor: { 249 setColor: {
197 value: function(el, color, isFill) { 250 value: function(el, color, isFill) {
198 // TODO - Format color for webGL before setting 251 var webGl = color.webGlColor || color.color.webGlColor;
199 color = color.webGlColor;
200 if(isFill) 252 if(isFill)
201 { 253 {
202 el.elementModel.shapeModel.GLGeomObj.setFillColor(color); 254 el.elementModel.shapeModel.GLGeomObj.setFillColor(webGl);
203 this.setShapeProperty(el, "fill", color); 255 this.setShapeProperty(el, "fill", webGl);
256 this.setShapeProperty(el, "background", color);
204 } 257 }
205 else 258 else
206 { 259 {
207 el.elementModel.shapeModel.GLGeomObj.setStrokeColor(color); 260 el.elementModel.shapeModel.GLGeomObj.setStrokeColor(webGl);
208 this.setShapeProperty(el, "stroke", color); 261 this.setShapeProperty(el, "stroke", webGl);
262 this.setShapeProperty(el, "border", color);
209 } 263 }
210 el.elementModel.shapeModel.GLWorld.render(); 264 el.elementModel.shapeModel.GLWorld.render();
211 } 265 }
@@ -261,6 +315,60 @@ exports.ShapesController = Montage.create(CanvasController, {
261 { 315 {
262 return (el.elementModel && el.elementModel.isShape); 316 return (el.elementModel && el.elementModel.isShape);
263 } 317 }
318 },
319
320 toggleWebGlMode: {
321 value: function(el, useWebGl)
322 {
323 if(useWebGl)
324 {
325 this.convertToWebGlWorld(el);
326 }
327 else
328 {
329 this.convertTo2DWorld(el);
330 }
331 }
332 },
333
334 convertToWebGlWorld: {
335 value: function(el)
336 {
337 if(el.elementModel.shapeModel.useWebGl)
338 {
339 return;
340 }
341 var world,
342 worldData = el.elementModel.shapeModel.GLWorld.export();
343 if(worldData)
344 {
345 world = new GLWorld(el, true);
346 el.elementModel.shapeModel.GLWorld = world;
347 el.elementModel.shapeModel.useWebGl = true;
348 world.import(worldData);
349 }
350
351 }
352 },
353
354 convertTo2DWorld: {
355 value: function(el)
356 {
357 if(!el.elementModel.shapeModel.useWebGl)
358 {
359 return;
360 }
361 var world,
362 worldData = el.elementModel.shapeModel.GLWorld.export();
363 if(worldData)
364 {
365 world = new GLWorld(el, false);
366 el.elementModel.shapeModel.GLWorld = world;
367 el.elementModel.shapeModel.useWebGl = false;
368 world.import(worldData);
369 }
370
371 }
264 } 372 }
265 373
266}); 374});