summaryrefslogtreecommitdiffstats
path: root/src/ui
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2008-03-22 19:11:02 +0000
committerjohanengelen <johanengelen@users.sourceforge.net>2008-03-22 19:11:02 +0000
commit655fcebb893b44019786e7e9c7229975024f4d97 (patch)
tree24a43ab726de543ef0f30f4d490d872d98ef3c10 /src/ui
parentNumeric values on test area (diff)
downloadinkscape-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.cpp5
-rw-r--r--src/ui/widget/point.h3
-rw-r--r--src/ui/widget/registered-widget.cpp47
-rw-r--r--src/ui/widget/registered-widget.h21
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();