diff options
Diffstat (limited to 'js/controllers')
-rw-r--r-- | js/controllers/elements/shapes-controller.js | 117 | ||||
-rw-r--r-- | js/controllers/styles-controller.js | 77 |
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 | ||
7 | var Montage = require("montage/core/core").Montage, | 7 | var 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 | ||
10 | exports.ShapesController = Montage.create(CanvasController, { | 11 | exports.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 : { |