diff options
Diffstat (limited to 'js/lib')
-rwxr-xr-x | js/lib/NJUtils.js | 112 | ||||
-rwxr-xr-x | js/lib/drawing/world.js | 6 | ||||
-rwxr-xr-x | js/lib/geom/brush-stroke.js | 2 | ||||
-rwxr-xr-x | js/lib/geom/circle.js | 1433 | ||||
-rwxr-xr-x | js/lib/geom/geom-obj.js | 852 | ||||
-rwxr-xr-x | js/lib/geom/line.js | 914 | ||||
-rwxr-xr-x | js/lib/geom/rectangle.js | 1409 | ||||
-rwxr-xr-x | js/lib/geom/sub-path.js | 2 |
8 files changed, 2487 insertions, 2243 deletions
diff --git a/js/lib/NJUtils.js b/js/lib/NJUtils.js index dae128e4..5aaeb5f2 100755 --- a/js/lib/NJUtils.js +++ b/js/lib/NJUtils.js | |||
@@ -5,16 +5,15 @@ 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 | Uuid = require("montage/core/uuid").Uuid, | 9 | Uuid = require("montage/core/uuid").Uuid, |
9 | ElementModel = require("js/models/element-model").ElementModel, | 10 | ElementModel = require("js/models/element-model").ElementModel, |
10 | Properties3D = require("js/models/properties-3d").Properties3D, | 11 | Properties3D = require("js/models/properties-3d").Properties3D, |
11 | ShapeModel = require("js/models/shape-model").ShapeModel, | 12 | ShapeModel = require("js/models/shape-model").ShapeModel, |
12 | ControllerFactory = require("js/controllers/elements/controller-factory").ControllerFactory; | 13 | ControllerFactory = require("js/controllers/elements/controller-factory").ControllerFactory; |
13 | 14 | ||
14 | exports.NJUtils = Object.create(Object.prototype, { | 15 | exports.NJUtils = Montage.create(Component, { |
15 | 16 | ||
16 | |||
17 | |||
18 | /* =============== DOM Access ================ */ | 17 | /* =============== DOM Access ================ */ |
19 | 18 | ||
20 | ///// Quick "getElementById" | 19 | ///// Quick "getElementById" |
@@ -54,13 +53,25 @@ exports.NJUtils = Object.create(Object.prototype, { | |||
54 | return document.createTextNode(text); | 53 | return document.createTextNode(text); |
55 | } | 54 | } |
56 | }, | 55 | }, |
57 | 56 | ||
58 | ///// Quick "createElement" function "attr" can be classname or object | 57 | ///// Quick "createElement" function "attr" can be classname or object |
59 | ///// with attribute key/values | 58 | ///// with attribute key/values |
60 | ///// Suppor for data attributes | 59 | ///// Support for data attributes |
61 | make : { | 60 | ///// Support user/ninja document |
62 | value: function(tag, attr) { | 61 | make: { |
63 | var el = document.createElement(tag); | 62 | value: function(tag, attr, doc) { |
63 | var _doc, el; | ||
64 | |||
65 | _doc = doc ? doc._document : document; | ||
66 | el = _doc.createElement(tag); | ||
67 | this.decor(el, attr); | ||
68 | |||
69 | return el; | ||
70 | } | ||
71 | }, | ||
72 | |||
73 | decor: { | ||
74 | value: function(el, attr) { | ||
64 | if (typeof attr === 'object') { | 75 | if (typeof attr === 'object') { |
65 | for (var a in attr) { | 76 | for (var a in attr) { |
66 | if (attr.hasOwnProperty(a)) { | 77 | if (attr.hasOwnProperty(a)) { |
@@ -74,19 +85,82 @@ exports.NJUtils = Object.create(Object.prototype, { | |||
74 | } else if (typeof attr === 'string') { | 85 | } else if (typeof attr === 'string') { |
75 | el.className = (el.className + ' ' + attr).trim(); | 86 | el.className = (el.className + ' ' + attr).trim(); |
76 | } | 87 | } |
77 | |||
78 | return el; | ||
79 | } | 88 | } |
80 | }, | 89 | }, |
81 | 90 | ||
82 | ///// Element factory function for Ninja Elements | 91 | createModel: { |
83 | ///// selection is the string displayed in the PI | 92 | value: function(el) { |
84 | makeNJElement: { | 93 | el.elementModel = Montage.create(ElementModel).initialize(el); |
85 | value: function(tag, selection, controller, attr, isShape) { | 94 | } |
86 | var el = this.make(tag, attr); | 95 | }, |
87 | this.makeElementModel(el, selection, controller, isShape); | ||
88 | 96 | ||
89 | return el; | 97 | createModelWithShape: { |
98 | value: function(el, selection) { | ||
99 | el.elementModel = Montage.create(ElementModel).initialize(el, true, selection); | ||
100 | } | ||
101 | }, | ||
102 | |||
103 | createModelWithSelection: { | ||
104 | value: function(el, selection) { | ||
105 | el.elementModel = Montage.create(ElementModel).initialize(el, false, selection); | ||
106 | } | ||
107 | }, | ||
108 | |||
109 | createModelForComponent: { | ||
110 | value: function(el, selection) { | ||
111 | el.elementModel = Montage.create(ElementModel).initialize(el, false, selection, true); | ||
112 | } | ||
113 | }, | ||
114 | |||
115 | // TODO: Find a better place for this method | ||
116 | stylesFromDraw: { | ||
117 | value: function(element, width, height, drawData, pos) { | ||
118 | var styles = {}; | ||
119 | |||
120 | styles['position'] = pos ? pos: "absolute"; | ||
121 | styles['left'] = (Math.round(drawData.midPt[0] - 0.5 * width)) - this.application.ninja.currentSelectedContainer.offsetLeft + 'px'; | ||
122 | styles['top'] = (Math.round(drawData.midPt[1] - 0.5 * height)) - this.application.ninja.currentSelectedContainer.offsetTop + 'px'; | ||
123 | styles['width'] = width + 'px'; | ||
124 | styles['height'] = height + 'px'; | ||
125 | |||
126 | // TODO: Check why Canvas has different tranform styles from default. | ||
127 | if(!MathUtils.isIdentityMatrix(drawData.planeMat)) { | ||
128 | styles['-webkit-transform-style'] = 'preserve-3d'; | ||
129 | styles['-webkit-transform'] = this.getElementMatrix(drawData.planeMat, drawData.midPt); | ||
130 | } | ||
131 | |||
132 | if(element.nodeName === "CANVAS") { | ||
133 | element.width = width; | ||
134 | element.height = height; | ||
135 | delete styles['width']; | ||
136 | delete styles['height']; | ||
137 | |||
138 | styles['-webkit-transform-style'] = 'preserve-3d'; | ||
139 | } | ||
140 | |||
141 | return styles; | ||
142 | } | ||
143 | }, | ||
144 | |||
145 | // Get the matrix for the actual element being added to the user document. | ||
146 | // TODO: Find a better place for this method | ||
147 | getElementMatrix: { | ||
148 | value: function(planeMat, midPt) { | ||
149 | var divMat, flatMat, flatMatSafe; | ||
150 | // we should not need to worry about divide by zero below since we snapped to the point | ||
151 | divMat = planeMat.slice(0); | ||
152 | divMat[12] = 0.0; | ||
153 | divMat[13] = 0.0; | ||
154 | //divMat[14] = 0.0; | ||
155 | divMat[14] = midPt[2]; | ||
156 | |||
157 | // set the left and top of the element such that the center of the rectangle is at the mid point | ||
158 | this.application.ninja.stage.setStageAsViewport(); | ||
159 | |||
160 | flatMat = divMat; | ||
161 | flatMatSafe = MathUtils.scientificToDecimal(flatMat, 10); | ||
162 | |||
163 | return "matrix3d(" + flatMatSafe + ")"; | ||
90 | } | 164 | } |
91 | }, | 165 | }, |
92 | 166 | ||
@@ -94,8 +168,6 @@ exports.NJUtils = Object.create(Object.prototype, { | |||
94 | ///// TODO: find a different place for this function | 168 | ///// TODO: find a different place for this function |
95 | makeElementModel: { | 169 | makeElementModel: { |
96 | value: function(el, selection, controller, isShape) { | 170 | value: function(el, selection, controller, isShape) { |
97 | //el.elementModel = Montage.create(ElementModel).initialize(el.nodeName, selection, controller, isShape); | ||
98 | |||
99 | var p3d = Montage.create(Properties3D); | 171 | var p3d = Montage.create(Properties3D); |
100 | 172 | ||
101 | var shapeProps = null; | 173 | var shapeProps = null; |
diff --git a/js/lib/drawing/world.js b/js/lib/drawing/world.js index 7ce23921..0dde9af4 100755 --- a/js/lib/drawing/world.js +++ b/js/lib/drawing/world.js | |||
@@ -874,17 +874,17 @@ World.prototype.importObjectJSON = function( jObj, parentGeomObj ) | |||
874 | switch (type) | 874 | switch (type) |
875 | { | 875 | { |
876 | case 1: | 876 | case 1: |
877 | obj = new Rectangle(); | 877 | obj = Object.create(Rectangle, {}); |
878 | obj.importJSON( jObj ); | 878 | obj.importJSON( jObj ); |
879 | break; | 879 | break; |
880 | 880 | ||
881 | case 2: // circle | 881 | case 2: // circle |
882 | obj = new Circle(); | 882 | obj = Object.create(Circle, {}); |
883 | obj.importJSON( jObj ); | 883 | obj.importJSON( jObj ); |
884 | break; | 884 | break; |
885 | 885 | ||
886 | case 3: // line | 886 | case 3: // line |
887 | obj = new Line(); | 887 | obj = Object.create(Line, {}); |
888 | obj.importJSON( jObj ); | 888 | obj.importJSON( jObj ); |
889 | break; | 889 | break; |
890 | 890 | ||
diff --git a/js/lib/geom/brush-stroke.js b/js/lib/geom/brush-stroke.js index 1fae0c1d..6facdd5d 100755 --- a/js/lib/geom/brush-stroke.js +++ b/js/lib/geom/brush-stroke.js | |||
@@ -768,7 +768,7 @@ var BrushStroke = function GLBrushStroke() { | |||
768 | 768 | ||
769 | }; //function BrushStroke ...class definition | 769 | }; //function BrushStroke ...class definition |
770 | 770 | ||
771 | BrushStroke.prototype = new GeomObj(); | 771 | BrushStroke.prototype = Object.create(GeomObj, {}); |
772 | 772 | ||
773 | BrushStroke.prototype._CatmullRomSplineInterpolate = function(ctrlPts, t) | 773 | BrushStroke.prototype._CatmullRomSplineInterpolate = function(ctrlPts, t) |
774 | { | 774 | { |
diff --git a/js/lib/geom/circle.js b/js/lib/geom/circle.js index 0f1f49a9..425b869a 100755 --- a/js/lib/geom/circle.js +++ b/js/lib/geom/circle.js | |||
@@ -4,9 +4,9 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot | |||
4 | (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. | 4 | (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. |
5 | </copyright> */ | 5 | </copyright> */ |
6 | 6 | ||
7 | var GeomObj = require("js/lib/geom/geom-obj").GeomObj; | 7 | var GeomObj = require("js/lib/geom/geom-obj").GeomObj; |
8 | var ShapePrimitive = require("js/lib/geom/shape-primitive").ShapePrimitive; | 8 | var ShapePrimitive = require("js/lib/geom/shape-primitive").ShapePrimitive; |
9 | var MaterialsModel = require("js/models/materials-model").MaterialsModel; | 9 | var MaterialsModel = require("js/models/materials-model").MaterialsModel; |
10 | var drawUtils = require("js/helper-classes/3D/draw-utils").DrawUtils; | 10 | var drawUtils = require("js/helper-classes/3D/draw-utils").DrawUtils; |
11 | var vecUtils = require("js/helper-classes/3D/vec-utils").VecUtils; | 11 | var vecUtils = require("js/helper-classes/3D/vec-utils").VecUtils; |
12 | 12 | ||
@@ -16,744 +16,790 @@ var vecUtils = require("js/helper-classes/3D/vec-utils").VecUtils; | |||
16 | // Derived from class GLGeomObj | 16 | // Derived from class GLGeomObj |
17 | // The position and dimensions of the stroke, fill, and inner Radius should be in pixels | 17 | // The position and dimensions of the stroke, fill, and inner Radius should be in pixels |
18 | /////////////////////////////////////////////////////////////////////// | 18 | /////////////////////////////////////////////////////////////////////// |
19 | var Circle = function GLCircle() { | 19 | exports.Circle = Object.create(GeomObj, { |
20 | 20 | ||
21 | this.init = function( world, xOffset, yOffset, width, height, strokeSize, strokeColor, fillColor, innerRadius, strokeMaterial, fillMaterial, strokeStyle) { | 21 | /////////////////////////////////////////////////////////////////////// |
22 | /////////////////////////////////////////////////////////////////////// | 22 | // Instance variables |