summaryrefslogtreecommitdiffstats
path: root/src/sp-item-group.cpp
diff options
context:
space:
mode:
authormathog <>2014-09-04 20:50:55 +0000
committermathog <>2014-09-04 20:50:55 +0000
commit018c346b862ccd7dafcbf0e35b757735446821f7 (patch)
treebc96ed429cbae33ad28b22d33b96c1fc2cdaec8f /src/sp-item-group.cpp
parentRemove more whiteboard related leftovers. (diff)
downloadinkscape-018c346b862ccd7dafcbf0e35b757735446821f7.tar.gz
inkscape-018c346b862ccd7dafcbf0e35b757735446821f7.zip
resolves bug 1348417 and implements addition features for bug 1302857
(bzr r13544)
Diffstat (limited to 'src/sp-item-group.cpp')
-rw-r--r--src/sp-item-group.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp
index bb52b0c55..3d03edd85 100644
--- a/src/sp-item-group.cpp
+++ b/src/sp-item-group.cpp
@@ -651,7 +651,25 @@ void SPGroup::scaleChildItemsRec(Geom::Scale const &sc, Geom::Point const &p)
for (SPObject *o = firstChild() ; o ; o = o->getNext() ) {
if ( SP_IS_ITEM(o) ) {
if (SP_IS_GROUP(o) && !SP_IS_BOX3D(o)) {
- SP_GROUP(o)->scaleChildItemsRec(sc, p);
+ // Doing it this way breaks clipping because transforms are applied
+ // in coordinates for draws but nothing in defs is changed
+ // SP_GROUP(o)->scaleChildItemsRec(sc, p);
+ // instead change the transform on the entire group, and the transform
+ // is applied after any references to clipping paths.
+ SPItem *item = SP_ITEM(o);
+ Geom::Translate const s(p);
+ Geom::Affine final = s.inverse() * sc * s;
+ Geom::Affine tAff = item->i2dt_affine() * final;
+ item->set_i2d_affine(tAff);
+ tAff = item->transform;
+ // Eliminate common rounding error affecting EMF/WMF input.
+ // When the rounding error persists it converts the simple
+ // transform=scale() to transform=matrix().
+ if(std::abs(tAff[4]) < 1.0e-5 && std::abs(tAff[5]) < 1.0e-5){
+ tAff[4] = 0.0;
+ tAff[5] = 0.0;
+ }
+ item->doWriteTransform(item->getRepr(), tAff, NULL, true);
} else {
SPItem *item = SP_ITEM(o);
Geom::OptRect bbox = item->desktopVisualBounds();