Added 'Fit to layer content' zoom option and optimized code for setBBoxZoom

git-svn-id: http://svg-edit.googlecode.com/svn/trunk@696 eee81c28-f429-11dd-99c0-75d572ba1ddd
This commit is contained in:
Alexis Deveria
2009-09-23 15:29:55 +00:00
parent b76c379215
commit c8b1cfd3a2
3 changed files with 34 additions and 39 deletions

View File

@@ -304,7 +304,7 @@ span.zoom_tool {
#zoom_dropdown li { #zoom_dropdown li {
display: block; display: block;
width: 100px; width: 120px;
padding: 4px; padding: 4px;
background: #E8E8E8; background: #E8E8E8;
border: 1px solid #B0B0B0; border: 1px solid #B0B0B0;

View File

@@ -254,7 +254,8 @@
<button></button> <button></button>
<ul> <ul>
<li>100%</li> <li>100%</li>
<li data-val="content">Fit to content</li> <li data-val="content">Fit to all content</li>
<li data-val="layer">Fit to layer content</li>
<li data-val="selection">Fit to selection</li> <li data-val="selection">Fit to selection</li>
<li data-val="canvas">Fit to canvas</li> <li data-val="canvas">Fit to canvas</li>
<li>25%</li> <li>25%</li>

View File

@@ -708,7 +708,7 @@ function BatchCommand(text) {
if(!curBBoxes.length) { if(!curBBoxes.length) {
// Cache all bboxes // Cache all bboxes
curBBoxes = canvas.getVisibleElements(true); curBBoxes = canvas.getVisibleElements(svgzoom, true);
} }
var resultList = null; var resultList = null;
@@ -1081,8 +1081,8 @@ function BatchCommand(text) {
while (i--) { while (i--) {
var child = children.item(i); var child = children.item(i);
if (child.nodeType == 1) { if (child.nodeType == 1) {
var childBox = child.getBBox(); try {
if (childBox) { var childBox = child.getBBox();
// TODO: to fix the rotation problem, we must account for the // TODO: to fix the rotation problem, we must account for the
// child's rotation in the bbox adjustment // child's rotation in the bbox adjustment
@@ -1107,7 +1107,7 @@ function BatchCommand(text) {
childBox.x = pt.x; childBox.y = pt.y; childBox.x = pt.x; childBox.y = pt.y;
childBox.width = w; childBox.height = h; childBox.width = w; childBox.height = h;
batchCmd.addSubCommand(recalculateDimensions(child, childBox)); batchCmd.addSubCommand(recalculateDimensions(child, childBox));
} } catch(e) {}
} }
} }
return batchCmd; return batchCmd;
@@ -2917,52 +2917,45 @@ function BatchCommand(text) {
this.setBBoxZoom = function(val, editor_w, editor_h) { this.setBBoxZoom = function(val, editor_w, editor_h) {
var spacer = .85; var spacer = .85;
var w_zoom, h_zoom; var bb;
var calcZoom = function(bb) {
var w_zoom = Math.round((editor_w / bb.width)*100 * spacer)/100;
var h_zoom = Math.round((editor_h / bb.height)*100 * spacer)/100;
var zoomlevel = Math.min(w_zoom,h_zoom);
canvas.setZoom(zoomlevel);
return {'zoom': zoomlevel, 'bbox': bb};
}
if(typeof val == 'object') { if(typeof val == 'object') {
var bb = val; bb = val;
if(bb.width == 0 || bb.height == 0) { if(bb.width == 0 || bb.height == 0) {
canvas.setZoom(current_zoom * 2); canvas.setZoom(current_zoom * 2);
return {'zoom': current_zoom, 'bbox': bb}; return {'zoom': current_zoom, 'bbox': bb};
} }
w_zoom = Math.round((editor_w / bb.width)*100 * spacer)/100; return calcZoom(bb);
h_zoom = Math.round((editor_h / bb.height)*100 * spacer)/100;
var zoomlevel = Math.min(w_zoom,h_zoom);
canvas.setZoom(zoomlevel);
return {'zoom': zoomlevel, 'bbox': bb};
} }
switch (val) { switch (val) {
case 'selection': case 'selection':
if(!selectedElements[0]) return; if(!selectedElements[0]) return;
var sel_elems = $.map(selectedElements, function(n){ if(n) return n; }); var sel_elems = $.map(selectedElements, function(n){ if(n) return n; });
var bb = canvas.getStrokedBBox(sel_elems); bb = canvas.getStrokedBBox(sel_elems);
w_zoom = Math.round((editor_w / bb.width)*100 * spacer)/100; break;
h_zoom = Math.round((editor_h / bb.height)*100 * spacer)/100;
var zoomlevel = Math.min(w_zoom,h_zoom);
canvas.setZoom(zoomlevel);
return {'zoom': zoomlevel, 'bbox': bb};
case 'canvas': case 'canvas':
spacer = .95;
var res = canvas.getResolution(); var res = canvas.getResolution();
w_zoom = Math.round((editor_w / res.w)*100)/100; spacer = .95;
h_zoom = Math.round((editor_h / res.h)*100)/100; bb = {width:res.w, height:res.h ,x:0, y:0};
var zoomlevel = Math.min(w_zoom, h_zoom); break;
canvas.setZoom(zoomlevel);
return {'zoom': zoomlevel, 'bbox': {width:res.w, height:res.h ,x:0, y:0}};
case 'content': case 'content':
var bb = canvas.getStrokedBBox(); bb = canvas.getStrokedBBox();
w_zoom = Math.round((editor_w / bb.width)*100 * spacer)/100; break;
h_zoom = Math.round((editor_h / bb.height)*100 * spacer)/100; case 'layer':
var zoomlevel = Math.min(w_zoom,h_zoom); bb = canvas.getStrokedBBox(canvas.getVisibleElements(current_layer));
canvas.setZoom(zoomlevel); break;
return {'zoom': zoomlevel, 'bbox': bb};
default: default:
return; return;
} }
return calcZoom(bb);
} }
this.setZoom = function(zoomlevel) { this.setZoom = function(zoomlevel) {
@@ -3704,8 +3697,9 @@ function BatchCommand(text) {
return full_bb; return full_bb;
} }
this.getVisibleElements = function(includeBBox) { this.getVisibleElements = function(parent, includeBBox) {
var nodes = current_layer.childNodes; if(!parent) parent = svgzoom;
var nodes = parent.childNodes;
var i = nodes.length; var i = nodes.length;
var contentElems = []; var contentElems = [];