diff options
Diffstat (limited to 'src/ui/widget/registered-widget.cpp')
| -rw-r--r-- | src/ui/widget/registered-widget.cpp | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/ui/widget/registered-widget.cpp b/src/ui/widget/registered-widget.cpp index 1de084f5d..1fd956897 100644 --- a/src/ui/widget/registered-widget.cpp +++ b/src/ui/widget/registered-widget.cpp @@ -481,7 +481,7 @@ RegisteredTransformedPoint::RegisteredTransformedPoint ( const Glib::ustring& la const Glib::ustring& key, Registry& wr, Inkscape::XML::Node* repr_in, SPDocument* doc_in ) : RegisteredWidget<Point> (label, tip), - transform(Geom::identity()) + to_svg(Geom::identity()) { init_parent(key, wr, repr_in, doc_in); @@ -493,6 +493,25 @@ RegisteredTransformedPoint::RegisteredTransformedPoint ( const Glib::ustring& la } void +RegisteredTransformedPoint::setValue(Geom::Point & p) +{ + Geom::Point new_p = p * to_svg.inverse(); + Point::setValue(new_p); // the Point widget should display things in canvas coordinates +} + +void +RegisteredTransformedPoint::setTransform(Geom::Matrix & canvas_to_svg) +{ + // check if matrix is singular / has inverse + if ( ! canvas_to_svg.isSingular() ) { + to_svg = canvas_to_svg; + } else { + // set back to default + to_svg = Geom::identity(); + } +} + +void RegisteredTransformedPoint::on_value_changed() { if (setProgrammatically()) { @@ -505,7 +524,7 @@ RegisteredTransformedPoint::on_value_changed() _wr->setUpdating (true); - Geom::Point pos = getValue() * transform; + Geom::Point pos = getValue() * to_svg; Inkscape::SVGOStringStream os; os << pos; |
