fixtransforms branch: Fixes to rotating skewed elements
git-svn-id: http://svg-edit.googlecode.com/svn/branches/fixtransforms@1047 eee81c28-f429-11dd-99c0-75d572ba1dddmaster
parent
194e80ff77
commit
8d339e2613
|
@ -1746,8 +1746,11 @@ function BatchCommand(text) {
|
||||||
var box = canvas.getBBox(selected);
|
var box = canvas.getBBox(selected);
|
||||||
// TODO: fix this, it is not correct in the case of a skewed element
|
// TODO: fix this, it is not correct in the case of a skewed element
|
||||||
// - use transformBox?
|
// - use transformBox?
|
||||||
|
// TODO: if a rotated, skewed element is moved, at first no problem
|
||||||
|
// however, if another element is selected, then back to the first element
|
||||||
|
// it will hop around...
|
||||||
var center = {x: (box.x+box.width/2), y: (box.y+box.height/2)};
|
var center = {x: (box.x+box.width/2), y: (box.y+box.height/2)};
|
||||||
var newcenter = {x: center.x, y: center.y };
|
var newcenter = transformPoint(center.x,center.y,transformListToTransform(tlist).matrix);//{x: center.x, y: center.y };
|
||||||
var m = svgroot.createSVGMatrix();
|
var m = svgroot.createSVGMatrix();
|
||||||
|
|
||||||
// temporarily strip off the rotate
|
// temporarily strip off the rotate
|
||||||
|
@ -1784,7 +1787,7 @@ function BatchCommand(text) {
|
||||||
{
|
{
|
||||||
operation = 2; // translate
|
operation = 2; // translate
|
||||||
var oldxlate = tlist.getItem(0).matrix,
|
var oldxlate = tlist.getItem(0).matrix,
|
||||||
meq = transformListToTransform(tlist).matrix,
|
meq = transformListToTransform(tlist,1).matrix,
|
||||||
meq_inv = meq.inverse();
|
meq_inv = meq.inverse();
|
||||||
m = matrixMultiply( meq_inv, oldxlate, meq );
|
m = matrixMultiply( meq_inv, oldxlate, meq );
|
||||||
tlist.removeItem(0);
|
tlist.removeItem(0);
|
||||||
|
@ -1798,7 +1801,8 @@ function BatchCommand(text) {
|
||||||
if (angle) {
|
if (angle) {
|
||||||
// calculate the new center from the translate
|
// calculate the new center from the translate
|
||||||
if (operation == 2) {
|
if (operation == 2) {
|
||||||
newcenter = transformPoint(center.x,center.y,m);
|
// TODO: avoid this?
|
||||||
|
// newcenter = transformPoint(center.x,center.y,m);
|
||||||
}
|
}
|
||||||
else if (operation == 3) {
|
else if (operation == 3) {
|
||||||
xcenter = transformPoint(center.x,center.y,m);
|
xcenter = transformPoint(center.x,center.y,m);
|
||||||
|
@ -1818,6 +1822,7 @@ function BatchCommand(text) {
|
||||||
|
|
||||||
// at this point, the element looks exactly how we want it to look but its
|
// at this point, the element looks exactly how we want it to look but its
|
||||||
// rotational center may be off in the case of a resize - we need to fix that
|
// rotational center may be off in the case of a resize - we need to fix that
|
||||||
|
// TODO: if we get in here, I think there are problems
|
||||||
if (angle && operation == 3) {
|
if (angle && operation == 3) {
|
||||||
box = canvas.getBBox(selected);
|
box = canvas.getBBox(selected);
|
||||||
m = transformListToTransform(tlist).matrix;
|
m = transformListToTransform(tlist).matrix;
|
||||||
|
@ -5495,6 +5500,7 @@ function BatchCommand(text) {
|
||||||
if (elem.tagName == "g" && (attr != "transform" && attr != "opacity")) continue;
|
if (elem.tagName == "g" && (attr != "transform" && attr != "opacity")) continue;
|
||||||
var oldval = attr == "#text" ? elem.textContent : elem.getAttribute(attr);
|
var oldval = attr == "#text" ? elem.textContent : elem.getAttribute(attr);
|
||||||
if (oldval == null) oldval = "";
|
if (oldval == null) oldval = "";
|
||||||
|
// TODO: determine why r877 changed this to !== which will means this if will always run
|
||||||
if (oldval !== newValue) {
|
if (oldval !== newValue) {
|
||||||
if (attr == "#text") {
|
if (attr == "#text") {
|
||||||
var old_w = canvas.getBBox(elem).width;
|
var old_w = canvas.getBBox(elem).width;
|
||||||
|
@ -5542,11 +5548,16 @@ function BatchCommand(text) {
|
||||||
while (n--) {
|
while (n--) {
|
||||||
var xform = tlist.getItem(n);
|
var xform = tlist.getItem(n);
|
||||||
if (xform.type == 4) {
|
if (xform.type == 4) {
|
||||||
var cx = round(selectedBBoxes[i].x + selectedBBoxes[i].width/2),
|
// remove old rotate
|
||||||
cy = round(selectedBBoxes[i].y + selectedBBoxes[i].height/2);
|
tlist.removeItem(xform);
|
||||||
|
|
||||||
|
var box = canvas.getBBox(elem);
|
||||||
|
var center = transformPoint(box.x+box.width/2, box.y+box.height/2, transformListToTransform(tlist).matrix);
|
||||||
|
var cx = center.x,
|
||||||
|
cy = center.y;
|
||||||
var newrot = svgroot.createSVGTransform();
|
var newrot = svgroot.createSVGTransform();
|
||||||
newrot.setRotate(angle, cx, cy);
|
newrot.setRotate(angle, cx, cy);
|
||||||
tlist.replaceItem(newrot, n);
|
tlist.insertItemBefore(newrot, n);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue