summaryrefslogtreecommitdiffstats
path: root/src/object/sp-item.cpp
diff options
context:
space:
mode:
authorMarc Jeanmougin <marc@jeanmougin.fr>2019-06-20 13:08:43 +0000
committerMarc Jeanmougin <marc@jeanmougin.fr>2019-06-20 13:08:43 +0000
commita6538efd22aae68fae6dca99748f13981e547922 (patch)
tree6765cbf522a7ef884483dc8c8ed29117f8a9e9a3 /src/object/sp-item.cpp
parentRemove unused code. (diff)
parentRefactoring: replace funcs with methods. (diff)
downloadinkscape-a6538efd22aae68fae6dca99748f13981e547922.tar.gz
inkscape-a6538efd22aae68fae6dca99748f13981e547922.zip
Merge branch 'refactoring' of gitlab.com:shlomif/inkscape
Diffstat (limited to 'src/object/sp-item.cpp')
-rw-r--r--src/object/sp-item.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/object/sp-item.cpp b/src/object/sp-item.cpp
index 5a8e23e84..7d8ab4b50 100644
--- a/src/object/sp-item.cpp
+++ b/src/object/sp-item.cpp
@@ -1716,6 +1716,59 @@ void SPItem::convert_to_guides() const {
sp_guide_pt_pairs_to_guides(document, pts);
}
+void SPItem::rotate_rel(Geom::Rotate const &rotation)
+{
+ Geom::Point center = getCenter();
+ Geom::Translate const s(getCenter());
+ Geom::Affine affine = Geom::Affine(s).inverse() * Geom::Affine(rotation) * Geom::Affine(s);
+
+ // Rotate item.
+ set_i2d_affine(i2dt_affine() * (Geom::Affine)affine);
+ // Use each item's own transform writer, consistent with sp_selection_apply_affine()
+ doWriteTransform(transform);
+
+ // Restore the center position (it's changed because the bbox center changed)
+ if (isCenterSet()) {
+ setCenter(center * affine);
+ updateRepr();
+ }
+}
+
+void SPItem::scale_rel(Geom::Scale const &scale)
+{
+ Geom::OptRect bbox = desktopVisualBounds();
+ if (bbox) {
+ Geom::Translate const s(bbox->midpoint()); // use getCenter?
+ set_i2d_affine(i2dt_affine() * s.inverse() * scale * s);
+ doWriteTransform(transform);
+ }
+}
+
+void SPItem::skew_rel(double skewX, double skewY)
+{
+ Geom::Point center = getCenter();
+ Geom::Translate const s(getCenter());
+
+ Geom::Affine const skew(1, skewY, skewX, 1, 0, 0);
+ Geom::Affine affine = Geom::Affine(s).inverse() * skew * Geom::Affine(s);
+
+ set_i2d_affine(i2dt_affine() * affine);
+ doWriteTransform(transform);
+
+ // Restore the center position (it's changed because the bbox center changed)
+ if (isCenterSet()) {
+ setCenter(center * affine);
+ updateRepr();
+ }
+}
+
+void SPItem::move_rel( Geom::Translate const &tr)
+{
+ set_i2d_affine(i2dt_affine() * tr);
+
+ doWriteTransform(transform);
+}
+
/*
Local Variables:
mode:c++