diff --git a/editor/images/svg_edit_icons.svg b/editor/images/svg_edit_icons.svg index 3653d24a..a81568ac 100644 --- a/editor/images/svg_edit_icons.svg +++ b/editor/images/svg_edit_icons.svg @@ -269,10 +269,16 @@ - + - - + + + + + + + + diff --git a/editor/svgcanvas.js b/editor/svgcanvas.js index 312a85cf..8e0f8ce5 100644 --- a/editor/svgcanvas.js +++ b/editor/svgcanvas.js @@ -3899,7 +3899,10 @@ function BatchCommand(text) { if(update) { var prev = seg.prev; - if(!prev) return segLine; + if(!prev) { + segLine.setAttribute("display", "none"); + return segLine; + } var pt = getGripPt(prev); // Set start point @@ -5096,6 +5099,7 @@ function BatchCommand(text) { } else if (current_mode == "pathedit") { this.clear(); + this.toSelectMode(); } }, getNodePoint: function() { @@ -5143,8 +5147,64 @@ function BatchCommand(text) { path.deleteSeg(pt); } + // Cleanup + var cleanup = function() { + var segList = path.elem.pathSegList; + var len = segList.numberOfItems; + + var remItems = function(pos, count) { + while(count--) { + segList.removeItem(pos); + } + } + + if(len <= 1) return true; + + while(len--) { + var item = segList.getItem(len); + if(item.pathSegType === 1) { + var prev = segList.getItem(len-1); + var nprev = segList.getItem(len-2); + if(prev.pathSegType === 2) { + remItems(len-1, 2); + cleanup(); + break; + } else if(nprev.pathSegType === 2) { + remItems(len-2, 3); + cleanup(); + break; + } + + } else if(item.pathSegType === 2) { + if(len > 0) { + var prev_type = segList.getItem(len-1).pathSegType; + // Path has M M + if(prev_type === 2) { + remItems(len-1, 1); + cleanup(); + break; + // Entire path ends with Z M + } else if(prev_type === 1 && segList.numberOfItems-1 === len) { + remItems(len, 1); + cleanup(); + break; + } + } + } + } + return false; + } + + cleanup(); + + // Completely delete a path with 1 or 0 segments + if(path.elem.pathSegList.numberOfItems <= 1) { + pathActions.toSelectMode(path.elem); + canvas.deleteSelectedElements(); + return; + } + path.init(); - var sel_pt = sel_pts[0]-1 > 0 ? sel_pts[0]-1 : 1; path.clearSelection(); @@ -6376,6 +6436,10 @@ function BatchCommand(text) { pathActions.linkControlPoints(linkPoints); } + this.getContentElem = function() { return svgcontent; }; + this.getRootElem = function() { return svgroot; }; + this.getSelectedElems = function() { return selectedElements; }; + this.getResolution = function() { // var vb = svgcontent.getAttribute("viewBox").split(' '); // return {'w':vb[2], 'h':vb[3], 'zoom': current_zoom};