From 2ec215492edda88cd95bb1c2ea20e5e382cef9a2 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Sun, 23 Aug 2009 17:16:27 +0000 Subject: [PATCH] simplify align code, all elements should work now git-svn-id: http://svg-edit.googlecode.com/svn/trunk@451 eee81c28-f429-11dd-99c0-75d572ba1ddd --- editor/svgcanvas.js | 162 +++++++++----------------------------------- 1 file changed, 31 insertions(+), 131 deletions(-) diff --git a/editor/svgcanvas.js b/editor/svgcanvas.js index e001fb19..1d397a88 100644 --- a/editor/svgcanvas.js +++ b/editor/svgcanvas.js @@ -2515,8 +2515,17 @@ function SvgCanvas(c) var selected = selectedElements[i]; if (selected != null) { selectedBBoxes[i] = this.getBBox(selected); - selectedBBoxes[i].x += dx; - selectedBBoxes[i].y += dy; + // dx and dy could be arrays + if (dx.constructor == Array) { + selectedBBoxes[i].x += dx[i]; + } else { + selectedBBoxes[i].x += dx; + } + if (dy.constructor == Array) { + selectedBBoxes[i].y += dy[i]; + } else { + selectedBBoxes[i].y += dy; + } var cmd = recalculateSelectedDimensions(i); if (cmd) { batchCmd.addSubCommand(cmd); @@ -2627,7 +2636,7 @@ function SvgCanvas(c) // aligns selected elements (type is a char - see switch below for explanation) this.alignSelectedElements = function(type) { var bbox; - var minx = 100000, maxx = -100000, miny = 100000, maxy = -100000; + var minx = Number.MAX_VALUE, maxx = Number.MIN_VALUE, miny = Number.MAX_VALUE, maxy = Number.MIN_VALUE; var len = selectedElements.length; if (!len) return; for (var i = 0; i < len; ++i) { @@ -2639,145 +2648,36 @@ function SvgCanvas(c) if (bbox.x+bbox.width > maxx) maxx = bbox.x+bbox.width; if (bbox.y+bbox.height > maxy) maxy = bbox.y+bbox.height; } - var len = selectedElements.length; + var dx = new Array(len); + var dy = new Array(len); for (var i = 0; i < len; ++i) { if (selectedElements[i] == null) break; var elem = selectedElements[i]; - switch (elem.tagName) { - case 'circle': - switch (type) { - case 'l': // left (horizontal) - elem.setAttribute('cx', minx+parseInt(elem.getAttribute('r'))); - break; - case 'c': // center (horizontal) - elem.setAttribute('cx', (minx+maxx)/2); - break; - case 'r': // right (horizontal) - elem.setAttribute('cx', maxx-parseInt(elem.getAttribute('r'))); - break; - case 't': // top (vertical) - elem.setAttribute('cy', miny+parseInt(elem.getAttribute('r'))); - break; - case 'm': // middle (vertical) - elem.setAttribute('cy', (miny+maxy)/2); - break; - case 'b': // bottom (vertical) - elem.setAttribute('cy', maxy-parseInt(elem.getAttribute('r'))); - break; - } + var bbox = this.getBBox(elem); + dx[i] = 0; + dy[i] = 0; + switch (type) { + case 'l': // left (horizontal) + dx[i] = minx - bbox.x; break; - case 'ellipse': - switch (type) { - case 'l': // left (horizontal) - elem.setAttribute('cx', minx+parseInt(elem.getAttribute('rx'))); - break; - case 'c': // center (horizontal) - elem.setAttribute('cx', (minx+maxx)/2); - break; - case 'r': // right (horizontal) - elem.setAttribute('cx', maxx-parseInt(elem.getAttribute('rx'))); - break; - case 't': // top (vertical) - elem.setAttribute('cy', miny+parseInt(elem.getAttribute('ry'))); - break; - case 'm': // middle (vertical) - elem.setAttribute('cy', (miny+maxy)/2); - break; - case 'b': // bottom (vertical) - elem.setAttribute('cy', maxy-parseInt(elem.getAttribute('ry'))); - break; - } + case 'c': // center (horizontal) + dx[i] = (minx+maxx)/2 - (bbox.x + bbox.width/2); break; - case 'rect': - switch (type) { - case 'l': // left (horizontal) - elem.setAttribute('x', minx); - break; - case 'c': // center (horizontal) - elem.setAttribute('x', (minx+maxx-parseInt(elem.getAttribute('width')))/2); - break; - case 'r': // right (horizontal) - elem.setAttribute('x', maxx-parseInt(elem.getAttribute('width'))); - break; - case 't': // top (vertical) - elem.setAttribute('y', miny); - break; - case 'm': // middle (vertical) - elem.setAttribute('y', (miny+maxy-parseInt(elem.getAttribute('height')))/2); - break; - case 'b': // bottom (vertical) - elem.setAttribute('y', maxy-parseInt(elem.getAttribute('height'))); - break; - } + case 'r': // right (horizontal) + dx[i] = maxx - (bbox.x + bbox.width); break; - case 'line': - switch (type) { - case 'l': // left (horizontal) - var d = Math.min(parseInt(elem.getAttribute('x1')), parseInt(elem.getAttribute('x2'))) - minx; - elem.setAttribute('x1', parseInt(elem.getAttribute('x1')) - d); - elem.setAttribute('x2', parseInt(elem.getAttribute('x2')) - d); - break; - case 'c': // center (horizontal) - var d = Math.abs(parseInt(elem.getAttribute('x1')) - parseInt(elem.getAttribute('x2'))); - elem.setAttribute('x1', (minx+maxx-d)/2 ); - elem.setAttribute('x2', (minx+maxx+d)/2 ); - break; - case 'r': // right (horizontal) - var d = Math.max(parseInt(elem.getAttribute('x1')), parseInt(elem.getAttribute('x2'))) - maxx; - elem.setAttribute('x1', parseInt(elem.getAttribute('x1')) - d); - elem.setAttribute('x2', parseInt(elem.getAttribute('x2')) - d); - break; - case 't': // top (vertical) - var d = Math.min(parseInt(elem.getAttribute('y1')), parseInt(elem.getAttribute('y2'))) - miny; - elem.setAttribute('y1', parseInt(elem.getAttribute('y1'))-d); - elem.setAttribute('y2', parseInt(elem.getAttribute('y2'))-d); - break; - case 'm': // middle (vertical) - var d = Math.abs(parseInt(elem.getAttribute('y1')) - parseInt(elem.getAttribute('y2'))); - elem.setAttribute('y1', (miny+maxy-d)/2 ); - elem.setAttribute('y2', (miny+maxy+d)/2 ); - break; - case 'b': // bottom (vertical) - var d = Math.max(parseInt(elem.getAttribute('y1')), parseInt(elem.getAttribute('y2'))) - maxy; - elem.setAttribute('y1', parseInt(elem.getAttribute('y1')) - d); - elem.setAttribute('y2', parseInt(elem.getAttribute('y2')) - d); - break; - } + case 't': // top (vertical) + dy[i] = miny - bbox.y; break; - case 'path': - // TODO: implement + case 'm': // middle (vertical) + dy[i] = (miny+maxy)/2 - (bbox.y + bbox.height/2); break; - case 'polygon': - // TODO: implement - break; - case 'polyline': - // TODO: implement - break; - case 'text': - var bbox = this.getBBox(elem); - switch (type) { - case 'l': // left (horizontal) - elem.setAttribute('x', minx); - break; - case 'c': // center (horizontal) - elem.setAttribute('x', (minx+maxx-bbox.width)/2); - break; - case 'r': // right (horizontal) - elem.setAttribute('x', maxx-bbox.width); - break; - case 't': // top (vertical) - elem.setAttribute('y', miny+bbox.height); - break; - case 'm': // middle (vertical) - elem.setAttribute('y', (miny+maxy+bbox.height)/2); - break; - case 'b': // bottom (vertical) - elem.setAttribute('y', maxy); - break; - } + case 'b': // bottom (vertical) + dy[i] = maxy - (bbox.y + bbox.height); break; } } + this.moveSelectedElements(dx,dy); }; }