aboutsummaryrefslogtreecommitdiff
path: root/js/tools/BrushTool.js
diff options
context:
space:
mode:
authorJonathan Duran2012-02-29 13:23:30 -0800
committerJonathan Duran2012-02-29 13:23:30 -0800
commit59757653a5c49ac0db45c5d4f93e3493c1f08e44 (patch)
tree8193046c6b1dddaedfd59d954e862a734bfb0a93 /js/tools/BrushTool.js
parent681d55a9cdc4e790d9e1742dc13ce62e42b6a516 (diff)
downloadninja-59757653a5c49ac0db45c5d4f93e3493c1f08e44.tar.gz
Squashed commit of the following:
commit 2b9f63089534356607ad7e0ddde6f22e42d04f80 Merge: 98d491f a89e30a Author: Valerio Virgillito <valerio@motorola.com> Date: Wed Feb 29 12:12:11 2012 -0800 Merge pull request #88 from mqg734/ToolFixes Fix for performance issue when moving shapes. commit 98d491f7e57ff5a9b091e332d7d1e81061e39efa Merge: 052d980 d417b33 Author: Valerio Virgillito <valerio@motorola.com> Date: Wed Feb 29 12:10:57 2012 -0800 Merge branch 'SnapManagerFixes' of https://github.com/mqg734/ninja-internal into integration-candidate commit 052d9805a6f0a3a90d6849eb94eabffb7ec26962 Merge: 3d233f2 2f3e4d1 Author: Valerio Virgillito <valerio@motorola.com> Date: Wed Feb 29 12:10:03 2012 -0800 Merge branch 'integration-candidate' of github.com:Motorola-Mobility/ninja-internal into integration-candidate commit 3d233f25cff057fff5c5a75e4c4b40e88c22a8f5 Merge: 3dbe798 209e078 Author: Valerio Virgillito <valerio@motorola.com> Date: Wed Feb 29 12:09:43 2012 -0800 Merge branch 'NiveshColor' of https://github.com/mqg734/ninja-internal into integration-candidate commit 2f3e4d12aa15077d3cc9794862156e57b7815e68 Merge: 850f3a1 0996a51 Author: Valerio Virgillito <valerio@motorola.com> Date: Wed Feb 29 12:06:21 2012 -0800 Merge pull request #87 from joseeight/FileIO-Build-Candidate Fixes to preview caching issues commit 850f3a1f7ab81ec80b6de1c49f2d2bbcbfe87c8e Merge: 1568367 5f777eb Author: Valerio Virgillito <valerio@motorola.com> Date: Wed Feb 29 12:05:48 2012 -0800 Merge pull request #86 from imix23ways/Timeline Timeline commit 1568367213e760463f3ee29a531aa345fda6bd6d Merge: 3dbe798 271a8f2 Author: Valerio Virgillito <valerio@motorola.com> Date: Wed Feb 29 12:03:23 2012 -0800 Merge pull request #85 from pushkarjoshi/brushtool Brushtool commit a89e30ab834a48be32b6122e0c8ac1e0c3ed43e8 Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Wed Feb 29 11:58:28 2012 -0800 Fix for performance issue when moving shapes. We don't need to call render except if the geometry and materials change. This is more easy to see with shapes like the brush tool. Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com> commit 271a8f2b29d87d12c81d03e3f1e2c05b816a138d Author: Pushkar Joshi <pushkar@motorola.com> Date: Wed Feb 29 11:50:41 2012 -0800 prevent extremely long path rendering (temporary fix) commit 0996a519afccbed526912807c70c20d598e9cae7 Merge: 98f1cfc 03d277d Author: Jose Antonio Marquez <kgq387@motorola.com> Date: Wed Feb 29 11:46:59 2012 -0800 Merge branch 'refs/heads/FileIO' into FileIO-Build-Candidate commit 03d277db80b6cea9a25320c0575ae2bf7a6d7e6e Author: Jose Antonio Marquez <kgq387@motorola.com> Date: Wed Feb 29 11:46:44 2012 -0800 Preview Fix Adding save all logic before preview, temporary fix. commit 46fb52be241dced940d46629c809a09c86ed4438 Author: Pushkar Joshi <pushkar@motorola.com> Date: Wed Feb 29 11:38:33 2012 -0800 changed the registration point of the brush tool icon and added a temporary check to prevent extremely long brush strokes commit 98f1cfc58f545702a18166ab216362d667c18915 Merge: da83f44 bb3e42b Author: Jose Antonio Marquez <kgq387@motorola.com> Date: Wed Feb 29 11:29:09 2012 -0800 Merge branch 'refs/heads/FileIO' into FileIO-Build-Candidate commit bb3e42b531848b400670df6caf0f3ce02adf1243 Author: Jose Antonio Marquez <kgq387@motorola.com> Date: Wed Feb 29 11:28:58 2012 -0800 Fix: Caching issue with chrome tab API Using window.open to test movie. commit f000a3cced9adbfff1d7aa641e6eb42ad6edf7e8 Author: Pushkar Joshi <pushkar@motorola.com> Date: Wed Feb 29 10:21:06 2012 -0800 change in comment only commit 795329d2225ff3b760f7f0ea3bb6b5e68f6c6b5b Author: Jose Antonio Marquez <kgq387@motorola.com> Date: Wed Feb 29 10:07:53 2012 -0800 Making class level url template variable Created a class level variable for the URL to be parsed out of the user files. commit f931c48a7d0bcf1222cf05787e3294839ed0b9fb Author: Pushkar Joshi <pushkar@motorola.com> Date: Wed Feb 29 09:47:41 2012 -0800 resample the brush stroke so we don't have gaps if the path is drawn rapidly, and, allow to change the stroke color, and, more efficient stroke rendering by drawing translated radial gradients (instead of creating new gradients for each stroke sample) commit d417b3315f1aa6dd52fea10cbf5f17a213ef8726 Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Wed Feb 29 06:50:51 2012 -0800 SnapManager fixes for sag tags. Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com> commit 209e0781e926212bbaaad9e8ca4b61a0c389b30f Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Tue Feb 28 17:19:42 2012 -0800 We need to remove color buttons from the color model when updating the PI for selection change. Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com> commit b43efdcbfa671a46d1edaeb1555f508fe2ad0338 Merge: 16d6a90 f2ab699 Author: Pushkar Joshi <pushkar@motorola.com> Date: Tue Feb 28 14:55:08 2012 -0800 Merge branch 'pentool' into brushtool commit 16d6a90579cdafede931a9c818689fad2e622d8b Merge: 03ca7a5 63307c9 Author: Pushkar Joshi <pushkar@motorola.com> Date: Tue Feb 28 14:19:25 2012 -0800 Merge branch 'pentool' into brushtool commit 03ca7a5ed13c25faaa9100bb666e062fd15335e6 Merge: fcb12cc 053fc63 Author: Pushkar Joshi <pushkar@motorola.com> Date: Fri Feb 24 12:08:49 2012 -0800 Merge branch 'pentool' into brushtool Conflicts: imports/codemirror/mode/scheme/scheme.js js/tools/BrushTool.js commit fcb12cc09eb3cd3b42bd215877ba18f449275b75 Author: Pushkar Joshi <pushkar@motorola.com> Date: Fri Feb 10 14:16:56 2012 -0800 render the brush stroke as a sequence of rectangles, with each rectangle having its own linear gradient commit 6bb00e69713bd7131b2bc0a15e4e0cb6071d616c Merge: 5f42bd1 666ae3e Author: Pushkar Joshi <pushkar@motorola.com> Date: Thu Feb 9 13:42:59 2012 -0800 Merge branch 'master' into brushtool commit 5f42bd1f7723483d374cdd3fe51ef8298c86a1a2 Merge: abeb9f1 fba39db Author: Pushkar Joshi <pushkar@motorola.com> Date: Thu Feb 9 10:55:58 2012 -0800 Merge branch 'pentool' into brushtool commit abeb9f1e23679200bb2f4a3ccbcebfb37645975c Author: Pushkar Joshi <pushkar@motorola.com> Date: Thu Feb 9 10:45:50 2012 -0800 first phase of simple resampling to prevent tiny segments Signed-off-by: Jonathan Duran <jduran@motorola.com>
Diffstat (limited to 'js/tools/BrushTool.js')
-rw-r--r--[-rwxr-xr-x]js/tools/BrushTool.js194
1 files changed, 102 insertions, 92 deletions
diff --git a/js/tools/BrushTool.js b/js/tools/BrushTool.js
index 4d44326f..fec89eb2 100755..100644
--- a/js/tools/BrushTool.js
+++ b/js/tools/BrushTool.js
@@ -64,13 +64,40 @@ exports.BrushTool = Montage.create(ShapeTool, {
64 //start a new brush stroke 64 //start a new brush stroke
65 if (this._selectedBrushStroke === null){ 65 if (this._selectedBrushStroke === null){
66 this._selectedBrushStroke = new GLBrushStroke(); 66 this._selectedBrushStroke = new GLBrushStroke();
67 if (this.application.ninja.colorController.colorToolbar.stroke.webGlColor){
68 this._selectedBrushStroke.setStrokeColor(this.application.ninja.colorController.colorToolbar.stroke.webGlColor);
69 }
70 //add this point to the brush stroke in case the user does a mouse up before doing a mouse move
71 var currMousePos = this._getUnsnappedPosition(event.pageX, event.pageY);
72 this._selectedBrushStroke.addPoint(currMousePos);
73
74 //TODO get these values from the options
75 this._selectedBrushStroke.setStrokeWidth(20);
67 } 76 }
68 console.log("BrushTool Start");
69 NJevent("enableStageMove");//stageManagerModule.stageManager.enableMouseMove(); 77 NJevent("enableStageMove");//stageManagerModule.stageManager.enableMouseMove();
70 } //value: function (event) { 78 } //value: function (event) {
71 }, //HandleLeftButtonDown 79 }, //HandleLeftButtonDown
72 80
81 _getUnsnappedPosition: {
82 value: function(x,y){
83 var elemSnap = snapManager.elementSnapEnabled();
84 var gridSnap = snapManager.gridSnapEnabled();
85 var alignSnap = snapManager.snapAlignEnabled();
86
87 snapManager.enableElementSnap(false);
88 snapManager.enableGridSnap(false);
89 snapManager.enableSnapAlign(false);
73 90
91 var point = webkitConvertPointFromPageToNode(this.application.ninja.stage.canvas, new WebKitPoint(x,y));
92 var unsnappedpos = DrawingToolBase.getHitRecPos(snapManager.snap(point.x, point.y, false));
93
94 snapManager.enableElementSnap(elemSnap);
95 snapManager.enableGridSnap(gridSnap);
96 snapManager.enableSnapAlign(alignSnap);
97
98 return unsnappedpos;
99 }
100 },
74 //need to override this function because the ShapeTool's definition contains a clearDrawingCanvas call - Pushkar 101 //need to override this function because the ShapeTool's definition contains a clearDrawingCanvas call - Pushkar
75 // might not need to override once we draw using OpenGL instead of SVG 102 // might not need to override once we draw using OpenGL instead of SVG
76 // Also took out all the snapping code for now...need to add that back 103 // Also took out all the snapping code for now...need to add that back
@@ -84,20 +111,10 @@ exports.BrushTool = Montage.create(ShapeTool, {
84 } 111 }
85 112
86 if (this._isDrawing) { 113 if (this._isDrawing) {
87 snapManager.enableElementSnap(false); 114 var currMousePos = this._getUnsnappedPosition(event.pageX, event.pageY);
88 snapManager.enableGridSnap(false); 115 if (this._selectedBrushStroke && this._selectedBrushStroke.getNumPoints()<100){
89 snapManager.enableSnapAlign(false);
90 //this.doDraw(event);
91 //var currMousePos = this.getMouseUpPos();
92 //instead of doDraw call own DrawingTool
93 var point = webkitConvertPointFromPageToNode(this.application.ninja.stage.canvas, new WebKitPoint(event.pageX, event.pageY));
94 var hitRecSnapPoint = DrawingToolBase.getUpdatedSnapPointNoAppLevelEnabling(point.x, point.y, true, this.mouseDownHitRec);
95 var currMousePos = DrawingToolBase.getHitRecPos(hitRecSnapPoint);
96
97 if (this._selectedBrushStroke){
98 this._selectedBrushStroke.addPoint(currMousePos); 116 this._selectedBrushStroke.addPoint(currMousePos);
99 } 117 }
100
101 this.ShowCurrentBrushStrokeOnStage(); 118 this.ShowCurrentBrushStrokeOnStage();
102 } //if (this._isDrawing) { 119 } //if (this._isDrawing) {
103 120
@@ -123,12 +140,8 @@ exports.BrushTool = Montage.create(ShapeTool, {
123 140
124 this._isDrawing = false; 141 this._isDrawing = false;
125 this._hasDraw = false; 142 this._hasDraw = false;
126 console.log("BrushTool Stop");
127 143
128 //TODO get these values from the options 144
129 if (this._selectedBrushStroke){
130 this._selectedBrushStroke.setStrokeWidth(20);
131 }
132 //display the previously drawn stroke in a separate canvas 145 //display the previously drawn stroke in a separate canvas
133 this.RenderCurrentBrushStroke(); 146 this.RenderCurrentBrushStroke();
134 147
@@ -143,7 +156,7 @@ exports.BrushTool = Montage.create(ShapeTool, {
143 //clear the canvas before we draw anything else 156 //clear the canvas before we draw anything else
144 this.application.ninja.stage.clearDrawingCanvas(); 157 this.application.ninja.stage.clearDrawingCanvas();
145 if (this._selectedBrushStroke && this._selectedBrushStroke.getNumPoints()>0){ 158 if (this._selectedBrushStroke && this._selectedBrushStroke.getNumPoints()>0){
146 this._selectedBrushStroke.computeMetaGeometry(); 159 //this._selectedBrushStroke.computeMetaGeometry();
147 var ctx = this.application.ninja.stage.drawingContext;//stageManagerModule.stageManager.drawingContext; 160 var ctx = this.application.ninja.stage.drawingContext;//stageManagerModule.stageManager.drawingContext;
148 if (ctx === null) 161 if (ctx === null)
149 throw ("null drawing context in Brushtool::ShowCurrentBrushStrokeOnStage"); 162 throw ("null drawing context in Brushtool::ShowCurrentBrushStrokeOnStage");
@@ -192,92 +205,89 @@ exports.BrushTool = Montage.create(ShapeTool, {
192 205
193 206
194 RenderShape: { 207 RenderShape: {
195 value: function (w, h, planeMat, midPt, canvas) { 208 value: function (w, h, planeMat, midPt, canvas) {
196 if ((Math.floor(w) === 0) || (Math.floor(h) === 0)) { 209 if ((Math.floor(w) === 0) || (Math.floor(h) === 0)) {
197 return; 210 return;
198 } 211 }
199 212
200 var left = Math.round(midPt[0] - 0.5 * w); 213 var left = Math.round(midPt[0] - 0.5 * w);
201 var top = Math.round(midPt[1] - 0.5 * h); 214 var top = Math.round(midPt[1] - 0.5 * h);
202 215
203 if (!canvas) { 216 if (!canvas) {
204 var newCanvas = NJUtils.makeNJElement("canvas", "Brushstroke", "shape", {"data-RDGE-id": NJUtils.generateRandom()}, true); 217 var newCanvas = NJUtils.makeNJElement("canvas", "Brushstroke", "shape", {"data-RDGE-id": NJUtils.generateRandom()}, true);
205 var elementModel = TagTool.makeElement(w, h, planeMat, midPt, newCanvas); 218 var elementModel = TagTool.makeElement(w, h, planeMat, midPt, newCanvas);
206 ElementMediator.addElement(newCanvas, elementModel.data, true); 219 ElementMediator.addElement(newCanvas, elementModel.data, true);
207 220
208 // create all the GL stuff 221 // create all the GL stuff
209 var world = this.getGLWorld(newCanvas, this._useWebGL); 222 var world = this.getGLWorld(newCanvas, this._useWebGL);
210 //store a reference to this newly created canvas 223 //store a reference to this newly created canvas
211 this._brushStrokeCanvas = newCanvas; 224 this._brushStrokeCanvas = newCanvas;
212 225
213 var brushStroke = this._selectedBrushStroke; 226 var brushStroke = this._selectedBrushStroke;
214 if (brushStroke){ 227 if (brushStroke){
215 brushStroke.setWorld(world); 228 brushStroke.setWorld(world);
216 229
217 brushStroke.setPlaneMatrix(planeMat); 230 brushStroke.setPlaneMatrix(planeMat);
218 var planeMatInv = glmat4.inverse( planeMat, [] ); 231 var planeMatInv = glmat4.inverse( planeMat, [] );
219 brushStroke.setPlaneMatrixInverse(planeMatInv); 232 brushStroke.setPlaneMatrixInverse(planeMatInv);
220 brushStroke.setPlaneCenter(midPt); 233 brushStroke.setPlaneCenter(midPt);
221 234
222 world.addObject(brushStroke); 235 world.addObject(brushStroke);
223 world.render(); 236 world.render();
224 //TODO this will not work if there are multiple shapes in the same canvas 237 //TODO this will not work if there are multiple shapes in the same canvas
225 newCanvas.elementModel.shapeModel.GLGeomObj = brushStroke; 238 newCanvas.elementModel.shapeModel.GLGeomObj = brushStroke;
226 } 239 }
227 } //if (!canvas) { 240 } //if (!canvas) {
228 else { 241 else {
229 242
230 var world = null; 243 var world = null;
231 if (canvas.elementModel.shapeModel && canvas.elementModel.shapeModel.GLWorld) { 244 if (canvas.elementModel.shapeModel && canvas.elementModel.shapeModel.GLWorld) {
232 world = canvas.elementModel.shapeModel.GLWorld; 245 world = canvas.elementModel.shapeModel.GLWorld;
233 } else { 246 } else {
234 world = this.getGLWorld(canvas, this._useWebGL);//this.options.use3D);//this.CreateGLWorld(planeMat, midPt, canvas, this._useWebGL);//fillMaterial, strokeMaterial); 247 world = this.getGLWorld(canvas, this._useWebGL);
235 } 248 }
236 249
237 250
238 if (this._entryEditMode !== this.ENTRY_SELECT_CANVAS){ 251 if (this._entryEditMode !== this.ENTRY_SELECT_CANVAS){
239 //update the left and top of the canvas element 252 //update the left and top of the canvas element
240 var canvasArray=[canvas]; 253 var canvasArray=[canvas];
241 ElementMediator.setProperty(canvasArray, "left", [parseInt(left)+"px"],"Changing", "brushTool"); 254 ElementMediator.setProperty(canvasArray, "left", [parseInt(left)+"px"],"Changing", "brushTool");
242 ElementMediator.setProperty(canvasArray, "top", [parseInt(top) + "px"],"Changing", "brushTool"); 255 ElementMediator.setProperty(canvasArray, "top", [parseInt(top) + "px"],"Changing", "brushTool");
243 canvas.width = w; 256 canvas.width = w;
244 canvas.height = h; 257 canvas.height = h;
245 //update the viewport and projection to reflect the new canvas width and height 258 //update the viewport and projection to reflect the new canvas width and height
246 world.setViewportFromCanvas(canvas); 259 world.setViewportFromCanvas(canvas);
247 if (this._useWebGL){ 260 if (this._useWebGL){
248 var cam = world.renderer.cameraManager().getActiveCamera(); 261 var cam = world.renderer.cameraManager().getActiveCamera();
249 cam.setPerspective(world.getFOV(), world.getAspect(), world.getZNear(), world.getZFar()); 262 cam.setPerspective(world.getFOV(), world.getAspect(), world.getZNear(), world.getZFar());
263 }
250 } 264 }