diff options
| author | Markus Engel <markus.engel@tum.de> | 2013-04-09 20:12:07 +0000 |
|---|---|---|
| committer | Markus Engel <markus.engel@tum.de> | 2013-04-09 20:12:07 +0000 |
| commit | 1d8f1753cd8cab38d19fcc26a4ad70ba2e794ac8 (patch) | |
| tree | b010ac32dcfd9923c2ec38dff3b70955242dfa70 /src | |
| parent | Started conversion of SPEventContext tree; added virtual pads to all classes. (diff) | |
| download | inkscape-1d8f1753cd8cab38d19fcc26a4ad70ba2e794ac8.tar.gz inkscape-1d8f1753cd8cab38d19fcc26a4ad70ba2e794ac8.zip | |
Added constructors to EventContext tree / some missing virtual pads.
(bzr r11608.1.90)
Diffstat (limited to 'src')
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 |
