diff options
| author | Shlomi Fish <shlomif@shlomifish.org> | 2019-06-12 17:36:26 +0000 |
|---|---|---|
| committer | Shlomi Fish <shlomif@shlomifish.org> | 2019-06-12 17:36:26 +0000 |
| commit | 845d677a3bd7a39320e32b6c53fa70963a92ba87 (patch) | |
| tree | 0ddee54aa21e0e3122388b3e57fbb5602debacfd /src/object | |
| parent | Refactor: convert rotate_rel() to a method. (diff) | |
| download | inkscape-845d677a3bd7a39320e32b6c53fa70963a92ba87.tar.gz inkscape-845d677a3bd7a39320e32b6c53fa70963a92ba87.zip | |
Refactoring: replace funcs with methods.
I hereby disclaim any implicit or explicit ownership of my changes in this
changeset, and put them under a multiple licence consisting of your choice of
one of more of:
- The CC0 / Public Domain - https://creativecommons.org/choose/zero/ .
- The MIT / Expat license - https://en.wikipedia.org/wiki/MIT_License
- The default licence of your project
- The https://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License - version
2.1 or higher
- The https://en.wikipedia.org/wiki/GNU_General_Public_License - version 2 or
higher
- Any licence in the 2018-Aug-27 popular licenses list of
https://opensource.org/licenses
- The https://en.wikipedia.org/wiki/Apache_License version 2.0 or later
- The https://en.wikipedia.org/wiki/Artistic_License version 2.0 or later
- The https://en.wikipedia.org/wiki/ISC_license
- The https://opensource.org/licenses/BSD-2-Clause
Crediting me will be nice, but not mandatory, and you can change the licence
of the project without needing my permission.
Diffstat (limited to 'src/object')
| -rw-r--r-- | src/object/sp-item-group.cpp | 2 | ||||
| -rw-r--r-- | src/object/sp-item-transform.cpp | 35 | ||||
| -rw-r--r-- | src/object/sp-item-transform.h | 4 | ||||
| -rw-r--r-- | src/object/sp-item.cpp | 36 | ||||
| -rw-r--r-- | src/object/sp-item.h | 3 |
5 files changed, 40 insertions, 40 deletions
diff --git a/src/object/sp-item-group.cpp b/src/object/sp-item-group.cpp index acc08d175..981308b0e 100644 --- a/src/object/sp-item-group.cpp +++ b/src/object/sp-item-group.cpp @@ -733,7 +733,7 @@ void SPGroup::translateChildItems(Geom::Translate const &tr) for (auto& o: children) { SPItem *item = dynamic_cast<SPItem *>(&o); if ( item ) { - sp_item_move_rel(item, tr); + item->move_rel(tr); } } } diff --git a/src/object/sp-item-transform.cpp b/src/object/sp-item-transform.cpp index 4fbe0bcc5..e01571ef4 100644 --- a/src/object/sp-item-transform.cpp +++ b/src/object/sp-item-transform.cpp @@ -21,41 +21,6 @@ #include <glib.h> -void sp_item_scale_rel(SPItem *item, Geom::Scale const &scale) -{ - Geom::OptRect bbox = item->desktopVisualBounds(); - if (bbox) { - Geom::Translate const s(bbox->midpoint()); // use getCenter? - item->set_i2d_affine(item->i2dt_affine() * s.inverse() * scale * s); - item->doWriteTransform(item->transform); - } -} - -void sp_item_skew_rel(SPItem *item, double skewX, double skewY) -{ - Geom::Point center = item->getCenter(); - Geom::Translate const s(item->getCenter()); - - Geom::Affine const skew(1, skewY, skewX, 1, 0, 0); - Geom::Affine affine = Geom::Affine(s).inverse() * skew * Geom::Affine(s); - - item->set_i2d_affine(item->i2dt_affine() * affine); - item->doWriteTransform(item->transform); - - // Restore the center position (it's changed because the bbox center changed) - if (item->isCenterSet()) { - item->setCenter(center * affine); - item->updateRepr(); - } -} - -void sp_item_move_rel(SPItem *item, Geom::Translate const &tr) -{ - item->set_i2d_affine(item->i2dt_affine() * tr); - - item->doWriteTransform(item->transform); -} - /** * Calculate the affine transformation required to transform one visual bounding box into another, accounting for a uniform strokewidth. * diff --git a/src/object/sp-item-transform.h b/src/object/sp-item-transform.h index 02c8362dd..4c7401409 100644 --- a/src/object/sp-item-transform.h +++ b/src/object/sp-item-transform.h @@ -14,10 +14,6 @@ class SPItem; -void sp_item_scale_rel (SPItem *item, Geom::Scale const &scale); -void sp_item_skew_rel (SPItem *item, double skewX, double skewY); -void sp_item_move_rel(SPItem *item, Geom::Translate const &tr); - Geom::Affine get_scale_transform_for_uniform_stroke (Geom::Rect const &bbox_visual, double stroke_x, double stroke_y, bool transform_stroke, bool preserve, double x0, double y0, double x1, double y1); Geom::Affine get_scale_transform_for_variable_stroke (Geom::Rect const &bbox_visual, Geom::Rect const &bbox_geom, bool transform_stroke, bool preserve, double x0, double y0, double x1, double y1); Geom::Rect get_visual_bbox (Geom::OptRect const &initial_geom_bbox, Geom::Affine const &abs_affine, double const initial_strokewidth, bool const transform_stroke); diff --git a/src/object/sp-item.cpp b/src/object/sp-item.cpp index ee54c8ada..7d8ab4b50 100644 --- a/src/object/sp-item.cpp +++ b/src/object/sp-item.cpp @@ -1733,6 +1733,42 @@ void SPItem::rotate_rel(Geom::Rotate const &rotation) 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++ diff --git a/src/object/sp-item.h b/src/object/sp-item.h index 4ff3ca460..8a4eb7e78 100644 --- a/src/object/sp-item.h +++ b/src/object/sp-item.h @@ -396,6 +396,9 @@ private: public: void rotate_rel(Geom::Rotate const &rotation); + void scale_rel(Geom::Scale const &scale); + void skew_rel(double skewX, double skewY); + void move_rel( Geom::Translate const &tr); void build(SPDocument *document, Inkscape::XML::Node *repr) override; void release() override; void set(SPAttributeEnum key, char const* value) override; |
