From e58cac52b258e64c2cc88b0044bf9cfbaecedce2 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Tue, 9 Apr 2013 00:23:07 +0200 Subject: Started conversion of SPEventContext tree; added virtual pads to all classes. (bzr r11608.1.89) --- src/connector-context.cpp | 49 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 6 deletions(-) (limited to 'src/connector-context.cpp') diff --git a/src/connector-context.cpp b/src/connector-context.cpp index 9468894a0..aff1dcb4c 100644 --- a/src/connector-context.cpp +++ b/src/connector-context.cpp @@ -188,10 +188,17 @@ sp_connector_context_class_init(SPConnectorContextClass *klass) 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) { + cc->cconnectorcontext = new CConnectorContext(cc); + delete cc->ceventcontext; + cc->ceventcontext = cc->cconnectorcontext; + SPEventContext *ec = SP_EVENT_CONTEXT(cc); ec->cursor_shape = cursor_connector_xpm; @@ -265,6 +272,12 @@ sp_connector_context_dispose(GObject *object) static void sp_connector_context_setup(SPEventContext *ec) { + ec->ceventcontext->setup(); +} + +void CConnectorContext::setup() { + SPConnectorContext* ec = this->spconnectorcontext; + SPConnectorContext *cc = SP_CONNECTOR_CONTEXT(ec); SPDesktop *dt = ec->desktop; @@ -312,6 +325,12 @@ sp_connector_context_setup(SPEventContext *ec) static void sp_connector_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val) { + ec->ceventcontext->set(val); +} + +void CConnectorContext::set(Inkscape::Preferences::Entry* val) { + SPEventContext* ec = this->spconnectorcontext; + SPConnectorContext *cc = SP_CONNECTOR_CONTEXT(ec); /* fixme: Proper error handling for non-numeric data. Use a locale-independent function like @@ -328,6 +347,12 @@ sp_connector_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val) static void sp_connector_context_finish(SPEventContext *ec) { + ec->ceventcontext->finish(); +} + +void CConnectorContext::finish() { + SPEventContext* ec = this->speventcontext; + SPConnectorContext *cc = SP_CONNECTOR_CONTEXT(ec); spcc_connector_finish(cc); @@ -348,7 +373,6 @@ sp_connector_context_finish(SPEventContext *ec) desktop->canvas->gen_all_enter_events = false; } - //----------------------------------------------------------------------------- @@ -448,6 +472,12 @@ cc_deselect_handle(SPKnot* knot) static gint sp_connector_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEvent *event) { + return event_context->ceventcontext->item_handler(item, event); +} + +gint CConnectorContext::item_handler(SPItem* item, GdkEvent* event) { + SPEventContext* event_context = this->speventcontext; + gint ret = FALSE; SPDesktop *desktop = event_context->desktop; @@ -509,6 +539,12 @@ sp_connector_context_item_handler(SPEventContext *event_context, SPItem *item, G gint sp_connector_context_root_handler(SPEventContext *ec, GdkEvent *event) { + return ec->ceventcontext->root_handler(event); +} + +gint CConnectorContext::root_handler(GdkEvent* event) { + SPEventContext* ec = this->speventcontext; + SPConnectorContext *const cc = SP_CONNECTOR_CONTEXT(ec); gint ret = FALSE; @@ -534,11 +570,12 @@ sp_connector_context_root_handler(SPEventContext *ec, GdkEvent *event) } if (!ret) { - gint (*const parent_root_handler)(SPEventContext *, GdkEvent *) - = (SP_EVENT_CONTEXT_CLASS(sp_connector_context_parent_class))->root_handler; - if (parent_root_handler) { - ret = parent_root_handler(ec, event); - } +// gint (*const parent_root_handler)(SPEventContext *, GdkEvent *) +// = (SP_EVENT_CONTEXT_CLASS(sp_connector_context_parent_class))->root_handler; +// if (parent_root_handler) { +// ret = parent_root_handler(ec, event); +// } + ret = CEventContext::root_handler(event); } return ret; -- cgit v1.2.3 From 1d8f1753cd8cab38d19fcc26a4ad70ba2e794ac8 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Tue, 9 Apr 2013 22:12:07 +0200 Subject: Added constructors to EventContext tree / some missing virtual pads. (bzr r11608.1.90) --- src/connector-context.cpp | 46 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 14 deletions(-) (limited to 'src/connector-context.cpp') 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; -- cgit v1.2.3 From fbb85064cfaaf03cc09bacedb16a8561f61f2b3d Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 13 Apr 2013 00:37:18 +0200 Subject: Added prefPaths to contexts; modified SPFactory (bzr r11608.1.94) --- src/connector-context.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/connector-context.cpp') diff --git a/src/connector-context.cpp b/src/connector-context.cpp index 7b29126e6..5c7bf97c8 100644 --- a/src/connector-context.cpp +++ b/src/connector-context.cpp @@ -171,6 +171,8 @@ static Inkscape::XML::NodeEventVector layer_repr_events = { NULL /* order_changed */ }; +const std::string SPConnectorContext::prefsPath = "/tools/connector"; + G_DEFINE_TYPE(SPConnectorContext, sp_connector_context, SP_TYPE_EVENT_CONTEXT); static void -- cgit v1.2.3 From fbdc8b84ff670c684dafc7d7d403ed01e7077e70 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 13 Apr 2013 18:13:17 +0200 Subject: Replaced casting macros for EventContext tree; added contructors. (bzr r11608.1.96) --- src/connector-context.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/connector-context.cpp') diff --git a/src/connector-context.cpp b/src/connector-context.cpp index 5c7bf97c8..d5a628d46 100644 --- a/src/connector-context.cpp +++ b/src/connector-context.cpp @@ -171,6 +171,21 @@ static Inkscape::XML::NodeEventVector layer_repr_events = { NULL /* order_changed */ }; + +#include "sp-factory.h" + +namespace { + SPEventContext* createConnectorContext() { + return new SPConnectorContext(); + } + + bool connectorContextRegistered = ToolFactory::instance().registerObject("/tools/connector", createConnectorContext); +} + +const std::string& CConnectorContext::getPrefsPath() { + return SPConnectorContext::prefsPath; +} + const std::string SPConnectorContext::prefsPath = "/tools/connector"; G_DEFINE_TYPE(SPConnectorContext, sp_connector_context, SP_TYPE_EVENT_CONTEXT); @@ -200,6 +215,7 @@ SPConnectorContext::SPConnectorContext() : SPEventContext() { cc->cconnectorcontext = new CConnectorContext(cc); delete cc->ceventcontext; cc->ceventcontext = cc->cconnectorcontext; + types.insert(typeid(SPConnectorContext)); cc->red_curve = 0; cc->isOrthogonal = false; -- cgit v1.2.3 From 65ba6ad9a82f8f47974eb10665478fd783692bb5 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 20 Apr 2013 23:19:46 +0200 Subject: Merging of EventContext classes complete. (bzr r11608.1.98) --- src/connector-context.cpp | 112 ++++++++-------------------------------------- 1 file changed, 18 insertions(+), 94 deletions(-) (limited to 'src/connector-context.cpp') diff --git a/src/connector-context.cpp b/src/connector-context.cpp index d5a628d46..1dad3cad9 100644 --- a/src/connector-context.cpp +++ b/src/connector-context.cpp @@ -109,14 +109,6 @@ using Inkscape::DocumentUndo; -static void sp_connector_context_dispose(GObject *object); - -static void sp_connector_context_setup(SPEventContext *ec); -static void sp_connector_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val); -static void sp_connector_context_finish(SPEventContext *ec); -static gint sp_connector_context_root_handler(SPEventContext *ec, GdkEvent *event); -static gint sp_connector_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEvent *event); - // Stuff borrowed from DrawContext static void spcc_connector_set_initial_point(SPConnectorContext *cc, Geom::Point const p); static void spcc_connector_set_subsequent_point(SPConnectorContext *cc, Geom::Point const p); @@ -182,41 +174,15 @@ namespace { bool connectorContextRegistered = ToolFactory::instance().registerObject("/tools/connector", createConnectorContext); } -const std::string& CConnectorContext::getPrefsPath() { +const std::string& SPConnectorContext::getPrefsPath() { return SPConnectorContext::prefsPath; } const std::string SPConnectorContext::prefsPath = "/tools/connector"; -G_DEFINE_TYPE(SPConnectorContext, sp_connector_context, SP_TYPE_EVENT_CONTEXT); - -static void -sp_connector_context_class_init(SPConnectorContextClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS(klass); - SPEventContextClass *event_context_class = SP_EVENT_CONTEXT_CLASS(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; -} - -CConnectorContext::CConnectorContext(SPConnectorContext* connectorcontext) : CEventContext(connectorcontext) { - this->spconnectorcontext = connectorcontext; -} - SPConnectorContext::SPConnectorContext() : SPEventContext() { SPConnectorContext* cc = this; - cc->cconnectorcontext = new CConnectorContext(cc); - delete cc->ceventcontext; - cc->ceventcontext = cc->cconnectorcontext; - types.insert(typeid(SPConnectorContext)); - cc->red_curve = 0; cc->isOrthogonal = false; cc->c1 = 0; @@ -257,7 +223,7 @@ SPConnectorContext::SPConnectorContext() : SPEventContext() { cc->clickeditem = NULL; cc->clickedhandle = NULL; - new (&cc->knots) SPKnotList(); + //new (&cc->knots) SPKnotList(); for (int i = 0; i < 2; ++i) { cc->endpt_handle[i] = NULL; @@ -269,17 +235,8 @@ SPConnectorContext::SPConnectorContext() : SPEventContext() { 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) -{ - SPConnectorContext *cc = SP_CONNECTOR_CONTEXT(object); +SPConnectorContext::~SPConnectorContext() { + SPConnectorContext *cc = SP_CONNECTOR_CONTEXT(this); cc->sel_changed_connection.disconnect(); @@ -299,18 +256,11 @@ sp_connector_context_dispose(GObject *object) } g_assert( cc->newConnRef == NULL ); - G_OBJECT_CLASS(sp_connector_context_parent_class)->dispose(object); + //G_OBJECT_CLASS(sp_connector_context_parent_class)->dispose(object); } - -static void -sp_connector_context_setup(SPEventContext *ec) -{ - ec->ceventcontext->setup(); -} - -void CConnectorContext::setup() { - SPConnectorContext* ec = this->spconnectorcontext; +void SPConnectorContext::setup() { + SPConnectorContext* ec = this; SPConnectorContext *cc = SP_CONNECTOR_CONTEXT(ec); SPDesktop *dt = ec->desktop; @@ -318,7 +268,7 @@ void CConnectorContext::setup() { // if ((SP_EVENT_CONTEXT_CLASS(sp_connector_context_parent_class))->setup) { // (SP_EVENT_CONTEXT_CLASS(sp_connector_context_parent_class))->setup(ec); // } - CEventContext::setup(); + SPEventContext::setup(); cc->selection = sp_desktop_selection(dt); @@ -356,15 +306,8 @@ void CConnectorContext::setup() { dt->canvas->gen_all_enter_events = true; } - -static void -sp_connector_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val) -{ - ec->ceventcontext->set(val); -} - -void CConnectorContext::set(Inkscape::Preferences::Entry* val) { - SPEventContext* ec = this->spconnectorcontext; +void SPConnectorContext::set(Inkscape::Preferences::Entry* val) { + SPEventContext* ec = this; SPConnectorContext *cc = SP_CONNECTOR_CONTEXT(ec); @@ -379,14 +322,8 @@ void CConnectorContext::set(Inkscape::Preferences::Entry* val) { } } -static void -sp_connector_context_finish(SPEventContext *ec) -{ - ec->ceventcontext->finish(); -} - -void CConnectorContext::finish() { - SPEventContext* ec = this->speventcontext; +void SPConnectorContext::finish() { + SPEventContext* ec = this; SPConnectorContext *cc = SP_CONNECTOR_CONTEXT(ec); @@ -396,7 +333,7 @@ void CConnectorContext::finish() { // if ((SP_EVENT_CONTEXT_CLASS(sp_connector_context_parent_class))->finish) { // (SP_EVENT_CONTEXT_CLASS(sp_connector_context_parent_class))->finish(ec); // } - CEventContext::finish(); + SPEventContext::finish(); if (cc->selection) { cc->selection = NULL; @@ -505,14 +442,8 @@ cc_deselect_handle(SPKnot* knot) sp_knot_update_ctrl(knot); } -static gint -sp_connector_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEvent *event) -{ - return event_context->ceventcontext->item_handler(item, event); -} - -gint CConnectorContext::item_handler(SPItem* item, GdkEvent* event) { - SPEventContext* event_context = this->speventcontext; +gint SPConnectorContext::item_handler(SPItem* item, GdkEvent* event) { + SPEventContext* event_context = this; gint ret = FALSE; @@ -571,15 +502,8 @@ gint CConnectorContext::item_handler(SPItem* item, GdkEvent* event) { return ret; } - -gint -sp_connector_context_root_handler(SPEventContext *ec, GdkEvent *event) -{ - return ec->ceventcontext->root_handler(event); -} - -gint CConnectorContext::root_handler(GdkEvent* event) { - SPEventContext* ec = this->speventcontext; +gint SPConnectorContext::root_handler(GdkEvent* event) { + SPEventContext* ec = this; SPConnectorContext *const cc = SP_CONNECTOR_CONTEXT(ec); @@ -611,7 +535,7 @@ gint CConnectorContext::root_handler(GdkEvent* event) { // if (parent_root_handler) { // ret = parent_root_handler(ec, event); // } - ret = CEventContext::root_handler(event); + ret = SPEventContext::root_handler(event); } return ret; -- cgit v1.2.3 From 5512f857e2f33f1aa40124dc82b353e5f2e5a0b0 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 20 Apr 2013 23:58:53 +0200 Subject: Moved factories to different files. (bzr r11608.1.100) --- src/connector-context.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/connector-context.cpp') diff --git a/src/connector-context.cpp b/src/connector-context.cpp index 1dad3cad9..b7e3942b9 100644 --- a/src/connector-context.cpp +++ b/src/connector-context.cpp @@ -164,7 +164,7 @@ static Inkscape::XML::NodeEventVector layer_repr_events = { }; -#include "sp-factory.h" +#include "tool-factory.h" namespace { SPEventContext* createConnectorContext() { -- cgit v1.2.3 From bdde74bbab299f2ee448f1c55469c56a66fb01f7 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sun, 21 Apr 2013 23:58:15 +0200 Subject: Removed some unused files; more refactoring in EventContext tree. (bzr r11608.1.104) --- src/connector-context.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/connector-context.cpp') diff --git a/src/connector-context.cpp b/src/connector-context.cpp index b7e3942b9..42bf6584b 100644 --- a/src/connector-context.cpp +++ b/src/connector-context.cpp @@ -306,19 +306,19 @@ void SPConnectorContext::setup() { dt->canvas->gen_all_enter_events = true; } -void SPConnectorContext::set(Inkscape::Preferences::Entry* val) { +void SPConnectorContext::set(const Inkscape::Preferences::Entry& val) { SPEventContext* ec = this; SPConnectorContext *cc = SP_CONNECTOR_CONTEXT(ec); /* fixme: Proper error handling for non-numeric data. Use a locale-independent function like * g_ascii_strtod (or a thin wrapper that does the right thing for invalid values inf/nan). */ - Glib::ustring name = val->getEntryName(); + Glib::ustring name = val.getEntryName(); if ( name == "curvature" ) { - cc->curvature = val->getDoubleLimited(); // prevents NaN and +/-Inf from messing up + cc->curvature = val.getDoubleLimited(); // prevents NaN and +/-Inf from messing up } else if ( name == "orthogonal" ) { - cc->isOrthogonal = val->getBool(); + cc->isOrthogonal = val.getBool(); } } -- cgit v1.2.3 From 9b2956fbaefb4e12bad3fc359c47e5923f33bb41 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sun, 28 Apr 2013 00:05:16 +0200 Subject: various changes (bzr r11608.1.105) --- src/connector-context.cpp | 266 +++++++++++++++++++--------------------------- 1 file changed, 110 insertions(+), 156 deletions(-) (limited to 'src/connector-context.cpp') diff --git a/src/connector-context.cpp b/src/connector-context.cpp index 42bf6584b..12d9e41b8 100644 --- a/src/connector-context.cpp +++ b/src/connector-context.cpp @@ -134,7 +134,6 @@ static bool conn_pt_handle_test(SPConnectorContext *cc, Geom::Point& p, gchar ** static void cc_select_handle(SPKnot* knot); static void cc_deselect_handle(SPKnot* knot); static bool cc_item_is_shape(SPItem *item); -static void cc_selection_changed(Inkscape::Selection *selection, gpointer data); static void cc_connector_rerouting_finish(SPConnectorContext *const cc, Geom::Point *const p); @@ -181,169 +180,145 @@ const std::string& SPConnectorContext::getPrefsPath() { const std::string SPConnectorContext::prefsPath = "/tools/connector"; SPConnectorContext::SPConnectorContext() : SPEventContext() { - SPConnectorContext* cc = this; + this->red_curve = 0; + this->isOrthogonal = false; + this->c1 = 0; + this->red_bpath = 0; + this->green_curve = 0; + this->selection = 0; + this->cl0 = 0; + this->cl1 = 0; + this->c0 = 0; - 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; + this->cursor_shape = cursor_connector_xpm; + this->hot_x = 1; + this->hot_y = 1; + this->xp = 0; + this->yp = 0; - SPEventContext *ec = SP_EVENT_CONTEXT(cc); + this->red_color = 0xff00007f; - ec->cursor_shape = cursor_connector_xpm; - ec->hot_x = 1; - ec->hot_y = 1; - ec->xp = 0; - ec->yp = 0; + this->newconn = NULL; + this->newConnRef = NULL; + this->curvature = 0.0; - cc->red_color = 0xff00007f; + this->sel_changed_connection = sigc::connection(); - cc->newconn = NULL; - cc->newConnRef = NULL; - cc->curvature = 0.0; + this->active_shape = NULL; + this->active_shape_repr = NULL; + this->active_shape_layer_repr = NULL; - cc->sel_changed_connection = sigc::connection(); + this->active_conn = NULL; + this->active_conn_repr = NULL; - cc->active_shape = NULL; - cc->active_shape_repr = NULL; - cc->active_shape_layer_repr = NULL; - - cc->active_conn = NULL; - cc->active_conn_repr = NULL; - - cc->active_handle = NULL; + this->active_handle = NULL; - cc->selected_handle = NULL; + this->selected_handle = NULL; - cc->clickeditem = NULL; - cc->clickedhandle = NULL; - - //new (&cc->knots) SPKnotList(); + this->clickeditem = NULL; + this->clickedhandle = NULL; for (int i = 0; i < 2; ++i) { - cc->endpt_handle[i] = NULL; - cc->endpt_handler_id[i] = 0; + this->endpt_handle[i] = NULL; + this->endpt_handler_id[i] = 0; } - cc->shref = NULL; - cc->ehref = NULL; - cc->npoints = 0; - cc->state = SP_CONNECTOR_CONTEXT_IDLE; + + this->shref = NULL; + this->ehref = NULL; + this->npoints = 0; + this->state = SP_CONNECTOR_CONTEXT_IDLE; } SPConnectorContext::~SPConnectorContext() { - SPConnectorContext *cc = SP_CONNECTOR_CONTEXT(this); - - cc->sel_changed_connection.disconnect(); + this->sel_changed_connection.disconnect(); for (int i = 0; i < 2; ++i) { - if (cc->endpt_handle[1]) { - g_object_unref(cc->endpt_handle[i]); - cc->endpt_handle[i] = NULL; + if (this->endpt_handle[1]) { + g_object_unref(this->endpt_handle[i]); + this->endpt_handle[i] = NULL; } } - if (cc->shref) { - g_free(cc->shref); - cc->shref = NULL; + + if (this->shref) { + g_free(this->shref); + this->shref = NULL; } - if (cc->ehref) { - g_free(cc->shref); - cc->shref = NULL; + + if (this->ehref) { + g_free(this->shref); + this->shref = NULL; } - g_assert( cc->newConnRef == NULL ); - - //G_OBJECT_CLASS(sp_connector_context_parent_class)->dispose(object); + + g_assert( this->newConnRef == NULL ); } void SPConnectorContext::setup() { - SPConnectorContext* ec = this; - - 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); -// } SPEventContext::setup(); - cc->selection = sp_desktop_selection(dt); + this->selection = sp_desktop_selection(this->desktop); - cc->sel_changed_connection.disconnect(); - cc->sel_changed_connection = cc->selection->connectChanged( - sigc::bind(sigc::ptr_fun(&cc_selection_changed), - (gpointer) cc)); + this->sel_changed_connection.disconnect(); + this->sel_changed_connection = this->selection->connectChanged( + sigc::mem_fun(this, &SPConnectorContext::selection_changed) + ); /* Create red bpath */ - cc->red_bpath = sp_canvas_bpath_new(sp_desktop_sketch(ec->desktop), NULL); - sp_canvas_bpath_set_stroke(SP_CANVAS_BPATH(cc->red_bpath), cc->red_color, + this->red_bpath = sp_canvas_bpath_new(sp_desktop_sketch(this->desktop), NULL); + sp_canvas_bpath_set_stroke(SP_CANVAS_BPATH(this->red_bpath), this->red_color, 1.0, SP_STROKE_LINEJOIN_MITER, SP_STROKE_LINECAP_BUTT); - sp_canvas_bpath_set_fill(SP_CANVAS_BPATH(cc->red_bpath), 0x00000000, + sp_canvas_bpath_set_fill(SP_CANVAS_BPATH(this->red_bpath), 0x00000000, SP_WIND_RULE_NONZERO); /* Create red curve */ - cc->red_curve = new SPCurve(); + this->red_curve = new SPCurve(); /* Create green curve */ - cc->green_curve = new SPCurve(); + this->green_curve = new SPCurve(); // Notice the initial selection. - cc_selection_changed(cc->selection, (gpointer) cc); + //cc_selection_changed(this->selection, (gpointer) this); + this->selection_changed(this->selection); - cc->within_tolerance = false; + this->within_tolerance = false; - sp_event_context_read(ec, "curvature"); - sp_event_context_read(ec, "orthogonal"); + sp_event_context_read(this, "curvature"); + sp_event_context_read(this, "orthogonal"); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); if (prefs->getBool("/tools/connector/selcue", 0)) { - ec->enableSelectionCue(); + this->enableSelectionCue(); } // Make sure we see all enter events for canvas items, // even if a mouse button is depressed. - dt->canvas->gen_all_enter_events = true; + this->desktop->canvas->gen_all_enter_events = true; } void SPConnectorContext::set(const Inkscape::Preferences::Entry& val) { - SPEventContext* ec = this; - - SPConnectorContext *cc = SP_CONNECTOR_CONTEXT(ec); - /* fixme: Proper error handling for non-numeric data. Use a locale-independent function like * g_ascii_strtod (or a thin wrapper that does the right thing for invalid values inf/nan). */ Glib::ustring name = val.getEntryName(); - if ( name == "curvature" ) { - cc->curvature = val.getDoubleLimited(); // prevents NaN and +/-Inf from messing up - } - else if ( name == "orthogonal" ) { - cc->isOrthogonal = val.getBool(); + + if (name == "curvature") { + this->curvature = val.getDoubleLimited(); // prevents NaN and +/-Inf from messing up + } else if (name == "orthogonal") { + this->isOrthogonal = val.getBool(); } } void SPConnectorContext::finish() { - SPEventContext* ec = this; - - SPConnectorContext *cc = SP_CONNECTOR_CONTEXT(ec); + spcc_connector_finish(this); + this->state = SP_CONNECTOR_CONTEXT_IDLE; - 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); -// } SPEventContext::finish(); - if (cc->selection) { - cc->selection = NULL; + if (this->selection) { + this->selection = NULL; } - cc_clear_active_shape(cc); - cc_clear_active_conn(cc); + + cc_clear_active_shape(this); + cc_clear_active_conn(this); // Restore the default event generating behaviour. - SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(ec); - desktop->canvas->gen_all_enter_events = false; + this->desktop->canvas->gen_all_enter_events = false; } //----------------------------------------------------------------------------- @@ -443,58 +418,53 @@ cc_deselect_handle(SPKnot* knot) } gint SPConnectorContext::item_handler(SPItem* item, GdkEvent* event) { - SPEventContext* event_context = this; - gint ret = FALSE; - SPDesktop *desktop = event_context->desktop; - - SPConnectorContext *cc = SP_CONNECTOR_CONTEXT(event_context); - Geom::Point p(event->button.x, event->button.y); switch (event->type) { case GDK_BUTTON_RELEASE: - if (event->button.button == 1 && !event_context->space_panning) { - if ((cc->state == SP_CONNECTOR_CONTEXT_DRAGGING) && - (event_context->within_tolerance)) - { - spcc_reset_colors(cc); - cc->state = SP_CONNECTOR_CONTEXT_IDLE; + if (event->button.button == 1 && !this->space_panning) { + if ((this->state == SP_CONNECTOR_CONTEXT_DRAGGING) && this->within_tolerance) { + spcc_reset_colors(this); + this->state = SP_CONNECTOR_CONTEXT_IDLE; } - if (cc->state != SP_CONNECTOR_CONTEXT_IDLE) { + + if (this->state != SP_CONNECTOR_CONTEXT_IDLE) { // Doing something else like rerouting. break; } + // find out clicked item, honoring Alt - SPItem *item = sp_event_context_find_item(desktop, - p, event->button.state & GDK_MOD1_MASK, FALSE); + SPItem *item = sp_event_context_find_item(desktop, p, event->button.state & GDK_MOD1_MASK, FALSE); if (event->button.state & GDK_SHIFT_MASK) { - cc->selection->toggle(item); + this->selection->toggle(item); } else { - cc->selection->set(item); + this->selection->set(item); /* When selecting a new item, do not allow showing connection points on connectors. (yet?) */ - if ( item != cc->active_shape && !cc_item_is_connector( item ) ) - cc_set_active_shape( cc, item ); + + if (item != this->active_shape && !cc_item_is_connector(item)) { + cc_set_active_shape(this, item); + } } - ret = TRUE; + ret = TRUE; } break; + case GDK_ENTER_NOTIFY: - { - if (!cc->selected_handle) - { + if (!this->selected_handle) { if (cc_item_is_shape(item)) { - cc_set_active_shape(cc, item); + cc_set_active_shape(this, item); } + ret = TRUE; } break; - } + default: break; } @@ -503,26 +473,23 @@ gint SPConnectorContext::item_handler(SPItem* item, GdkEvent* event) { } gint SPConnectorContext::root_handler(GdkEvent* event) { - SPEventContext* ec = this; - - SPConnectorContext *const cc = SP_CONNECTOR_CONTEXT(ec); - gint ret = FALSE; switch (event->type) { case GDK_BUTTON_PRESS: - ret = connector_handle_button_press(cc, event->button); + ret = connector_handle_button_press(this, event->button); break; case GDK_MOTION_NOTIFY: - ret = connector_handle_motion_notify(cc, event->motion); + ret = connector_handle_motion_notify(this, event->motion); break; case GDK_BUTTON_RELEASE: - ret = connector_handle_button_release(cc, event->button); + ret = connector_handle_button_release(this, event->button); break; + case GDK_KEY_PRESS: - ret = connector_handle_key_press(cc, get_group0_keyval (&event->key)); + ret = connector_handle_key_press(this, get_group0_keyval (&event->key)); break; default: @@ -530,11 +497,6 @@ gint SPConnectorContext::root_handler(GdkEvent* event) { } if (!ret) { -// gint (*const parent_root_handler)(SPEventContext *, GdkEvent *) -// = (SP_EVENT_CONTEXT_CLASS(sp_connector_context_parent_class))->root_handler; -// if (parent_root_handler) { -// ret = parent_root_handler(ec, event); -// } ret = SPEventContext::root_handler(event); } @@ -1455,32 +1417,24 @@ void cc_selection_set_avoid(bool const set_avoid) DocumentUndo::done(document, SP_VERB_CONTEXT_CONNECTOR, event_desc); } - -static void -cc_selection_changed(Inkscape::Selection *selection, gpointer data) -{ - SPConnectorContext *cc = SP_CONNECTOR_CONTEXT(data); - //SPEventContext *ec = SP_EVENT_CONTEXT(cc); - +void SPConnectorContext::selection_changed(Inkscape::Selection *selection) { SPItem *item = selection->singleItem(); - if (cc->active_conn == item) - { + if (this->active_conn == item) { // Nothing to change. return; } - if (item == NULL) - { - cc_clear_active_conn(cc); + + if (item == NULL) { + cc_clear_active_conn(this); return; } if (cc_item_is_connector(item)) { - cc_set_active_conn(cc, item); + cc_set_active_conn(this, item); } } - static void shape_event_attr_deleted(Inkscape::XML::Node */*repr*/, Inkscape::XML::Node *child, Inkscape::XML::Node */*ref*/, gpointer data) -- cgit v1.2.3 From b2dd3583e7372d23d18bbc6e861f4f645ec3dc37 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Tue, 30 Jul 2013 23:17:21 +0200 Subject: Further refactoring of EventContexts. (bzr r11608.1.109) --- src/connector-context.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/connector-context.cpp') diff --git a/src/connector-context.cpp b/src/connector-context.cpp index 12d9e41b8..72a01dee9 100644 --- a/src/connector-context.cpp +++ b/src/connector-context.cpp @@ -417,7 +417,7 @@ cc_deselect_handle(SPKnot* knot) sp_knot_update_ctrl(knot); } -gint SPConnectorContext::item_handler(SPItem* item, GdkEvent* event) { +bool SPConnectorContext::item_handler(SPItem* item, GdkEvent* event) { gint ret = FALSE; Geom::Point p(event->button.x, event->button.y); @@ -472,7 +472,7 @@ gint SPConnectorContext::item_handler(SPItem* item, GdkEvent* event) { return ret; } -gint SPConnectorContext::root_handler(GdkEvent* event) { +bool SPConnectorContext::root_handler(GdkEvent* event) { gint ret = FALSE; switch (event->type) { @@ -1096,7 +1096,7 @@ cc_generic_knot_handler(SPCanvasItem *, GdkEvent *event, SPKnot *knot) static gboolean endpt_handler(SPKnot */*knot*/, GdkEvent *event, SPConnectorContext *cc) { - g_assert( SP_IS_CONNECTOR_CONTEXT(cc) ); + //g_assert( SP_IS_CONNECTOR_CONTEXT(cc) ); gboolean consumed = FALSE; -- cgit v1.2.3 From 989abbac025a8b3349748d19a613a08586c5fdcd Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Wed, 31 Jul 2013 21:11:20 +0200 Subject: Fixed SPObject ctor and dtor; removed singleton.h; some smaller changes. (bzr r11608.1.110) --- src/connector-context.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/connector-context.cpp') diff --git a/src/connector-context.cpp b/src/connector-context.cpp index 72a01dee9..c79c58125 100644 --- a/src/connector-context.cpp +++ b/src/connector-context.cpp @@ -518,7 +518,7 @@ connector_handle_button_press(SPConnectorContext *const cc, GdkEventButton const SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(cc); - if (Inkscape::have_viable_layer(desktop, cc->_message_context) == false) { + if (Inkscape::have_viable_layer(desktop, cc->message_context) == false) { return TRUE; } -- cgit v1.2.3