From 8b5c79a33fd5d38eea612eaaba9ca61fe49b61e7 Mon Sep 17 00:00:00 2001 From: Alexis Deveria Date: Thu, 20 Aug 2009 15:59:29 +0000 Subject: [PATCH] Fixed issue 82: Resizable Canvas git-svn-id: http://svg-edit.googlecode.com/svn/trunk@420 eee81c28-f429-11dd-99c0-75d572ba1ddd --- editor/svg-editor.css | 2 +- editor/svg-editor.html | 2 ++ editor/svg-editor.js | 33 +++++++++++++++++++++++++++++---- editor/svgcanvas.js | 17 +++++++++++++++++ 4 files changed, 49 insertions(+), 5 deletions(-) diff --git a/editor/svg-editor.css b/editor/svg-editor.css index 6cd1a894..61113415 100644 --- a/editor/svg-editor.css +++ b/editor/svg-editor.css @@ -267,7 +267,7 @@ div.color_block { } #svg_editor #tools_bottom_1 { - width: 100px; + width: 115px; float: left; } diff --git a/editor/svg-editor.html b/editor/svg-editor.html index 55d874ca..f8fe7630 100644 --- a/editor/svg-editor.html +++ b/editor/svg-editor.html @@ -199,6 +199,8 @@ + + diff --git a/editor/svg-editor.js b/editor/svg-editor.js index b71860ff..f4d3f92b 100644 --- a/editor/svg-editor.js +++ b/editor/svg-editor.js @@ -848,14 +848,39 @@ function svg_edit_setup() { }); function changeResolution(x,y) { - $('#resolution').val(x+'x'+y); -// $('#svgroot').css( { 'width': x+'px', 'height': y+'px' } ); + var new_res = x+'x'+y; + var found = false; + $('#resolution option').each(function() { + if($(this).text() == new_res) { + $('#resolution').val(x+'x'+y); + found = true; + } + }); + if(!found) $('#resolution').val('Custom'); + $('#svgcanvas').css( { 'width': x+'px', 'height': y+'px' } ); } $('#resolution').change(function(){ - var res = this.value.split('x'); - var x = parseInt(res[0]), y = parseInt(res[1]); + if(this.value == 'Custom') { + var cust_val = prompt("Please enter custom size (i.e. 400x300)",""); + var res_vals = cust_val.match(/(\d+)[x \/,](\d+)/); + if(!res_vals) { + alert('Invalid size. Please format it as WIDTHxHEIGHT (like 400x300)'); + return false; + } else { + var x = res_vals[1], y = res_vals[2]; + if(x == '0' || y == '0') { + alert('Invalid size. Width or height may not be 0.'); + return false; + } + } + } else if(this.value == 'Fit to content'){ + var x = '', y = ''; + } else { + var res = this.value.split('x'); + var x = parseInt(res[0]), y = parseInt(res[1]); + } svgCanvas.setResolution(x,y); }); diff --git a/editor/svgcanvas.js b/editor/svgcanvas.js index d8e0f0c5..1baa9944 100644 --- a/editor/svgcanvas.js +++ b/editor/svgcanvas.js @@ -1969,8 +1969,25 @@ function SvgCanvas(c) h = svgroot.getAttribute("height"); var handle = svgroot.suspendRedraw(1000); + + if(!x) { + canvas.clearSelection(); + + // Get bounding box + var bbox = svgroot.getBBox(); + + if(bbox) { + x = bbox.x + bbox.width; + y = bbox.y + bbox.height; + } else { + alert('No content to fit to'); + return; + } + } + svgroot.setAttribute("width", x); svgroot.setAttribute("height", y); + svgroot.unsuspendRedraw(handle); addCommandToHistory(new ChangeElementCommand(svgroot, {"width":w,"height":h}, "resolution")); call("changed", [svgroot]);