aboutsummaryrefslogtreecommitdiff
path: root/js/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'js/controllers')
-rw-r--r--js/controllers/elements/shapes-controller.js117
-rw-r--r--js/controllers/styles-controller.js77
2 files changed, 185 insertions, 9 deletions
diff --git a/js/controllers/elements/shapes-controller.js b/js/controllers/elements/shapes-controller.js
index 5efbccd0..b9c033aa 100644
--- 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 el = canvas;
67 this.toggleWebGlMode(el, value);
68 el.elementModel.shapeModel.GLWorld.render();
69 this.application.ninja.selectionController.selectElement(el);
70 return;
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 }
@@ -72,11 +102,21 @@ exports.ShapesController = Montage.create(CanvasController, {
72 case "trRadius": 102 case "trRadius":
73 case "blRadius": 103 case "blRadius":
74 case "brRadius": 104 case "brRadius":
75 case "strokeMaterial":
76 case "fillMaterial":
77 case "border": 105 case "border":
78 case "background": 106 case "background":
107 case "useWebGl":
79 return this.getShapeProperty(el, p); 108 return this.getShapeProperty(el, p);
109 case "strokeMaterial":
110 case "fillMaterial":
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 }
@@ -275,6 +315,77 @@ exports.ShapesController = Montage.create(CanvasController, {
275 { 315 {
276 return (el.elementModel && el.elementModel.isShape); 316 return (el.elementModel && el.elementModel.isShape);
277 } 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 sm,
342 fm,
343 world,
344 worldData = el.elementModel.shapeModel.GLWorld.export();
345 if(worldData)
346 {
347 world = new GLWorld(el, true);
348 el.elementModel.shapeModel.GLWorld = world;
349 el.elementModel.shapeModel.GLGeomObj.setWorld(world);
350 el.elementModel.shapeModel.useWebGl = true;
351 sm = Object.create(MaterialsLibrary.getMaterial("FlatMaterial"));
352 fm = Object.create(MaterialsLibrary.getMaterial("FlatMaterial"));
353 if(sm && fm)
354 {
355 el.elementModel.shapeModel.GLGeomObj.setStrokeMaterial(sm);
356 el.elementModel.shapeModel.GLGeomObj.setFillMaterial(fm);
357 el.elementModel.shapeModel.strokeMaterial = sm;
358 el.elementModel.shapeModel.fillMaterial = fm;
359 el.elementModel.shapeModel.GLGeomObj.buildBuffers();
360 }
361 world.import(worldData);
362 }
363
364 }
365 },
366
367 convertTo2DWorld: {
368 value: function(el)
369 {
370 if(!el.elementModel.shapeModel.useWebGl)
371 {
372 return;
373 }
374 var world,
375 worldData = el.elementModel.shapeModel.GLWorld.export();
376 if(worldData)
377 {
378 world = new GLWorld(el, false);
379 el.elementModel.shapeModel.GLWorld = world;
380 el.elementModel.shapeModel.useWebGl = false;
381 el.elementModel.shapeModel.GLGeomObj.setStrokeMaterial(null);
382 el.elementModel.shapeModel.GLGeomObj.setFillMaterial(null);
383 el.elementModel.shapeModel.strokeMaterial = null;
384 el.elementModel.shapeModel.fillMaterial = null;
385 world.import(worldData);
386 }
387
388 }
278 } 389 }
279 390
280}); 391});
diff --git a/js/controllers/styles-controller.js b/js/controllers/styles-controller.js
index 21024125..44e0e798 100644
--- a/js/controllers/styles-controller.js
+++ b/js/controllers/styles-controller.js
@@ -175,10 +175,16 @@ var stylesController = exports.StylesController = Montage.create(Component, {
175 } 175 }
176 176
177 stylesheet.insertRule(ruleText, index); 177 stylesheet.insertRule(ruleText, index);
178
179 this.styleSheetModified(stylesheet);
178 180
179 rule = stylesheet.rules[index]; 181 rule = stylesheet.rules[index];
180 182
181 ///// attach specificity to rule object 183 ///// attach specificity to rule object
184 // if rule is css keyframes, return rule and don't attach specificity
185 if (rule instanceof WebKitCSSKeyframesRule) {
186 return rule;
187 }
182 rule[this.CONST.SPECIFICITY_KEY] = this.getSpecificity(rule.selectorText); 188 rule[this.CONST.SPECIFICITY_KEY] = this.getSpecificity(rule.selectorText);
183 189
184 ///// return the rule we just inserted 190 ///// return the rule we just inserted
@@ -283,6 +289,8 @@ var stylesController = exports.StylesController = Montage.create(Component, {
283 sheet.deleteRule(index); 289 sheet.deleteRule(index);
284 } 290 }
285 291
292 this.styleSheetModified(sheet);
293
286 return index; 294 return index;
287 } 295 }
288 }, 296 },
@@ -531,6 +539,9 @@ var stylesController = exports.StylesController = Montage.create(Component, {
531 value : function(rule, selector) { 539 value : function(rule, selector) {
532 rule.selectorText = selector; 540 rule.selectorText = selector;
533 rule[this.CONST.SPECIFICITY_KEY] = this.getSpecificity(selector); 541 rule[this.CONST.SPECIFICITY_KEY] = this.getSpecificity(selector);
542
543 this.styleSheetModified(rule.parentStyleSheet);
544
534 return rule; 545 return rule;
535 } 546 }
536 }, 547 },
@@ -780,6 +791,8 @@ var stylesController = exports.StylesController = Montage.create(Component, {
780 ///// method to apply/test the new value 791 ///// method to apply/test the new value
781 dec.setProperty(property, value, priority); 792 dec.setProperty(property, value, priority);
782 793
794 this.styleSheetModified(rule.parentStyleSheet);
795
783 ///// Return browser value for value we just set 796 ///// Return browser value for value we just set
784 return dec.getPropertyValue(property); 797 return dec.getPropertyValue(property);
785 } 798 }
@@ -838,7 +851,10 @@ var stylesController = exports.StylesController = Montage.create(Component, {
838 851
839 deleteStyle : { 852 deleteStyle : {
840 value : function(rule, property) {