From d44f3196c925332dcaf45f7cf8c64e22a1994bb9 Mon Sep 17 00:00:00 2001 From: Nivesh Rajbhandari Date: Mon, 4 Jun 2012 17:11:06 -0700 Subject: Fill and Ink-Bottle fixes. Signed-off-by: Nivesh Rajbhandari --- js/tools/FillTool.js | 32 +++++++++++++++++++------------- js/tools/InkBottleTool.js | 10 +++++----- 2 files changed, 24 insertions(+), 18 deletions(-) (limited to 'js/tools') diff --git a/js/tools/FillTool.js b/js/tools/FillTool.js index 66dd9305..69807bc3 100755 --- a/js/tools/FillTool.js +++ b/js/tools/FillTool.js @@ -73,22 +73,28 @@ exports.FillTool = Montage.create(ModifierToolBase, { this.isDrawing = true; if(this._canColor && this.application.ninja.selectedElements.length) { + var fillInfo = {}, + color; + if(this.options.useFillColor.checked) { + fillInfo.colorInfo = {}; + color = this.options.fill; + if(color && color.color) + { + fillInfo.colorInfo.mode = color.colorMode; + fillInfo.colorInfo.color = color.color; + } else { + fillInfo.colorInfo.mode = "nocolor"; + fillInfo.colorInfo.color = null; + } + } - var color = this.options.fill, - colorInfo; - if(color && color.color) - { - colorInfo = { mode:color.colorMode, - color:color.color - }; + if(this.options.useWebGL.checked) { + fillInfo.webGLInfo = {}; + fillInfo.webGLInfo.material = this.options.fillMaterial.value; } - else - { - colorInfo = { mode:"nocolor", - color:color.color - }; + if(fillInfo.colorInfo || fillInfo.webGLInfo) { + ElementsMediator.setFill(this.application.ninja.selectedElements, fillInfo, "Change", "fillTool"); } - ElementsMediator.setColor(this.application.ninja.selectedElements, colorInfo, true, "Change", "fillTool"); } } } diff --git a/js/tools/InkBottleTool.js b/js/tools/InkBottleTool.js index 2c03d133..bb5d3ae2 100755 --- a/js/tools/InkBottleTool.js +++ b/js/tools/InkBottleTool.js @@ -87,18 +87,18 @@ exports.InkBottleTool = Montage.create(ModifierToolBase, { if(this.options.useBorderWidth.checked || this.options.useBorderStyle.checked) { colorInfo.borderInfo = {}; if(this.options.useBorderWidth.checked) { - colorInfo.borderInfo.borderWidth = this.options._borderWidth.value; - colorInfo.borderInfo.borderUnits = this.options._borderWidth.units; + colorInfo.borderInfo.borderWidth = this.options.borderWidth.value; + colorInfo.borderInfo.borderUnits = this.options.borderWidth.units; } if(this.options.useBorderStyle.checked) { - colorInfo.borderInfo.borderStyle = this.options._borderStyle.value; + colorInfo.borderInfo.borderStyle = this.options.borderStyle.value; } } if(this.options.useStrokeSize.checked) { colorInfo.strokeInfo = {}; - colorInfo.strokeInfo.strokeSize = this.options._strokeSize.value; - colorInfo.strokeInfo.strokeUnits = this.options._strokeSize.units; + colorInfo.strokeInfo.strokeSize = this.options.strokeSize.value; + colorInfo.strokeInfo.strokeUnits = this.options.strokeSize.units; } ElementsMediator.setColor(this.application.ninja.selectedElements, colorInfo, false, "Change", "inkBottleTool"); -- cgit v1.2.3 From 945fac7b1593260757b6f2864810ca9916d7d698 Mon Sep 17 00:00:00 2001 From: Nivesh Rajbhandari Date: Tue, 5 Jun 2012 11:36:03 -0700 Subject: Updated ink bottle tool to support color-chip's checkbox and undo/redo for strokes/borders. Signed-off-by: Nivesh Rajbhandari --- js/tools/InkBottleTool.js | 49 +++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 21 deletions(-) (limited to 'js/tools') diff --git a/js/tools/InkBottleTool.js b/js/tools/InkBottleTool.js index bb5d3ae2..dff0b0fa 100755 --- a/js/tools/InkBottleTool.js +++ b/js/tools/InkBottleTool.js @@ -69,39 +69,46 @@ exports.InkBottleTool = Montage.create(ModifierToolBase, { if(this._canColor && this.application.ninja.selectedElements.length) { - var color = this.options.stroke, - colorInfo; - if(color && color.color) - { - colorInfo = { mode:color.colorMode, - color:color.color - }; - } - else - { - colorInfo = { mode:"nocolor", - color:color.color - }; + var strokeInfo = {}, + color; + if(this.options.useStrokeColor.checked) { + strokeInfo.colorInfo = {}; + color = this.options.stroke; + if(color && color.color) + { + strokeInfo.colorInfo.mode = color.colorMode; + strokeInfo.colorInfo.color = color.color; + } else { + strokeInfo.colorInfo.mode = "nocolor"; + strokeInfo.colorInfo.color = null; + } } if(this.options.useBorderWidth.checked || this.options.useBorderStyle.checked) { - colorInfo.borderInfo = {}; + strokeInfo.borderInfo = {}; if(this.options.useBorderWidth.checked) { - colorInfo.borderInfo.borderWidth = this.options.borderWidth.value; - colorInfo.borderInfo.borderUnits = this.options.borderWidth.units; + strokeInfo.borderInfo.borderWidth = this.options.borderWidth.value; + strokeInfo.borderInfo.borderUnits = this.options.borderWidth.units; } if(this.options.useBorderStyle.checked) { - colorInfo.borderInfo.borderStyle = this.options.borderStyle.value; + strokeInfo.borderInfo.borderStyle = this.options.borderStyle.value; } } if(this.options.useStrokeSize.checked) { - colorInfo.strokeInfo = {}; - colorInfo.strokeInfo.strokeSize = this.options.strokeSize.value; - colorInfo.strokeInfo.strokeUnits = this.options.strokeSize.units; + strokeInfo.shapeInfo = {}; + strokeInfo.shapeInfo.strokeSize = this.options.strokeSize.value; + strokeInfo.shapeInfo.strokeUnits = this.options.strokeSize.units; + } + + if(this.options.useWebGL.checked) { + strokeInfo.webGLInfo = {}; + strokeInfo.webGLInfo.material = this.options.strokeMaterial.value; } - ElementsMediator.setColor(this.application.ninja.selectedElements, colorInfo, false, "Change", "inkBottleTool"); + if(strokeInfo.colorInfo || strokeInfo.borderInfo || strokeInfo.shapeInfo || strokeInfo.webGLInfo) { + ElementsMediator.setStroke(this.application.ninja.selectedElements, strokeInfo, "Change", "inkBottleTool"); + } } } } -- cgit v1.2.3 From 3bf45fbac80bb3eac7ed6493cfe136899760b497 Mon Sep 17 00:00:00 2001 From: Nivesh Rajbhandari Date: Tue, 5 Jun 2012 15:10:46 -0700 Subject: Free Transform tool's handle should stop when it reaches the other end. IKNINJA-1335 - Free Transform tool: When one of the handles reaches the other end, the tool should stop. IKNINJA-1261 - [WebGL] [Shape] [Selection] Material shows in the middle of Canvas area if the shape is transformed toward negative coordinate. (This was happening because setting a canvas' width to 0 resets the canvas' width to 300.) Signed-off-by: Nivesh Rajbhandari --- js/tools/SelectionTool.js | 112 +++++++++++++++++++++++++++++++--------------- 1 file changed, 77 insertions(+), 35 deletions(-) (limited to 'js/tools') diff --git a/js/tools/SelectionTool.js b/js/tools/SelectionTool.js index 4bafa12a..7b72a857 100755 --- a/js/tools/SelectionTool.js +++ b/js/tools/SelectionTool.js @@ -399,7 +399,7 @@ var SelectionTool = exports.SelectionTool = Montage.create(ModifierToolBase, { //Routines to modify the selected objects modifyElements : { value : function(data, event) { - var delta, deltaH = [], deltaW = [], modObject = []; + var delta, modObject = [], left, top, width, height; if(this._handleMode !== null) { // 0 7 6 @@ -411,92 +411,134 @@ var SelectionTool = exports.SelectionTool = Montage.create(ModifierToolBase, { // Resize North-West this.application.ninja.selectedElements.forEach(function(element) { delta = ~~(data.pt1[0] - data.pt0[0]); - var width = parseInt(element.elementModel.getProperty("w")) - delta + "px"; - var left = parseInt(element.elementModel.getProperty("x")) + delta + "px"; + width = parseInt(element.elementModel.getProperty("w")) - delta; + if(width <= 0) { + width = 1; + left = parseInt(element.elementModel.getProperty("x")) + parseInt(element.elementModel.getProperty("w")) - 1; + } else { + left = parseInt(element.elementModel.getProperty("x")) + delta; + } + delta = ~~(data.pt1[1] - data.pt0[1]); - var height = parseInt(element.elementModel.getProperty("h")) - delta + "px"; - var top = parseInt(element.elementModel.getProperty("y")) + delta + "px"; - modObject.push({element:element, properties:{width: width, height: height, left: left, top: top}}); + height = parseInt(element.elementModel.getProperty("h")) - delta; + if(height <= 0) { + height = 1; + top = parseInt(element.elementModel.getProperty("y")) + parseInt(element.elementModel.getProperty("h")) - 1; + } else { + top = parseInt(element.elementModel.getProperty("y")) + delta; + } + modObject.push({element:element, properties:{width: width + "px", height: height + "px", left: left + "px", top: top + "px"}}); }); - ElementsMediator.setProperties(modObject, "Changing", "SelectionTool" ); break; case 1: // Resize West this.application.ninja.selectedElements.forEach(function(element) { delta = ~~(data.pt1[0] - data.pt0[0]); - var width = parseInt(element.elementModel.getProperty("w")) - delta + "px"; - var left = parseInt(element.elementModel.getProperty("x")) + delta + "px"; - modObject.push({element:element, properties:{left: left, width: width}}); + width = parseInt(element.elementModel.getProperty("w")) - delta; + if(width <= 0) { + width = 1; + left = parseInt(element.elementModel.getProperty("x")) + parseInt(element.elementModel.getProperty("w")) - 1; + } else { + left = parseInt(element.elementModel.getProperty("x")) + delta; + } + modObject.push({element:element, properties:{left: left + "px", width: width + "px"}}); }); - ElementsMediator.setProperties(modObject, "Changing", "SelectionTool"); break; case 2: // Resize South-West this.application.ninja.selectedElements.forEach(function(element) { delta = ~~(data.pt1[0] - data.pt0[0]); - var width = parseInt(element.elementModel.getProperty("w")) - delta + "px"; - var left = parseInt(element.elementModel.getProperty("x")) + delta + "px"; + width = parseInt(element.elementModel.getProperty("w")) - delta; + if(width <= 0) { + width = 1; + left = parseInt(element.elementModel.getProperty("x")) + parseInt(element.elementModel.getProperty("w")) - 1; + } else { + left = parseInt(element.elementModel.getProperty("x")) + delta; + } delta = ~~(data.pt1[1] - data.pt0[1]); - var height = parseInt(element.elementModel.getProperty("h")) + delta + "px"; - modObject.push({element:element, properties:{width: width, height: height, left: left}}); + height = parseInt(element.elementModel.getProperty("h")) + delta; + if(height <= 0) { + height = 1; + } + modObject.push({element:element, properties:{width: width + "px", height: height + "px", left: left + "px"}}); }); - ElementsMediator.setProperties(modObject, "Changing", "SelectionTool" ); break; case 3: // Resize South this.application.ninja.selectedElements.forEach(function(element) { delta = ~~(data.pt1[1] - data.pt0[1]); - deltaH.push(parseInt(element.elementModel.getProperty("h")) + delta + "px"); - // modObject.push({element:element, properties:{width: width, height: height}}); + height = parseInt(element.elementModel.getProperty("h")) + delta; + if(height <= 0) { + height = 1; + } + modObject.push({element:element, properties:{height: height + "px"}}); }); - ElementsMediator.setProperty(this.application.ninja.selectedElements, "height", deltaH, "Changing", "SelectionTool" ); break; case 4: // Resize South-East this.application.ninja.selectedElements.forEach(function(element) { delta = ~~(data.pt1[0] - data.pt0[0]); - var width = parseInt(element.elementModel.getProperty("w")) + delta + "px"; + width = parseInt(element.elementModel.getProperty("w")) + delta; + if(width <= 0) { + width = 1; + } delta = ~~(data.pt1[1] - data.pt0[1]); - var height = parseInt(element.elementModel.getProperty("h")) + delta + "px"; - modObject.push({element:element, properties:{width: width, height: height}}); + height = parseInt(element.elementModel.getProperty("h")) + delta; + if(height <= 0) { + height = 1; + } + modObject.push({element:element, properties:{width: width + "px", height: height + "px"}}); }); - ElementsMediator.setProperties(modObject, "Changing", "SelectionTool" ); break; case 5: // Resize East this.application.ninja.selectedElements.forEach(function(element) { delta = ~~(data.pt1[0] - data.pt0[0]); - deltaW.push(parseInt(element.elementModel.getProperty("w")) + delta + "px"); - // modObject.push({element:element, properties:{width: width, height: height}}); + width = parseInt(element.elementModel.getProperty("w")) + delta; + if(width <= 0) { + width = 1; + } + modObject.push({element:element, properties:{width: width + "px"}}); }); - ElementsMediator.setProperty(this.application.ninja.selectedElements, "width", deltaW, "Changing", "SelectionTool" ); break; case 6: // Resize North-East this.application.ninja.selectedElements.forEach(function(element) { delta = ~~(data.pt1[0] - data.pt0[0]); - var width = parseInt(element.elementModel.getProperty("w")) + delta + "px"; + width = parseInt(element.elementModel.getProperty("w")) + delta; + if(width <= 0) { + width = 1; + } delta = ~~(data.pt1[1] - data.pt0[1]); - var height = parseInt(element.elementModel.getProperty("h")) - delta + "px"; - var top = parseInt(element.elementModel.getProperty("y")) + delta + "px"; - modObject.push({element:element, properties:{width: width, height: height, top: top}}); + height = parseInt(element.elementModel.getProperty("h")) - delta; + if(height <= 0) { + height = 1; + top = parseInt(element.elementModel.getProperty("y")) + parseInt(element.elementModel.getProperty("h")) - 1; + } else { + top = parseInt(element.elementModel.getProperty("y")) + delta; + } + modObject.push({element:element, properties:{width: width + "px", height: height + "px", top: top + "px"}}); }); - ElementsMediator.setProperties(modObject, "Changing", "SelectionTool" ); break; case 7: // Resize North this.application.ninja.selectedElements.forEach(function(element) { delta = ~~(data.pt1[1] - data.pt0[1]); - var height = parseInt(element.elementModel.getProperty("h")) - delta + "px"; - var top = parseInt(element.elementModel.getProperty("y")) + delta + "px"; - modObject.push({element:element, properties:{height: height, top: top}}); + height = parseInt(element.elementModel.getProperty("h")) - delta; + if(height <= 0) { + height = 1; + top = parseInt(element.elementModel.getProperty("y")) + parseInt(element.elementModel.getProperty("h")) - 1; + } else { + top = parseInt(element.elementModel.getProperty("y")) + delta; + } + modObject.push({element:element, properties:{height: height + "px", top: top + "px"}}); }); - ElementsMediator.setProperties(modObject, "Changing", "SelectionTool" ); break; default: break; } + ElementsMediator.setProperties(modObject, "Changing", "SelectionTool" ); this._delta = delta; } else -- cgit v1.2.3 From e4e3ee77aa01f9b6e7592306ebfa9f123a60c624 Mon Sep 17 00:00:00 2001 From: Nivesh Rajbhandari Date: Wed, 6 Jun 2012 13:59:37 -0700 Subject: Do not create any tags or shapes with width or height of 0. Signed-off-by: Nivesh Rajbhandari --- js/tools/FillTool.js | 1 + js/tools/InkBottleTool.js | 1 + js/tools/LineTool.js | 110 +++++++++++++++++++++++------------------ js/tools/SelectionTool.js | 2 + js/tools/ShapeTool.js | 46 +++++++++-------- js/tools/TagTool.js | 12 +++-- js/tools/drawing-tool.js | 3 ++ js/tools/modifier-tool-base.js | 2 + 8 files changed, 103 insertions(+), 74 deletions(-) (limited to 'js/tools') diff --git a/js/tools/FillTool.js b/js/tools/FillTool.js index 69807bc3..e08ec1da 100755 --- a/js/tools/FillTool.js +++ b/js/tools/FillTool.js @@ -70,6 +70,7 @@ exports.FillTool = Montage.create(ModifierToolBase, { // Called by modifier tool base's HandleLeftButtonDown after updating selection (if needed) startDraw: { value: function(event) { + this.drawData = null; this.isDrawing = true; if(this._canColor && this.application.ninja.selectedElements.length) { diff --git a/js/tools/InkBottleTool.js b/js/tools/InkBottleTool.js index dff0b0fa..c5640b10 100755 --- a/js/tools/InkBottleTool.js +++ b/js/tools/InkBottleTool.js @@ -65,6 +65,7 @@ exports.InkBottleTool = Montage.create(ModifierToolBase, { // Called by modifier tool base's HandleLeftButtonDown after updating selection (if needed) startDraw: { value: function(event) { + this.drawData = null; this.isDrawing = true; if(this._canColor && this.application.ninja.selectedElements.length) diff --git a/js/tools/LineTool.js b/js/tools/LineTool.js index b2b48383..327d0054 100755 --- a/js/tools/LineTool.js +++ b/js/tools/LineTool.js @@ -54,39 +54,46 @@ exports.LineTool = Montage.create(ShapeTool, { HandleLeftButtonUp: { value: function (event) { - var slope = this._getSlope(), drawData = this.getDrawingData(); - - if(drawData) { - var canvas, xAdj = 0, yAdj = 0, w, h; - if(!this._useExistingCanvas()) { - if(drawData = this.getDrawingData()) { - // set the dimensions - w = ~~drawData.width; - h = ~~drawData.height; - if(slope === "horizontal") { - h = Math.max(this._strokeSize, 1); - } else if(slope === "vertical") { - w = Math.max(this._strokeSize, 1); + var slope = this._getSlope(), + canvas, + xAdj = 0, + yAdj = 0, + w, + h; + + if(slope) { + this.drawData = this.getDrawingData(); + if(this.drawData) { + w = Math.floor(this.drawData.width); + h = Math.floor(this.drawData.height); + if(!this._useExistingCanvas()) { + // set the dimensions + if(slope === "horizontal") { + h = Math.max(this._strokeSize, 1); + w = Math.max(w, 1); + } else if(slope === "vertical") { + w = Math.max(this._strokeSize, 1); + h = Math.max(h, 1); + } else { + // else make the line's stroke fit inside the canvas by growing the canvas + var theta = Math.atan(slope); + xAdj = Math.abs((this._strokeSize/2)*Math.sin(theta)); + yAdj = Math.abs((this._strokeSize/2)*Math.cos(theta)); + + w += ~~(xAdj*2); + h += ~~(yAdj*2); + } + + canvas = document.application.njUtils.make("canvas", {"data-RDGE-id": NJUtils.generateRandom()}, this.application.ninja.currentDocument); + document.application.njUtils.createModelWithShape(canvas, "Line"); + + var styles = document.application.njUtils.stylesFromDraw(canvas, w, h, this.drawData); + this.application.ninja.elementMediator.addElements(canvas, styles); } else { - // else make the line's stroke fit inside the canvas by growing the canvas - var theta = Math.atan(slope); - xAdj = Math.abs((this._strokeSize/2)*Math.sin(theta)); - yAdj = Math.abs((this._strokeSize/2)*Math.cos(theta)); - - w += ~~(xAdj*2); - h += ~~(yAdj*2); - } - - canvas = document.application.njUtils.make("canvas", {"data-RDGE-id": NJUtils.generateRandom()}, this.application.ninja.currentDocument); - document.application.njUtils.createModelWithShape(canvas, "Line"); - - var styles = document.application.njUtils.stylesFromDraw(canvas, w, h, drawData); - this.application.ninja.elementMediator.addElements(canvas, styles); - } else { - canvas = this._targetedElement; - canvas.elementModel.controller = ShapesController; - if(!canvas.elementModel.shapeModel) { - canvas.elementModel.shapeModel = Montage.create(ShapeModel); + canvas = this._targetedElement; + canvas.elementModel.controller = ShapesController; + if(!canvas.elementModel.shapeModel) { + canvas.elementModel.shapeModel = Montage.create(ShapeModel); } } } @@ -103,16 +110,18 @@ exports.LineTool = Montage.create(ShapeTool, { onAddElements: { value: function(el) { - var drawData, xAdj = 0, yAdj = 0, w, h, slope = this._getSlope(); + var xAdj = 0, yAdj = 0, w, h, slope = this._getSlope(); - if(drawData = this.getDrawingData()) { + if(this.drawData) { // set the dimensions - w = ~~drawData.width; - h = ~~drawData.height; + w = Math.floor(this.drawData.width); + h = Math.floor(this.drawData.height); if(slope === "horizontal") { h = Math.max(this._strokeSize, 1); + w = Math.max(w, 1); } else if(slope === "vertical") { w = Math.max(this._strokeSize, 1); + h = Math.max(h, 1); } else { // else make the line's stroke fit inside the canvas by growing the canvas var theta = Math.atan(slope); @@ -123,7 +132,7 @@ exports.LineTool = Montage.create(ShapeTool, { h += ~~(yAdj*2); } - this.RenderShape(w, h, drawData.planeMat, drawData.midPt, el, slope, xAdj, yAdj); + this.RenderShape(w, h, this.drawData.planeMat, this.drawData.midPt, el, slope, xAdj, yAdj); } } }, @@ -132,28 +141,31 @@ exports.LineTool = Montage.create(ShapeTool, { value: function() { var hitRec0 = this._mouseDownHitRec, hitRec1 = this._mouseUpHitRec, - slope; + slope, + dx, + dy; - if (hitRec0 && hitRec1) - { + if (hitRec0 && hitRec1) { var p0 = hitRec0.getLocalPoint(), p1 = hitRec1.getLocalPoint(); + dx = Math.floor(p0[0] - p1[0]); + dy = Math.floor(p0[1] - p1[1]); + + if( (dx === 0) && (dy === 0) ) { + return null; + } + // check for divide by 0 for vertical line: - if( Math.round(p0[0] - p1[0]) === 0 ) - { + if(dx === 0) { // vertical line slope = "vertical"; - } - else if (Math.round(p0[1] - p1[1]) === 0 ) - { + } else if (dy === 0) { // horizontal line slope = "horizontal"; - } - else - { + } else { // if slope is positive, draw a line from top-left to bottom-right - slope = (p0[1] - p1[1])/(p0[0] - p1[0]); + slope = dy/dx; } } diff --git a/js/tools/SelectionTool.js b/js/tools/SelectionTool.js index 7b72a857..ed92b893 100755 --- a/js/tools/SelectionTool.js +++ b/js/tools/SelectionTool.js @@ -49,6 +49,8 @@ var SelectionTool = exports.SelectionTool = Montage.create(ModifierToolBase, { startDraw: { value: function(event) { + this.drawData = null; + if(!this.application.ninja.selectedElements.length) { this._isSelecting = true; diff --git a/js/tools/ShapeTool.js b/js/tools/ShapeTool.js index 367ab78d..8886285d 100755 --- a/js/tools/ShapeTool.js +++ b/js/tools/ShapeTool.js @@ -55,24 +55,30 @@ exports.ShapeTool = Montage.create(DrawingTool, { HandleLeftButtonUp: { value: function (event) { - var canvas, drawData = this.getDrawingData(); - - if(drawData) { - if(!this._useExistingCanvas()) { - canvas = document.application.njUtils.make("canvas", {"data-RDGE-id": NJUtils.generateRandom()}, this.application.ninja.currentDocument); - document.application.njUtils.createModelWithShape(canvas); - - var styles = document.application.njUtils.stylesFromDraw(canvas, ~~drawData.width, ~~drawData.height, drawData); - this.application.ninja.elementMediator.addElements(canvas, styles); - } else { - canvas = this._targetedElement; - if (!canvas.getAttribute( "data-RDGE-id" )) - canvas.setAttribute( "data-RDGE-id", NJUtils.generateRandom() ); - canvas.elementModel.controller = ShapesController; - if(!canvas.elementModel.shapeModel) { - canvas.elementModel.shapeModel = Montage.create(ShapeModel); + var canvas, w, h; + this.drawData = this.getDrawingData(); + + if(this.drawData) { + w = Math.floor(this.drawData.width); + h = Math.floor(this.drawData.height); + + if( (w > 0) && (h > 0) ) { + if(!this._useExistingCanvas()) { + canvas = document.application.njUtils.make("canvas", {"data-RDGE-id": NJUtils.generateRandom()}, this.application.ninja.currentDocument); + document.application.njUtils.createModelWithShape(canvas); + + var styles = document.application.njUtils.stylesFromDraw(canvas, w, h, this.drawData); + this.application.ninja.elementMediator.addElements(canvas, styles); + } else { + canvas = this._targetedElement; + if (!canvas.getAttribute( "data-RDGE-id" )) + canvas.setAttribute( "data-RDGE-id", NJUtils.generateRandom() ); + canvas.elementModel.controller = ShapesController; + if(!canvas.elementModel.shapeModel) { + canvas.elementModel.shapeModel = Montage.create(ShapeModel); + } + this.RenderShape(w, h, this.drawData.planeMat, this.drawData.midPt, canvas); } - this.RenderShape(drawData.width, drawData.height, drawData.planeMat, drawData.midPt, canvas); } } @@ -87,10 +93,8 @@ exports.ShapeTool = Montage.create(DrawingTool, { onAddElements: { value: function(el) { - var drawData; - - if(drawData = this.getDrawingData()) { - this.RenderShape(drawData.width, drawData.height, drawData.planeMat, drawData.midPt, el); + if(this.drawData) { + this.RenderShape(this.drawData.width, this.drawData.height, this.drawData.planeMat, this.drawData.midPt, el); } } }, diff --git a/js/tools/TagTool.js b/js/tools/TagTool.js index 5520fa89..4ce27e36 100755 --- a/js/tools/TagTool.js +++ b/js/tools/TagTool.js @@ -51,16 +51,20 @@ exports.TagTool = Montage.create(DrawingTool, { HandleLeftButtonUp: { value: function(event) { + var w, h; if(this._escape) { this._escape = false; return; } if(this._hasDraw) { - var drawData = this.getDrawingData(); - - if(drawData) { - this.insertElement(drawData); + this.drawData = this.getDrawingData(); + if(this.drawData) { + w = Math.floor(this.drawData.width); + h = Math.floor(this.drawData.height); + if( (w > 0) && (h > 0) ) { + this.insertElement(this.drawData); + } } this._hasDraw = false; diff --git a/js/tools/drawing-tool.js b/js/tools/drawing-tool.js index d906fdf9..9ba4501c 100755 --- a/js/tools/drawing-tool.js +++ b/js/tools/drawing-tool.js @@ -64,6 +64,8 @@ exports.DrawingTool = Montage.create(ToolBase, { set: function (value) { this._currentY = value; } }, + drawData: { value: null }, + /** * PUBLIC METHODS */ @@ -74,6 +76,7 @@ exports.DrawingTool = Montage.create(ToolBase, { this._isDrawing = true; this.mouseDownHitRec = null; this.mouseUpHitRec = null; + this.drawData = null; point = webkitConvertPointFromPageToNode(this.application.ninja.stage.canvas, new WebKitPoint(event.pageX, event.pageY)); snapData = DrawingToolBase.getInitialSnapPoint(point.x, point.y, this._targetedElement); //event.layerX, event.layerY); diff --git a/js/tools/modifier-tool-base.js b/js/tools/modifier-tool-base.js index 6aea77aa..6c569f0a 100755 --- a/js/tools/modifier-tool-base.js +++ b/js/tools/modifier-tool-base.js @@ -451,6 +451,8 @@ exports.ModifierToolBase = Montage.create(DrawingTool, { startDraw: { value: function(event) { + this.drawData = null; + if(this._target) { this.isDrawing = true; -- cgit v1.2.3