aboutsummaryrefslogtreecommitdiff
path: root/js/lib
diff options
context:
space:
mode:
Diffstat (limited to 'js/lib')
-rwxr-xr-xjs/lib/NJUtils.js112
-rwxr-xr-xjs/lib/drawing/world.js6
-rwxr-xr-xjs/lib/geom/brush-stroke.js2
-rwxr-xr-xjs/lib/geom/circle.js1433
-rwxr-xr-xjs/lib/geom/geom-obj.js897
-rwxr-xr-xjs/lib/geom/line.js914
-rwxr-xr-xjs/lib/geom/rectangle.js1407
-rwxr-xr-xjs/lib/geom/sub-path.js2
8 files changed, 2505 insertions, 2268 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
7var Montage = require("montage/core/core").Montage, 7var 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
14exports.NJUtils = Object.create(Object.prototype, { 15exports.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 23e24347..b46a002b 100755
--- a/js/lib/drawing/world.js
+++ b/js/lib/drawing/world.js
@@ -993,17 +993,17 @@ World.prototype.importObjectJSON = function( jObj, parentGeomObj )
993 switch (type) 993 switch (type)
994 { 994 {
995 case 1: 995 case 1:
996 obj = new Rectangle(); 996 obj = Object.create(Rectangle, {});
997 obj.importJSON( jObj ); 997 obj.importJSON( jObj );
998 break; 998 break;
999 999
1000 case 2: // circle 1000 case 2: // circle
1001 obj = new Circle(); 1001 obj = Object.create(Circle, {});
1002 obj.importJSON( jObj ); 1002 obj.importJSON( jObj );
1003 break; 1003 break;
1004 1004
1005 case 3: // line 1005 case 3: // line
1006 obj = new Line(); 1006 obj = Object.create(Line, {});
1007 obj.importJSON( jObj ); 1007 obj.importJSON( jObj );
1008 break; 1008 break;
1009 1009
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
771BrushStroke.prototype = new GeomObj(); 771BrushStroke.prototype = Object.create(GeomObj, {});
772 772
773BrushStroke.prototype._CatmullRomSplineInterpolate = function(ctrlPts, t) 773BrushStroke.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
7var GeomObj = require("js/lib/geom/geom-obj").GeomObj; 7var GeomObj = require("js/lib/geom/geom-obj").GeomObj;
8var ShapePrimitive = require("js/lib/geom/shape-primitive").ShapePrimitive; 8var ShapePrimitive = require("js/lib/geom/shape-primitive").ShapePrimitive;
9var MaterialsModel = require("js/models/materials-model").MaterialsModel; 9var MaterialsModel = require("js/models/materials-model").MaterialsModel;
10var drawUtils = require("js/helper-classes/3D/draw-utils").DrawUtils; 10var drawUtils = require("js/helper-classes/3D/draw-utils").DrawUtils;
11var vecUtils = require("js/helper-classes/3D/vec-utils").VecUtils; 11var 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///////////////////////////////////////////////////////////////////////
19var Circle = function GLCircle() { 19exports.Circle = Object.create(GeomObj, {
20 20
21 this.init = function( world, xOffset, yOffset, width, height, strokeSize, strokeColor, fillColor, innerRadius, strokeMaterial, fillMaterial, strokeStyle) { 21 ///////////////////////////////////////////////////////