Fixed issue 166: Fit to content now crops correctly and deals with stroke-width. Also fixed zoom bug #2 on issue 208
git-svn-id: http://svg-edit.googlecode.com/svn/trunk@676 eee81c28-f429-11dd-99c0-75d572ba1dddmaster
parent
1efcb7e17d
commit
2e39f07884
|
@ -2872,16 +2872,26 @@ function BatchCommand(text) {
|
||||||
var res = canvas.getResolution();
|
var res = canvas.getResolution();
|
||||||
var w = res.w, h = res.h;
|
var w = res.w, h = res.h;
|
||||||
|
|
||||||
|
|
||||||
if(!x) {
|
if(!x) {
|
||||||
canvas.clearSelection();
|
canvas.clearSelection();
|
||||||
|
|
||||||
// Get bounding box
|
// Get bounding box
|
||||||
var bbox = svgzoom.getBBox();
|
var bbox = canvas.getStrokedBBox();
|
||||||
|
|
||||||
if(bbox) {
|
if(bbox) {
|
||||||
x = bbox.x + bbox.width;
|
canvas.addToSelection(canvas.getVisibleElements());
|
||||||
y = bbox.y + bbox.height;
|
$.each(selectedElements, function(i, item) {
|
||||||
|
var sel_bb = item.getBBox();
|
||||||
|
recalculateDimensions(item, {
|
||||||
|
x: sel_bb.x - bbox.x,
|
||||||
|
y: sel_bb.y - bbox.y,
|
||||||
|
width: sel_bb.width,
|
||||||
|
height: sel_bb.height
|
||||||
|
});
|
||||||
|
});
|
||||||
|
canvas.clearSelection();
|
||||||
|
x = bbox.width;
|
||||||
|
y = bbox.height;
|
||||||
} else {
|
} else {
|
||||||
alert('No content to fit to');
|
alert('No content to fit to');
|
||||||
return;
|
return;
|
||||||
|
@ -2926,17 +2936,8 @@ function BatchCommand(text) {
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case 'selection':
|
case 'selection':
|
||||||
if(!selectedElements[0]) return;
|
if(!selectedElements[0]) return;
|
||||||
var bb = selectedBBoxes[0];
|
var sel_elems = $.map(selectedElements, function(n){ if(n) return n; });
|
||||||
$.each(selectedBBoxes, function(i, sel) {
|
var bb = canvas.getStrokedBBox(sel_elems);
|
||||||
if(!sel || !i) return;
|
|
||||||
|
|
||||||
// FIXME: Calculations still need some work...
|
|
||||||
bb.x = Math.min(bb.x, sel.x);
|
|
||||||
bb.y = Math.min(bb.y, sel.y);
|
|
||||||
bb.width = Math.max(sel.width + sel.x, bb.width + bb.x) - bb.x;
|
|
||||||
bb.height = Math.max(sel.height + sel.y, bb.height + bb.y) - bb.y;
|
|
||||||
});
|
|
||||||
|
|
||||||
w_zoom = Math.round((editor_w / bb.width)*100 * spacer)/100;
|
w_zoom = Math.round((editor_w / bb.width)*100 * spacer)/100;
|
||||||
h_zoom = Math.round((editor_h / bb.height)*100 * spacer)/100;
|
h_zoom = Math.round((editor_h / bb.height)*100 * spacer)/100;
|
||||||
var zoomlevel = Math.min(w_zoom,h_zoom);
|
var zoomlevel = Math.min(w_zoom,h_zoom);
|
||||||
|
@ -2953,7 +2954,7 @@ function BatchCommand(text) {
|
||||||
return {'zoom': zoomlevel, 'bbox': {width:res.w, height:res.h ,x:0, y:0}};
|
return {'zoom': zoomlevel, 'bbox': {width:res.w, height:res.h ,x:0, y:0}};
|
||||||
|
|
||||||
case 'content':
|
case 'content':
|
||||||
var bb = svgzoom.getBBox();
|
var bb = canvas.getStrokedBBox();
|
||||||
w_zoom = Math.round((editor_w / bb.width)*100 * spacer)/100;
|
w_zoom = Math.round((editor_w / bb.width)*100 * spacer)/100;
|
||||||
h_zoom = Math.round((editor_h / bb.height)*100 * spacer)/100;
|
h_zoom = Math.round((editor_h / bb.height)*100 * spacer)/100;
|
||||||
var zoomlevel = Math.min(w_zoom,h_zoom);
|
var zoomlevel = Math.min(w_zoom,h_zoom);
|
||||||
|
@ -3663,6 +3664,45 @@ function BatchCommand(text) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.getStrokedBBox = function(elems) {
|
||||||
|
// TODO: Get correct BBoxes for rotated elements
|
||||||
|
if(!elems) elems = canvas.getVisibleElements();
|
||||||
|
var full_bb = elems[0].getBBox();
|
||||||
|
var max_x = full_bb.x + full_bb.width;
|
||||||
|
var max_y = full_bb.y + full_bb.height;
|
||||||
|
var min_x = full_bb.x;
|
||||||
|
var min_y = full_bb.y;
|
||||||
|
var getOffset = function(elem) {
|
||||||
|
var sw = round(elem.getAttribute("stroke-width"));
|
||||||
|
var offset = 0;
|
||||||
|
if (elem.getAttribute("stroke") != "none" && !isNaN(sw)) {
|
||||||
|
offset += sw/2;
|
||||||
|
}
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
$.each(elems, function(i, elem) {
|
||||||
|
var cur_bb = elem.getBBox();
|
||||||
|
var offset = getOffset(elem);
|
||||||
|
min_x = Math.min(min_x, cur_bb.x - offset);
|
||||||
|
min_y = Math.min(min_y, cur_bb.y - offset);
|
||||||
|
});
|
||||||
|
|
||||||
|
full_bb.x = min_x;
|
||||||
|
full_bb.y = min_y;
|
||||||
|
|
||||||
|
$.each(elems, function(i, elem) {
|
||||||
|
var cur_bb = elem.getBBox();
|
||||||
|
var offset = getOffset(elem);
|
||||||
|
max_x = Math.max(max_x, cur_bb.x + cur_bb.width + offset);
|
||||||
|
max_y = Math.max(max_y, cur_bb.y + cur_bb.height + offset);
|
||||||
|
});
|
||||||
|
|
||||||
|
full_bb.width = max_x - min_x;
|
||||||
|
full_bb.height = max_y - min_y;
|
||||||
|
return full_bb;
|
||||||
|
}
|
||||||
|
|
||||||
this.getVisibleElements = function(includeBBox) {
|
this.getVisibleElements = function(includeBBox) {
|
||||||
var nodes = current_layer.childNodes;
|
var nodes = current_layer.childNodes;
|
||||||
var i = nodes.length;
|
var i = nodes.length;
|
||||||
|
|
Loading…
Reference in New Issue