diff options
Diffstat (limited to 'js/controllers/elements/element-controller.js')
-rwxr-xr-x | js/controllers/elements/element-controller.js | 128 |
1 files changed, 99 insertions, 29 deletions
diff --git a/js/controllers/elements/element-controller.js b/js/controllers/elements/element-controller.js index 20225c61..4a02e9a3 100755 --- a/js/controllers/elements/element-controller.js +++ b/js/controllers/elements/element-controller.js | |||
@@ -5,12 +5,16 @@ 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 | Component = require("montage/ui/component").Component; | 8 | Component = require("montage/ui/component").Component, |
9 | njModule = require("js/lib/NJUtils"); | ||
9 | 10 | ||
10 | exports.ElementController = Montage.create(Component, { | 11 | exports.ElementController = Montage.create(Component, { |
11 | 12 | ||
12 | addElement: { | 13 | addElement: { |
13 | value: function(el, styles) { | 14 | value: function(el, styles) { |
15 | |||
16 | if (el.getAttribute) el.setAttribute('data-ninja-node', 'true'); | ||
17 | |||
14 | if(this.application.ninja.timeline.currentLayerSelected) { | 18 | if(this.application.ninja.timeline.currentLayerSelected) { |
15 | var selectedLayerIndex = this.application.ninja.timeline.getLayerIndexByID(this.application.ninja.timeline.currentLayerSelected.layerData.layerID); | 19 | var selectedLayerIndex = this.application.ninja.timeline.getLayerIndexByID(this.application.ninja.timeline.currentLayerSelected.layerData.layerID); |
16 | 20 | ||
@@ -33,7 +37,7 @@ exports.ElementController = Montage.create(Component, { | |||
33 | // Remove the element from the DOM and clear the GLWord. | 37 | // Remove the element from the DOM and clear the GLWord. |
34 | removeElement: { | 38 | removeElement: { |
35 | value: function(el) { | 39 | value: function(el) { |
36 | if(el.elementModel && el.elementModel.shapeModel && el.elementModel.shapeModel.GLWorld) { | 40 | if(el.elementModel.shapeModel && el.elementModel.shapeModel.GLWorld) { |
37 | el.elementModel.shapeModel.GLWorld.clearTree(); | 41 | el.elementModel.shapeModel.GLWorld.clearTree(); |
38 | } | 42 | } |
39 | el.parentNode.removeChild(el); | 43 | el.parentNode.removeChild(el); |
@@ -159,28 +163,12 @@ exports.ElementController = Montage.create(Component, { | |||
159 | el.elementModel.stroke = null; | 163 | el.elementModel.stroke = null; |
160 | return; | 164 | return; |
161 | case 'gradient': | 165 | case 'gradient': |
162 | this.setProperty(el, "border-image", color.color.css); | 166 | this.setGradientBorder(el, color.color.gradientMode, color.color.css); |
163 | this.setProperty(el, "border-color", "none"); | ||
164 | if(color.borderInfo) { | ||
165 | if(color.borderInfo.borderWidth) { | ||
166 | this.setProperty(el, "border-width", color.borderInfo.borderWidth + color.borderInfo.borderUnits); | ||
167 | } | ||
168 | if(color.borderInfo.borderStyle) { | ||
169 | this.setProperty(el, "border-style", color.borderInfo.borderStyle); | ||
170 | } | ||
171 | } | ||
172 | break; | 167 | break; |
173 | default: | 168 | default: |
174 | this.setProperty(el, "border-image", "none"); | 169 | this.setProperty(el, "border-image", "none"); |
170 | this.setProperty(el, "border-image-slice", ""); | ||
175 | this.setProperty(el, "border-color", color.color.css); | 171 | this.setProperty(el, "border-color", color.color.css); |
176 | if(color.borderInfo) { | ||
177 | if(color.borderInfo.borderWidth) { | ||
178 | this.setProperty(el, "border-width", color.borderInfo.borderWidth + color.borderInfo.borderUnits); | ||
179 | } | ||
180 | if(color.borderInfo.borderStyle) { | ||
181 | this.setProperty(el, "border-style", color.borderInfo.borderStyle); | ||
182 | } | ||
183 | } | ||
184 | } | 172 | } |
185 | } | 173 | } |
186 | el.elementModel.stroke = color; | 174 | el.elementModel.stroke = color; |
@@ -188,26 +176,108 @@ exports.ElementController = Montage.create(Component, { | |||
188 | } | 176 | } |
189 | }, | 177 | }, |
190 | 178 | ||
179 | setGradientBorder: { | ||
180 | value: function(el, gradientMode, css) { | ||
181 | if(gradientMode === "radial") { | ||
182 | this.setProperty(el, "border-image", css.replace("ellipse", "circle")); | ||
183 | } else { | ||
184 | this.setProperty(el, "border-image", css); | ||
185 | } | ||
186 | this.setProperty(el, "border-color", "none"); | ||
187 | // gradient slice = borderWidth/totalWidth | ||
188 | var b = parseInt(this.getProperty(el, "border-left-width", true)), | ||
189 | w = parseInt(this.getProperty(el, "width", true)), | ||
190 | h = parseInt(this.getProperty(el, "height", true)); | ||
191 | if(h > w) { | ||
192 | w = h; | ||
193 | } | ||
194 | this.setProperty(el, "border-image-slice", Math.floor(b/(w+b+b) * 100) + "%"); | ||
195 | } | ||
196 | }, | ||
197 | |||
191 | getStroke: { | 198 | getStroke: { |
192 | value: function(el) { | 199 | value: function(el, stroke) { |
193 | // TODO - Need to figure out which border side user wants | 200 | var strokeInfo = {}, |
194 | return this.application.ninja.stylesController.getElementStyle(el, "border"); | 201 | color, |
202 | borderWidth, | ||
203 | border; | ||
204 | if(stroke.colorInfo) { | ||
205 | strokeInfo.colorInfo = {}; | ||
206 | color = this.getColor(el, false); | ||
207 | if(color && color.color) { | ||
208 | strokeInfo.colorInfo.mode = color.mode; | ||
209 | strokeInfo.colorInfo.color = color.color; | ||
210 | } else { | ||
211 | strokeInfo.colorInfo.mode = "nocolor"; | ||
212 | strokeInfo.colorInfo.color = null; | ||
213 | } | ||
214 | } | ||
215 | if(stroke.borderInfo) { | ||
216 | // TODO - Need to figure out which border side user wants | ||
217 | strokeInfo.borderInfo = {}; | ||
218 | if(stroke.borderInfo.borderWidth) { | ||
219 | borderWidth = this.getProperty(el, "border-width"); | ||
220 | if(borderWidth) { | ||
221 | border = njModule.NJUtils.getValueAndUnits(borderWidth); | ||
222 | strokeInfo.borderInfo.borderWidth = border[0]; | ||
223 | strokeInfo.borderInfo.borderUnits = border[1]; | ||
224 | } | ||
225 | } | ||
226 | if(stroke.borderInfo.borderStyle) { | ||
227 | strokeInfo.borderInfo.borderStyle = this.getProperty(el, "border-style"); | ||
228 | } | ||
229 | } | ||
230 | return strokeInfo; | ||
195 | } | 231 | } |
196 | }, | 232 | }, |
197 | 233 | ||
198 | setStroke: { | 234 | setStroke: { |
199 | value: function(el, stroke) { | 235 | value: function(el, stroke) { |
200 | this.application.ninja.stylesController.setElementStyle(el, "border-width", stroke.borderWidth + stroke.borderUnits); | 236 | if(stroke.borderInfo) { |
201 | this.application.ninja.stylesController.setElementStyle(el, "border-style", stroke.borderStyle); | 237 | if(stroke.borderInfo.borderWidth) { |
202 | this.setColor(el, stroke.color, false); | 238 | this.application.ninja.stylesController.setElementStyle(el, "border-width", stroke.borderInfo.borderWidth + stroke.borderInfo.borderUnits); |
239 | } | ||
240 | if(stroke.borderInfo.borderStyle) { | ||
241 | this.application.ninja.stylesController.setElementStyle(el, "border-style", stroke.borderInfo.borderStyle); | ||
242 | } | ||
243 | } | ||
244 | if(stroke.colorInfo) { | ||
245 | this.setColor(el, stroke.colorInfo, false); | ||
246 | } | ||
247 | } | ||
248 | }, | ||
249 | |||
250 | getFill: { | ||
251 | value: function(el, fill) { | ||
252 | var fillInfo = {}, | ||
253 | color; | ||
254 | if(fill.colorInfo) { | ||
255 | fillInfo.colorInfo = {}; | ||
256 | color = this.getColor(el, true); | ||
257 | if(color && color.color) { | ||
258 | fillInfo.colorInfo.mode = color.mode; | ||
259 | fillInfo.colorInfo.color = color.color; | ||
260 | } else { | ||
261 | fillInfo.colorInfo.mode = "nocolor"; | ||
262 | fillInfo.colorInfo.color = null; | ||
263 | } | ||
264 | } | ||
265 | return fillInfo; | ||
203 | } | 266 | } |
204 | }, | 267 | }, |
205 | 268 | ||
269 | setFill: { | ||
270 | value: function(el, fill) { | ||
271 | if(fill.colorInfo) { | ||
272 | this.setColor(el, fill.colorInfo, true); | ||
273 | } | ||
274 | } | ||
275 | }, | ||
206 | //-------------------------------------------------------------------------------------------------------- | 276 | //-------------------------------------------------------------------------------------------------------- |
207 | // Routines to get/set 3D properties | 277 | // Routines to get/set 3D properties |
208 | get3DProperty: { | 278 | get3DProperty: { |
209 | value: function(el, prop) { | 279 | value: function(el, prop) { |
210 | if(el.elementModel && el.elementModel.props3D) { | 280 | if(el.elementModel.props3D) { |
211 | return el.elementModel.props3D[prop]; | 281 | return el.elementModel.props3D[prop]; |
212 | } | 282 | } |
213 | } | 283 | } |
@@ -215,7 +285,7 @@ exports.ElementController = Montage.create(Component, { | |||
215 | 285 | ||
216 | getMatrix: { | 286 | getMatrix: { |
217 | value: function(el) { | 287 | value: function(el) { |
218 | if(el.elementModel && el.elementModel.props3D && el.elementModel.props3D.matrix3d) { | 288 | if(el.elementModel.props3D && el.elementModel.props3D.matrix3d) { |
219 | return el.elementModel.props3D.matrix3d.slice(0); | 289 | return el.elementModel.props3D.matrix3d.slice(0); |
220 | } else { | 290 | } else { |
221 | var mat; | 291 | var mat; |
@@ -235,7 +305,7 @@ exports.ElementController = Montage.create(Component, { | |||
235 | 305 | ||
236 | getPerspectiveDist: { | 306 | getPerspectiveDist: { |
237 | value: function(el) { | 307 | value: function(el) { |
238 | if(el.elementModel && el.elementModel.props3D && el.elementModel.props3D.perspectiveDist) { | 308 | if(el.elementModel.props3D && el.elementModel.props3D.perspectiveDist) { |
239 | return el.elementModel.props3D.perspectiveDist; |