aboutsummaryrefslogtreecommitdiff
path: root/js/controllers/elements/stage-controller.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/controllers/elements/stage-controller.js')
-rw-r--r--js/controllers/elements/stage-controller.js125
1 files changed, 125 insertions, 0 deletions
diff --git a/js/controllers/elements/stage-controller.js b/js/controllers/elements/stage-controller.js
new file mode 100644
index 00000000..b8170826
--- /dev/null
+++ b/js/controllers/elements/stage-controller.js
@@ -0,0 +1,125 @@
1/* <copyright>
2This file contains proprietary software owned by Motorola Mobility, Inc.<br/>
3No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/>
4(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
5</copyright> */
6
7var Montage = require("montage/core/core").Montage,
8 ElementController = require("js/controllers/elements/element-controller").ElementController;
9
10exports.StageController = Montage.create(ElementController, {
11
12 // TODO - This is a simple routine, may not always be correct
13 _isRotated: {
14 value: function(mat) {
15
16 if(mat[1] !== 0) return true;
17 if(mat[2] !== 0) return true;
18 if(mat[3] !== 0) return true;
19
20 if(mat[4] !== 0) return true;
21
22 if(mat[6] !== 0) return true;
23 if(mat[7] !== 0) return true;
24
25 if(mat[8] !== 0) return true;
26 if(mat[9] !== 0) return true;
27
28 if(mat[11] !== 0) return true;
29
30 return false;
31 }
32 },
33
34 // TODO - perspective distance needs to be passed in as "dist" and matrix3d needs to be passed in as "mat"
35 set3DProperties: {
36 value: function(el, props, index, update3DModel) {
37 var dist = props[index]["dist"],
38 mat = props[index]["mat"];
39 this.application.ninja.stylesController.setElementStyle(el,
40 "-webkit-transform",
41 "perspective(" + dist + ") " +
42 "matrix3d(" + MathUtils.scientificToDecimal(mat, 5) + ")",
43 true);
44
45 el.elementModel.props3D.matrix3d = mat;
46 el.elementModel.props3D.perspectiveDist = dist;
47
48 // TODO - Move this to matrix class
49 if(this._isRotated(mat))
50 {
51 this.application.ninja.currentDocument.stageBG.style.display = "none";
52 }
53 else
54 {
55 this.application.ninja.stylesController.setElementStyle(this.application.ninja.currentDocument.stageBG,
56 "-webkit-transform",
57 "perspective(" + dist + ") " +
58 "matrix3d(" + MathUtils.scientificToDecimal(mat, 5) + ")",
59 true);
60
61 this.application.ninja.currentDocument.stageBG.elementModel.props3D.matrix3d = mat;
62 this.application.ninja.currentDocument.stageBG.elementModel.props3D.perspectiveDist = dist;
63 this.application.ninja.currentDocument.stageBG.style.display = "block";
64 }
65
66 this.application.ninja.stage.updatedStage = true;
67
68 if(update3DModel)
69 {
70 this._update3DProperties(el, mat, dist);
71 }
72 }
73 },
74
75 getProperty: {
76 value: function(el, p) {
77 switch(p) {
78 case "border":
79 return el.elementModel.stageView.style.getProperty(p);
80 case "height":
81 return el.elementModel.stageDimension.style.getProperty(p);
82 case "width":
83 return el.elementModel.stageDimension.style.getProperty(p);
84 default:
85 return ElementController.getProperty(el, p, false, true);
86 //console.log("Undefined Stage property ", p);
87 }
88 }
89 },
90
91 setProperty: {
92 value: function(el, p, value) {
93 switch(p) {
94 case "background":
95 el.elementModel.body.style.setProperty(p, value);
96 break;
97 case "overflow":
98 el.elementModel.viewPort.style.setProperty(p, value);
99 break;
100 case "width":
101 el.elementModel.stageDimension.style.setProperty(p, value);
102 break;
103 case "height":
104 el.elementModel.stageDimension.style.setProperty(p, value);
105 break;
106 default:
107 console.log("Undefined property ", p, "for the Stage Controller");
108 }
109 }
110 },
111
112 setAttribute: {
113 value: function(el, att, value) {
114 if(att === "id") {
115 el.elementModel.id = value;
116 }
117 }
118 },
119
120 changeSelector: {
121 value: function(el, rule, selector) {
122 el.elementModel.transitionStopRule.selectorText = selector;
123 }
124 }
125});