diff options
| author | Johan B. C. Engelen <jbc.engelen@swissonline.ch> | 2008-03-22 19:11:02 +0000 |
|---|---|---|
| committer | johanengelen <johanengelen@users.sourceforge.net> | 2008-03-22 19:11:02 +0000 |
| commit | 655fcebb893b44019786e7e9c7229975024f4d97 (patch) | |
| tree | 24a43ab726de543ef0f30f4d490d872d98ef3c10 /src/ui | |
| parent | Numeric values on test area (diff) | |
| download | inkscape-655fcebb893b44019786e7e9c7229975024f4d97.tar.gz inkscape-655fcebb893b44019786e7e9c7229975024f4d97.zip | |
* add RegisteredTransformedPoint widget, that transforms the point before displaying/writing. This in order to keep them in SVG coordinate system in XML, but in canvas coord system in the spinbox
* move Geom::Point XML writing to central place in ostringstream
* add verb for LPE context
(bzr r5165)
Diffstat (limited to 'src/ui')
| -rw-r--r-- | src/ui/widget/point.cpp | 5 | ||||
| -rw-r--r-- | src/ui/widget/point.h | 3 | ||||
| -rw-r--r-- | src/ui/widget/registered-widget.cpp | 47 | ||||
| -rw-r--r-- | src/ui/widget/registered-widget.h | 21 |
4 files changed, 74 insertions, 2 deletions
diff --git a/src/ui/widget/point.cpp b/src/ui/widget/point.cpp index 634329ddc..1efb26a78 100644 --- a/src/ui/widget/point.cpp +++ b/src/ui/widget/point.cpp @@ -149,6 +149,11 @@ Point::getYValue() const { return ywidget.getValue(); } +Geom::Point +Point::getValue() const +{ + return Geom::Point( getXValue() , getYValue() ); +} /** Get the value spin_button represented as an integer. */ int diff --git a/src/ui/widget/point.h b/src/ui/widget/point.h index b65a13e20..a9be05afc 100644 --- a/src/ui/widget/point.h +++ b/src/ui/widget/point.h @@ -19,7 +19,7 @@ #include <gtkmm/adjustment.h> #include <gtkmm/spinbutton.h> - +#include <2geom/point.h> #include "ui/widget/labelled.h" #include "ui/widget/scalar.h" @@ -57,6 +57,7 @@ public: bool getSnapToTicks() const; double getXValue() const; double getYValue() const; + Geom::Point getValue() const; int getXValueAsInt() const; int getYValueAsInt() const; diff --git a/src/ui/widget/registered-widget.cpp b/src/ui/widget/registered-widget.cpp index 3b36ea6bc..1de084f5d 100644 --- a/src/ui/widget/registered-widget.cpp +++ b/src/ui/widget/registered-widget.cpp @@ -467,6 +467,53 @@ RegisteredPoint::on_value_changed() _wr->setUpdating (false); } +/*######################################### + * Registered TRANSFORMEDPOINT + */ + +RegisteredTransformedPoint::~RegisteredTransformedPoint() +{ + _value_x_changed_connection.disconnect(); + _value_y_changed_connection.disconnect(); +} + +RegisteredTransformedPoint::RegisteredTransformedPoint ( const Glib::ustring& label, const Glib::ustring& tip, + const Glib::ustring& key, Registry& wr, Inkscape::XML::Node* repr_in, + SPDocument* doc_in ) + : RegisteredWidget<Point> (label, tip), + transform(Geom::identity()) +{ + init_parent(key, wr, repr_in, doc_in); + + setRange (-1e6, 1e6); + setDigits (2); + setIncrements(0.1, 1.0); + _value_x_changed_connection = signal_x_value_changed().connect (sigc::mem_fun (*this, &RegisteredTransformedPoint::on_value_changed)); + _value_y_changed_connection = signal_y_value_changed().connect (sigc::mem_fun (*this, &RegisteredTransformedPoint::on_value_changed)); +} + +void +RegisteredTransformedPoint::on_value_changed() +{ + if (setProgrammatically()) { + clearProgrammatically(); + return; + } + + if (_wr->isUpdating()) + return; + + _wr->setUpdating (true); + + Geom::Point pos = getValue() * transform; + + Inkscape::SVGOStringStream os; + os << pos; + + write_to_xml(os.str().c_str()); + + _wr->setUpdating (false); +} /*######################################### * Registered RANDOM diff --git a/src/ui/widget/registered-widget.h b/src/ui/widget/registered-widget.h index a3b04575e..f34895620 100644 --- a/src/ui/widget/registered-widget.h +++ b/src/ui/widget/registered-widget.h @@ -17,7 +17,7 @@ #include <gtkmm/adjustment.h> #include <gtkmm/tooltips.h> #include <gtkmm/togglebutton.h> - +#include <2geom/matrix.h> #include "xml/node.h" #include "registry.h" @@ -294,6 +294,25 @@ protected: }; +class RegisteredTransformedPoint : public RegisteredWidget<Point> { +public: + virtual ~RegisteredTransformedPoint(); + RegisteredTransformedPoint ( const Glib::ustring& label, + const Glib::ustring& tip, + const Glib::ustring& key, + Registry& wr, + Inkscape::XML::Node* repr_in = NULL, + SPDocument *doc_in = NULL ); + +protected: + sigc::connection _value_x_changed_connection; + sigc::connection _value_y_changed_connection; + void on_value_changed(); + + Geom::Matrix transform; +}; + + class RegisteredRandom : public RegisteredWidget<Random> { public: virtual ~RegisteredRandom(); |
