diff options
Diffstat (limited to 'js/controllers/elements/shapes-controller.js')
-rw-r--r-- | js/controllers/elements/shapes-controller.js | 126 |
1 files changed, 123 insertions, 3 deletions
diff --git a/js/controllers/elements/shapes-controller.js b/js/controllers/elements/shapes-controller.js index 5efbccd0..640119c4 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,86 @@ 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.useWebGl = true; | ||
350 | world.import(worldData); | ||
351 | el.elementModel.shapeModel.GLGeomObj = world.getGeomRoot(); | ||
352 | |||
353 | sm = Object.create(MaterialsLibrary.getMaterial("FlatMaterial")); | ||
354 | if(sm) | ||
355 | { | ||
356 | el.elementModel.shapeModel.GLGeomObj.setStrokeMaterial(sm); | ||
357 | el.elementModel.shapeModel.strokeMaterial = sm; | ||
358 | } | ||
359 | fm = Object.create(MaterialsLibrary.getMaterial("FlatMaterial")); | ||
360 | // TODO - Use consts after GL code is converted to object literal notation | ||
361 | // if( fm && (el.elementModel.shapeModel.GLGeomObj.geomType() !== GLGeomObj.GEOM_TYPE_LINE) ) | ||
362 | if( fm && (el.elementModel.shapeModel.GLGeomObj.geomType() !== 3) ) | ||
363 | { | ||
364 | el.elementModel.shapeModel.GLGeomObj.setFillMaterial(fm); | ||
365 | el.elementModel.shapeModel.fillMaterial = fm; | ||
366 | } | ||
367 | } | ||
368 | |||
369 | } | ||
370 | }, | ||
371 | |||
372 | convertTo2DWorld: { | ||
373 | value: function(el) | ||
374 | { | ||
375 | if(!el.elementModel.shapeModel.useWebGl) | ||
376 | { | ||
377 | return; | ||
378 | } | ||
379 | var world, | ||
380 | worldData = el.elementModel.shapeModel.GLWorld.export(); | ||
381 | if(worldData) | ||
382 | { | ||
383 | world = new GLWorld(el, false); | ||
384 | el.elementModel.shapeModel.GLWorld = world; | ||
385 | el.elementModel.shapeModel.useWebGl = false; | ||
386 | world.import(worldData); | ||
387 | el.elementModel.shapeModel.GLGeomObj = world.getGeomRoot(); | ||
388 | el.elementModel.shapeModel.GLGeomObj.setStrokeMaterial(null); | ||
389 | el.elementModel.shapeModel.strokeMaterial = null; | ||
390 | // TODO - Use consts after GL code is converted to object literal notation | ||
391 | if(el.elementModel.shapeModel.GLGeomObj.geomType() !== 3) | ||
392 | { | ||
393 | el.elementModel.shapeModel.GLGeomObj.setFillMaterial(null); | ||
394 | el.elementModel.shapeModel.fillMaterial = null; | ||
395 | } | ||
396 | } | ||
397 | } | ||
278 | } | 398 | } |
279 | 399 | ||
280 | }); | 400 | }); |