summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarkus Engel <markus.engel@tum.de>2013-04-09 20:12:07 +0000
committerMarkus Engel <markus.engel@tum.de>2013-04-09 20:12:07 +0000
commit1d8f1753cd8cab38d19fcc26a4ad70ba2e794ac8 (patch)
treeb010ac32dcfd9923c2ec38dff3b70955242dfa70 /src
parentStarted conversion of SPEventContext tree; added virtual pads to all classes. (diff)
downloadinkscape-1d8f1753cd8cab38d19fcc26a4ad70ba2e794ac8.tar.gz
inkscape-1d8f1753cd8cab38d19fcc26a4ad70ba2e794ac8.zip
Added constructors to EventContext tree / some missing virtual pads.
(bzr r11608.1.90)
Diffstat (limited to 'src')
-rw-r--r--src/arc-context.cpp20
-rw-r--r--src/arc-context.h1
-rw-r--r--src/box3d-context.cpp20
-rw-r--r--src/box3d-context.h1
-rw-r--r--src/common-context.cpp24
-rw-r--r--src/common-context.h1
-rw-r--r--src/connector-context.cpp46
-rw-r--r--src/connector-context.h1
-rw-r--r--src/draw-context.cpp22
-rw-r--r--src/draw-context.h1
-rw-r--r--src/dropper-context.cpp55
-rw-r--r--src/dropper-context.h20
-rw-r--r--src/dyna-draw-context.cpp18
-rw-r--r--src/dyna-draw-context.h1
-rw-r--r--src/eraser-context.cpp18
-rw-r--r--src/eraser-context.h1
-rw-r--r--src/event-context.cpp113
-rw-r--r--src/event-context.h15
-rw-r--r--src/flood-context.cpp18
-rw-r--r--src/flood-context.h1
-rw-r--r--src/gradient-context.cpp19
-rw-r--r--src/gradient-context.h1
-rw-r--r--src/lpe-tool-context.cpp30
-rw-r--r--src/lpe-tool-context.h1
-rw-r--r--src/measure-context.cpp73
-rw-r--r--src/measure-context.h23
-rw-r--r--src/mesh-context.cpp19
-rw-r--r--src/mesh-context.h1
-rw-r--r--src/pen-context.cpp30
-rw-r--r--src/pen-context.h1
-rw-r--r--src/pencil-context.cpp24
-rw-r--r--src/pencil-context.h1
-rw-r--r--src/rect-context.cpp22
-rw-r--r--src/rect-context.h1
-rw-r--r--src/select-context.cpp23
-rw-r--r--src/select-context.h1
-rw-r--r--src/spiral-context.cpp22
-rw-r--r--src/spiral-context.h1
-rw-r--r--src/spray-context.cpp65
-rw-r--r--src/spray-context.h22
-rw-r--r--src/star-context.cpp24
-rw-r--r--src/star-context.h1
-rw-r--r--src/text-context.cpp21
-rw-r--r--src/text-context.h1
-rw-r--r--src/tweak-context.cpp66
-rw-r--r--src/tweak-context.h22
-rw-r--r--src/ui/tool/node-tool.cpp36
-rw-r--r--src/ui/tool/node-tool.h1
-rw-r--r--src/zoom-context.cpp73
-rw-r--r--src/zoom-context.h23
50 files changed, 794 insertions, 251 deletions
diff --git a/src/arc-context.cpp b/src/arc-context.cpp
index 9ebce7fac..d28296ed8 100644
--- a/src/arc-context.cpp
+++ b/src/arc-context.cpp
@@ -69,22 +69,25 @@ static void sp_arc_context_class_init(SPArcContextClass *klass)
object_class->dispose = sp_arc_context_dispose;
- event_context_class->setup = sp_arc_context_setup;
- event_context_class->finish = sp_arc_context_finish;
- event_context_class->root_handler = sp_arc_context_root_handler;
- event_context_class->item_handler = sp_arc_context_item_handler;
+// event_context_class->setup = sp_arc_context_setup;
+// event_context_class->finish = sp_arc_context_finish;
+// event_context_class->root_handler = sp_arc_context_root_handler;
+// event_context_class->item_handler = sp_arc_context_item_handler;
}
CArcContext::CArcContext(SPArcContext* arccontext) : CEventContext(arccontext) {
this->sparccontext = arccontext;
}
-static void sp_arc_context_init(SPArcContext *arc_context)
-{
+SPArcContext::SPArcContext() : SPEventContext() {
+ SPArcContext* arc_context = this;
+
arc_context->carccontext = new CArcContext(arc_context);
delete arc_context->ceventcontext;
arc_context->ceventcontext = arc_context->carccontext;
+ arc_context->_message_context = 0;
+
SPEventContext *event_context = SP_EVENT_CONTEXT(arc_context);
event_context->cursor_shape = cursor_ellipse_xpm;
@@ -102,6 +105,11 @@ static void sp_arc_context_init(SPArcContext *arc_context)
new (&arc_context->sel_changed_connection) sigc::connection();
}
+static void sp_arc_context_init(SPArcContext *arc_context)
+{
+ new (arc_context) SPArcContext();
+}
+
static void sp_arc_context_finish(SPEventContext *ec)
{
ec->ceventcontext->finish();
diff --git a/src/arc-context.h b/src/arc-context.h
index 7ad84f8a4..9834b3de7 100644
--- a/src/arc-context.h
+++ b/src/arc-context.h
@@ -31,6 +31,7 @@ class CArcContext;
class SPArcContext : public SPEventContext {
public:
+ SPArcContext();
CArcContext* carccontext;
SPItem *item;
diff --git a/src/box3d-context.cpp b/src/box3d-context.cpp
index 7bf1d51b6..1aca7a95e 100644
--- a/src/box3d-context.cpp
+++ b/src/box3d-context.cpp
@@ -73,22 +73,25 @@ static void sp_box3d_context_class_init(Box3DContextClass *klass)
object_class->dispose = sp_box3d_context_dispose;
- event_context_class->setup = sp_box3d_context_setup;
- event_context_class->finish = sp_box3d_context_finish;
- event_context_class->root_handler = sp_box3d_context_root_handler;
- event_context_class->item_handler = sp_box3d_context_item_handler;
+// event_context_class->setup = sp_box3d_context_setup;
+// event_context_class->finish = sp_box3d_context_finish;
+// event_context_class->root_handler = sp_box3d_context_root_handler;
+// event_context_class->item_handler = sp_box3d_context_item_handler;
}
CBox3DContext::CBox3DContext(Box3DContext* box3dcontext) : CEventContext(box3dcontext) {
this->box3dcontext = box3dcontext;
}
-static void sp_box3d_context_init(Box3DContext *box3d_context)
-{
+Box3DContext::Box3DContext() : SPEventContext() {
+ Box3DContext* box3d_context = this;
+
box3d_context->cbox3dcontext = new CBox3DContext(box3d_context);
delete box3d_context->ceventcontext;
box3d_context->ceventcontext = box3d_context->cbox3dcontext;
+ box3d_context->_message_context = 0;
+
SPEventContext *event_context = SP_EVENT_CONTEXT(box3d_context);
event_context->cursor_shape = cursor_3dbox_xpm;
@@ -110,6 +113,11 @@ static void sp_box3d_context_init(Box3DContext *box3d_context)
new (&box3d_context->sel_changed_connection) sigc::connection();
}
+static void sp_box3d_context_init(Box3DContext *box3d_context)
+{
+ new (box3d_context) Box3DContext();
+}
+
static void sp_box3d_context_finish(SPEventContext *ec)
{
ec->ceventcontext->finish();
diff --git a/src/box3d-context.h b/src/box3d-context.h
index 62c3dcd2a..f52d78ce2 100644
--- a/src/box3d-context.h
+++ b/src/box3d-context.h
@@ -31,6 +31,7 @@ class CBox3DContext;
class Box3DContext : public SPEventContext {
public:
+ Box3DContext();
CBox3DContext* cbox3dcontext;
SPItem *item;
diff --git a/src/common-context.cpp b/src/common-context.cpp
index 39a0d7cde..1feb6ee95 100644
--- a/src/common-context.cpp
+++ b/src/common-context.cpp
@@ -35,21 +35,30 @@ static void sp_common_context_class_init(SPCommonContextClass *klass)
object_class->dispose = sp_common_context_dispose;
- event_context_class->setup = sp_common_context_setup;
- event_context_class->set = sp_common_context_set;
- event_context_class->root_handler = sp_common_context_root_handler;
+// event_context_class->setup = sp_common_context_setup;
+// event_context_class->set = sp_common_context_set;
+// event_context_class->root_handler = sp_common_context_root_handler;
}
CCommonContext::CCommonContext(SPCommonContext* commoncontext) : CEventContext(commoncontext) {
this->spcommoncontext = commoncontext;
}
-static void sp_common_context_init(SPCommonContext *ctx)
-{
+SPCommonContext::SPCommonContext() : SPEventContext() {
+ SPCommonContext* ctx = this;
+
ctx->ccommoncontext = new CCommonContext(ctx);
delete ctx->ceventcontext;
ctx->ceventcontext = ctx->ccommoncontext;
+ ctx->_message_context = 0;
+ ctx->tremor = 0;
+ ctx->usetilt = 0;
+ ctx->is_drawing = false;
+ ctx->xtilt = 0;
+ ctx->ytilt = 0;
+ ctx->usepressure = 0;
+
// ctx->cursor_shape = cursor_eraser_xpm;
// ctx->hot_x = 4;
// ctx->hot_y = 4;
@@ -88,6 +97,11 @@ static void sp_common_context_init(SPCommonContext *ctx)
ctx->abs_width = false;
}
+static void sp_common_context_init(SPCommonContext *ctx)
+{
+ new (ctx) SPCommonContext();
+}
+
static void sp_common_context_dispose(GObject *object)
{
SPCommonContext *ctx = SP_COMMON_CONTEXT(object);
diff --git a/src/common-context.h b/src/common-context.h
index b4113b9a9..8ed5ba1d3 100644
--- a/src/common-context.h
+++ b/src/common-context.h
@@ -35,6 +35,7 @@ class CCommonContext;
class SPCommonContext : public SPEventContext {
public:
+ SPCommonContext();
CCommonContext* ccommoncontext;
/** accumulated shape which ultimately goes in svg:path */
diff --git a/src/connector-context.cpp b/src/connector-context.cpp
index aff1dcb4c..7b29126e6 100644
--- a/src/connector-context.cpp
+++ b/src/connector-context.cpp
@@ -181,24 +181,34 @@ sp_connector_context_class_init(SPConnectorContextClass *klass)
object_class->dispose = sp_connector_context_dispose;
- event_context_class->setup = sp_connector_context_setup;
- event_context_class->set = sp_connector_context_set;
- event_context_class->finish = sp_connector_context_finish;
- event_context_class->root_handler = sp_connector_context_root_handler;
- event_context_class->item_handler = sp_connector_context_item_handler;
+// event_context_class->setup = sp_connector_context_setup;
+// event_context_class->set = sp_connector_context_set;
+// event_context_class->finish = sp_connector_context_finish;
+// event_context_class->root_handler = sp_connector_context_root_handler;
+// event_context_class->item_handler = sp_connector_context_item_handler;
}
CConnectorContext::CConnectorContext(SPConnectorContext* connectorcontext) : CEventContext(connectorcontext) {
this->spconnectorcontext = connectorcontext;
}
-static void
-sp_connector_context_init(SPConnectorContext *cc)
-{
+SPConnectorContext::SPConnectorContext() : SPEventContext() {
+ SPConnectorContext* cc = this;
+
cc->cconnectorcontext = new CConnectorContext(cc);
delete cc->ceventcontext;
cc->ceventcontext = cc->cconnectorcontext;
+ cc->red_curve = 0;
+ cc->isOrthogonal = false;
+ cc->c1 = 0;
+ cc->red_bpath = 0;
+ cc->green_curve = 0;
+ cc->selection = 0;
+ cc->cl0 = 0;
+ cc->cl1 = 0;
+ cc->c0 = 0;
+
SPEventContext *ec = SP_EVENT_CONTEXT(cc);
ec->cursor_shape = cursor_connector_xpm;
@@ -241,6 +251,12 @@ sp_connector_context_init(SPConnectorContext *cc)
cc->state = SP_CONNECTOR_CONTEXT_IDLE;
}
+static void
+sp_connector_context_init(SPConnectorContext *cc)
+{
+ new (cc) SPConnectorContext();
+}
+
static void
sp_connector_context_dispose(GObject *object)
@@ -281,9 +297,10 @@ void CConnectorContext::setup() {
SPConnectorContext *cc = SP_CONNECTOR_CONTEXT(ec);
SPDesktop *dt = ec->desktop;
- if ((SP_EVENT_CONTEXT_CLASS(sp_connector_context_parent_class))->setup) {
- (SP_EVENT_CONTEXT_CLASS(sp_connector_context_parent_class))->setup(ec);
- }
+// if ((SP_EVENT_CONTEXT_CLASS(sp_connector_context_parent_class))->setup) {
+// (SP_EVENT_CONTEXT_CLASS(sp_connector_context_parent_class))->setup(ec);
+// }
+ CEventContext::setup();
cc->selection = sp_desktop_selection(dt);
@@ -358,9 +375,10 @@ void CConnectorContext::finish() {
spcc_connector_finish(cc);
cc->state = SP_CONNECTOR_CONTEXT_IDLE;
- if ((SP_EVENT_CONTEXT_CLASS(sp_connector_context_parent_class))->finish) {
- (SP_EVENT_CONTEXT_CLASS(sp_connector_context_parent_class))->finish(ec);
- }
+// if ((SP_EVENT_CONTEXT_CLASS(sp_connector_context_parent_class))->finish) {
+// (SP_EVENT_CONTEXT_CLASS(sp_connector_context_parent_class))->finish(ec);
+// }
+ CEventContext::finish();
if (cc->selection) {
cc->selection = NULL;
diff --git a/src/connector-context.h b/src/connector-context.h
index 74f84540f..32cebf439 100644
--- a/src/connector-context.h
+++ b/src/connector-context.h
@@ -49,6 +49,7 @@ class CConnectorContext;
class SPConnectorContext : public SPEventContext {
public:
+ SPConnectorContext();
CConnectorContext* cconnectorcontext;
Inkscape::Selection *selection;
diff --git a/src/draw-context.cpp b/src/draw-context.cpp
index 647a9c192..cdb0aeeaa 100644
--- a/src/draw-context.cpp
+++ b/src/draw-context.cpp
@@ -86,22 +86,27 @@ static void sp_draw_context_class_init(SPDrawContextClass *klass)
object_class->dispose = sp_draw_context_dispose;
- ec_class->setup = sp_draw_context_setup;
- ec_class->set = sp_draw_context_set;
- ec_class->finish = sp_draw_context_finish;
- ec_class->root_handler = sp_draw_context_root_handler;
+// ec_class->setup = sp_draw_context_setup;
+// ec_class->set = sp_draw_context_set;
+// ec_class->finish = sp_draw_context_finish;
+// ec_class->root_handler = sp_draw_context_root_handler;
}
CDrawContext::CDrawContext(SPDrawContext* drawcontext) : CEventContext(drawcontext) {
this->spdrawcontext = drawcontext;
}
-static void sp_draw_context_init(SPDrawContext *dc)
-{
+SPDrawContext::SPDrawContext() : SPEventContext() {
+ SPDrawContext* dc = this;
+
dc->cdrawcontext = new CDrawContext(dc);
delete dc->ceventcontext;
dc->ceventcontext = dc->cdrawcontext;
+ dc->selection = 0;
+ dc->grab = 0;
+ dc->anchor_statusbar = false;
+
dc->attach = FALSE;
dc->red_color = 0xff00007f;
@@ -133,6 +138,11 @@ static void sp_draw_context_init(SPDrawContext *dc)
new (&dc->sel_modified_connection) sigc::connection();
}
+static void sp_draw_context_init(SPDrawContext *dc)
+{
+ new (dc) SPDrawContext();
+}
+
static void sp_draw_context_dispose(GObject *object)
{
SPDrawContext *dc = SP_DRAW_CONTEXT(object);
diff --git a/src/draw-context.h b/src/draw-context.h
index 4cb1d5cc2..f2024a952 100644
--- a/src/draw-context.h
+++ b/src/draw-context.h
@@ -39,6 +39,7 @@ class CDrawContext;
class SPDrawContext : public SPEventContext{
public:
+ SPDrawContext();
CDrawContext* cdrawcontext;
Inkscape::Selection *selection;
diff --git a/src/dropper-context.cpp b/src/dropper-context.cpp
index 05d22017e..fefa1ccb6 100644
--- a/src/dropper-context.cpp
+++ b/src/dropper-context.cpp
@@ -88,15 +88,24 @@ sp_dropper_context_class_init(SPDropperContextClass *klass)
parent_class = SP_EVENT_CONTEXT_CLASS(g_type_class_peek_parent(klass));
- ec_class->setup = sp_dropper_context_setup;
- ec_class->finish = sp_dropper_context_finish;
- ec_class->root_handler = sp_dropper_context_root_handler;
+// ec_class->setup = sp_dropper_context_setup;
+// ec_class->finish = sp_dropper_context_finish;
+// ec_class->root_handler = sp_dropper_context_root_handler;
g_type_class_add_private(object_class, sizeof(SPDropperContext));
}
-static void sp_dropper_context_init(SPDropperContext *dc)
-{
+CDropperContext::CDropperContext(SPDropperContext* droppercontext) : CEventContext(droppercontext) {
+ this->spdroppercontext = droppercontext;
+}
+
+SPDropperContext::SPDropperContext() : SPEventContext() {
+ SPDropperContext* dc = this;
+
+ dc->cdroppercontext = new CDropperContext(dc);
+ delete dc->ceventcontext;
+ dc->ceventcontext = dc->cdroppercontext;
+
SPEventContext *event_context = SP_EVENT_CONTEXT(dc);
event_context->cursor_shape = cursor_dropper_f_xpm;
event_context->hot_x = 7;
@@ -104,18 +113,29 @@ static void sp_dropper_context_init(SPDropperContext *dc)
cursor_dropper_fill = sp_cursor_new_from_xpm(cursor_dropper_f_xpm , 7, 7);
cursor_dropper_stroke = sp_cursor_new_from_xpm(cursor_dropper_s_xpm , 7, 7);
+}
+static void sp_dropper_context_init(SPDropperContext *dc)
+{
+ new (dc) SPDropperContext();
}
static void
sp_dropper_context_setup(SPEventContext *ec)
{
+ ec->ceventcontext->setup();
+}
+
+void CDropperContext::setup() {
+ SPEventContext* ec = this->speventcontext;
+
SPDropperContext *dc = SP_DROPPER_CONTEXT(ec);
SPDropperContextPrivate *priv = SP_DROPPER_CONTEXT_GET_PRIVATE(dc);
- if ((SP_EVENT_CONTEXT_CLASS(parent_class))->setup) {
- (SP_EVENT_CONTEXT_CLASS(parent_class))->setup(ec);
- }
+// if ((SP_EVENT_CONTEXT_CLASS(parent_class))->setup) {
+// (SP_EVENT_CONTEXT_CLASS(parent_class))->setup(ec);
+// }
+ CEventContext::setup();
/* TODO: have a look at sp_dyna_draw_context_setup where the same is done.. generalize? at least make it an arcto! */
SPCurve *c = new SPCurve();
@@ -145,6 +165,12 @@ sp_dropper_context_setup(SPEventContext *ec)
static void
sp_dropper_context_finish(SPEventContext *ec)
{
+ ec->ceventcontext->finish();
+}
+
+void CDropperContext::finish() {
+ SPEventContext* ec = this->speventcontext;
+
SPDropperContext *dc = SP_DROPPER_CONTEXT(ec);
SPDropperContextPrivate *priv = SP_DROPPER_CONTEXT_GET_PRIVATE(dc);
@@ -208,6 +234,12 @@ static gint
sp_dropper_context_root_handler(SPEventContext *event_context,
GdkEvent *event)
{
+ return event_context->ceventcontext->root_handler(event);
+}
+
+gint CDropperContext::root_handler(GdkEvent* event) {
+ SPEventContext* event_context = this->speventcontext;
+
SPDropperContext *dc = SP_DROPPER_CONTEXT(event_context);
SPDropperContextPrivate *priv = SP_DROPPER_CONTEXT_GET_PRIVATE(dc);
SPDesktop *desktop = event_context->desktop;
@@ -427,9 +459,10 @@ sp_dropper_context_root_handler(SPEventContext *event_context,
}
if (!ret) {
- if ((SP_EVENT_CONTEXT_CLASS(parent_class))->root_handler) {
- ret = (SP_EVENT_CONTEXT_CLASS(parent_class))->root_handler(event_context, event);
- }
+// if ((SP_EVENT_CONTEXT_CLASS(parent_class))->root_handler) {
+// ret = (SP_EVENT_CONTEXT_CLASS(parent_class))->root_handler(event_context, event);
+// }
+ ret = CEventContext::root_handler(event);
}
return ret;
diff --git a/src/dropper-context.h b/src/dropper-context.h
index be4b543ae..300b77ed5 100644
--- a/src/dropper-context.h
+++ b/src/dropper-context.h
@@ -25,7 +25,13 @@ enum {
SP_DROPPER_PICK_ACTUAL
};
-struct SPDropperContext {
+class CDropperContext;
+
+class SPDropperContext : public SPEventContext {
+public:
+ SPDropperContext();
+ CDropperContext* cdroppercontext;
+
SPEventContext event_context;
};
@@ -33,6 +39,18 @@ struct SPDropperContextClass {
SPEventContextClass parent_class;
};
+class CDropperContext : public CEventContext {
+public:
+ CDropperContext(SPDropperContext* droppercontext);
+
+ virtual void setup();
+ virtual void finish();
+ virtual gint root_handler(GdkEvent* event);
+
+private:
+ SPDropperContext* spdroppercontext;
+};
+
GType sp_dropper_context_get_type (void);
guint32 sp_dropper_context_get_color(SPEventContext *ec);
diff --git a/src/dyna-draw-context.cpp b/src/dyna-draw-context.cpp
index 0cf3e60bc..cf958eaad 100644
--- a/src/dyna-draw-context.cpp
+++ b/src/dyna-draw-context.cpp
@@ -109,18 +109,18 @@ sp_dyna_draw_context_class_init(SPDynaDrawContextClass *klass)
object_class->dispose = sp_dyna_draw_context_dispose;
- event_context_class->setup = sp_dyna_draw_context_setup;
- event_context_class->set = sp_dyna_draw_context_set;
- event_context_class->root_handler = sp_dyna_draw_context_root_handler;
+// event_context_class->setup = sp_dyna_draw_context_setup;
+// event_context_class->set = sp_dyna_draw_context_set;
+// event_context_class->root_handler = sp_dyna_draw_context_root_handler;
}
CDynaDrawContext::CDynaDrawContext(SPDynaDrawContext* dynadrawcontext) : CCommonContext(dynadrawcontext) {
this->spdynadrawcontext = dynadrawcontext;
}
-static void
-sp_dyna_draw_context_init(SPDynaDrawContext *ddc)
-{
+SPDynaDrawContext::SPDynaDrawContext() : SPCommonContext() {
+ SPDynaDrawContext* ddc = this;
+
ddc->cdynadrawcontext = new CDynaDrawContext(ddc);
delete ddc->ccommoncontext;
ddc->ccommoncontext = ddc->cdynadrawcontext;
@@ -155,6 +155,12 @@ sp_dyna_draw_context_init(SPDynaDrawContext *ddc)
}
static void
+sp_dyna_draw_context_init(SPDynaDrawContext *ddc)
+{
+ new (ddc) SPDynaDrawContext();
+}
+
+static void
sp_dyna_draw_context_dispose(GObject *object)
{
SPDynaDrawContext *ddc = SP_DYNA_DRAW_CONTEXT(object);
diff --git a/src/dyna-draw-context.h b/src/dyna-draw-context.h
index 2beea4ddf..a53757c42 100644
--- a/src/dyna-draw-context.h
+++ b/src/dyna-draw-context.h
@@ -39,6 +39,7 @@ class CDynaDrawContext;
class SPDynaDrawContext : public SPCommonContext {
public:
+ SPDynaDrawContext();
CDynaDrawContext* cdynadrawcontext;
/** newly created object remain selected */
diff --git a/src/eraser-context.cpp b/src/eraser-context.cpp
index 59cce31bd..01d3adcf6 100644
--- a/src/eraser-context.cpp
+++ b/src/eraser-context.cpp
@@ -111,18 +111,18 @@ sp_eraser_context_class_init(SPEraserContextClass *klass)
object_class->dispose = sp_eraser_context_dispose;
- event_context_class->setup = sp_eraser_context_setup;
- event_context_class->set = sp_eraser_context_set;
- event_context_class->root_handler = sp_eraser_context_root_handler;
+// event_context_class->setup = sp_eraser_context_setup;
+// event_context_class->set = sp_eraser_context_set;
+// event_context_class->root_handler = sp_eraser_context_root_handler;
}
CEraserContext::CEraserContext(SPEraserContext* erasercontext) : CCommonContext(erasercontext) {
this->sperasercontext = erasercontext;
}
-static void
-sp_eraser_context_init(SPEraserContext *erc)
-{
+SPEraserContext::SPEraserContext() : SPCommonContext() {
+ SPEraserContext* erc = this;
+
erc->cerasercontext = new CEraserContext(erc);
delete erc->ccommoncontext;
erc->ccommoncontext = erc->cerasercontext;
@@ -134,6 +134,12 @@ sp_eraser_context_init(SPEraserContext *erc)
}
static void
+sp_eraser_context_init(SPEraserContext *erc)
+{
+ new (erc) SPEraserContext();
+}
+
+static void
sp_eraser_context_dispose(GObject *object)
{
G_OBJECT_CLASS(sp_eraser_context_parent_class)->dispose(object);
diff --git a/src/eraser-context.h b/src/eraser-context.h
index ae73dc0ad..f8f0cf2ff 100644
--- a/src/eraser-context.h
+++ b/src/eraser-context.h
@@ -41,6 +41,7 @@ class CEraserContext;
class SPEraserContext : public SPCommonContext {
public:
+ SPEraserContext();
CEraserContext* cerasercontext;
};
diff --git a/src/event-context.cpp b/src/event-context.cpp
index 47c8eff95..c4152a71a 100644
--- a/src/event-context.cpp
+++ b/src/event-context.cpp
@@ -91,9 +91,9 @@ static void sp_event_context_class_init(SPEventContextClass *klass) {
object_class->dispose = sp_event_context_dispose;
- klass->setup = sp_event_context_private_setup;
- klass->root_handler = sp_event_context_private_root_handler;
- klass->item_handler = sp_event_context_private_item_handler;
+// klass->setup = sp_event_context_private_setup;
+// klass->root_handler = sp_event_context_private_root_handler;
+// klass->item_handler = sp_event_context_private_item_handler;
}
CEventContext::CEventContext(SPEventContext* eventcontext) {
@@ -115,12 +115,23 @@ void CEventContext::deactivate() {
void CEventContext::finish() {
}
-/**
- * Clears all SPEventContext object members.
- */
-static void sp_event_context_init(SPEventContext *event_context) {
+SPEventContext::SPEventContext() {
+ SPEventContext* event_context = this;
+
event_context->ceventcontext = new CEventContext(event_context);
+ event_context->hot_y = 0;
+ event_context->xp = 0;
+ event_context->cursor_shape = 0;
+ event_context->pref_observer = 0;
+ event_context->hot_x = 0;
+ event_context->yp = 0;
+ event_context->within_tolerance = false;
+ event_context->next = 0;
+ event_context->tolerance = 0;
+ event_context->key = 0;
+ event_context->item_to_select = 0;
+
event_context->desktop = NULL;
event_context->cursor = NULL;
event_context->_message_context = NULL;
@@ -134,6 +145,13 @@ static void sp_event_context_init(SPEventContext *event_context) {
}
/**
+ * Clears all SPEventContext object members.
+ */
+static void sp_event_context_init(SPEventContext *event_context) {
+ new (event_context) SPEventContext();
+}
+
+/**
* Callback to free and null member variables of SPEventContext object.
*/
static void sp_event_context_dispose(GObject *object) {
@@ -253,10 +271,10 @@ void sp_event_context_update_cursor(SPEventContext *ec) {
* Callback that gets called on initialization of SPEventContext object.
* Redraws mouse cursor, at the moment.
*/
-static void sp_event_context_private_setup(SPEventContext *ec) {
- //sp_event_context_update_cursor(ec);
- ec->ceventcontext->setup();
-}
+//static void sp_event_context_private_setup(SPEventContext *ec) {
+// //sp_event_context_update_cursor(ec);
+// ec->ceventcontext->setup();
+//}
void CEventContext::setup() {
sp_event_context_update_cursor(this->speventcontext);
@@ -380,11 +398,11 @@ static gdouble accelerate_scroll(GdkEvent *event, gdouble acceleration,
/**
* Main event dispatch, gets called from Gdk.
*/
-static gint sp_event_context_private_root_handler(
- SPEventContext *event_context, GdkEvent *event) {
-
- return event_context->ceventcontext->root_handler(event);
-}
+//static gint sp_event_context_private_root_handler(
+// SPEventContext *event_context, GdkEvent *event) {
+//
+// return event_context->ceventcontext->root_handler(event);
+//}
gint CEventContext::root_handler(GdkEvent* event) {
SPEventContext* event_context = this->speventcontext;
@@ -842,11 +860,11 @@ gint CEventContext::root_handler(GdkEvent* event) {
* Only reacts to right mouse button at the moment.
* \todo Fixme: do context sensitive popup menu on items.
*/
-gint sp_event_context_private_item_handler(SPEventContext *ec, SPItem *item,
- GdkEvent *event) {
-
- return ec->ceventcontext->item_handler(item, event);
-}
+//gint sp_event_context_private_item_handler(SPEventContext *ec, SPItem *item,
+// GdkEvent *event) {
+//
+// return ec->ceventcontext->item_handler(item, event);
+//}
gint CEventContext::item_handler(SPItem* item, GdkEvent* event) {
SPEventContext* ec = this->speventcontext;
@@ -889,10 +907,11 @@ public:
Inkscape::Preferences::Observer(path), _ec(ec) {
}
virtual void notify(Inkscape::Preferences::Entry const &val) {
- if ((SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(_ec)))->set) {
- (SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(_ec)))->set(_ec,
- const_cast<Inkscape::Preferences::Entry*> (&val));
- }
+// if ((SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(_ec)))->set) {
+// (SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(_ec)))->set(_ec,
+// const_cast<Inkscape::Preferences::Entry*> (&val));
+// }
+ _ec->ceventcontext->set(const_cast<Inkscape::Preferences::Entry*>(&val));
}
private:
SPEventContext * const _ec;
@@ -923,8 +942,9 @@ sp_event_context_new(GType type, SPDesktop *desktop, gchar const *pref_path,
prefs->addObserver(*(ec->pref_observer));
}
- if ((SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(ec)))->setup)
- (SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(ec)))->setup(ec);
+// if ((SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(ec)))->setup)
+// (SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(ec)))->setup(ec);
+ ec->ceventcontext->setup();
return ec;
}
@@ -942,8 +962,9 @@ void sp_event_context_finish(SPEventContext *ec) {
g_warning("Finishing event context with active link\n");
}
- if ((SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(ec)))->finish)
- (SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(ec)))->finish(ec);
+// if ((SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(ec)))->finish)
+// (SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(ec)))->finish(ec);
+ ec->ceventcontext->finish();
}
//-------------------------------member functions
@@ -999,12 +1020,16 @@ void sp_event_context_read(SPEventContext *ec, gchar const *key) {
g_return_if_fail(SP_IS_EVENT_CONTEXT(ec));
g_return_if_fail(key != NULL);
- if ((SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(ec)))->set) {
- Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- Inkscape::Preferences::Entry val = prefs->getEntry(
- ec->pref_observer->observed_path + '/' + key);
- (SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(ec)))->set(ec, &val);
- }
+// if ((SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(ec)))->set) {
+// Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+// Inkscape::Preferences::Entry val = prefs->getEntry(
+// ec->pref_observer->observed_path + '/' + key);
+// (SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(ec)))->set(ec, &val);
+// }
+
+ Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+ Inkscape::Preferences::Entry val = prefs->getEntry(ec->pref_observer->observed_path + '/' + key);
+ ec->ceventcontext->set(&val);
}
/**
@@ -1019,8 +1044,9 @@ void sp_event_context_activate(SPEventContext *ec) {
// context should take care of this by itself.
sp_event_context_discard_delayed_snap_event(ec);
- if ((SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(ec)))->activate)
- (SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(ec)))->activate(ec);
+// if ((SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(ec)))->activate)
+// (SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(ec)))->activate(ec);
+ ec->ceventcontext->activate();
}
/**
@@ -1030,8 +1056,9 @@ void sp_event_context_deactivate(SPEventContext *ec) {
g_return_if_fail(ec != NULL);
g_return_if_fail(SP_IS_EVENT_CONTEXT(ec));
- if ((SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(ec)))->deactivate)
- (SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(ec)))->deactivate(ec);
+// if ((SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(ec)))->deactivate)
+// (SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(ec)))->deactivate(ec);
+ ec->ceventcontext->deactivate();
}
/**
@@ -1072,7 +1099,9 @@ gint sp_event_context_virtual_root_handler(SPEventContext * event_context, GdkEv
gint ret = false;
if (event_context) { // If no event-context is available then do nothing, otherwise Inkscape would crash
// (see the comment in SPDesktop::set_event_context, and bug LP #622350)
- ret = (SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(event_context)))->root_handler(event_context, event);
+ //ret = (SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(event_context)))->root_handler(event_context, event);
+ ret = event_context->ceventcontext->root_handler(event);
+
set_event_location(event_context->desktop, event);
}
return ret;
@@ -1111,7 +1140,9 @@ gint sp_event_context_virtual_item_handler(SPEventContext * event_context, SPIte
gint ret = false;
if (event_context) { // If no event-context is available then do nothing, otherwise Inkscape would crash
// (see the comment in SPDesktop::set_event_context, and bug LP #622350)
- ret = (SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(event_context)))->item_handler(event_context, item, event);
+ //ret = (SP_EVENT_CONTEXT_CLASS(G_OBJECT_GET_CLASS(event_context)))->item_handler(event_context, item, event);
+ ret = event_context->ceventcontext->item_handler(item, event);
+
if (!ret) {
ret = sp_event_context_virtual_root_handler(event_context, event);
} else {
diff --git a/src/event-context.h b/src/event-context.h
index ac1086def..0ae621178 100644
--- a/src/event-context.h
+++ b/src/event-context.h
@@ -112,6 +112,7 @@ public:
void enableGrDrag (bool enable=true);
bool deleteSelectedDrag(bool just_one);
+ SPEventContext();
CEventContext* ceventcontext;
/// Desktop eventcontext stack
@@ -155,13 +156,13 @@ public:
* The SPEvent vtable.
*/
struct SPEventContextClass : public GObjectClass {
- void (* setup)(SPEventContext *ec);
- void (* finish)(SPEventContext *ec);
- void (* set)(SPEventContext *ec, Inkscape::Preferences::Entry *val);
- void (* activate)(SPEventContext *ec);
- void (* deactivate)(SPEventContext *ec);
- gint (* root_handler)(SPEventContext *ec, GdkEvent *event);
- gint (* item_handler)(SPEventContext *ec, SPItem *item, GdkEvent *event);
+// void (* setup)(SPEventContext *ec);
+// void (* finish)(SPEventContext *ec);
+// void (* set)(SPEventContext *ec, Inkscape::Preferences::Entry *val);
+// void (* activate)(SPEventContext *ec);
+// void (* deactivate)(SPEventContext *ec);
+// gint (* root_handler)(SPEventContext *ec, GdkEvent *event);
+// gint (* item_handler)(SPEventContext *ec, SPItem *item, GdkEvent *event);
};
class CEventContext {
diff --git a/src/flood-context.cpp b/src/flood-context.cpp
index d8f9a2624..39002d39a 100644
--- a/src/flood-context.cpp
+++ b/src/flood-context.cpp
@@ -93,21 +93,24 @@ static void sp_flood_context_class_init(SPFloodContextClass *klass)
object_class->dispose = sp_flood_context_dispose;
- event_context_class->setup = sp_flood_context_setup;
- event_context_class->root_handler = sp_flood_context_root_handler;
- event_context_class->item_handler = sp_flood_context_item_handler;
+// event_context_class->setup = sp_flood_context_setup;
+// event_context_class->root_handler = sp_flood_context_root_handler;
+// event_context_class->item_handler = sp_flood_context_item_handler;
}
CFloodContext::CFloodContext(SPFloodContext* floodcontext) : CEventContext(floodcontext) {
this->spfloodcontext = floodcontext;
}
-static void sp_flood_context_init(SPFloodContext *flood_context)
-{
+SPFloodContext::SPFloodContext() : SPEventContext() {
+ SPFloodContext* flood_context = this;
+
flood_context->cfloodcontext = new CFloodContext(flood_context);
delete flood_context->ceventcontext;
flood_context->ceventcontext = flood_context->cfloodcontext;
+ flood_context->_message_context = 0;
+
SPEventContext *event_context = SP_EVENT_CONTEXT(flood_context);
event_context->cursor_shape = cursor_paintbucket_xpm;
@@ -124,6 +127,11 @@ static void sp_flood_context_init(SPFloodContext *flood_context)
new (&flood_context->sel_changed_connection) sigc::connection();
}
+static void sp_flood_context_init(SPFloodContext *flood_context)
+{
+ new (flood_context) SPFloodContext();
+}
+
static void sp_flood_context_dispose(GObject *object)
{
SPFloodContext *rc = SP_FLOOD_CONTEXT(object);
diff --git a/src/flood-context.h b/src/flood-context.h
index fa22027f4..0b19610a5 100644
--- a/src/flood-context.h
+++ b/src/flood-context.h
@@ -33,6 +33,7 @@ class CFloodContext;
class SPFloodContext : public SPEventContext {
public:
+ SPFloodContext();
CFloodContext* cfloodcontext;
SPItem *item;
diff --git a/src/gradient-context.cpp b/src/gradient-context.cpp
index 6ca427098..50863565d 100644
--- a/src/gradient-context.cpp
+++ b/src/gradient-context.cpp
@@ -68,20 +68,26 @@ static void sp_gradient_context_class_init(SPGradientContextClass *klass)
object_class->dispose = sp_gradient_context_dispose;
- event_context_class->setup = sp_gradient_context_setup;
- event_context_class->root_handler = sp_gradient_context_root_handler;
+// event_context_class->setup = sp_gradient_context_setup;
+// event_context_class->root_handler = sp_gradient_context_root_handler;
}
CGradientContext::CGradientContext(SPGradientContext* gradientcontext) : CEventContext(gradientcontext) {
this->spgradientcontext = gradientcontext;
}
-static void sp_gradient_context_init(SPGradientContext *gr_context)
-{
+SPGradientContext::SPGradientContext() : SPEventContext() {
+ SPGradientContext* gr_context = this;
+
gr_context->cgradientcontext = new CGradientContext(gr_context);
delete gr_context->ceventcontext;
gr_context->ceventcontext = gr_context->cgradientcontext;
+ gr_context->node_added = false;
+ gr_context->subselcon = 0;
+ gr_context->_message_context = 0;
+ gr_context->selcon = 0;
+
SPEventContext *event_context = SP_EVENT_CONTEXT(gr_context);
gr_context->cursor_addnode = false;
@@ -95,6 +101,11 @@ static void sp_gradient_context_init(SPGradientContext *gr_context)
event_context->item_to_select = NULL;
}
+static void sp_gradient_context_init(SPGradientContext *gr_context)
+{
+ new (gr_context) SPGradientContext();
+}
+
static void sp_gradient_context_dispose(GObject *object)
{
SPGradientContext *rc = SP_GRADIENT_CONTEXT(object);
diff --git a/src/gradient-context.h b/src/gradient-context.h
index a0d6d5a07..1746c9a73 100644
--- a/src/gradient-context.h
+++ b/src/gradient-context.h
@@ -29,6 +29,7 @@ class CGradientContext;
class SPGradientContext : public SPEventContext {
public:
+ SPGradientContext();
CGradientContext* cgradientcontext;
Geom::Point origin;
diff --git a/src/lpe-tool-context.cpp b/src/lpe-tool-context.cpp
index ddea7a579..3d81efc00 100644
--- a/src/lpe-tool-context.cpp
+++ b/src/lpe-tool-context.cpp
@@ -74,25 +74,29 @@ sp_lpetool_context_class_init(SPLPEToolContextClass *klass)
object_class->dispose = sp_lpetool_context_dispose;
- event_context_class->setup = sp_lpetool_context_setup;
- event_context_class->set = sp_lpetool_context_set;
- event_context_class->root_handler = sp_lpetool_context_root_handler;
- event_context_class->item_handler = sp_lpetool_context_item_handler;
+// event_context_class->setup = sp_lpetool_context_setup;
+// event_context_class->set = sp_lpetool_context_set;
+// event_context_class->root_handler = sp_lpetool_context_root_handler;
+// event_context_class->item_handler = sp_lpetool_context_item_handler;
}
CLPEToolContext::CLPEToolContext(SPLPEToolContext* lpetoolcontext) : CPenContext(lpetoolcontext) {
this->splpetoolcontext = lpetoolcontext;
}
-static void
-sp_lpetool_context_init(SPLPEToolContext *lc)
-{
+SPLPEToolContext::SPLPEToolContext() : SPPenContext() {
+ SPLPEToolContext* lc = this;
+
lc->clpetoolcontext = new CLPEToolContext(lc);
delete lc->cpencontext;
lc->cpencontext = lc->clpetoolcontext;
lc->cdrawcontext = lc->clpetoolcontext;
lc->ceventcontext = lc->clpetoolcontext;
+ lc->mode = Inkscape::LivePathEffect::BEND_PATH;
+ lc->shape_editor = 0;
+ lc->_lpetool_message_context = 0;
+
lc->cursor_shape = cursor_crosshairs_xpm;
lc->hot_x = 7;
lc->hot_y = 7;
@@ -104,6 +108,12 @@ sp_lpetool_context_init(SPLPEToolContext *lc)
}
static void
+sp_lpetool_context_init(SPLPEToolContext *lc)
+{
+ new (lc) SPLPEToolContext();
+}
+
+static void
sp_lpetool_context_dispose(GObject *object)
{
SPLPEToolContext *lc = SP_LPETOOL_CONTEXT(object);
@@ -263,7 +273,8 @@ gint CLPEToolContext::root_handler(GdkEvent* event) {
if (sp_pen_context_has_waiting_LPE(lc)) {
// quit when we are waiting for a LPE to be applied
- ret = ((SPEventContextClass *) sp_lpetool_context_parent_class)->root_handler(event_context, event);
+ //ret = ((SPEventContextClass *) sp_lpetool_context_parent_class)->root_handler(event_context, event);
+ ret = event_context->ceventcontext->root_handler(event);
return ret;
}
@@ -295,7 +306,8 @@ gint CLPEToolContext::root_handler(GdkEvent* event) {
sp_pen_context_wait_for_LPE_mouse_clicks(lc, type, Inkscape::LivePathEffect::Effect::acceptsNumClicks(type));
// we pass the mouse click on to pen tool as the first click which it should collect
- ret = ((SPEventContextClass *) sp_lpetool_context_parent_class)->root_handler(event_context, event);
+ //ret = ((SPEventContextClass *) sp_lpetool_context_parent_class)->root_handler(event_context, event);
+ ret = event_context->ceventcontext->root_handler(event);
}
break;
diff --git a/src/lpe-tool-context.h b/src/lpe-tool-context.h
index 0035fd424..d108fb821 100644
--- a/src/lpe-tool-context.h
+++ b/src/lpe-tool-context.h
@@ -49,6 +49,7 @@ class CLPEToolContext;
class SPLPEToolContext : public SPPenContext {
public:
+ SPLPEToolContext();
CLPEToolContext* clpetoolcontext;
ShapeEditor* shape_editor;
diff --git a/src/measure-context.cpp b/src/measure-context.cpp
index dc23cf5c6..8b0a3608f 100644
--- a/src/measure-context.cpp
+++ b/src/measure-context.cpp
@@ -235,15 +235,26 @@ static void sp_measure_context_class_init(SPMeasureContextClass *klass)
{
SPEventContextClass *event_context_class = reinterpret_cast<SPEventContextClass *>(klass);
- event_context_class->setup = sp_measure_context_setup;
- event_context_class->finish = sp_measure_context_finish;
+// event_context_class->setup = sp_measure_context_setup;
+// event_context_class->finish = sp_measure_context_finish;
+//
+// event_context_class->root_handler = sp_measure_context_root_handler;
+// event_context_class->item_handler = sp_measure_context_item_handler;
+}
- event_context_class->root_handler = sp_measure_context_root_handler;
- event_context_class->item_handler = sp_measure_context_item_handler;
+CMeasureContext::CMeasureContext(SPMeasureContext* measurecontext) : CEventContext(measurecontext) {
+ this->spmeasurecontext = measurecontext;
}
-static void sp_measure_context_init(SPMeasureContext *measure_context)
-{
+SPMeasureContext::SPMeasureContext() : SPEventContext() {
+ SPMeasureContext* measure_context = this;
+
+ measure_context->cmeasurecontext = new CMeasureContext(measure_context);
+ delete measure_context->ceventcontext;
+ measure_context->ceventcontext = measure_context->cmeasurecontext;
+
+ measure_context->grabbed = 0;
+
SPEventContext *event_context = SP_EVENT_CONTEXT(measure_context);
event_context->cursor_shape = cursor_measure_xpm;
@@ -251,8 +262,19 @@ static void sp_measure_context_init(SPMeasureContext *measure_context)
event_context->hot_y = 4;
}
+static void sp_measure_context_init(SPMeasureContext *measure_context)
+{
+ new (measure_context) SPMeasureContext();
+}
+
static void sp_measure_context_finish(SPEventContext *ec)
{
+ ec->ceventcontext->finish();
+}
+
+void CMeasureContext::finish() {
+ SPEventContext* ec = this->speventcontext;
+
SPMeasureContext *mc = SP_MEASURE_CONTEXT(ec);
ec->enableGrDrag(false);
@@ -265,18 +287,32 @@ static void sp_measure_context_finish(SPEventContext *ec)
static void sp_measure_context_setup(SPEventContext *ec)
{
- if (SP_EVENT_CONTEXT_CLASS(sp_measure_context_parent_class)->setup) {
- SP_EVENT_CONTEXT_CLASS(sp_measure_context_parent_class)->setup(ec);
- }
+ ec->ceventcontext->setup();
+}
+
+void CMeasureContext::setup() {
+ SPEventContext* ec = this->speventcontext;
+
+// if (SP_EVENT_CONTEXT_CLASS(sp_measure_context_parent_class)->setup) {
+// SP_EVENT_CONTEXT_CLASS(sp_measure_context_parent_class)->setup(ec);
+// }
+ CEventContext::setup();
}
static gint sp_measure_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEvent *event)
{
+ return event_context->ceventcontext->item_handler(item, event);
+}
+
+gint CMeasureContext::item_handler(SPItem* item, GdkEvent* event) {
+ SPEventContext* event_context = this->speventcontext;
+
gint ret = FALSE;
- if (SP_EVENT_CONTEXT_CLASS(sp_measure_context_parent_class)->item_handler) {
- ret = SP_EVENT_CONTEXT_CLASS(sp_measure_context_parent_class)->item_handler(event_context, item, event);
- }
+// if (SP_EVENT_CONTEXT_CLASS(sp_measure_context_parent_class)->item_handler) {
+// ret = SP_EVENT_CONTEXT_CLASS(sp_measure_context_parent_class)->item_handler(event_context, item, event);
+// }
+ ret = CEventContext::item_handler(item, event);
return ret;
}
@@ -318,6 +354,12 @@ static void calculate_intersections(SPDesktop * /*desktop*/, SPItem* item, Geom:
static gint sp_measure_context_root_handler(SPEventContext *event_context, GdkEvent *event)
{
+ return event_context->ceventcontext->root_handler(event);
+}
+
+gint CMeasureContext::root_handler(GdkEvent* event) {
+ SPEventContext* event_context = this->speventcontext;
+
SPDesktop *desktop = event_context->desktop;
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
tolerance = prefs->getIntLimited("/options/dragtolerance/value", 0, 0, 100);
@@ -764,9 +806,10 @@ static gint sp_measure_context_root_handler(SPEventContext *event_context, GdkEv
}
if (!ret) {
- if (SP_EVENT_CONTEXT_CLASS(sp_measure_context_parent_class)->root_handler) {
- ret = SP_EVENT_CONTEXT_CLASS(sp_measure_context_parent_class)->root_handler(event_context, event);
- }
+// if (SP_EVENT_CONTEXT_CLASS(sp_measure_context_parent_class)->root_handler) {
+// ret = SP_EVENT_CONTEXT_CLASS(sp_measure_context_parent_class)->root_handler(event_context, event);
+// }
+ ret = CEventContext::root_handler(event);
}
return ret;
diff --git a/src/measure-context.h b/src/measure-context.h
index b7673ad0d..4e3ad4804 100644
--- a/src/measure-context.h
+++ b/src/measure-context.h
@@ -18,8 +18,14 @@
#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))
-struct SPMeasureContext {
- SPEventContext event_context;
+class CMeasureContext;
+
+class SPMeasureContext : public SPEventContext {
+public:
+ SPMeasureContext();
+ CMeasureContext* cmeasurecontext;
+
+ //SPEventContext event_context;
SPCanvasItem *grabbed;
};
@@ -27,6 +33,19 @@ struct SPMeasureContextClass {
SPEventContextClass parent_class;
};
+class CMeasureContext : public CEventContext {
+public:
+ CMeasureContext(SPMeasureContext* measurecontext);
+
+ virtual void setup();
+ virtual void finish();
+ virtual gint root_handler(GdkEvent* event);
+ virtual gint item_handler(SPItem* item, GdkEvent* event);
+
+private:
+ SPMeasureContext* spmeasurecontext;
+};
+
GType sp_measure_context_get_type(void);
#endif // SEEN_SP_MEASURING_CONTEXT_H
diff --git a/src/mesh-context.cpp b/src/mesh-context.cpp
index 78cc49396..6c7fe05d8 100644
--- a/src/mesh-context.cpp
+++ b/src/mesh-context.cpp
@@ -70,20 +70,26 @@ static void sp_mesh_context_class_init(SPMeshContextClass *klass)
object_class->dispose = sp_mesh_context_dispose;
- event_context_class->setup = sp_mesh_context_setup;
- event_context_class->root_handler = sp_mesh_context_root_handler;
+// event_context_class->setup = sp_mesh_context_setup;
+// event_context_class->root_handler = sp_mesh_context_root_handler;
}
CMeshContext::CMeshContext(SPMeshContext* meshcontext) : CEventContext(meshcontext) {
this->spmeshcontext = meshcontext;
}
-static void sp_mesh_context_init(SPMeshContext *gr_context)
-{
+SPMeshContext::SPMeshContext() : SPEventContext() {
+ SPMeshContext* gr_context = this;
+
gr_context->cmeshcontext = new CMeshContext(gr_context);
delete gr_context->ceventcontext;
gr_context->ceventcontext = gr_context->cmeshcontext;
+ gr_context->selcon = 0;
+ gr_context->_message_context = 0;
+ gr_context->node_added = false;
+ gr_context->subselcon = 0;
+
SPEventContext *event_context = SP_EVENT_CONTEXT(gr_context);
gr_context->cursor_addnode = false;
@@ -97,6 +103,11 @@ static void sp_mesh_context_init(SPMeshContext *gr_context)
event_context->item_to_select = NULL;
}
+static void sp_mesh_context_init(SPMeshContext *gr_context)
+{
+ new (gr_context) SPMeshContext();
+}
+
static void sp_mesh_context_dispose(GObject *object)
{
SPMeshContext *rc = SP_MESH_CONTEXT(object);
diff --git a/src/mesh-context.h b/src/mesh-context.h
index d4ccc502e..887bfcf17 100644
--- a/src/mesh-context.h
+++ b/src/mesh-context.h
@@ -31,6 +31,7 @@ class CMeshContext;
class SPMeshContext : public SPEventContext {
public:
+ SPMeshContext();
CMeshContext* cmeshcontext;
Geom::Point origin;
diff --git a/src/pen-context.cpp b/src/pen-context.cpp
index 2c045f8ad..333f9ef87 100644
--- a/src/pen-context.cpp
+++ b/src/pen-context.cpp
@@ -95,27 +95,29 @@ static void sp_pen_context_class_init(SPPenContextClass *klass)
object_class->dispose = sp_pen_context_dispose;
- event_context_class->setup = sp_pen_context_setup;
- event_context_class->finish = sp_pen_context_finish;
- event_context_class->set = sp_pen_context_set;
- event_context_class->root_handler = sp_pen_context_root_handler;
- event_context_class->item_handler = sp_pen_context_item_handler;
+// event_context_class->setup = sp_pen_context_setup;
+// event_context_class->finish = sp_pen_context_finish;
+// event_context_class->set = sp_pen_context_set;
+// event_context_class->root_handler = sp_pen_context_root_handler;
+// event_context_class->item_handler = sp_pen_context_item_handler;
}
CPenContext::CPenContext(SPPenContext* pencontext) : CDrawContext(pencontext) {
this->sppencontext = pencontext;
}
-/**
- * Callback to initialize SPPenContext object.
- */
-static void sp_pen_context_init(SPPenContext *pc)
-{
+SPPenContext::SPPenContext() : SPDrawContext() {
+ SPPenContext* pc = this;
+
pc->cpencontext = new CPenContext(pc);
delete pc->cdrawcontext;
pc->cdrawcontext = pc->cpencontext;
pc->ceventcontext = pc->cpencontext;
+ pc->polylines_only = false;
+ pc->polylines_paraxial = false;
+ pc->expecting_clicks_for_LPE = 0;
+
SPEventContext *event_context = SP_EVENT_CONTEXT(pc);
event_context->cursor_shape = cursor_pen_xpm;
@@ -139,6 +141,14 @@ static void sp_pen_context_init(SPPenContext *pc)
}
/**
+ * Callback to initialize SPPenContext object.
+ */
+static void sp_pen_context_init(SPPenContext *pc)
+{
+ new (pc) SPPenContext();
+}
+
+/**
* Callback to destroy the SPPenContext object's members and itself.
*/
static void sp_pen_context_dispose(GObject *object)
diff --git a/src/pen-context.h b/src/pen-context.h
index ae50cba53..617753c3b 100644
--- a/src/pen-context.h
+++ b/src/pen-context.h
@@ -35,6 +35,7 @@ class CPenContext;
*/
class SPPenContext : public SPDrawContext {
public:
+ SPPenContext();
CPenContext* cpencontext;
Geom::Point p[5];
diff --git a/src/pencil-context.cpp b/src/pencil-context.cpp
index eefa30ad6..47580b4d2 100644
--- a/src/pencil-context.cpp
+++ b/src/pencil-context.cpp
@@ -84,25 +84,24 @@ sp_pencil_context_class_init(SPPencilContextClass *klass)
object_class->dispose = sp_pencil_context_dispose;
- event_context_class->setup = sp_pencil_context_setup;
- event_context_class->root_handler = sp_pencil_context_root_handler;
+// event_context_class->setup = sp_pencil_context_setup;
+// event_context_class->root_handler = sp_pencil_context_root_handler;
}
CPencilContext::CPencilContext(SPPencilContext* pencilcontext) : CDrawContext(pencilcontext) {
this->sppencilcontext = pencilcontext;
}
-/**
- * Callback to initialize SPPencilContext object.
- */
-static void
-sp_pencil_context_init(SPPencilContext *pc)
-{
+SPPencilContext::SPPencilContext() : SPDrawContext() {
+ SPPencilContext* pc = this;
+
pc->cpencilcontext = new CPencilContext(pc);
delete pc->cdrawcontext;
pc->cdrawcontext = pc->cpencilcontext;
pc->ceventcontext = pc->cpencilcontext;
+ pc->is_drawing = false;
+
SPEventContext *event_context = SP_EVENT_CONTEXT(pc);
event_context->cursor_shape = cursor_pencil_xpm;
@@ -119,6 +118,15 @@ sp_pencil_context_init(SPPencilContext *pc)
}
/**
+ * Callback to initialize SPPencilContext object.
+ */
+static void
+sp_pencil_context_init(SPPencilContext *pc)
+{
+ new (pc) SPPencilContext();
+}
+
+/**
* Callback to setup SPPencilContext object.
*/
static void
diff --git a/src/pencil-context.h b/src/pencil-context.h
index e757552d4..afe375fd8 100644
--- a/src/pencil-context.h
+++ b/src/pencil-context.h
@@ -28,6 +28,7 @@ class CPencilContext;
*/
class SPPencilContext : public SPDrawContext {
public:
+ SPPencilContext();
CPencilContext* cpencilcontext;
Geom::Point p[16];
diff --git a/src/rect-context.cpp b/src/rect-context.cpp
index a53a9c7b4..45fc5a87e 100644
--- a/src/rect-context.cpp
+++ b/src/rect-context.cpp
@@ -71,25 +71,28 @@ static void sp_rect_context_class_init(SPRectContextClass *klass)
object_class->dispose = sp_rect_context_dispose;
- event_context_class->setup = sp_rect_context_setup;
- event_context_class->finish = sp_rect_context_finish;
- event_context_class->set = sp_rect_context_set;
- event_context_class->root_handler = sp_rect_context_root_handler;
- event_context_class->item_handler = sp_rect_context_item_handler;
+// event_context_class->setup = sp_rect_context_setup;
+// event_context_class->finish = sp_rect_context_finish;
+// event_context_class->set = sp_rect_context_set;
+// event_context_class->root_handler = sp_rect_context_root_handler;
+// event_context_class->item_handler = sp_rect_context_item_handler;
}
CRectContext::CRectContext(SPRectContext* rectcontext) : CEventContext(rectcontext) {
this->sprectcontext = rectcontext;
}
-static void sp_rect_context_init(SPRectContext *rect_context)
-{
+SPRectContext::SPRectContext() : SPEventContext() {
+ SPRectContext* rect_context = this;
+
SPEventContext *event_context = SP_EVENT_CONTEXT(rect_context);
rect_context->crectcontext = new CRectContext(rect_context);
delete rect_context->ceventcontext;
rect_context->ceventcontext = rect_context->crectcontext;
+ rect_context->_message_context = 0;
+
event_context->cursor_shape = cursor_rect_xpm;
event_context->hot_x = 4;
event_context->hot_y = 4;
@@ -108,6 +111,11 @@ static void sp_rect_context_init(SPRectContext *rect_context)
new (&rect_context->sel_changed_connection) sigc::connection();
}
+static void sp_rect_context_init(SPRectContext *rect_context)
+{
+ new (rect_context) SPRectContext();
+}
+
static void sp_rect_context_finish(SPEventContext *ec)
{
ec->ceventcontext->finish();
diff --git a/src/rect-context.h b/src/rect-context.h
index 2001716ba..88c964c41 100644
--- a/src/rect-context.h
+++ b/src/rect-context.h
@@ -29,6 +29,7 @@ class CRectContext;
class SPRectContext : public SPEventContext {
public:
+ SPRectContext();
CRectContext* crectcontext;
SPItem *item;
diff --git a/src/select-context.cpp b/src/select-context.cpp
index 294849e44..b28920868 100644
--- a/src/select-context.cpp
+++ b/src/select-context.cpp
@@ -79,23 +79,26 @@ sp_select_context_class_init(SPSelectContextClass *klass)
object_class->dispose = sp_select_context_dispose;
- event_context_class->setup = sp_select_context_setup;
- event_context_class->set = sp_select_context_set;
- event_context_class->root_handler = sp_select_context_root_handler;
- event_context_class->item_handler = sp_select_context_item_handler;
+// event_context_class->setup = sp_select_context_setup;
+// event_context_class->set = sp_select_context_set;
+// event_context_class->root_handler = sp_select_context_root_handler;
+// event_context_class->item_handler = sp_select_context_item_handler;
}
CSelectContext::CSelectContext(SPSelectContext* selectcontext) : CEventContext(selectcontext) {
this->spselectcontext = selectcontext;
}
-static void
-sp_select_context_init(SPSelectContext *sc)
-{
+SPSelectContext::SPSelectContext() : SPEventContext() {
+ SPSelectContext* sc = this;
+
sc->cselectcontext = new CSelectContext(sc);
delete sc->ceventcontext;
sc->ceventcontext = sc->cselectcontext;
+ sc->grabbed = 0;
+ sc->item = 0;
+
sc->dragging = FALSE;
sc->moved = FALSE;
sc->button_press_shift = false;
@@ -129,6 +132,12 @@ sp_select_context_init(SPSelectContext *sc)
}
static void
+sp_select_context_init(SPSelectContext *sc)
+{
+ new (sc) SPSelectContext();
+}
+
+static void
sp_select_context_dispose(GObject *object)
{
SPSelectContext *sc = SP_SELECT_CONTEXT(object);
diff --git a/src/select-context.h b/src/select-context.h
index 8611177e7..58a816df3 100644
--- a/src/select-context.h
+++ b/src/select-context.h
@@ -33,6 +33,7 @@ class CSelectContext;
class SPSelectContext : public SPEventContext {
public:
+ SPSelectContext();
CSelectContext* cselectcontext;
guint dragging : 1;
diff --git a/src/spiral-context.cpp b/src/spiral-context.cpp
index fb5a85089..48be26037 100644
--- a/src/spiral-context.cpp
+++ b/src/spiral-context.cpp
@@ -67,23 +67,25 @@ sp_spiral_context_class_init(SPSpiralContextClass *klass)
object_class->dispose = sp_spiral_context_dispose;
- event_context_class->setup = sp_spiral_context_setup;
- event_context_class->finish = sp_spiral_context_finish;
- event_context_class->set = sp_spiral_context_set;
- event_context_class->root_handler = sp_spiral_context_root_handler;
+// event_context_class->setup = sp_spiral_context_setup;
+// event_context_class->finish = sp_spiral_context_finish;
+// event_context_class->set = sp_spiral_context_set;
+// event_context_class->root_handler = sp_spiral_context_root_handler;
}
CSpiralContext::CSpiralContext(SPSpiralContext* spiralcontext) : CEventContext(spiralcontext) {
this->spspiralcontext = spiralcontext;
}
-static void
-sp_spiral_context_init(SPSpiralContext *spiral_context)
-{
+SPSpiralContext::SPSpiralContext() : SPEventContext() {
+ SPSpiralContext* spiral_context = this;
+
spiral_context->cspiralcontext = new CSpiralContext(spiral_context);
delete spiral_context->ceventcontext;
spiral_context->ceventcontext = spiral_context->cspiralcontext;
+ spiral_context->_message_context = 0;
+
SPEventContext *event_context = SP_EVENT_CONTEXT(spiral_context);
event_context->cursor_shape = cursor_spiral_xpm;
@@ -104,6 +106,12 @@ sp_spiral_context_init(SPSpiralContext *spiral_context)
new (&spiral_context->sel_changed_connection) sigc::connection();
}
+static void
+sp_spiral_context_init(SPSpiralContext *spiral_context)
+{
+ new (spiral_context) SPSpiralContext();
+}
+
static void sp_spiral_context_finish(SPEventContext *ec)
{
ec->ceventcontext->finish();
diff --git a/src/spiral-context.h b/src/spiral-context.h
index 3f1dc238d..fc91ac26b 100644
--- a/src/spiral-context.h
+++ b/src/spiral-context.h
@@ -31,6 +31,7 @@ class CSpiralContext;
class SPSpiralContext : public SPEventContext {
public:
+ SPSpiralContext();
CSpiralContext* cspiralcontext;
SPItem * item;
diff --git a/src/spray-context.cpp b/src/spray-context.cpp
index 6a5684891..855e0508a 100644
--- a/src/spray-context.cpp
+++ b/src/spray-context.cpp
@@ -104,9 +104,9 @@ static void sp_spray_context_class_init(SPSprayContextClass *klass)
object_class->dispose = sp_spray_context_dispose;
- event_context_class->setup = sp_spray_context_setup;
- event_context_class->set = sp_spray_context_set;
- event_context_class->root_handler = sp_spray_context_root_handler;
+// event_context_class->setup = sp_spray_context_setup;
+// event_context_class->set = sp_spray_context_set;
+// event_context_class->root_handler = sp_spray_context_root_handler;
}
/* Method to rotate items */
@@ -133,8 +133,26 @@ static void sp_spray_scale_rel(Geom::Point c, SPDesktop */*desktop*/, SPItem *it
item->doWriteTransform(item->getRepr(), item->transform);
}
-static void sp_spray_context_init(SPSprayContext *tc)
-{
+CSprayContext::CSprayContext(SPSprayContext* spraycontext) : CEventContext(spraycontext) {
+ this->spspraycontext = spraycontext;
+}
+
+SPSprayContext::SPSprayContext() : SPEventContext() {
+ SPSprayContext* tc = this;
+
+ tc->cspraycontext = new CSprayContext(tc);
+ delete tc->ceventcontext;
+ tc->ceventcontext = tc->cspraycontext;
+
+ tc->usetilt = 0;
+ tc->_message_context = 0;
+ tc->dilate_area = 0;
+ tc->usetext = false;
+ tc->population = 0;
+ tc->is_drawing = false;
+ tc->mode = 0;
+ tc->usepressure = 0;
+
SPEventContext *event_context = SP_EVENT_CONTEXT(tc);
event_context->cursor_shape = cursor_spray_xpm;
@@ -161,6 +179,11 @@ static void sp_spray_context_init(SPSprayContext *tc)
new (&tc->style_set_connection) sigc::connection();
}
+static void sp_spray_context_init(SPSprayContext *tc)
+{
+ new (tc) SPSprayContext();
+}
+
static void sp_spray_context_dispose(GObject *object)
{
SPSprayContext *tc = SP_SPRAY_CONTEXT(object);
@@ -225,11 +248,18 @@ static void sp_spray_update_cursor(SPSprayContext *tc, bool /*with_shift*/)
static void sp_spray_context_setup(SPEventContext *ec)
{
+ ec->ceventcontext->setup();
+}
+
+void CSprayContext::setup() {
+ SPEventContext* ec = this->speventcontext;
+
SPSprayContext *tc = SP_SPRAY_CONTEXT(ec);
- if ((SP_EVENT_CONTEXT_CLASS(sp_spray_context_parent_class))->setup) {
- (SP_EVENT_CONTEXT_CLASS(sp_spray_context_parent_class))->setup(ec);
- }
+// if ((SP_EVENT_CONTEXT_CLASS(sp_spray_context_parent_class))->setup) {
+// (SP_EVENT_CONTEXT_CLASS(sp_spray_context_parent_class))->setup(ec);
+// }
+ CEventContext::setup();
{
/* TODO: have a look at sp_dyna_draw_context_setup where the same is done.. generalize? at least make it an arcto! */
@@ -277,6 +307,12 @@ static void sp_spray_context_setup(SPEventContext *ec)
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;
+
SPSprayContext *tc = SP_SPRAY_CONTEXT(ec);
Glib::ustring path = val->getEntryName();
@@ -612,6 +648,12 @@ static void sp_spray_switch_mode(SPSprayContext *tc, gint mode, bool 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;
+
SPSprayContext *tc = SP_SPRAY_CONTEXT(event_context);
SPDesktop *desktop = event_context->desktop;
@@ -889,9 +931,10 @@ gint sp_spray_context_root_handler(SPEventContext *event_context, GdkEvent *even
}
if (!ret) {
- if ((SP_EVENT_CONTEXT_CLASS(sp_spray_context_parent_class))->root_handler) {
- ret = (SP_EVENT_CONTEXT_CLASS(sp_spray_context_parent_class))->root_handler(event_context, event);
- }
+// if ((SP_EVENT_CONTEXT_CLASS(sp_spray_context_parent_class))->root_handler) {
+// ret = (SP_EVENT_CONTEXT_CLASS(sp_spray_context_parent_class))->root_handler(event_context, event);
+// }
+ ret = CEventContext::root_handler(event);
}
return ret;
diff --git a/src/spray-context.h b/src/spray-context.h
index 781bbcce8..79175ccc2 100644
--- a/src/spray-context.h
+++ b/src/spray-context.h
@@ -49,9 +49,15 @@ enum {
SPRAY_OPTION,
};
-struct SPSprayContext
+class CSprayContext;
+
+class SPSprayContext : public SPEventContext
{
- SPEventContext event_context;
+public:
+ SPSprayContext();
+ CSprayContext* cspraycontext;
+
+ //SPEventContext event_context;
//Inkscape::UI::Dialog::Dialog *dialog_option;//Attribut de type SprayOptionClass, localisé dans scr/ui/dialog
/* extended input data */
gdouble pressure;
@@ -94,6 +100,18 @@ struct SPSprayContextClass
SPEventContextClass parent_class;
};
+class CSprayContext : public CEventContext {
+public:
+ CSprayContext(SPSprayContext* spraycontext);
+
+ virtual void setup();
+ virtual void set(Inkscape::Preferences::Entry* val);
+ virtual gint root_handler(GdkEvent* event);
+
+private:
+ SPSprayContext* spspraycontext;
+};
+
GType sp_spray_context_get_type(void);
diff --git a/src/star-context.cpp b/src/star-context.cpp
index dec70eb4a..ab75813fe 100644
--- a/src/star-context.cpp
+++ b/src/star-context.cpp
@@ -71,23 +71,27 @@ sp_star_context_class_init (SPStarContextClass * klass)
object_class->dispose = sp_star_context_dispose;
- event_context_class->setup = sp_star_context_setup;
- event_context_class->finish = sp_star_context_finish;
- event_context_class->set = sp_star_context_set;
- event_context_class->root_handler = sp_star_context_root_handler;
+// event_context_class->setup = sp_star_context_setup;
+// event_context_class->finish = sp_star_context_finish;
+// event_context_class->set = sp_star_context_set;
+// event_context_class->root_handler = sp_star_context_root_handler;
}
CStarContext::CStarContext(SPStarContext* starcontext) : CEventContext(starcontext) {
this->spstarcontext = starcontext;
}
-static void
-sp_star_context_init (SPStarContext * star_context)
-{
+SPStarContext::SPStarContext() : SPEventContext() {
+ SPStarContext* star_context = this;
+
star_context->cstarcontext = new CStarContext(star_context);
delete star_context->ceventcontext;
star_context->ceventcontext = star_context->cstarcontext;
+ star_context->randomized = 0;
+ star_context->_message_context = 0;
+ star_context->rounded = 0;
+
SPEventContext *event_context = SP_EVENT_CONTEXT (star_context);
event_context->cursor_shape = cursor_star_xpm;
@@ -109,6 +113,12 @@ sp_star_context_init (SPStarContext * star_context)
new (&star_context->sel_changed_connection) sigc::connection();
}
+static void
+sp_star_context_init (SPStarContext * star_context)
+{
+ new (star_context) SPStarContext();
+}
+
static void sp_star_context_finish(SPEventContext *ec)
{
ec->ceventcontext->finish();
diff --git a/src/star-context.h b/src/star-context.h
index 83e6c0b26..ce47126e6 100644
--- a/src/star-context.h
+++ b/src/star-context.h
@@ -29,6 +29,7 @@ class CStarContext;
class SPStarContext : public SPEventContext {
public:
+ SPStarContext();
CStarContext* cstarcontext;
SPItem *item;
diff --git a/src/text-context.cpp b/src/text-context.cpp
index 72fcd6319..f268e8f67 100644
--- a/src/text-context.cpp
+++ b/src/text-context.cpp
@@ -88,22 +88,26 @@ static void sp_text_context_class_init(SPTextContextClass *klass)
object_class->dispose = sp_text_context_dispose;
- event_context_class->setup = sp_text_context_setup;
- event_context_class->finish = sp_text_context_finish;
- event_context_class->root_handler = sp_text_context_root_handler;
- event_context_class->item_handler = sp_text_context_item_handler;
+// event_context_class->setup = sp_text_context_setup;
+// event_context_class->finish = sp_text_context_finish;
+// event_context_class->root_handler = sp_text_context_root_handler;
+// event_context_class->item_handler = sp_text_context_item_handler;
}
CTextContext::CTextContext(SPTextContext* textcontext) : CEventContext(textcontext) {
this->sptextcontext = textcontext;
}
-static void sp_text_context_init(SPTextContext *tc)
-{
+SPTextContext::SPTextContext() : SPEventContext() {
+ SPTextContext* tc = this;
+
tc->ctextcontext = new CTextContext(tc);
delete tc->ceventcontext;
tc->ceventcontext = tc->ctextcontext;
+ tc->preedit_string = 0;
+ tc->unipos = 0;
+
SPEventContext *event_context = SP_EVENT_CONTEXT(tc);
event_context->cursor_shape = cursor_text_xpm;
@@ -143,6 +147,11 @@ static void sp_text_context_init(SPTextContext *tc)
new (&tc->style_query_connection) sigc::connection();
}
+static void sp_text_context_init(SPTextContext *tc)
+{
+ new (tc) SPTextContext();
+}
+
static void sp_text_context_dispose(GObject *obj)
{
SPTextContext *tc = SP_TEXT_CONTEXT(obj);
diff --git a/src/text-context.h b/src/text-context.h
index 67686cc35..b1ccf5794 100644
--- a/src/text-context.h
+++ b/src/text-context.h
@@ -35,6 +35,7 @@ class CTextContext;
class SPTextContext : public SPEventContext {
public:
+ SPTextContext();
CTextContext* ctextcontext;
sigc::connection sel_changed_connection;
diff --git a/src/tweak-context.cpp b/src/tweak-context.cpp
index 28e4c1629..d41eebec8 100644
--- a/src/tweak-context.cpp
+++ b/src/tweak-context.cpp
@@ -97,14 +97,30 @@ sp_tweak_context_class_init(SPTweakContextClass *klass)
object_class->dispose = sp_tweak_context_dispose;
- event_context_class->setup = sp_tweak_context_setup;
- event_context_class->set = sp_tweak_context_set;
- event_context_class->root_handler = sp_tweak_context_root_handler;
+// event_context_class->setup = sp_tweak_context_setup;
+// event_context_class->set = sp_tweak_context_set;
+// event_context_class->root_handler = sp_tweak_context_root_handler;
}
-static void
-sp_tweak_context_init(SPTweakContext *tc)
-{
+CTweakContext::CTweakContext(SPTweakContext* tweakcontext) : CEventContext(tweakcontext) {
+ this->sptweakcontext = tweakcontext;
+}
+
+SPTweakContext::SPTweakContext() : SPEventContext() {
+ SPTweakContext* tc = this;
+
+ tc->ctweakcontext = new CTweakContext(tc);
+ delete tc->ceventcontext;
+ tc->ceventcontext = tc->ctweakcontext;
+
+ tc->_message_context = 0;
+ tc->mode = 0;
+ tc->dilate_area = 0;
+ tc->usetilt = 0;
+ tc->usepressure = 0;
+ tc->is_drawing = false;
+ tc->fidelity = 0;
+
SPEventContext *event_context = SP_EVENT_CONTEXT(tc);
event_context->cursor_shape = cursor_push_xpm;
@@ -130,6 +146,12 @@ sp_tweak_context_init(SPTweakContext *tc)
}
static void
+sp_tweak_context_init(SPTweakContext *tc)
+{
+ new (tc) SPTweakContext();
+}
+
+static void
sp_tweak_context_dispose(GObject *object)
{
SPTweakContext *tc = SP_TWEAK_CONTEXT(object);
@@ -264,11 +286,18 @@ sp_tweak_context_style_set(SPCSSAttr const *css, SPTweakContext *tc)
static void
sp_tweak_context_setup(SPEventContext *ec)
{
+ ec->ceventcontext->setup();
+}
+
+void CTweakContext::setup() {
+ SPEventContext* ec = this->speventcontext;
+
SPTweakContext *tc = SP_TWEAK_CONTEXT(ec);
- if ((SP_EVENT_CONTEXT_CLASS(sp_tweak_context_parent_class))->setup) {
- (SP_EVENT_CONTEXT_CLASS(sp_tweak_context_parent_class))->setup(ec);
- }
+// if ((SP_EVENT_CONTEXT_CLASS(sp_tweak_context_parent_class))->setup) {
+// (SP_EVENT_CONTEXT_CLASS(sp_tweak_context_parent_class))->setup(ec);
+// }
+ CEventContext::setup();
{
/* TODO: have a look at sp_dyna_draw_context_setup where the same is done.. generalize? at least make it an arcto! */
@@ -317,6 +346,12 @@ sp_tweak_context_setup(SPEventContext *ec)
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;
+
SPTweakContext *tc = SP_TWEAK_CONTEXT(ec);
Glib::ustring path = val->getEntryName();
@@ -1153,6 +1188,12 @@ 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;
+
SPTweakContext *tc = SP_TWEAK_CONTEXT(event_context);
SPDesktop *desktop = event_context->desktop;
@@ -1511,9 +1552,10 @@ sp_tweak_context_root_handler(SPEventContext *event_context,
}
if (!ret) {
- if ((SP_EVENT_CONTEXT_CLASS(sp_tweak_context_parent_class))->root_handler) {
- ret = (SP_EVENT_CONTEXT_CLASS(sp_tweak_context_parent_class))->root_handler(event_context, event);
- }
+// if ((SP_EVENT_CONTEXT_CLASS(sp_tweak_context_parent_class))->root_handler) {
+// ret = (SP_EVENT_CONTEXT_CLASS(sp_tweak_context_parent_class))->root_handler(event_context, event);
+// }
+ ret = CEventContext::root_handler(event);
}
return ret;
diff --git a/src/tweak-context.h b/src/tweak-context.h
index a4567ce6f..56539fc62 100644
--- a/src/tweak-context.h
+++ b/src/tweak-context.h
@@ -43,9 +43,15 @@ enum {
TWEAK_MODE_BLUR
};
-struct SPTweakContext
+class CTweakContext;
+
+class SPTweakContext : public SPEventContext
{
- SPEventContext event_context;
+public:
+ SPTweakContext();
+ CTweakContext* ctweakcontext;
+
+ //SPEventContext event_context;
/* extended input data */
gdouble pressure;
@@ -83,6 +89,18 @@ struct SPTweakContextClass
SPEventContextClass parent_class;
};
+class CTweakContext : public CEventContext {
+public:
+ CTweakContext(SPTweakContext* tweakcontext);
+
+ virtual void setup();
+ virtual void set(Inkscape::Preferences::Entry* val);
+ virtual gint root_handler(GdkEvent* event);
+
+private:
+ SPTweakContext* sptweakcontext;
+};
+
GType sp_tweak_context_get_type(void);
#endif
diff --git a/src/ui/tool/node-tool.cpp b/src/ui/tool/node-tool.cpp
index 9a51870af..8d8db772a 100644
--- a/src/ui/tool/node-tool.cpp
+++ b/src/ui/tool/node-tool.cpp
@@ -134,23 +134,39 @@ ink_node_tool_class_init(InkNodeToolClass *klass)
object_class->dispose = ink_node_tool_dispose;
- event_context_class->setup = ink_node_tool_setup;
- event_context_class->set = ink_node_tool_set;
- event_context_class->root_handler = ink_node_tool_root_handler;
- event_context_class->item_handler = ink_node_tool_item_handler;
+// event_context_class->setup = ink_node_tool_setup;
+// event_context_class->set = ink_node_tool_set;
+// event_context_class->root_handler = ink_node_tool_root_handler;
+// event_context_class->item_handler = ink_node_tool_item_handler;
}
CInkNodeTool::CInkNodeTool(InkNodeTool* inknodetool) : CEventContext(inknodetool) {
this->inknodetool = inknodetool;
}
-static void
-ink_node_tool_init(InkNodeTool *nt)
-{
+InkNodeTool::InkNodeTool() : SPEventContext() {
+ InkNodeTool* nt = this;
+
nt->cinknodetool = new CInkNodeTool(nt);
delete nt->ceventcontext;
nt->ceventcontext = nt->cinknodetool;
+ nt->show_handles = 0;
+ nt->single_node_transform_handles = 0;
+ nt->show_transform_handles = 0;
+ nt->cursor_drag = 0;
+ nt->_node_message_context = 0;
+ nt->live_objects = 0;
+ nt->edit_clipping_paths = 0;
+ nt->live_outline = 0;
+ nt->flashed_item = 0;
+ nt->_transform_handle_group = 0;
+ nt->show_path_direction = 0;
+ nt->_last_over = 0;
+ nt->edit_masks = 0;
+ nt->show_outline = 0;
+ nt->flash_tempitem = 0;
+
SPEventContext *event_context = SP_EVENT_CONTEXT(nt);
event_context->cursor_shape = cursor_node_xpm;
@@ -169,6 +185,12 @@ ink_node_tool_init(InkNodeTool *nt)
new (&nt->_shape_editors) ShapeEditors();
}
+static void
+ink_node_tool_init(InkNodeTool *nt)
+{
+ new (nt) InkNodeTool();
+}
+
//namespace {
SPCanvasGroup *create_control_group(SPDesktop *d)
diff --git a/src/ui/tool/node-tool.h b/src/ui/tool/node-tool.h
index 7223b11b3..f997aee11 100644
--- a/src/ui/tool/node-tool.h
+++ b/src/ui/tool/node-tool.h
@@ -46,6 +46,7 @@ class CInkNodeTool;
class InkNodeTool : public SPEventContext
{
public:
+ InkNodeTool();
CInkNodeTool* cinknodetool;
sigc::connection _selection_changed_connection;
diff --git a/src/zoom-context.cpp b/src/zoom-context.cpp
index 7a5e4f90e..ac8dd6138 100644
--- a/src/zoom-context.cpp
+++ b/src/zoom-context.cpp
@@ -43,15 +43,26 @@ static void sp_zoom_context_class_init(SPZoomContextClass *klass)
{
SPEventContextClass *event_context_class = SP_EVENT_CONTEXT_CLASS(klass);
- event_context_class->setup = sp_zoom_context_setup;
- event_context_class->finish = sp_zoom_context_finish;
+// event_context_class->setup = sp_zoom_context_setup;
+// event_context_class->finish = sp_zoom_context_finish;
+//
+// event_context_class->root_handler = sp_zoom_context_root_handler;
+// event_context_class->item_handler = sp_zoom_context_item_handler;
+}
- event_context_class->root_handler = sp_zoom_context_root_handler;
- event_context_class->item_handler = sp_zoom_context_item_handler;
+CZoomContext::CZoomContext(SPZoomContext* zoomcontext) : CEventContext(zoomcontext) {
+ this->spzoomcontext = zoomcontext;
}
-static void sp_zoom_context_init (SPZoomContext *zoom_context)
-{
+SPZoomContext::SPZoomContext() : SPEventContext() {
+ SPZoomContext* zoom_context = this;
+
+ zoom_context->czoomcontext = new CZoomContext(zoom_context);
+ delete zoom_context->ceventcontext;
+ zoom_context->ceventcontext = zoom_context->czoomcontext;
+
+ zoom_context->grabbed = 0;
+
SPEventContext *event_context = SP_EVENT_CONTEXT(zoom_context);
event_context->cursor_shape = cursor_zoom_xpm;
@@ -59,9 +70,20 @@ static void sp_zoom_context_init (SPZoomContext *zoom_context)
event_context->hot_y = 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;
+
SPZoomContext *zc = SP_ZOOM_CONTEXT(ec);
ec->enableGrDrag(false);
@@ -74,6 +96,12 @@ sp_zoom_context_finish (SPEventContext *ec)
static void sp_zoom_context_setup(SPEventContext *ec)
{
+ ec->ceventcontext->setup();
+}
+
+void CZoomContext::setup() {
+ SPEventContext* ec = this->speventcontext;
+
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
if (prefs->getBool("/tools/zoom/selcue")) {
ec->enableSelectionCue();
@@ -82,24 +110,38 @@ static void sp_zoom_context_setup(SPEventContext *ec)
ec->enableGrDrag();
}
- if ((SP_EVENT_CONTEXT_CLASS(sp_zoom_context_parent_class))->setup) {
- (SP_EVENT_CONTEXT_CLASS(sp_zoom_context_parent_class))->setup(ec);
- }
+// if ((SP_EVENT_CONTEXT_CLASS(sp_zoom_context_parent_class))->setup) {
+// (SP_EVENT_CONTEXT_CLASS(sp_zoom_context_parent_class))->setup(ec);
+// }
+ 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;
+
gint ret = FALSE;
- if ((SP_EVENT_CONTEXT_CLASS(sp_zoom_context_parent_class))->item_handler) {
- ret = (SP_EVENT_CONTEXT_CLASS(sp_zoom_context_parent_class))->item_handler (event_context, item, event);
- }
+// if ((SP_EVENT_CONTEXT_CLASS(sp_zoom_context_parent_class))->item_handler) {
+// ret = (SP_EVENT_CONTEXT_CLASS(sp_zoom_context_parent_class))->item_handler (event_context, item, event);
+// }
+ ret = CEventContext::item_handler(item, 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;
+
SPDesktop *desktop = event_context->desktop;
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
@@ -239,9 +281,10 @@ static gint sp_zoom_context_root_handler(SPEventContext *event_context, GdkEvent
}
if (!ret) {
- if ((SP_EVENT_CONTEXT_CLASS(sp_zoom_context_parent_class))->root_handler) {
- ret = (SP_EVENT_CONTEXT_CLASS(sp_zoom_context_parent_class))->root_handler(event_context, event);
- }
+// if ((SP_EVENT_CONTEXT_CLASS(sp_zoom_context_parent_class))->root_handler) {
+// ret = (SP_EVENT_CONTEXT_CLASS(sp_zoom_context_parent_class))->root_handler(event_context, event);
+// }
+ ret = CEventContext::root_handler(event);
}
return ret;
diff --git a/src/zoom-context.h b/src/zoom-context.h
index c09b5a1b3..a73fd2bc2 100644
--- a/src/zoom-context.h
+++ b/src/zoom-context.h
@@ -19,8 +19,14 @@
#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))
-struct SPZoomContext {
- SPEventContext event_context;
+class CZoomContext;
+
+class SPZoomContext : public SPEventContext {
+public:
+ SPZoomContext();
+ CZoomContext* czoomcontext;
+
+ //SPEventContext event_context;
SPCanvasItem *grabbed;
};
@@ -28,6 +34,19 @@ struct SPZoomContextClass {
SPEventContextClass parent_class;
};
+class CZoomContext : public CEventContext {
+public:
+ CZoomContext(SPZoomContext* zoomcontext);
+
+ virtual void setup();
+ virtual void finish();
+ virtual gint root_handler(GdkEvent* event);
+ virtual gint item_handler(SPItem* item, GdkEvent* event);
+
+private:
+ SPZoomContext* spzoomcontext;
+};
+
GType sp_zoom_context_get_type (void);
#endif