diff options
Diffstat (limited to 'js/controllers/elements/shapes-controller.js')
-rwxr-xr-x | js/controllers/elements/shapes-controller.js | 132 |
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 | ||
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 | 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 | }); |