summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Engel <markus.engel@tum.de>2013-04-13 16:13:17 +0000
committerMarkus Engel <markus.engel@tum.de>2013-04-13 16:13:17 +0000
commitfbdc8b84ff670c684dafc7d7d403ed01e7077e70 (patch)
tree964a82e4e94d8d6602e90893ac51ac9e2f7ec362
parentMade factory a template. (diff)
downloadinkscape-fbdc8b84ff670c684dafc7d7d403ed01e7077e70.tar.gz
inkscape-fbdc8b84ff670c684dafc7d7d403ed01e7077e70.zip
Replaced casting macros for EventContext tree; added contructors.
(bzr r11608.1.96)
-rw-r--r--src/arc-context.cpp16
-rw-r--r--src/arc-context.h7
-rw-r--r--src/box3d-context.cpp16
-rw-r--r--src/box3d-context.h7
-rw-r--r--src/common-context.cpp8
-rw-r--r--src/common-context.h6
-rw-r--r--src/connector-context.cpp16
-rw-r--r--src/connector-context.h8
-rw-r--r--src/desktop.cpp26
-rw-r--r--src/draw-context.cpp8
-rw-r--r--src/draw-context.h6
-rw-r--r--src/dropper-context.cpp15
-rw-r--r--src/dropper-context.h9
-rw-r--r--src/dyna-draw-context.cpp17
-rw-r--r--src/dyna-draw-context.h9
-rw-r--r--src/eraser-context.cpp15
-rw-r--r--src/eraser-context.h8
-rw-r--r--src/event-context.cpp11
-rw-r--r--src/event-context.h11
-rw-r--r--src/flood-context.cpp15
-rw-r--r--src/flood-context.h8
-rw-r--r--src/gradient-context.cpp16
-rw-r--r--src/gradient-context.h7
-rw-r--r--src/lpe-tool-context.cpp16
-rw-r--r--src/lpe-tool-context.h7
-rw-r--r--src/measure-context.cpp16
-rw-r--r--src/measure-context.h8
-rw-r--r--src/mesh-context.cpp16
-rw-r--r--src/mesh-context.h8
-rw-r--r--src/pen-context.cpp16
-rw-r--r--src/pen-context.h8
-rw-r--r--src/pencil-context.cpp15
-rw-r--r--src/pencil-context.h8
-rw-r--r--src/rect-context.cpp15
-rw-r--r--src/rect-context.h7
-rw-r--r--src/select-context.cpp16
-rw-r--r--src/select-context.h7
-rw-r--r--src/sp-factory.h23
-rw-r--r--src/sp-object.cpp4
-rw-r--r--src/spiral-context.cpp43
-rw-r--r--src/spiral-context.h7
-rw-r--r--src/spray-context.cpp32
-rw-r--r--src/spray-context.h7
-rw-r--r--src/star-context.cpp42
-rw-r--r--src/star-context.h8
-rw-r--r--src/text-context.cpp45
-rw-r--r--src/text-context.h7
-rw-r--r--src/tweak-context.cpp37
-rw-r--r--src/tweak-context.h7
-rw-r--r--src/ui/tool/node-tool.cpp16
-rw-r--r--src/ui/tool/node-tool.h7
-rw-r--r--src/zoom-context.cpp44
-rw-r--r--src/zoom-context.h7
53 files changed, 526 insertions, 238 deletions
diff --git a/src/arc-context.cpp b/src/arc-context.cpp
index cd9adece0..21fd41a49 100644
--- a/src/arc-context.cpp
+++ b/src/arc-context.cpp
@@ -60,6 +60,21 @@ static void sp_arc_drag(SPArcContext *ec, Geom::Point pt, guint state);
static void sp_arc_finish(SPArcContext *ec);
static void sp_arc_cancel(SPArcContext *ec);
+
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createArcContext() {
+ return new SPArcContext();
+ }
+
+ bool arcContextRegistered = ToolFactory::instance().registerObject("/tools/shapes/arc", createArcContext);
+}
+
+const std::string& CArcContext::getPrefsPath() {
+ return SPArcContext::prefsPath;
+}
+
const std::string SPArcContext::prefsPath = "/tools/shapes/arc";
G_DEFINE_TYPE(SPArcContext, sp_arc_context, SP_TYPE_EVENT_CONTEXT);
@@ -87,6 +102,7 @@ SPArcContext::SPArcContext() : SPEventContext() {
arc_context->carccontext = new CArcContext(arc_context);
delete arc_context->ceventcontext;
arc_context->ceventcontext = arc_context->carccontext;
+ types.insert(typeid(SPArcContext));
arc_context->_message_context = 0;
diff --git a/src/arc-context.h b/src/arc-context.h
index 7ab4ee884..c7ff339f4 100644
--- a/src/arc-context.h
+++ b/src/arc-context.h
@@ -22,10 +22,12 @@
#include "event-context.h"
#define SP_TYPE_ARC_CONTEXT (sp_arc_context_get_type())
-#define SP_ARC_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_ARC_CONTEXT, SPArcContext))
+//#define SP_ARC_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_ARC_CONTEXT, SPArcContext))
#define SP_ARC_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_ARC_CONTEXT, SPArcContextClass))
-#define SP_IS_ARC_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_ARC_CONTEXT))
+//#define SP_IS_ARC_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_ARC_CONTEXT))
#define SP_IS_ARC_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_ARC_CONTEXT))
+#define SP_ARC_CONTEXT(obj) ((SPArcContext*)obj)
+#define SP_IS_ARC_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPArcContext)))
class CArcContext;
@@ -57,6 +59,7 @@ public:
virtual gint root_handler(GdkEvent* event);
virtual gint item_handler(SPItem* item, GdkEvent* event);
+ virtual const std::string& getPrefsPath();
private:
SPArcContext* sparccontext;
};
diff --git a/src/box3d-context.cpp b/src/box3d-context.cpp
index a5b8c6e2f..5fee83bbb 100644
--- a/src/box3d-context.cpp
+++ b/src/box3d-context.cpp
@@ -64,6 +64,21 @@ static gint sp_box3d_context_item_handler(SPEventContext *event_context, SPItem
static void sp_box3d_drag(Box3DContext &bc, guint state);
static void sp_box3d_finish(Box3DContext *bc);
+
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createBox3dContext() {
+ return new Box3DContext();
+ }
+
+ bool box3dContextRegistered = ToolFactory::instance().registerObject("/tools/shapes/3dbox", createBox3dContext);
+}
+
+const std::string& CBox3DContext::getPrefsPath() {
+ return Box3DContext::prefsPath;
+}
+
const std::string Box3DContext::prefsPath = "/tools/shapes/3dbox";
G_DEFINE_TYPE(Box3DContext, sp_box3d_context, SP_TYPE_EVENT_CONTEXT);
@@ -91,6 +106,7 @@ Box3DContext::Box3DContext() : SPEventContext() {
box3d_context->cbox3dcontext = new CBox3DContext(box3d_context);
delete box3d_context->ceventcontext;
box3d_context->ceventcontext = box3d_context->cbox3dcontext;
+ types.insert(typeid(Box3DContext));
box3d_context->_message_context = 0;
diff --git a/src/box3d-context.h b/src/box3d-context.h
index a724736be..98446f45c 100644
--- a/src/box3d-context.h
+++ b/src/box3d-context.h
@@ -22,10 +22,12 @@
#include "vanishing-point.h"
#define SP_TYPE_BOX3D_CONTEXT (sp_box3d_context_get_type ())
-#define SP_BOX3D_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_BOX3D_CONTEXT, Box3DContext))
+//#define SP_BOX3D_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_BOX3D_CONTEXT, Box3DContext))
#define SP_BOX3D_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_BOX3D_CONTEXT, Box3DContextClass))
-#define SP_IS_BOX3D_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_BOX3D_CONTEXT))
+//#define SP_IS_BOX3D_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_BOX3D_CONTEXT))
#define SP_IS_BOX3D_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_BOX3D_CONTEXT))
+#define SP_BOX3D_CONTEXT(obj) ((Box3DContext*)obj)
+#define SP_IS_BOX3D_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(Box3DContext)))
class CBox3DContext;
@@ -78,6 +80,7 @@ public:
virtual gint root_handler(GdkEvent* event);
virtual gint item_handler(SPItem* item, GdkEvent* event);
+ virtual const std::string& getPrefsPath();
private:
Box3DContext* box3dcontext;
};
diff --git a/src/common-context.cpp b/src/common-context.cpp
index 1feb6ee95..fb0ddb720 100644
--- a/src/common-context.cpp
+++ b/src/common-context.cpp
@@ -47,9 +47,11 @@ CCommonContext::CCommonContext(SPCommonContext* commoncontext) : CEventContext(c
SPCommonContext::SPCommonContext() : SPEventContext() {
SPCommonContext* ctx = this;
- ctx->ccommoncontext = new CCommonContext(ctx);
- delete ctx->ceventcontext;
- ctx->ceventcontext = ctx->ccommoncontext;
+ //ctx->ccommoncontext = new CCommonContext(ctx);
+ //delete ctx->ceventcontext;
+ //ctx->ceventcontext = ctx->ccommoncontext;
+ ctx->ccommoncontext = 0;
+ types.insert(typeid(SPCommonContext));
ctx->_message_context = 0;
ctx->tremor = 0;
diff --git a/src/common-context.h b/src/common-context.h
index 8ed5ba1d3..d203f1f3c 100644
--- a/src/common-context.h
+++ b/src/common-context.h
@@ -24,10 +24,12 @@
#include <2geom/point.h>
#define SP_TYPE_COMMON_CONTEXT (sp_common_context_get_type())
-#define SP_COMMON_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_COMMON_CONTEXT, SPCommonContext))
+//#define SP_COMMON_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_COMMON_CONTEXT, SPCommonContext))
#define SP_COMMON_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_COMMON_CONTEXT, SPCommonContextClass))
-#define SP_IS_COMMON_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_COMMON_CONTEXT))
+//#define SP_IS_COMMON_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_COMMON_CONTEXT))
#define SP_IS_COMMON_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_COMMON_CONTEXT))
+#define SP_COMMON_CONTEXT(obj) ((SPCommonContext*)obj)
+#define SP_IS_COMMON_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPCommonContext)))
#define SAMPLING_SIZE 8 /* fixme: ?? */
diff --git a/src/connector-context.cpp b/src/connector-context.cpp
index 5c7bf97c8..d5a628d46 100644
--- a/src/connector-context.cpp
+++ b/src/connector-context.cpp
@@ -171,6 +171,21 @@ static Inkscape::XML::NodeEventVector layer_repr_events = {
NULL /* order_changed */
};
+
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createConnectorContext() {
+ return new SPConnectorContext();
+ }
+
+ bool connectorContextRegistered = ToolFactory::instance().registerObject("/tools/connector", createConnectorContext);
+}
+
+const std::string& CConnectorContext::getPrefsPath() {
+ return SPConnectorContext::prefsPath;
+}
+
const std::string SPConnectorContext::prefsPath = "/tools/connector";
G_DEFINE_TYPE(SPConnectorContext, sp_connector_context, SP_TYPE_EVENT_CONTEXT);
@@ -200,6 +215,7 @@ SPConnectorContext::SPConnectorContext() : SPEventContext() {
cc->cconnectorcontext = new CConnectorContext(cc);
delete cc->ceventcontext;
cc->ceventcontext = cc->cconnectorcontext;
+ types.insert(typeid(SPConnectorContext));
cc->red_curve = 0;
cc->isOrthogonal = false;
diff --git a/src/connector-context.h b/src/connector-context.h
index f74903d74..6e0655c1e 100644
--- a/src/connector-context.h
+++ b/src/connector-context.h
@@ -21,10 +21,12 @@
#include <glibmm/i18n.h>
#define SP_TYPE_CONNECTOR_CONTEXT (sp_connector_context_get_type())
-#define SP_CONNECTOR_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_CONNECTOR_CONTEXT, SPConnectorContext))
+//#define SP_CONNECTOR_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_CONNECTOR_CONTEXT, SPConnectorContext))
#define SP_CONNECTOR_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_CONNECTOR_CONTEXT, SPConnectorContextClass))
-#define SP_IS_CONNECTOR_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_CONNECTOR_CONTEXT))
+//#define SP_IS_CONNECTOR_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_CONNECTOR_CONTEXT))
#define SP_IS_CONNECTOR_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_CONNECTOR_CONTEXT))
+#define SP_CONNECTOR_CONTEXT(obj) ((SPConnectorContext*)obj)
+#define SP_IS_CONNECTOR_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPConnectorContext)))
struct SPKnot;
class SPCurve;
@@ -114,6 +116,8 @@ public:
virtual gint root_handler(GdkEvent* event);
virtual gint item_handler(SPItem* item, GdkEvent* event);
+ virtual const std::string& getPrefsPath();
+
private:
SPConnectorContext* spconnectorcontext;
};
diff --git a/src/desktop.cpp b/src/desktop.cpp
index 626576c7f..17787e912 100644
--- a/src/desktop.cpp
+++ b/src/desktop.cpp
@@ -690,15 +690,15 @@ SPDesktop::change_document (SPDocument *theDocument)
void
SPDesktop::set_event_context (GType type, const gchar *config)
{
- SPEventContext *ec;
+ //SPEventContext *ec;
//while (event_context) {
- ec = event_context;
- sp_event_context_deactivate (ec);
+ //ec = event_context;
+ sp_event_context_deactivate (event_context);
// we have to keep event_context valid during destruction - otherwise writing
// destructors is next to impossible
// SPEventContext *next = ec->next;
- sp_event_context_finish (ec);
- g_object_unref (G_OBJECT (ec));
+ sp_event_context_finish (event_context);
+ g_object_unref (G_OBJECT (event_context));
// event_context = next;
//}
@@ -707,20 +707,20 @@ SPDesktop::set_event_context (GType type, const gchar *config)
// LP #622350. Cutting and undoing again in the node tool resets the event
// context to the node tool. In this bug the line bellow invokes GDK_LEAVE_NOTIFY
// events which cannot be handled and must be discarded.
- ec = sp_event_context_new (type, this, config, SP_EVENT_CONTEXT_STATIC);
+ event_context = sp_event_context_new (type, this, config, SP_EVENT_CONTEXT_STATIC);
// ec->next = event_context;
- event_context = ec;
+ //event_context = ec;
// Now the event_context has been set again and we can process all events again
- sp_event_context_activate (ec);
- _event_context_changed_signal.emit (this, ec);
+ sp_event_context_activate (event_context);
+ _event_context_changed_signal.emit (this, event_context);
}
/**
* Push event context onto desktop's context stack.
*/
-void
-SPDesktop::push_event_context (GType type, const gchar *config, unsigned int key)
-{
+//void
+//SPDesktop::push_event_context (GType type, const gchar *config, unsigned int key)
+//{
// SPEventContext *ref, *ec;
//
// if (event_context && event_context->key == key) return;
@@ -739,7 +739,7 @@ SPDesktop::push_event_context (GType type, const gchar *config, unsigned int key
// event_context = ec;
// sp_event_context_activate (ec);
// _event_context_changed_signal.emit (this, ec);
-}
+//}
/**
* Sets the coordinate status to a given point
diff --git a/src/draw-context.cpp b/src/draw-context.cpp
index cdb0aeeaa..7e192f7ad 100644
--- a/src/draw-context.cpp
+++ b/src/draw-context.cpp
@@ -99,9 +99,11 @@ CDrawContext::CDrawContext(SPDrawContext* drawcontext) : CEventContext(drawconte
SPDrawContext::SPDrawContext() : SPEventContext() {
SPDrawContext* dc = this;
- dc->cdrawcontext = new CDrawContext(dc);
- delete dc->ceventcontext;
- dc->ceventcontext = dc->cdrawcontext;
+ //dc->cdrawcontext = new CDrawContext(dc);
+ //delete dc->ceventcontext;
+ //dc->ceventcontext = dc->cdrawcontext;
+ dc->cdrawcontext = 0;
+ types.insert(typeid(SPDrawContext));
dc->selection = 0;
dc->grab = 0;
diff --git a/src/draw-context.h b/src/draw-context.h
index f2024a952..25165eb27 100644
--- a/src/draw-context.h
+++ b/src/draw-context.h
@@ -24,10 +24,12 @@ G_BEGIN_DECLS
/* Freehand context */
#define SP_TYPE_DRAW_CONTEXT (sp_draw_context_get_type())
-#define SP_DRAW_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_DRAW_CONTEXT, SPDrawContext))
+//#define SP_DRAW_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_DRAW_CONTEXT, SPDrawContext))
#define SP_DRAW_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_DRAW_CONTEXT, SPDrawContextClass))
-#define SP_IS_DRAW_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_DRAW_CONTEXT))
+//#define SP_IS_DRAW_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_DRAW_CONTEXT))
#define SP_IS_DRAW_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_DRAW_CONTEXT))
+#define SP_DRAW_CONTEXT(obj) ((SPDrawContext*)obj)
+#define SP_IS_DRAW_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPDrawContext)))
struct SPDrawAnchor;
namespace Inkscape
diff --git a/src/dropper-context.cpp b/src/dropper-context.cpp
index c74950139..dbc10f6c7 100644
--- a/src/dropper-context.cpp
+++ b/src/dropper-context.cpp
@@ -78,6 +78,20 @@ static SPEventContextClass *parent_class;
static GdkCursor *cursor_dropper_fill = NULL;
static GdkCursor *cursor_dropper_stroke = NULL;
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createDropperContext() {
+ return new SPDropperContext();
+ }
+
+ bool dropperContextRegistered = ToolFactory::instance().registerObject("/tools/dropper", createDropperContext);
+}
+
+const std::string& CDropperContext::getPrefsPath() {
+ return SPDropperContext::prefsPath;
+}
+
const std::string SPDropperContext::prefsPath = "/tools/dropper";
G_DEFINE_TYPE(SPDropperContext, sp_dropper_context, SP_TYPE_EVENT_CONTEXT);
@@ -107,6 +121,7 @@ SPDropperContext::SPDropperContext() : SPEventContext() {
dc->cdroppercontext = new CDropperContext(dc);
delete dc->ceventcontext;
dc->ceventcontext = dc->cdroppercontext;
+ types.insert(typeid(SPDropperContext));
SPEventContext *event_context = SP_EVENT_CONTEXT(dc);
event_context->cursor_shape = cursor_dropper_f_xpm;
diff --git a/src/dropper-context.h b/src/dropper-context.h
index c1fb7f37f..d5686bcc0 100644
--- a/src/dropper-context.h
+++ b/src/dropper-context.h
@@ -17,8 +17,11 @@
G_BEGIN_DECLS
#define SP_TYPE_DROPPER_CONTEXT (sp_dropper_context_get_type ())
-#define SP_DROPPER_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_DROPPER_CONTEXT, SPDropperContext))
-#define SP_IS_DROPPER_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_DROPPER_CONTEXT))
+//#define SP_DROPPER_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_DROPPER_CONTEXT, SPDropperContext))
+//#define SP_IS_DROPPER_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_DROPPER_CONTEXT))
+#define SP_DROPPER_CONTEXT(obj) ((SPDropperContext*)obj)
+#define SP_IS_DROPPER_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPDropperContext)))
+
enum {
SP_DROPPER_PICK_VISIBLE,
@@ -49,6 +52,8 @@ public:
virtual void finish();
virtual gint root_handler(GdkEvent* event);
+ virtual const std::string& getPrefsPath();
+
private:
SPDropperContext* spdroppercontext;
};
diff --git a/src/dyna-draw-context.cpp b/src/dyna-draw-context.cpp
index 1bd9d8562..048053035 100644
--- a/src/dyna-draw-context.cpp
+++ b/src/dyna-draw-context.cpp
@@ -99,6 +99,22 @@ static Geom::Point sp_dyna_draw_get_npoint(SPDynaDrawContext const *ddc, Geom::P
static Geom::Point sp_dyna_draw_get_vpoint(SPDynaDrawContext const *ddc, Geom::Point n);
static void draw_temporary_box(SPDynaDrawContext *dc);
+
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createCalligraphicContext() {
+ return new SPDynaDrawContext();
+ }
+
+ bool calligraphicContextRegistered = ToolFactory::instance().registerObject("/tools/calligraphic", createCalligraphicContext);
+}
+
+const std::string& CDynaDrawContext::getPrefsPath() {
+ return SPDynaDrawContext::prefsPath;
+}
+
+
const std::string SPDynaDrawContext::prefsPath = "/tools/calligraphic";
G_DEFINE_TYPE(SPDynaDrawContext, sp_dyna_draw_context, SP_TYPE_COMMON_CONTEXT);
@@ -127,6 +143,7 @@ SPDynaDrawContext::SPDynaDrawContext() : SPCommonContext() {
delete ddc->ccommoncontext;
ddc->ccommoncontext = ddc->cdynadrawcontext;
ddc->ceventcontext = ddc->cdynadrawcontext;
+ types.insert(typeid(SPDynaDrawContext));
ddc->cursor_shape = cursor_calligraphy_xpm;
ddc->hot_x = 4;
diff --git a/src/dyna-draw-context.h b/src/dyna-draw-context.h
index 1d6992f94..960d9f055 100644
--- a/src/dyna-draw-context.h
+++ b/src/dyna-draw-context.h
@@ -22,10 +22,13 @@
#include "splivarot.h"
#define SP_TYPE_DYNA_DRAW_CONTEXT (sp_dyna_draw_context_get_type())
-#define SP_DYNA_DRAW_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_DYNA_DRAW_CONTEXT, SPDynaDrawContext))
+//#define SP_DYNA_DRAW_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_DYNA_DRAW_CONTEXT, SPDynaDrawContext))
#define SP_DYNA_DRAW_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_DYNA_DRAW_CONTEXT, SPDynaDrawContextClass))
-#define SP_IS_DYNA_DRAW_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_DYNA_DRAW_CONTEXT))
+//#define SP_IS_DYNA_DRAW_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_DYNA_DRAW_CONTEXT))
#define SP_IS_DYNA_DRAW_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_DYNA_DRAW_CONTEXT))
+#define SP_DYNA_DRAW_CONTEXT(obj) ((SPDynaDrawContext*)obj)
+#define SP_IS_DYNA_DRAW_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPDynaDrawContext)))
+
#define DDC_MIN_PRESSURE 0.0
#define DDC_MAX_PRESSURE 1.0
@@ -72,6 +75,8 @@ public:
virtual void set(Inkscape::Preferences::Entry* val);
virtual gint root_handler(GdkEvent* event);
+ virtual const std::string& getPrefsPath();
+
private:
SPDynaDrawContext* spdynadrawcontext;
};
diff --git a/src/eraser-context.cpp b/src/eraser-context.cpp
index 00fb41004..cf6d8021d 100644
--- a/src/eraser-context.cpp
+++ b/src/eraser-context.cpp
@@ -101,6 +101,20 @@ static Geom::Point sp_eraser_get_npoint(SPEraserContext const *erc, Geom::Point
static Geom::Point sp_eraser_get_vpoint(SPEraserContext const *erc, Geom::Point n);
static void draw_temporary_box(SPEraserContext *dc);
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createEraserContext() {
+ return new SPEraserContext();
+ }
+
+ bool eraserContextRegistered = ToolFactory::instance().registerObject("/tools/eraser", createEraserContext);
+}
+
+const std::string& CEraserContext::getPrefsPath() {
+ return SPEraserContext::prefsPath;
+}
+
const std::string SPEraserContext::prefsPath = "/tools/eraser";
G_DEFINE_TYPE(SPEraserContext, sp_eraser_context, SP_TYPE_COMMON_CONTEXT);
@@ -129,6 +143,7 @@ SPEraserContext::SPEraserContext() : SPCommonContext() {
delete erc->ccommoncontext;
erc->ccommoncontext = erc->cerasercontext;
erc->ceventcontext = erc->cerasercontext;
+ types.insert(typeid(SPEraserContext));
erc->cursor_shape = cursor_eraser_xpm;
erc->hot_x = 4;
diff --git a/src/eraser-context.h b/src/eraser-context.h
index dff4d2db5..0400fb5b5 100644
--- a/src/eraser-context.h
+++ b/src/eraser-context.h
@@ -24,10 +24,12 @@
G_BEGIN_DECLS
#define SP_TYPE_ERASER_CONTEXT (sp_eraser_context_get_type())
-#define SP_ERASER_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_ERASER_CONTEXT, SPEraserContext))
+//#define SP_ERASER_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_ERASER_CONTEXT, SPEraserContext))
#define SP_ERASER_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_ERASER_CONTEXT, SPEraserContextClass))
-#define SP_IS_ERASER_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_ERASER_CONTEXT))
+//#define SP_IS_ERASER_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_ERASER_CONTEXT))
#define SP_IS_ERASER_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_ERASER_CONTEXT))
+#define SP_ERASER_CONTEXT(obj) ((SPEraserContext*)obj)
+#define SP_IS_ERASER_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPEraserContext)))
#define ERC_MIN_PRESSURE 0.0
#define ERC_MAX_PRESSURE 1.0
@@ -57,6 +59,8 @@ public:
virtual void set(Inkscape::Preferences::Entry* val);
virtual gint root_handler(GdkEvent* event);
+ virtual const std::string& getPrefsPath();
+
private:
SPEraserContext* sperasercontext;
};
diff --git a/src/event-context.cpp b/src/event-context.cpp
index b5677a5fc..3257a2a82 100644
--- a/src/event-context.cpp
+++ b/src/event-context.cpp
@@ -56,12 +56,6 @@
static void sp_event_context_dispose(GObject *object);
-static void sp_event_context_private_setup(SPEventContext *ec);
-static gint sp_event_context_private_root_handler(
- SPEventContext *event_context, GdkEvent *event);
-static gint sp_event_context_private_item_handler(
- SPEventContext *event_context, SPItem *item, GdkEvent *event);
-
static void set_event_location(SPDesktop * desktop, GdkEvent * event);
// globals for temporary switching to selector by space
@@ -118,7 +112,10 @@ void CEventContext::finish() {
SPEventContext::SPEventContext() {
SPEventContext* event_context = this;
- event_context->ceventcontext = new CEventContext(event_context);
+ event_context->ceventcontext = 0;
+ //event_context->ceventcontext = new CEventContext(event_context);
+ new (&types) std::set<TypeInfo>();
+ types.insert(typeid(SPEventContext));
event_context->hot_y = 0;
event_context->xp = 0;
diff --git a/src/event-context.h b/src/event-context.h
index 52d16666c..9f55fd8de 100644
--- a/src/event-context.h
+++ b/src/event-context.h
@@ -35,9 +35,12 @@ namespace Inkscape {
#define SP_TYPE_EVENT_CONTEXT (sp_event_context_get_type())
-#define SP_EVENT_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_EVENT_CONTEXT, SPEventContext))
+//#define SP_EVENT_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_EVENT_CONTEXT, SPEventContext))
#define SP_EVENT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_EVENT_CONTEXT, SPEventContextClass))
-#define SP_IS_EVENT_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_EVENT_CONTEXT))
+//#define SP_IS_EVENT_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_EVENT_CONTEXT))
+#define SP_EVENT_CONTEXT(obj) ((SPEventContext*)obj)
+#define SP_IS_EVENT_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPEventContext)))
+
GType sp_event_context_get_type();
@@ -92,6 +95,8 @@ void sp_event_context_snap_delay_handler(SPEventContext *ec, gpointer const dse_
class CEventContext;
+#include <set>
+#include "type-info.h"
/**
* Base class for Event processors.
@@ -114,6 +119,7 @@ public:
SPEventContext();
CEventContext* ceventcontext;
+ std::set<TypeInfo> types;
/// Desktop eventcontext stack
//SPEventContext *next;
@@ -178,6 +184,7 @@ public:
virtual gint root_handler(GdkEvent* event);
virtual gint item_handler(SPItem* item, GdkEvent* event);
+ virtual const std::string& getPrefsPath() = 0;
protected:
SPEventContext* speventcontext;
};
diff --git a/src/flood-context.cpp b/src/flood-context.cpp
index fedd51a4b..333be207e 100644
--- a/src/flood-context.cpp
+++ b/src/flood-context.cpp
@@ -84,6 +84,20 @@ static gint sp_flood_context_item_handler(SPEventContext *event_context, SPItem
static void sp_flood_finish(SPFloodContext *rc);
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createPaintbucketContext() {
+ return new SPFloodContext();
+ }
+
+ bool paintbucketContextRegistered = ToolFactory::instance().registerObject("/tools/paintbucket", createPaintbucketContext);
+}
+
+const std::string& CFloodContext::getPrefsPath() {
+ return SPFloodContext::prefsPath;
+}
+
const std::string SPFloodContext::prefsPath = "/tools/paintbucket";
G_DEFINE_TYPE(SPFloodContext, sp_flood_context, SP_TYPE_EVENT_CONTEXT);
@@ -110,6 +124,7 @@ SPFloodContext::SPFloodContext() : SPEventContext() {
flood_context->cfloodcontext = new CFloodContext(flood_context);
delete flood_context->ceventcontext;
flood_context->ceventcontext = flood_context->cfloodcontext;
+ types.insert(typeid(SPFloodContext));
flood_context->_message_context = 0;
diff --git a/src/flood-context.h b/src/flood-context.h
index a93c98c73..b2f82ff60 100644
--- a/src/flood-context.h
+++ b/src/flood-context.h
@@ -19,10 +19,13 @@
#include "helper/units.h"
#define SP_TYPE_FLOOD_CONTEXT (sp_flood_context_get_type ())
-#define SP_FLOOD_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_FLOOD_CONTEXT, SPFloodContext))
+//#define SP_FLOOD_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_FLOOD_CONTEXT, SPFloodContext))
#define SP_FLOOD_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_FLOOD_CONTEXT, SPFloodContextClass))
-#define SP_IS_FLOOD_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_FLOOD_CONTEXT))
+//#define SP_IS_FLOOD_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_FLOOD_CONTEXT))
#define SP_IS_FLOOD_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_FLOOD_CONTEXT))
+#define SP_FLOOD_CONTEXT(obj) ((SPFloodContext*)obj)
+#define SP_IS_FLOOD_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPFloodContext)))
+
#define FLOOD_COLOR_CHANNEL_R 1
#define FLOOD_COLOR_CHANNEL_G 2
@@ -57,6 +60,7 @@ public:
virtual gint root_handler(GdkEvent* event);
virtual gint item_handler(SPItem* item, GdkEvent* event);
+ virtual const std::string& getPrefsPath();
private:
SPFloodContext* spfloodcontext;
};
diff --git a/src/gradient-context.cpp b/src/gradient-context.cpp
index 3d9fa9c3f..be35de29b 100644
--- a/src/gradient-context.cpp
+++ b/src/gradient-context.cpp
@@ -59,6 +59,21 @@ static gint sp_gradient_context_root_handler(SPEventContext *event_context, GdkE
static void sp_gradient_drag(SPGradientContext &rc, Geom::Point const pt, guint state, guint32 etime);
+
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createGradientContext() {
+ return new SPGradientContext();
+ }
+
+ bool gradientContextRegistered = ToolFactory::instance().registerObject("/tools/gradient", createGradientContext);
+}
+
+const std::string& CGradientContext::getPrefsPath() {
+ return SPGradientContext::prefsPath;
+}
+
const std::string SPGradientContext::prefsPath = "/tools/gradient";
G_DEFINE_TYPE(SPGradientContext, sp_gradient_context, SP_TYPE_EVENT_CONTEXT);
@@ -84,6 +99,7 @@ SPGradientContext::SPGradientContext() : SPEventContext() {
gr_context->cgradientcontext = new CGradientContext(gr_context);
delete gr_context->ceventcontext;
gr_context->ceventcontext = gr_context->cgradientcontext;
+ types.insert(typeid(SPGradientContext));
gr_context->node_added = false;
gr_context->subselcon = 0;
diff --git a/src/gradient-context.h b/src/gradient-context.h
index c6bbdc491..b53f2da20 100644
--- a/src/gradient-context.h
+++ b/src/gradient-context.h
@@ -20,10 +20,12 @@
#include "event-context.h"
#define SP_TYPE_GRADIENT_CONTEXT (sp_gradient_context_get_type())
-#define SP_GRADIENT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_GRADIENT_CONTEXT, SPGradientContext))
+//#define SP_GRADIENT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_GRADIENT_CONTEXT, SPGradientContext))
#define SP_GRADIENT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_GRADIENT_CONTEXT, SPGradientContextClass))
-#define SP_IS_GRADIENT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_GRADIENT_CONTEXT))
+//#define SP_IS_GRADIENT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_GRADIENT_CONTEXT))
#define SP_IS_GRADIENT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_GRADIENT_CONTEXT))
+#define SP_GRADIENT_CONTEXT(obj) ((SPGradientContext*)obj)
+#define SP_IS_GRADIENT_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPGradientContext)))
class CGradientContext;
@@ -59,6 +61,7 @@ public:
virtual void setup();
virtual gint root_handler(GdkEvent* event);
+ virtual const std::string& getPrefsPath();
private:
SPGradientContext* spgradientcontext;
};
diff --git a/src/lpe-tool-context.cpp b/src/lpe-tool-context.cpp
index 93a548a8e..4ad20c878 100644
--- a/src/lpe-tool-context.cpp
+++ b/src/lpe-tool-context.cpp
@@ -64,6 +64,21 @@ SubtoolEntry lpesubtools[] = {
{Inkscape::LivePathEffect::MIRROR_SYMMETRY, "draw-geometry-mirror"}
};
+
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createLPEToolContext() {
+ return new SPLPEToolContext();
+ }
+
+ bool lpetoolContextRegistered = ToolFactory::instance().registerObject("/tools/lpetool", createLPEToolContext);
+}
+
+const std::string& CLPEToolContext::getPrefsPath() {
+ return SPLPEToolContext::prefsPath;
+}
+
const std::string SPLPEToolContext::prefsPath = "/tools/lpetool";
G_DEFINE_TYPE(SPLPEToolContext, sp_lpetool_context, SP_TYPE_PEN_CONTEXT);
@@ -94,6 +109,7 @@ SPLPEToolContext::SPLPEToolContext() : SPPenContext() {
lc->cpencontext = lc->clpetoolcontext;
lc->cdrawcontext = lc->clpetoolcontext;
lc->ceventcontext = lc->clpetoolcontext;
+ types.insert(typeid(SPLPEToolContext));
lc->mode = Inkscape::LivePathEffect::BEND_PATH;
lc->shape_editor = 0;
diff --git a/src/lpe-tool-context.h b/src/lpe-tool-context.h
index c4b507f3d..bf6e6fa01 100644
--- a/src/lpe-tool-context.h
+++ b/src/lpe-tool-context.h
@@ -19,10 +19,12 @@
#include "helper/units.h"
#define SP_TYPE_LPETOOL_CONTEXT (sp_lpetool_context_get_type())
-#define SP_LPETOOL_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_LPETOOL_CONTEXT, SPLPEToolContext))
+//#define SP_LPETOOL_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_LPETOOL_CONTEXT, SPLPEToolContext))
#define SP_LPETOOL_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_LPETOOL_CONTEXT, SPLPEToolContextClass))
-#define SP_IS_LPETOOL_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_LPETOOL_CONTEXT))
+//#define SP_IS_LPETOOL_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_LPETOOL_CONTEXT))
#define SP_IS_LPETOOL_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_LPETOOL_CONTEXT))
+#define SP_LPETOOL_CONTEXT(obj) ((SPLPEToolContext*)obj)
+#define SP_IS_LPETOOL_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPLPEToolContext)))
/* This is the list of subtools from which the toolbar of the LPETool is built automatically */
extern const int num_subtools;
@@ -77,6 +79,7 @@ public:
virtual gint root_handler(GdkEvent* event);
virtual gint item_handler(SPItem* item, GdkEvent* event);
+ virtual const std::string& getPrefsPath();
private:
SPLPEToolContext* splpetoolcontext;
};
diff --git a/src/measure-context.cpp b/src/measure-context.cpp
index f56239690..8012efc8b 100644
--- a/src/measure-context.cpp
+++ b/src/measure-context.cpp
@@ -64,6 +64,21 @@ boost::optional<Geom::Point> lastEnd;
std::vector<Inkscape::Display::TemporaryItem*> measure_tmp_items;
+
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createMeasureContext() {
+ return new SPMeasureContext();
+ }
+
+ bool measureContextRegistered = ToolFactory::instance().registerObject("/tools/measure", createMeasureContext);
+}
+
+const std::string& CMeasureContext::getPrefsPath() {
+ return SPMeasureContext::prefsPath;
+}
+
const std::string SPMeasureContext::prefsPath = "/tools/measure";
G_DEFINE_TYPE(SPMeasureContext, sp_measure_context, SP_TYPE_EVENT_CONTEXT);
@@ -254,6 +269,7 @@ SPMeasureContext::SPMeasureContext() : SPEventContext() {
measure_context->cmeasurecontext = new CMeasureContext(measure_context);
delete measure_context->ceventcontext;
measure_context->ceventcontext = measure_context->cmeasurecontext;
+ types.insert(typeid(SPMeasureContext));
measure_context->grabbed = 0;
diff --git a/src/measure-context.h b/src/measure-context.h
index 0fcee314d..218c42177 100644
--- a/src/measure-context.h
+++ b/src/measure-context.h
@@ -15,8 +15,11 @@
#include "event-context.h"
#define SP_TYPE_MEASURE_CONTEXT (sp_measure_context_get_type())
-#define SP_MEASURE_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_MEASURE_CONTEXT, SPMeasureContext))
-#define SP_IS_MEASURE_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_MEASURE_CONTEXT))
+//#define SP_MEASURE_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_MEASURE_CONTEXT, SPMeasureContext))
+//#define SP_IS_MEASURE_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_MEASURE_CONTEXT))
+#define SP_MEASURE_CONTEXT(obj) ((SPMeasureContext*)obj)
+#define SP_IS_MEASURE_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPMeasureContext)))
+
class CMeasureContext;
@@ -44,6 +47,7 @@ public:
virtual gint root_handler(GdkEvent* event);
virtual gint item_handler(SPItem* item, GdkEvent* event);
+ virtual const std::string& getPrefsPath();
private:
SPMeasureContext* spmeasurecontext;
};
diff --git a/src/mesh-context.cpp b/src/mesh-context.cpp
index ecfceae20..ac26a6d23 100644
--- a/src/mesh-context.cpp
+++ b/src/mesh-context.cpp
@@ -61,6 +61,21 @@ static gint sp_mesh_context_root_handler(SPEventContext *event_context, GdkEvent
static void sp_mesh_drag(SPMeshContext &rc, Geom::Point const pt, guint state, guint32 etime);
+
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createMeshContext() {
+ return new SPMeshContext();
+ }
+
+ bool meshContextRegistered = ToolFactory::instance().registerObject("/tools/mesh", createMeshContext);
+}
+
+const std::string& CMeshContext::getPrefsPath() {
+ return SPMeshContext::prefsPath;
+}
+
const std::string SPMeshContext::prefsPath = "/tools/mesh";
G_DEFINE_TYPE(SPMeshContext, sp_mesh_context, SP_TYPE_EVENT_CONTEXT);
@@ -86,6 +101,7 @@ SPMeshContext::SPMeshContext() : SPEventContext() {
gr_context->cmeshcontext = new CMeshContext(gr_context);
delete gr_context->ceventcontext;
gr_context->ceventcontext = gr_context->cmeshcontext;
+ types.insert(typeid(SPMeshContext));
gr_context->selcon = 0;
gr_context->_message_context = 0;
diff --git a/src/mesh-context.h b/src/mesh-context.h
index 2d207e536..c20fdee6a 100644
--- a/src/mesh-context.h
+++ b/src/mesh-context.h
@@ -22,10 +22,12 @@
#include "event-context.h"
#define SP_TYPE_MESH_CONTEXT (sp_mesh_context_get_type())
-#define SP_MESH_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_MESH_CONTEXT, SPMeshContext))
+//#define SP_MESH_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_MESH_CONTEXT, SPMeshContext))
#define SP_MESH_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_MESH_CONTEXT, SPMeshContextClass))
-#define SP_IS_MESH_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_MESH_CONTEXT))
+//#define SP_IS_MESH_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_MESH_CONTEXT))
#define SP_IS_MESH_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_MESH_CONTEXT))
+#define SP_MESH_CONTEXT(obj) ((SPMeshContext*)obj)
+#define SP_IS_MESH_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPMeshContext)))
class CMeshContext;
@@ -61,6 +63,8 @@ public:
virtual void setup();
virtual gint root_handler(GdkEvent* event);
+ virtual const std::string& getPrefsPath();
+
private:
SPMeshContext* spmeshcontext;
};
diff --git a/src/pen-context.cpp b/src/pen-context.cpp
index 180152642..7e85b46af 100644
--- a/src/pen-context.cpp
+++ b/src/pen-context.cpp
@@ -80,6 +80,21 @@ static void pen_set_to_nearest_horiz_vert(const SPPenContext *const pc, Geom::Po
static int pen_last_paraxial_dir = 0; // last used direction in horizontal/vertical mode; 0 = horizontal, 1 = vertical
+
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createPenContext() {
+ return new SPPenContext();
+ }
+
+ bool penContextRegistered = ToolFactory::instance().registerObject("/tools/freehand/pen", createPenContext);
+}
+
+const std::string& CPenContext::getPrefsPath() {
+ return SPPenContext::prefsPath;
+}
+
const std::string SPPenContext::prefsPath = "/tools/freehand/pen";
G_DEFINE_TYPE(SPPenContext, sp_pen_context, SP_TYPE_DRAW_CONTEXT);
@@ -115,6 +130,7 @@ SPPenContext::SPPenContext() : SPDrawContext() {
delete pc->cdrawcontext;
pc->cdrawcontext = pc->cpencontext;
pc->ceventcontext = pc->cpencontext;
+ types.insert(typeid(SPPenContext));
pc->polylines_only = false;
pc->polylines_paraxial = false;
diff --git a/src/pen-context.h b/src/pen-context.h
index fc5378113..0a2e41af6 100644
--- a/src/pen-context.h
+++ b/src/pen-context.h
@@ -9,10 +9,12 @@
#include "live_effects/effect.h"
#define SP_TYPE_PEN_CONTEXT (sp_pen_context_get_type())
-#define SP_PEN_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_PEN_CONTEXT, SPPenContext))
+//#define SP_PEN_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_PEN_CONTEXT, SPPenContext))
#define SP_PEN_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_PEN_CONTEXT, SPPenContextClass))
-#define SP_IS_PEN_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_PEN_CONTEXT))
+//#define SP_IS_PEN_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_PEN_CONTEXT))
#define SP_IS_PEN_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_PEN_CONTEXT))
+#define SP_PEN_CONTEXT(obj) ((SPPenContext*)obj)
+#define SP_IS_PEN_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPPenContext)))
enum {
SP_PEN_CONTEXT_POINT,
@@ -79,6 +81,8 @@ public:
virtual gint root_handler(GdkEvent* event);
virtual gint item_handler(SPItem* item, GdkEvent* event);
+ virtual const std::string& getPrefsPath();
+
private:
SPPenContext* sppencontext;
};
diff --git a/src/pencil-context.cpp b/src/pencil-context.cpp
index 0b3955a0c..3c2269bd2 100644
--- a/src/pencil-context.cpp
+++ b/src/pencil-context.cpp
@@ -68,6 +68,20 @@ static bool pencil_within_tolerance = false;
static bool in_svg_plane(Geom::Point const &p) { return Geom::LInfty(p) < 1e18; }
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createPencilContext() {
+ return new SPPencilContext();
+ }
+
+ bool pencilContextRegistered = ToolFactory::instance().registerObject("/tools/freehand/pencil", createPencilContext);
+}
+
+const std::string& CPencilContext::getPrefsPath() {
+ return SPPencilContext::prefsPath;
+}
+
const std::string SPPencilContext::prefsPath = "/tools/freehand/pencil";
G_DEFINE_TYPE(SPPencilContext, sp_pencil_context, SP_TYPE_DRAW_CONTEXT);
@@ -101,6 +115,7 @@ SPPencilContext::SPPencilContext() : SPDrawContext() {
delete pc->cdrawcontext;
pc->cdrawcontext = pc->cpencilcontext;
pc->ceventcontext = pc->cpencilcontext;
+ types.insert(typeid(SPPencilContext));
pc->is_drawing = false;
diff --git a/src/pencil-context.h b/src/pencil-context.h
index 4174e38ae..b088a1b11 100644
--- a/src/pencil-context.h
+++ b/src/pencil-context.h
@@ -9,10 +9,12 @@
#define SP_TYPE_PENCIL_CONTEXT (sp_pencil_context_get_type())
-#define SP_PENCIL_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_PENCIL_CONTEXT, SPPencilContext))
+//#define SP_PENCIL_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_PENCIL_CONTEXT, SPPencilContext))
#define SP_PENCIL_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_PENCIL_CONTEXT, SPPencilContextClass))
-#define SP_IS_PENCIL_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_PENCIL_CONTEXT))
+//#define SP_IS_PENCIL_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_PENCIL_CONTEXT))
#define SP_IS_PENCIL_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_PENCIL_CONTEXT))
+#define SP_PENCIL_CONTEXT(obj) ((SPPencilContext*)obj)
+#define SP_IS_PENCIL_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPPencilContext)))
enum PencilState {
SP_PENCIL_CONTEXT_IDLE,
@@ -56,6 +58,8 @@ public:
virtual void setup();
virtual gint root_handler(GdkEvent* event);
+ virtual const std::string& getPrefsPath();
+
private:
SPPencilContext* sppencilcontext;
};
diff --git a/src/rect-context.cpp b/src/rect-context.cpp
index b5149ea22..e0c0af2c9 100644
--- a/src/rect-context.cpp
+++ b/src/rect-context.cpp
@@ -47,6 +47,20 @@
using Inkscape::DocumentUndo;
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createRectContext() {
+ return new SPRectContext();
+ }
+
+ bool rectContextRegistered = ToolFactory::instance().registerObject("/tools/shapes/rect", createRectContext);
+}
+
+const std::string& CRectContext::getPrefsPath() {
+ return SPRectContext::prefsPath;
+}
+
//static const double goldenratio = 1.61803398874989484820; // golden ratio
static void sp_rect_context_dispose(GObject *object);
@@ -93,6 +107,7 @@ SPRectContext::SPRectContext() : SPEventContext() {
rect_context->crectcontext = new CRectContext(rect_context);
delete rect_context->ceventcontext;
rect_context->ceventcontext = rect_context->crectcontext;
+ types.insert(typeid(SPRectContext));
rect_context->_message_context = 0;
diff --git a/src/rect-context.h b/src/rect-context.h
index b840e1b2c..41fa64b59 100644
--- a/src/rect-context.h
+++ b/src/rect-context.h
@@ -20,10 +20,12 @@
#include "event-context.h"
#define SP_TYPE_RECT_CONTEXT (sp_rect_context_get_type ())
-#define SP_RECT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_RECT_CONTEXT, SPRectContext))
+//#define SP_RECT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_RECT_CONTEXT, SPRectContext))
#define SP_RECT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_RECT_CONTEXT, SPRectContextClass))
-#define SP_IS_RECT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_RECT_CONTEXT))
+//#define SP_IS_RECT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_RECT_CONTEXT))
#define SP_IS_RECT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_RECT_CONTEXT))
+#define SP_RECT_CONTEXT(obj) ((SPRectContext*)obj)
+#define SP_IS_RECT_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPRectContext)))
class CRectContext;
@@ -59,6 +61,7 @@ public:
virtual gint root_handler(GdkEvent* event);
virtual gint item_handler(SPItem* item, GdkEvent* event);
+ virtual const std::string& getPrefsPath();
protected:
SPRectContext* sprectcontext;
};
diff --git a/src/select-context.cpp b/src/select-context.cpp
index 7b811e16e..604b4c7cc 100644
--- a/src/select-context.cpp
+++ b/src/select-context.cpp
@@ -69,6 +69,21 @@ static gint xp = 0, yp = 0; // where drag started
static gint tolerance = 0;
static bool within_tolerance = false;
+
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createSelectContext() {
+ return new SPSelectContext();
+ }
+
+ bool selectContextRegistered = ToolFactory::instance().registerObject("/tools/select", createSelectContext);
+}
+
+const std::string& CSelectContext::getPrefsPath() {
+ return SPSelectContext::prefsPath;
+}
+
const std::string SPSelectContext::prefsPath = "/tools/select";
G_DEFINE_TYPE(SPSelectContext, sp_select_context, SP_TYPE_EVENT_CONTEXT);
@@ -97,6 +112,7 @@ SPSelectContext::SPSelectContext() : SPEventContext() {
sc->cselectcontext = new CSelectContext(sc);
delete sc->ceventcontext;
sc->ceventcontext = sc->cselectcontext;
+ types.insert(typeid(SPSelectContext));
sc->grabbed = 0;
sc->item = 0;
diff --git a/src/select-context.h b/src/select-context.h
index 791569bcd..705f1ad7d 100644
--- a/src/select-context.h
+++ b/src/select-context.h
@@ -16,10 +16,12 @@
#include <gtk/gtk.h>
#define SP_TYPE_SELECT_CONTEXT (sp_select_context_get_type ())
-#define SP_SELECT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_SELECT_CONTEXT, SPSelectContext))
+//#define SP_SELECT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_SELECT_CONTEXT, SPSelectContext))
#define SP_SELECT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_SELECT_CONTEXT, SPSelectContextClass))
-#define SP_IS_SELECT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_SELECT_CONTEXT))
+//#define SP_IS_SELECT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_SELECT_CONTEXT))
#define SP_IS_SELECT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_SELECT_CONTEXT))
+#define SP_SELECT_CONTEXT(obj) ((SPSelectContext*)obj)
+#define SP_IS_SELECT_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPSelectContext)))
struct SPCanvasItem;
@@ -69,6 +71,7 @@ public:
virtual gint root_handler(GdkEvent* event);
virtual gint item_handler(SPItem* item, GdkEvent* event);
+ virtual const std::string& getPrefsPath();
private:
SPSelectContext* spselectcontext;
};
diff --git a/src/sp-factory.h b/src/sp-factory.h
index 111375415..7eed7b744 100644
--- a/src/sp-factory.h
+++ b/src/sp-factory.h
@@ -15,12 +15,8 @@ struct Singleton {
}
};
-/**
- * A Factory for creating objects which can be identified by strings.
- */
-template<class BaseObject>
-class Factory : public Singleton< Factory<BaseObject> > {
-public:
+
+namespace FactoryExceptions {
class TypeNotRegistered : public std::exception {
public:
TypeNotRegistered(const std::string& typeString) : std::exception(), typeString(typeString) {
@@ -36,18 +32,25 @@ public:
private:
const std::string typeString;
};
+}
+/**
+ * A Factory for creating objects which can be identified by strings.
+ */
+template<class BaseObject>
+class Factory {
+public:
typedef BaseObject* CreateFunction();
bool registerObject(const std::string& id, CreateFunction* createFunction) {
return this->objectMap.insert(std::make_pair(id, createFunction)).second;
}
- BaseObject* createObject(const std::string& id) const {
+ BaseObject* createObject(const std::string& id) const throw(FactoryExceptions::TypeNotRegistered) {
typename std::map<const std::string, CreateFunction*>::const_iterator it = this->objectMap.find(id);
if (it == this->objectMap.end()) {
- throw TypeNotRegistered(id);
+ throw FactoryExceptions::TypeNotRegistered(id);
}
return it->second();
@@ -59,10 +62,10 @@ private:
class SPObject;
-typedef Factory<SPObject> SPFactory;
+typedef Singleton< Factory<SPObject> > SPFactory;
class SPEventContext;
-typedef Factory<SPEventContext> ToolFactory;
+typedef Singleton< Factory<SPEventContext> > ToolFactory;
diff --git a/src/sp-object.cpp b/src/sp-object.cpp
index 363a05579..79c83e38d 100644
--- a/src/sp-object.cpp
+++ b/src/sp-object.cpp
@@ -637,7 +637,7 @@ void SPObject::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref)
sp_object_unref(ochild, NULL);
ochild->invoke_build(object->document, child, object->cloned);
- } catch (const SPFactory::TypeNotRegistered& e) {
+ } catch (const FactoryExceptions::TypeNotRegistered& e) {
//log_exception(std::current_exception());
g_warning("TypeNotRegistered exception: %s", e.what());
}
@@ -703,7 +703,7 @@ void SPObject::build(SPDocument *document, Inkscape::XML::Node *repr) {
object->attach(child, object->lastChild());
sp_object_unref(child, NULL);
child->invoke_build(document, rchild, object->cloned);
- } catch (const SPFactory::TypeNotRegistered& e) {
+ } catch (const FactoryExceptions::TypeNotRegistered& e) {
//log_exception(std::current_exception());
g_warning("TypeNotRegistered exception: %s", e.what());
}
diff --git a/src/spiral-context.cpp b/src/spiral-context.cpp
index 7e3aed1b9..2f171ddde 100644
--- a/src/spiral-context.cpp
+++ b/src/spiral-context.cpp
@@ -47,16 +47,25 @@
using Inkscape::DocumentUndo;
static void sp_spiral_context_dispose(GObject *object);
-static void sp_spiral_context_setup(SPEventContext *ec);
-static void sp_spiral_context_finish(SPEventContext *ec);
-static void sp_spiral_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val);
-
-static gint sp_spiral_context_root_handler(SPEventContext *event_context, GdkEvent *event);
static void sp_spiral_drag(SPSpiralContext *sc, Geom::Point const &p, guint state);
static void sp_spiral_finish(SPSpiralContext *sc);
static void sp_spiral_cancel(SPSpiralContext *sc);
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createSpiralContext() {
+ return new SPSpiralContext();
+ }
+
+ bool spiralContextRegistered = ToolFactory::instance().registerObject("/tools/shapes/spiral", createSpiralContext);
+}
+
+const std::string& CSpiralContext::getPrefsPath() {
+ return SPSpiralContext::prefsPath;
+}
+
const std::string SPSpiralContext::prefsPath = "/tools/shapes/spiral";
G_DEFINE_TYPE(SPSpiralContext, sp_spiral_context, SP_TYPE_EVENT_CONTEXT);
@@ -85,6 +94,7 @@ SPSpiralContext::SPSpiralContext() : SPEventContext() {
spiral_context->cspiralcontext = new CSpiralContext(spiral_context);
delete spiral_context->ceventcontext;
spiral_context->ceventcontext = spiral_context->cspiralcontext;
+ types.insert(typeid(SPSpiralContext));
spiral_context->_message_context = 0;
@@ -114,11 +124,6 @@ sp_spiral_context_init(SPSpiralContext *spiral_context)
new (spiral_context) SPSpiralContext();
}
-static void sp_spiral_context_finish(SPEventContext *ec)
-{
- ec->ceventcontext->finish();
-}
-
void CSpiralContext::finish() {
SPEventContext* ec = this->speventcontext;
@@ -173,12 +178,6 @@ static void sp_spiral_context_selection_changed(Inkscape::Selection *selection,
ec->shape_editor->set_item(item, SH_KNOTHOLDER);
}
-static void
-sp_spiral_context_setup(SPEventContext *ec)
-{
- ec->ceventcontext->setup();
-}
-
void CSpiralContext::setup() {
SPEventContext* ec = this->speventcontext;
@@ -214,12 +213,6 @@ void CSpiralContext::setup() {
sc->_message_context = new Inkscape::MessageContext((ec->desktop)->messageStack());
}
-static void
-sp_spiral_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val)
-{
- ec->ceventcontext->set(val);
-}
-
void CSpiralContext::set(Inkscape::Preferences::Entry* val) {
SPEventContext* ec = this->speventcontext;
@@ -235,12 +228,6 @@ void CSpiralContext::set(Inkscape::Preferences::Entry* val) {
}
}
-static gint
-sp_spiral_context_root_handler(SPEventContext *event_context, GdkEvent *event)
-{
- return event_context->ceventcontext->root_handler(event);
-}
-
gint CSpiralContext::root_handler(GdkEvent* event) {
SPEventContext* event_context = this->speventcontext;
diff --git a/src/spiral-context.h b/src/spiral-context.h
index bd111f9c9..b71135800 100644
--- a/src/spiral-context.h
+++ b/src/spiral-context.h
@@ -22,10 +22,12 @@
#include "event-context.h"
#define SP_TYPE_SPIRAL_CONTEXT (sp_spiral_context_get_type ())
-#define SP_SPIRAL_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_SPIRAL_CONTEXT, SPSpiralContext))
+//#define SP_SPIRAL_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_SPIRAL_CONTEXT, SPSpiralContext))
#define SP_SPIRAL_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_SPIRAL_CONTEXT, SPSpiralContextClass))
-#define SP_IS_SPIRAL_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_SPIRAL_CONTEXT))
+//#define SP_IS_SPIRAL_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_SPIRAL_CONTEXT))
#define SP_IS_SPIRAL_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_SPIRAL_CONTEXT))
+#define SP_SPIRAL_CONTEXT(obj) ((SPSpiralContext*)obj)
+#define SP_IS_SPIRAL_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPSpiralContext)))
class CSpiralContext;
@@ -60,6 +62,7 @@ public:
virtual void set(Inkscape::Preferences::Entry* val);
virtual gint root_handler(GdkEvent* event);
+ virtual const std::string& getPrefsPath();
private:
SPSpiralContext* spspiralcontext;
};
diff --git a/src/spray-context.cpp b/src/spray-context.cpp
index 7d4980355..bb9f05530 100644
--- a/src/spray-context.cpp
+++ b/src/spray-context.cpp
@@ -80,9 +80,19 @@ using namespace std;
static void sp_spray_context_dispose(GObject *object);
-static void sp_spray_context_setup(SPEventContext *ec);
-static void sp_spray_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val);
-static gint sp_spray_context_root_handler(SPEventContext *ec, GdkEvent *event);
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createSprayContext() {
+ return new SPSprayContext();
+ }
+
+ bool sprayContextRegistered = ToolFactory::instance().registerObject("/tools/spray", createSprayContext);
+}
+
+const std::string& CSprayContext::getPrefsPath() {
+ return SPSprayContext::prefsPath;
+}
const std::string SPSprayContext::prefsPath = "/tools/spray";
@@ -145,6 +155,7 @@ SPSprayContext::SPSprayContext() : SPEventContext() {
tc->cspraycontext = new CSprayContext(tc);
delete tc->ceventcontext;
tc->ceventcontext = tc->cspraycontext;
+ types.insert(typeid(SPSprayContext));
tc->usetilt = 0;
tc->_message_context = 0;
@@ -248,11 +259,6 @@ static void sp_spray_update_cursor(SPSprayContext *tc, bool /*with_shift*/)
g_free(sel_message);
}
-static void sp_spray_context_setup(SPEventContext *ec)
-{
- ec->ceventcontext->setup();
-}
-
void CSprayContext::setup() {
SPEventContext* ec = this->speventcontext;
@@ -307,11 +313,6 @@ void CSprayContext::setup() {
}
}
-static void sp_spray_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val)
-{
- ec->ceventcontext->set(val);
-}
-
void CSprayContext::set(Inkscape::Preferences::Entry* val) {
SPEventContext* ec = this->speventcontext;
@@ -648,11 +649,6 @@ static void sp_spray_switch_mode(SPSprayContext *tc, gint mode, bool with_shift)
sp_spray_update_cursor(tc, with_shift);
}
-gint sp_spray_context_root_handler(SPEventContext *event_context, GdkEvent *event)
-{
- return event_context->ceventcontext->root_handler(event);
-}
-
gint CSprayContext::root_handler(GdkEvent* event) {
SPEventContext* event_context = this->speventcontext;
diff --git a/src/spray-context.h b/src/spray-context.h
index 06aecb2c8..8883aa533 100644
--- a/src/spray-context.h
+++ b/src/spray-context.h
@@ -22,10 +22,12 @@
#include "event-context.h"
#define SP_TYPE_SPRAY_CONTEXT (sp_spray_context_get_type())
-#define SP_SPRAY_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_SPRAY_CONTEXT, SPSprayContext))
+//#define SP_SPRAY_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_SPRAY_CONTEXT, SPSprayContext))
#define SP_SPRAY_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_SPRAY_CONTEXT, SPSprayContextClass))
-#define SP_IS_SPRAY_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_SPRAY_CONTEXT))
+//#define SP_IS_SPRAY_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_SPRAY_CONTEXT))
#define SP_IS_SPRAY_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_SPRAY_CONTEXT))
+#define SP_SPRAY_CONTEXT(obj) ((SPSprayContext*)obj)
+#define SP_IS_SPRAY_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPSprayContext)))
namespace Inkscape {
namespace UI {
@@ -110,6 +112,7 @@ public:
virtual void set(Inkscape::Preferences::Entry* val);
virtual gint root_handler(GdkEvent* event);
+ virtual const std::string& getPrefsPath();
private:
SPSprayContext* spspraycontext;
};
diff --git a/src/star-context.cpp b/src/star-context.cpp
index 6979d51a2..2e1402cbb 100644
--- a/src/star-context.cpp
+++ b/src/star-context.cpp
@@ -52,15 +52,24 @@ using Inkscape::DocumentUndo;
static void sp_star_context_dispose (GObject *object);
-static void sp_star_context_setup (SPEventContext *ec);
-static void sp_star_context_finish(SPEventContext *ec);
-static void sp_star_context_set (SPEventContext *ec, Inkscape::Preferences::Entry *val);
-static gint sp_star_context_root_handler (SPEventContext *ec, GdkEvent *event);
-
static void sp_star_drag (SPStarContext * sc, Geom::Point p, guint state);
static void sp_star_finish (SPStarContext * sc);
static void sp_star_cancel(SPStarContext * sc);
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createStarContext() {
+ return new SPStarContext();
+ }
+
+ bool starContextRegistered = ToolFactory::instance().registerObject("/tools/shapes/star", createStarContext);
+}
+
+const std::string& CStarContext::getPrefsPath() {
+ return SPStarContext::prefsPath;
+}
+
const std::string SPStarContext::prefsPath = "/tools/shapes/star";
G_DEFINE_TYPE(SPStarContext, sp_star_context, SP_TYPE_EVENT_CONTEXT);
@@ -89,6 +98,7 @@ SPStarContext::SPStarContext() : SPEventContext() {
star_context->cstarcontext = new CStarContext(star_context);
delete star_context->ceventcontext;
star_context->ceventcontext = star_context->cstarcontext;
+ types.insert(typeid(SPStarContext));
star_context->randomized = 0;
star_context->_message_context = 0;
@@ -121,11 +131,6 @@ sp_star_context_init (SPStarContext * star_context)
new (star_context) SPStarContext();
}
-static void sp_star_context_finish(SPEventContext *ec)
-{
- ec->ceventcontext->finish();
-}
-
void CStarContext::finish() {
SPEventContext* ec = this->speventcontext;
@@ -185,12 +190,6 @@ static void sp_star_context_selection_changed (Inkscape::Selection * selection,
ec->shape_editor->set_item(item, SH_KNOTHOLDER);
}
-static void
-sp_star_context_setup (SPEventContext *ec)
-{
- ec->ceventcontext->setup();
-}
-
void CStarContext::setup() {
SPEventContext* ec = this->speventcontext;
@@ -229,12 +228,6 @@ void CStarContext::setup() {
sc->_message_context = new Inkscape::MessageContext((ec->desktop)->messageStack());
}
-static void
-sp_star_context_set (SPEventContext *ec, Inkscape::Preferences::Entry *val)
-{
- ec->ceventcontext->set(val);
-}
-
void CStarContext::set(Inkscape::Preferences::Entry* val) {
SPEventContext* ec = this->speventcontext;
@@ -254,11 +247,6 @@ void CStarContext::set(Inkscape::Preferences::Entry* val) {
}
}
-static gint sp_star_context_root_handler(SPEventContext *event_context, GdkEvent *event)
-{
- return event_context->ceventcontext->root_handler(event);
-}
-
gint CStarContext::root_handler(GdkEvent* event) {
SPEventContext* event_context = this->speventcontext;
diff --git a/src/star-context.h b/src/star-context.h
index ca5d3517e..989c74c5d 100644
--- a/src/star-context.h
+++ b/src/star-context.h
@@ -20,10 +20,12 @@
#include "event-context.h"
#define SP_TYPE_STAR_CONTEXT (sp_star_context_get_type ())
-#define SP_STAR_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_STAR_CONTEXT, SPStarContext))
+//#define SP_STAR_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_STAR_CONTEXT, SPStarContext))
#define SP_STAR_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_STAR_CONTEXT, SPStarContextClass))
-#define SP_IS_STAR_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_STAR_CONTEXT))
+//#define SP_IS_STAR_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_STAR_CONTEXT))
#define SP_IS_STAR_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_STAR_CONTEXT))
+#define SP_STAR_CONTEXT(obj) ((SPStarContext*)obj)
+#define SP_IS_STAR_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPStarContext)))
class CStarContext;
@@ -66,6 +68,8 @@ public:
virtual void set(Inkscape::Preferences::Entry* val);
virtual gint root_handler(GdkEvent* event);
+ virtual const std::string& getPrefsPath();
+
private:
SPStarContext* spstarcontext;
};
diff --git a/src/text-context.cpp b/src/text-context.cpp
index 1f8262e3f..5fd2960e1 100644
--- a/src/text-context.cpp
+++ b/src/text-context.cpp
@@ -59,11 +59,6 @@ using Inkscape::DocumentUndo;
static void sp_text_context_dispose(GObject *obj);
-static void sp_text_context_setup(SPEventContext *ec);
-static void sp_text_context_finish(SPEventContext *ec);
-static gint sp_text_context_root_handler(SPEventContext *event_context, GdkEvent *event);
-static gint sp_text_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEvent *event);
-
static void sp_text_context_selection_changed(Inkscape::Selection *selection, SPTextContext *tc);
static void sp_text_context_selection_modified(Inkscape::Selection *selection, guint flags, SPTextContext *tc);
static bool sp_text_context_style_set(SPCSSAttr const *css, SPTextContext *tc);
@@ -79,6 +74,21 @@ static gint sptc_focus_in(GtkWidget *widget, GdkEventFocus *event, SPTextContext
static gint sptc_focus_out(GtkWidget *widget, GdkEventFocus *event, SPTextContext *tc);
static void sptc_commit(GtkIMContext *imc, gchar *string, SPTextContext *tc);
+
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createTextContext() {
+ return new SPTextContext();
+ }
+
+ bool textContextRegistered = ToolFactory::instance().registerObject("/tools/text", createTextContext);
+}
+
+const std::string& CTextContext::getPrefsPath() {
+ return SPTextContext::prefsPath;
+}
+
const std::string SPTextContext::prefsPath = "/tools/text";
G_DEFINE_TYPE(SPTextContext, sp_text_context, SP_TYPE_EVENT_CONTEXT);
@@ -106,6 +116,7 @@ SPTextContext::SPTextContext() : SPEventContext() {
tc->ctextcontext = new CTextContext(tc);
delete tc->ceventcontext;
tc->ceventcontext = tc->ctextcontext;
+ types.insert(typeid(SPTextContext));
tc->preedit_string = 0;
tc->unipos = 0;
@@ -180,11 +191,6 @@ static void sp_text_context_dispose(GObject *obj)
Inkscape::Rubberband::get(ec->desktop)->stop();
}
-static void sp_text_context_setup(SPEventContext *ec)
-{
- ec->ceventcontext->setup();
-}
-
void CTextContext::setup() {
SPEventContext* ec = this->speventcontext;
@@ -273,11 +279,6 @@ void CTextContext::setup() {
}
}
-static void sp_text_context_finish(SPEventContext *ec)
-{
- ec->ceventcontext->finish();
-}
-
void CTextContext::finish() {
SPEventContext* ec = this->speventcontext;
@@ -329,11 +330,6 @@ void CTextContext::finish() {
tc->text_selection_quads.clear();
}
-static gint sp_text_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEvent *event)
-{
- return event_context->ceventcontext->item_handler(item, event);
-}
-
gint CTextContext::item_handler(SPItem* item, GdkEvent* event) {
SPEventContext* event_context = this->speventcontext;
@@ -399,7 +395,7 @@ gint CTextContext::item_handler(SPItem* item, GdkEvent* event) {
}
break;
case GDK_MOTION_NOTIFY:
- if (event->motion.state & GDK_BUTTON1_MASK && tc->dragging && !event_context->space_panning) {
+ if ((event->motion.state & GDK_BUTTON1_MASK) && tc->dragging && !event_context->space_panning) {
Inkscape::Text::Layout const *layout = te_get_layout(tc->text);
if (!layout) break;
// find out click point in document coordinates
@@ -592,11 +588,6 @@ static void show_curr_uni_char(SPTextContext *const tc)
}
}
-static gint sp_text_context_root_handler(SPEventContext *const event_context, GdkEvent *const event)
-{
- return event_context->ceventcontext->root_handler(event);
-}
-
gint CTextContext::root_handler(GdkEvent* event) {
SPEventContext* event_context = this->speventcontext;
@@ -655,7 +646,7 @@ gint CTextContext::root_handler(GdkEvent* event) {
desktop->event_context->defaultMessageContext()->clear();
}
- if (tc->creating && event->motion.state & GDK_BUTTON1_MASK && !event_context->space_panning) {
+ if (tc->creating && (event->motion.state & GDK_BUTTON1_MASK) && !event_context->space_panning) {
if ( event_context->within_tolerance
&& ( abs( (gint) event->motion.x - event_context->xp ) < event_context->tolerance )
&& ( abs( (gint) event->motion.y - event_context->yp ) < event_context->tolerance ) ) {
diff --git a/src/text-context.h b/src/text-context.h
index 3214b08cd..548835dd7 100644
--- a/src/text-context.h
+++ b/src/text-context.h
@@ -24,10 +24,12 @@
#include "libnrtype/Layout-TNG.h"
#define SP_TYPE_TEXT_CONTEXT (sp_text_context_get_type ())
-#define SP_TEXT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_TEXT_CONTEXT, SPTextContext))
+//#define SP_TEXT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_TEXT_CONTEXT, SPTextContext))
#define SP_TEXT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SP_TYPE_TEXT_CONTEXT, SPTextContextClass))
-#define SP_IS_TEXT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_TEXT_CONTEXT))
+//#define SP_IS_TEXT_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_TEXT_CONTEXT))
#define SP_IS_TEXT_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_TEXT_CONTEXT))
+#define SP_TEXT_CONTEXT(obj) ((SPTextContext*)obj)
+#define SP_IS_TEXT_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPTextContext)))
struct SPCtrlLine;
@@ -93,6 +95,7 @@ public:
virtual gint root_handler(GdkEvent* event);
virtual gint item_handler(SPItem* item, GdkEvent* event);
+ virtual const std::string& getPrefsPath();
private:
SPTextContext* sptextcontext;
};
diff --git a/src/tweak-context.cpp b/src/tweak-context.cpp
index 9fca2183b..a287a0831 100644
--- a/src/tweak-context.cpp
+++ b/src/tweak-context.cpp
@@ -83,9 +83,20 @@ using Inkscape::DocumentUndo;
static void sp_tweak_context_dispose(GObject *object);
-static void sp_tweak_context_setup(SPEventContext *ec);
-static void sp_tweak_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val);
-static gint sp_tweak_context_root_handler(SPEventContext *ec, GdkEvent *event);
+
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createTweakContext() {
+ return new SPTweakContext();
+ }
+
+ bool tweakContextRegistered = ToolFactory::instance().registerObject("/tools/tweak", createTweakContext);
+}
+
+const std::string& CTweakContext::getPrefsPath() {
+ return SPTweakContext::prefsPath;
+}
const std::string SPTweakContext::prefsPath = "/tools/tweak";
@@ -114,6 +125,7 @@ SPTweakContext::SPTweakContext() : SPEventContext() {
tc->ctweakcontext = new CTweakContext(tc);
delete tc->ceventcontext;
tc->ceventcontext = tc->ctweakcontext;
+ types.insert(typeid(SPTweakContext));
tc->_message_context = 0;
tc->mode = 0;
@@ -285,12 +297,6 @@ sp_tweak_context_style_set(SPCSSAttr const *css, SPTweakContext *tc)
return false;
}
-static void
-sp_tweak_context_setup(SPEventContext *ec)
-{
- ec->ceventcontext->setup();
-}
-
void CTweakContext::setup() {
SPEventContext* ec = this->speventcontext;
@@ -345,12 +351,6 @@ void CTweakContext::setup() {
}
}
-static void
-sp_tweak_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val)
-{
- ec->ceventcontext->set(val);
-}
-
void CTweakContext::set(Inkscape::Preferences::Entry* val) {
SPEventContext* ec = this->speventcontext;
@@ -1186,13 +1186,6 @@ sp_tweak_switch_mode_temporarily (SPTweakContext *tc, gint mode, bool with_shift
sp_tweak_update_cursor (tc, with_shift);
}
-gint
-sp_tweak_context_root_handler(SPEventContext *event_context,
- GdkEvent *event)
-{
- return event_context->ceventcontext->root_handler(event);
-}
-
gint CTweakContext::root_handler(GdkEvent* event) {
SPEventContext* event_context = this->speventcontext;
diff --git a/src/tweak-context.h b/src/tweak-context.h
index e5033c0dc..2b012ab74 100644
--- a/src/tweak-context.h
+++ b/src/tweak-context.h
@@ -16,10 +16,12 @@
#include <2geom/point.h>
#define SP_TYPE_TWEAK_CONTEXT (sp_tweak_context_get_type())
-#define SP_TWEAK_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_TWEAK_CONTEXT, SPTweakContext))
+//#define SP_TWEAK_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_CAST((o), SP_TYPE_TWEAK_CONTEXT, SPTweakContext))
#define SP_TWEAK_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SP_TYPE_TWEAK_CONTEXT, SPTweakContextClass))
-#define SP_IS_TWEAK_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_TWEAK_CONTEXT))
+//#define SP_IS_TWEAK_CONTEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), SP_TYPE_TWEAK_CONTEXT))
#define SP_IS_TWEAK_CONTEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), SP_TYPE_TWEAK_CONTEXT))
+#define SP_TWEAK_CONTEXT(obj) ((SPTweakContext*)obj)
+#define SP_IS_TWEAK_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPTweakContext)))
#define SAMPLING_SIZE 8 /* fixme: ?? */
@@ -99,6 +101,7 @@ public:
virtual void set(Inkscape::Preferences::Entry* val);
virtual gint root_handler(GdkEvent* event);
+ virtual const std::string& getPrefsPath();
private:
SPTweakContext* sptweakcontext;
};
diff --git a/src/ui/tool/node-tool.cpp b/src/ui/tool/node-tool.cpp
index 8887d4334..e30dde1ae 100644
--- a/src/ui/tool/node-tool.cpp
+++ b/src/ui/tool/node-tool.cpp
@@ -124,6 +124,21 @@ void handleControlUiStyleChange(InkNodeTool *nt);
//} // anonymous namespace
+
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createNodesContext() {
+ return new InkNodeTool();
+ }
+
+ bool nodesContextRegistered = ToolFactory::instance().registerObject("/tools/nodes", createNodesContext);
+}
+
+const std::string& CInkNodeTool::getPrefsPath() {
+ return InkNodeTool::prefsPath;
+}
+
const std::string InkNodeTool::prefsPath = "/tools/nodes";
G_DEFINE_TYPE(InkNodeTool, ink_node_tool, SP_TYPE_EVENT_CONTEXT);
@@ -152,6 +167,7 @@ InkNodeTool::InkNodeTool() : SPEventContext() {
nt->cinknodetool = new CInkNodeTool(nt);
delete nt->ceventcontext;
nt->ceventcontext = nt->cinknodetool;
+ types.insert(typeid(InkNodeTool));
nt->show_handles = 0;
nt->single_node_transform_handles = 0;
diff --git a/src/ui/tool/node-tool.h b/src/ui/tool/node-tool.h
index b5ce65513..3de68d535 100644
--- a/src/ui/tool/node-tool.h
+++ b/src/ui/tool/node-tool.h
@@ -17,10 +17,12 @@
#include "event-context.h"
#define INK_TYPE_NODE_TOOL (ink_node_tool_get_type ())
-#define INK_NODE_TOOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), INK_TYPE_NODE_TOOL, InkNodeTool))
+//#define INK_NODE_TOOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), INK_TYPE_NODE_TOOL, InkNodeTool))
#define INK_NODE_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), INK_TYPE_NODE_TOOL, InkNodeToolClass))
-#define INK_IS_NODE_TOOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), INK_TYPE_NODE_TOOL))
+//#define INK_IS_NODE_TOOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), INK_TYPE_NODE_TOOL))
#define INK_IS_NODE_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), INK_TYPE_NODE_TOOL))
+#define INK_NODE_TOOL(obj) ((InkNodeTool*)obj)
+#define INK_IS_NODE_TOOL(obj) (((SPEventContext*)obj)->types.count(typeid(InkNodeTool)))
namespace Inkscape {
@@ -91,6 +93,7 @@ public:
virtual gint root_handler(GdkEvent* event);
virtual gint item_handler(SPItem* item, GdkEvent* event);
+ virtual const std::string& getPrefsPath();
private:
InkNodeTool* inknodetool;
};
diff --git a/src/zoom-context.cpp b/src/zoom-context.cpp
index 92c50b148..8e5f4753d 100644
--- a/src/zoom-context.cpp
+++ b/src/zoom-context.cpp
@@ -26,17 +26,25 @@
#include "zoom-context.h"
-static void sp_zoom_context_setup(SPEventContext *ec);
-static void sp_zoom_context_finish (SPEventContext *ec);
-
-static gint sp_zoom_context_root_handler(SPEventContext *event_context, GdkEvent *event);
-static gint sp_zoom_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEvent *event);
-
static gint xp = 0, yp = 0; // where drag started
static gint tolerance = 0;
static bool within_tolerance = false;
static bool escaped;
+#include "sp-factory.h"
+
+namespace {
+ SPEventContext* createZoomContext() {
+ return new SPZoomContext();
+ }
+
+ bool zoomContextRegistered = ToolFactory::instance().registerObject("/tools/zoom", createZoomContext);
+}
+
+const std::string& CZoomContext::getPrefsPath() {
+ return SPZoomContext::prefsPath;
+}
+
const std::string SPZoomContext::prefsPath = "/tools/zoom";
G_DEFINE_TYPE(SPZoomContext, sp_zoom_context, SP_TYPE_EVENT_CONTEXT);
@@ -62,6 +70,7 @@ SPZoomContext::SPZoomContext() : SPEventContext() {
zoom_context->czoomcontext = new CZoomContext(zoom_context);
delete zoom_context->ceventcontext;
zoom_context->ceventcontext = zoom_context->czoomcontext;
+ types.insert(typeid(SPZoomContext));
zoom_context->grabbed = 0;
@@ -77,12 +86,6 @@ static void sp_zoom_context_init (SPZoomContext *zoom_context)
new (zoom_context) SPZoomContext();
}
-static void
-sp_zoom_context_finish (SPEventContext *ec)
-{
- ec->ceventcontext->finish();
-}
-
void CZoomContext::finish() {
SPEventContext* ec = this->speventcontext;
@@ -96,11 +99,6 @@ void CZoomContext::finish() {
}
}
-static void sp_zoom_context_setup(SPEventContext *ec)
-{
- ec->ceventcontext->setup();
-}
-
void CZoomContext::setup() {
SPEventContext* ec = this->speventcontext;
@@ -118,11 +116,6 @@ void CZoomContext::setup() {
CEventContext::setup();
}
-static gint sp_zoom_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEvent *event)
-{
- return event_context->ceventcontext->item_handler(item, event);
-}
-
gint CZoomContext::item_handler(SPItem* item, GdkEvent* event) {
SPEventContext* event_context = this->speventcontext;
@@ -136,11 +129,6 @@ gint CZoomContext::item_handler(SPItem* item, GdkEvent* event) {
return ret;
}
-static gint sp_zoom_context_root_handler(SPEventContext *event_context, GdkEvent *event)
-{
- return event_context->ceventcontext->root_handler(event);
-}
-
gint CZoomContext::root_handler(GdkEvent* event) {
SPEventContext* event_context = this->speventcontext;
@@ -186,7 +174,7 @@ gint CZoomContext::root_handler(GdkEvent* event) {
}
case GDK_MOTION_NOTIFY:
- if (event->motion.state & GDK_BUTTON1_MASK && !event_context->space_panning) {
+ if ((event->motion.state & GDK_BUTTON1_MASK) && !event_context->space_panning) {
ret = TRUE;
if ( within_tolerance
diff --git a/src/zoom-context.h b/src/zoom-context.h
index 4342cc982..36842649b 100644
--- a/src/zoom-context.h
+++ b/src/zoom-context.h
@@ -16,8 +16,10 @@
#include "event-context.h"
#define SP_TYPE_ZOOM_CONTEXT (sp_zoom_context_get_type ())
-#define SP_ZOOM_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_ZOOM_CONTEXT, SPZoomContext))
-#define SP_IS_ZOOM_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_ZOOM_CONTEXT))
+//#define SP_ZOOM_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SP_TYPE_ZOOM_CONTEXT, SPZoomContext))
+//#define SP_IS_ZOOM_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_ZOOM_CONTEXT))
+#define SP_ZOOM_CONTEXT(obj) ((SPZoomContext*)obj)
+#define SP_IS_ZOOM_CONTEXT(obj) (((SPEventContext*)obj)->types.count(typeid(SPZoomContext)))
class CZoomContext;
@@ -45,6 +47,7 @@ public:
virtual gint root_handler(GdkEvent* event);
virtual gint item_handler(SPItem* item, GdkEvent* event);
+ virtual const std::string& getPrefsPath();
private:
SPZoomContext* spzoomcontext;
};