diff options
-rw-r--r-- | js/components/combobox.reel/combobox.js | 21 | ||||
-rw-r--r-- | js/controllers/elements/shapes-controller.js | 69 | ||||
-rw-r--r-- | js/data/pi/pi-data.js | 41 | ||||
-rw-r--r-- | js/mediators/element-mediator.js | 7 | ||||
-rw-r--r-- | js/models/shape-model.js | 1 | ||||
-rw-r--r-- | js/panels/properties/sections/custom.reel/custom.js | 12 | ||||
-rwxr-xr-x | js/preloader/Preloader.js | 1 | ||||
-rw-r--r-- | js/tools/LineTool.js | 1 | ||||
-rw-r--r-- | js/tools/OvalTool.js | 1 | ||||
-rw-r--r-- | js/tools/RectTool.js | 1 |
10 files changed, 151 insertions, 4 deletions
diff --git a/js/components/combobox.reel/combobox.js b/js/components/combobox.reel/combobox.js index a68a7d6b..deef2a47 100644 --- a/js/components/combobox.reel/combobox.js +++ b/js/components/combobox.reel/combobox.js | |||
@@ -76,6 +76,26 @@ exports.Combobox = Montage.create(Component, { | |||
76 | } | 76 | } |
77 | }, | 77 | }, |
78 | 78 | ||
79 | _enabled: { | ||
80 | enumerable: false, | ||
81 | value: true | ||
82 | }, | ||
83 | |||
84 | enabled: { | ||
85 | enumerable: true, | ||
86 | serializable: true, | ||
87 | get: function() { | ||
88 | return this._enabled; | ||
89 | }, | ||
90 | set: function(value) { | ||
91 | if(value !== this._enabled) | ||
92 | { | ||
93 | this._enabled = value; | ||
94 | this.needsDraw = true; | ||
95 | } | ||
96 | } | ||
97 | }, | ||
98 | |||
79 | handleChange: | 99 | handleChange: |
80 | { | 100 | { |
81 | value:function(event) | 101 | value:function(event) |
@@ -117,6 +137,7 @@ exports.Combobox = Montage.create(Component, { | |||
117 | } | 137 | } |
118 | this.element.appendChild(optionItem); | 138 | this.element.appendChild(optionItem); |
119 | } | 139 | } |
140 | this.element.disabled = !this._enabled; | ||
120 | } | 141 | } |
121 | } | 142 | } |
122 | }, | 143 | }, |
diff --git a/js/controllers/elements/shapes-controller.js b/js/controllers/elements/shapes-controller.js index 5efbccd0..3f1ccc3d 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,17 @@ 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; | ||
59 | default: | 71 | default: |
60 | CanvasController.setProperty(el, p, value); | 72 | CanvasController.setProperty(el, p, value); |
61 | } | 73 | } |
@@ -76,6 +88,7 @@ exports.ShapesController = Montage.create(CanvasController, { | |||
76 | case "fillMaterial": | 88 | case "fillMaterial": |
77 | case "border": | 89 | case "border": |
78 | case "background": | 90 | case "background": |
91 | case "useWebGl": | ||
79 | return this.getShapeProperty(el, p); | 92 | return this.getShapeProperty(el, p); |
80 | default: | 93 | default: |
81 | return CanvasController.getProperty(el, p); | 94 | return CanvasController.getProperty(el, p); |
@@ -275,6 +288,60 @@ exports.ShapesController = Montage.create(CanvasController, { | |||
275 | { | 288 | { |
276 | return (el.elementModel && el.elementModel.isShape); | 289 | return (el.elementModel && el.elementModel.isShape); |
277 | } | 290 | } |
291 | }, | ||
292 | |||
293 | toggleWebGlMode: { | ||
294 | value: function(el, useWebGl) | ||
295 | { | ||
296 | if(useWebGl) | ||
297 | { | ||
298 | this.convertToWebGlWorld(el); | ||
299 | } | ||
300 | else | ||
301 | { | ||
302 | this.convertTo2DWorld(el); | ||
303 | } | ||
304 | } | ||
305 | }, | ||
306 | |||
307 | convertToWebGlWorld: { | ||
308 | value: function(el) | ||
309 | { | ||
310 | if(el.elementModel.shapeModel.useWebGl) | ||
311 | { | ||
312 | return; | ||
313 | } | ||
314 | var world, | ||
315 | worldData = el.elementModel.shapeModel.GLWorld.export(); | ||
316 | if(worldData) | ||
317 | { | ||
318 | world = new GLWorld(el, true); | ||
319 | el.elementModel.shapeModel.GLWorld = world; | ||
320 | el.elementModel.shapeModel.useWebGl = true; | ||
321 | world.import(worldData); | ||
322 | } | ||
323 | |||
324 | } | ||
325 | }, | ||
326 | |||
327 | convertTo2DWorld: { | ||
328 | value: function(el) | ||
329 | { | ||
330 | if(!el.elementModel.shapeModel.useWebGl) | ||
331 | { | ||
332 | return; | ||
333 | } | ||
334 | var world, | ||
335 | worldData = el.elementModel.shapeModel.GLWorld.export(); | ||
336 | if(worldData) | ||
337 | { | ||
338 | world = new GLWorld(el, false); | ||
339 | el.elementModel.shapeModel.GLWorld = world; | ||
340 | el.elementModel.shapeModel.useWebGl = false; | ||
341 | world.import(worldData); | ||
342 | } | ||
343 | |||
344 | } | ||
278 | } | 345 | } |
279 | 346 | ||
280 | }); | 347 | }); |
diff --git a/js/data/pi/pi-data.js b/js/data/pi/pi-data.js index dd75e255..901ca37f 100644 --- a/js/data/pi/pi-data.js +++ b/js/data/pi/pi-data.js | |||
@@ -369,12 +369,23 @@ exports.PiData = Montage.create( Montage, { | |||
369 | Section: [ | 369 | Section: [ |
370 | [ | 370 | [ |
371 | { | 371 | { |
372 | type: "checkbox", | ||
373 | id: "useWebGl", | ||
374 | prop: "useWebGl", | ||
375 | defaultValue: false, | ||
376 | value: "Use WebGL", | ||
377 | checked: false | ||
378 | } | ||
379 | ], | ||
380 | [ | ||
381 | { | ||
372 | type: "dropdown", | 382 | type: "dropdown", |
373 | id: "strokeMaterial", | 383 | id: "strokeMaterial", |
374 | prop: "strokeMaterial", | 384 | prop: "strokeMaterial", |
375 | label: "Stroke", | 385 | label: "Stroke", |
376 | labelField: "_name", | 386 | labelField: "_name", |
377 | items : { boundObject: "this.application.ninja.appModel", boundProperty: "materials" }, | 387 | items : { boundObject: "this.application.ninja.appModel", boundProperty: "materials" }, |
388 | enabled: { boundObject: "this.controls", boundProperty: "useWebGl" }, | ||
378 | divider : true | 389 | divider : true |
379 | } | 390 | } |
380 | ], | 391 | ], |
@@ -385,7 +396,8 @@ exports.PiData = Montage.create( Montage, { | |||
385 | prop: "fillMaterial", | 396 | prop: "fillMaterial", |
386 | label: "Fill", | 397 | label: "Fill", |
387 | labelField: "_name", | 398 | labelField: "_name", |
388 | items : { boundObject: "this.application.ninja.appModel", boundProperty: "materials" } | 399 | items : { boundObject: "this.application.ninja.appModel", boundProperty: "materials" }, |
400 | enabled: { boundObject: "this.controls", boundProperty: "useWebGl" } | ||
389 | } | 401 | } |
390 | ] | 402 | ] |
391 | ] | 403 | ] |
@@ -434,11 +446,22 @@ exports.PiData = Montage.create( Montage, { | |||
434 | Section: [ | 446 | Section: [ |
435 | [ | 447 | [ |
436 | { | 448 | { |
449 | type: "checkbox", | ||
450 | id: "useWebGl", | ||
451 | prop: "useWebGl", | ||
452 | defaultValue: false, | ||
453 | value: "Use WebGL", | ||
454 | checked: false | ||
455 | } | ||
456 | ], | ||
457 | [ | ||
458 | { | ||
437 | type: "dropdown", | 459 | type: "dropdown", |
438 | id: "stroke", | 460 | id: "stroke", |
439 | label: "Stroke", | 461 | label: "Stroke", |
440 | labelField: "_name", | 462 | labelField: "_name", |
441 | items : { boundObject: "this.application.ninja.appModel", boundProperty: "materials" } | 463 | items : { boundObject: "this.application.ninja.appModel", boundProperty: "materials" }, |
464 | enabled: { boundObject: "this.controls", boundProperty: "useWebGl" } | ||
442 | } |