diff --git a/editor/svgcanvas.js b/editor/svgcanvas.js index 59300e25..4cd11859 100644 --- a/editor/svgcanvas.js +++ b/editor/svgcanvas.js @@ -5279,7 +5279,7 @@ var getMouseTarget = this.getMouseTarget = function(evt) { // if we are not in the middle of creating a path, and we've clicked on some shape, // then go to Select mode. // WebKit returns
when the canvas is clicked, Firefox/Opera return - if ( (current_mode != "path" || current_path_pts.length == 0) && + if ( (current_mode != "path" || !drawn_path) && t.parentNode.id != "selectorParentGroup" && t.id != "svgcanvas" && t.id != "svgroot") { @@ -6593,7 +6593,8 @@ var pathActions = this.pathActions = function() { var pathFuncs = [], current_path = null, - current_path_pts = [], +// current_path_pts = [], + drawn_path = null, link_control_pts = false, hasMoved = false; @@ -6917,11 +6918,9 @@ var pathActions = this.pathActions = function() { var keep = null; // if pts array is empty, create path element with M at current point - if (current_path_pts.length == 0) { - current_path_pts.push(x); - current_path_pts.push(y); + if (!drawn_path) { d_attr = "M" + x + "," + y + " "; - addSvgElementFromJson({ + drawn_path = addSvgElementFromJson({ "element": "path", "curStyles": true, "attr": { @@ -6943,12 +6942,14 @@ var pathActions = this.pathActions = function() { } else { // determine if we clicked on an existing point - var i = current_path_pts.length; + var seglist = drawn_path.pathSegList; + var i = seglist.numberOfItems; var FUZZ = 6/current_zoom; var clickOnPoint = false; while(i) { - i -= 2; - var px = current_path_pts[i], py = current_path_pts[i+1]; + i --; + var item = seglist.getItem(i); + var px = item.x, py = item.y; // found a matching point if ( x >= (px-FUZZ) && x <= (px+FUZZ) && y >= (py-FUZZ) && y <= (py+FUZZ) ) { clickOnPoint = true; @@ -6964,7 +6965,7 @@ var pathActions = this.pathActions = function() { var newpath = getElem(id); - var len = current_path_pts.length; + var len = seglist.numberOfItems; // if we clicked on an existing point, then we are done this path, commit it // (i,i+1) are the x,y that were clicked on if (clickOnPoint) { @@ -6972,10 +6973,10 @@ var pathActions = this.pathActions = function() { // the first point was clicked on and there are less than 3 points // then leave the path open // otherwise, close the path - if (i == 0 && len >= 6) { + if (i == 0 && len >= 3) { // Create end segment - var abs_x = current_path_pts[0]; - var abs_y = current_path_pts[1]; + var abs_x = seglist.getItem(0).x; + var abs_y = seglist.getItem(0).y; d_attr += ['L',abs_x,',',abs_y,'z'].join(''); newpath.setAttribute("d", d_attr); } else if(len < 3) { @@ -6986,7 +6987,7 @@ var pathActions = this.pathActions = function() { // this will signal to commit the path element = newpath; - current_path_pts = []; + drawn_path = null; started = false; if(subpath) { @@ -7007,7 +7008,7 @@ var pathActions = this.pathActions = function() { return false; } } - // else, create a new point, append to pts array, update path element + // else, create a new point, update path element else { // Checks if current target or parents are #svgcontent if(!$.contains(container, getMouseTarget(evt))) { @@ -7016,13 +7017,12 @@ var pathActions = this.pathActions = function() { return false; } - var lastx = current_path_pts[len-2], lasty = current_path_pts[len-1]; + var num = drawn_path.pathSegList.numberOfItems; + var last = drawn_path.pathSegList.getItem(num -1); + var lastx = last.x, lasty = last.y; if(evt.shiftKey) { var xya=Utils.snapToAngle(lastx,lasty,x,y); x=xya.x; y=xya.y; } - // we store absolute values in our path points array for easy checking above - current_path_pts.push(x); - current_path_pts.push(y); d_attr += "L" + round(x) + "," + round(y) + " "; newpath.setAttribute("d", d_attr); @@ -7037,7 +7037,7 @@ var pathActions = this.pathActions = function() { 'x2': x, 'y2': y }); - var index = (current_path_pts.length/2 - 1); + var index = num; if(subpath) index += path.segs.length; addPointGrip(index, x, y); } @@ -7157,12 +7157,12 @@ var pathActions = this.pathActions = function() { clear: function(remove) { current_path = null; - if (current_mode == "path" && current_path_pts.length > 0) { + if (current_mode == "path" && !drawn_path) { var elem = getElem(getId()); $(getElem("path_stretch_line")).remove(); $(elem).remove(); $(getElem("pathpointgrip_container")).find('*').attr('display', 'none'); - current_path_pts = []; + drawn_path = null; started = false; } else if (current_mode == "pathedit") { this.toSelectMode(); @@ -11317,6 +11317,7 @@ function disableAdvancedTextEdit() { rect.setAttribute('x',"1in"); svgcontent.appendChild(rect); var bb = rect.getBBox(); + rect.parentNode.removeChild(rect); unit_types.em = bb.width; unit_types.ex = bb.height; var inch = bb.x;