From 0f29ad3e8bcd625bb89cce1fbcc839aead55c6ab Mon Sep 17 00:00:00 2001 From: Alexis Deveria Date: Fri, 11 Sep 2009 15:49:50 +0000 Subject: [PATCH] Fixed resolution change function git-svn-id: http://svg-edit.googlecode.com/svn/trunk@627 eee81c28-f429-11dd-99c0-75d572ba1ddd --- editor/svg-editor.js | 27 +++++++++++++++------------ editor/svgcanvas.js | 23 ++++++++++++++--------- 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/editor/svg-editor.js b/editor/svg-editor.js index 7d56db42..fbb05fd2 100644 --- a/editor/svg-editor.js +++ b/editor/svg-editor.js @@ -63,9 +63,10 @@ function svg_edit_setup() { for (var i = 0; i < elems.length; ++i) { var elem = elems[i]; // if the element changed was the svg, then it could be a resolution change - if (elem && elem.tagName == "svg") { - changeResolution(parseInt(elem.getAttribute("width")), - parseInt(elem.getAttribute("height"))); + if (elem && elem.tagName == "svg" && elem.getAttribute("viewBox")) { + var vb = elem.getAttribute("viewBox").split(' '); + changeResolution(parseInt(vb[2]), + parseInt(vb[3])); } } @@ -597,7 +598,7 @@ function svg_edit_setup() { var clickZoom = function(zoomIn) { var res = svgCanvas.getResolution(); var multiplier = zoomIn? res.zoom * 2 : res.zoom * 0.5; - setResolution(res.w * multiplier, res.h * multiplier); + setResolution(res.w * multiplier, res.h * multiplier, true); svgCanvas.setZoom(multiplier); }; @@ -935,17 +936,19 @@ function svg_edit_setup() { } }); if(!found) $('#resolution').val('Custom'); - - setResolution(x, y); + var zoom = svgCanvas.getResolution().zoom; + setResolution(x * zoom, y * zoom); } - function setResolution(w, h) { + function setResolution(w, h, center) { $('#svgcanvas').css( { 'width': w, 'height': h } ); - var w_area = $('#workarea'); - var scroll_y = h/2 - w_area.height()/2; - var scroll_x = w/2 - w_area.width()/2; - w_area[0].scrollTop = scroll_y; - w_area[0].scrollLeft = scroll_x; + if(center) { + var w_area = $('#workarea'); + var scroll_y = h/2 - w_area.height()/2; + var scroll_x = w/2 - w_area.width()/2; + w_area[0].scrollTop = scroll_y; + w_area[0].scrollLeft = scroll_x; + } } $('#resolution').change(function(){ diff --git a/editor/svgcanvas.js b/editor/svgcanvas.js index 1bf72594..3964481a 100644 --- a/editor/svgcanvas.js +++ b/editor/svgcanvas.js @@ -2491,7 +2491,7 @@ function BatchCommand(text) { selectorManager.update(); addCommandToHistory(batchCmd); - call("changed", [svgroot]); + call("changed", [svgzoom]); } catch(e) { console.log(e); return false; @@ -2534,10 +2534,10 @@ function BatchCommand(text) { var vb = svgzoom.getAttribute("viewBox").split(' '); return {'w':vb[2], 'h':vb[3], 'zoom': current_zoom}; }; - // TODO: change svgzoom's viewBox here also and create a batch command this.setResolution = function(x, y) { - var w = svgroot.getAttribute("width"), - h = svgroot.getAttribute("height"); + var res = canvas.getResolution(); + var w = res.w, h = res.h; + var batchCmd = new BatchCommand("Change Image Dimensions"); var handle = svgroot.suspendRedraw(1000); @@ -2555,13 +2555,17 @@ function BatchCommand(text) { return; } } - - svgroot.setAttribute("width", x); - svgroot.setAttribute("height", y); + svgroot.setAttribute('width', x * current_zoom); + svgroot.setAttribute('height', y * current_zoom); + batchCmd.addSubCommand(new ChangeElementCommand(svgroot, {"width":w, "height":h})); + + svgzoom.setAttribute("viewBox", ["0 0", x, y].join(' ')); + batchCmd.addSubCommand(new ChangeElementCommand(svgzoom, {"viewBox": ["0 0", w, h].join(' ')})); svgroot.unsuspendRedraw(handle); - addCommandToHistory(new ChangeElementCommand(svgroot, {"width":w,"height":h}, "resolution")); - call("changed", [svgroot]); + + addCommandToHistory(batchCmd); + call("changed", [svgzoom]); }; this.setZoom = function(zoomlevel) { @@ -2818,6 +2822,7 @@ function BatchCommand(text) { this.getRotationAngle = function(elem) { var selected = elem || selectedElements[0]; + if(!elem.transform) return null; // find the rotation transform (if any) and set it var tlist = selected.transform.baseVal; var t = tlist.numberOfItems;