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/pen-context.cpp | 69 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 56 insertions(+), 13 deletions(-) (limited to 'src/pen-context.cpp') diff --git a/src/pen-context.cpp b/src/pen-context.cpp index 6e3ed201e..2c045f8ad 100644 --- a/src/pen-context.cpp +++ b/src/pen-context.cpp @@ -102,11 +102,20 @@ static void sp_pen_context_class_init(SPPenContextClass *klass) 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) { + pc->cpencontext = new CPenContext(pc); + delete pc->cdrawcontext; + pc->cdrawcontext = pc->cpencontext; + pc->ceventcontext = pc->cpencontext; + SPEventContext *event_context = SP_EVENT_CONTEXT(pc); event_context->cursor_shape = cursor_pen_xpm; @@ -173,11 +182,18 @@ void sp_pen_context_set_polyline_mode(SPPenContext *const pc) { */ static void sp_pen_context_setup(SPEventContext *ec) { + ec->ceventcontext->setup(); +} + +void CPenContext::setup() { + SPEventContext* ec = this->speventcontext; + SPPenContext *pc = SP_PEN_CONTEXT(ec); - if (((SPEventContextClass *) sp_pen_context_parent_class)->setup) { - ((SPEventContextClass *) sp_pen_context_parent_class)->setup(ec); - } +// if (((SPEventContextClass *) sp_pen_context_parent_class)->setup) { +// ((SPEventContextClass *) sp_pen_context_parent_class)->setup(ec); +// } + CDrawContext::setup(); ControlManager &mgr = ControlManager::getManager(); @@ -229,6 +245,12 @@ static void pen_cancel (SPPenContext *const pc) */ static void sp_pen_context_finish(SPEventContext *ec) { + ec->ceventcontext->finish(); +} + +void CPenContext::finish() { + SPEventContext* ec = this->speventcontext; + SPPenContext *pc = SP_PEN_CONTEXT(ec); sp_event_context_discard_delayed_snap_event(ec); @@ -237,9 +259,10 @@ static void sp_pen_context_finish(SPEventContext *ec) pen_cancel (pc); } - if (((SPEventContextClass *) sp_pen_context_parent_class)->finish) { - ((SPEventContextClass *) sp_pen_context_parent_class)->finish(ec); - } +// if (((SPEventContextClass *) sp_pen_context_parent_class)->finish) { +// ((SPEventContextClass *) sp_pen_context_parent_class)->finish(ec); +// } + CDrawContext::finish(); } /** @@ -247,6 +270,12 @@ static void sp_pen_context_finish(SPEventContext *ec) */ static void sp_pen_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val) { + ec->ceventcontext->set(val); +} + +void CPenContext::set(Inkscape::Preferences::Entry* val) { + SPEventContext* ec = this->speventcontext; + SPPenContext *pc = SP_PEN_CONTEXT(ec); Glib::ustring name = val->getEntryName(); @@ -303,6 +332,12 @@ static void spdc_endpoint_snap_handle(SPPenContext const *const pc, Geom::Point static gint sp_pen_context_item_handler(SPEventContext *ec, SPItem *item, GdkEvent *event) { + return ec->ceventcontext->item_handler(item, event); +} + +gint CPenContext::item_handler(SPItem* item, GdkEvent* event) { + SPEventContext* ec = this->speventcontext; + SPPenContext *const pc = SP_PEN_CONTEXT(ec); gint ret = FALSE; @@ -319,8 +354,9 @@ static gint sp_pen_context_item_handler(SPEventContext *ec, SPItem *item, GdkEve } if (!ret) { - if (((SPEventContextClass *) sp_pen_context_parent_class)->item_handler) - ret = ((SPEventContextClass *) sp_pen_context_parent_class)->item_handler(ec, item, event); +// if (((SPEventContextClass *) sp_pen_context_parent_class)->item_handler) +// ret = ((SPEventContextClass *) sp_pen_context_parent_class)->item_handler(ec, item, event); + ret = CDrawContext::item_handler(item, event); } return ret; @@ -331,6 +367,12 @@ static gint sp_pen_context_item_handler(SPEventContext *ec, SPItem *item, GdkEve */ static gint sp_pen_context_root_handler(SPEventContext *ec, GdkEvent *event) { + return ec->ceventcontext->root_handler(event); +} + +gint CPenContext::root_handler(GdkEvent* event) { + SPEventContext* ec = this->speventcontext; + SPPenContext *const pc = SP_PEN_CONTEXT(ec); gint ret = FALSE; @@ -361,11 +403,12 @@ static gint sp_pen_context_root_handler(SPEventContext *ec, GdkEvent *event) } if (!ret) { - gint (*const parent_root_handler)(SPEventContext *, GdkEvent *) - = ((SPEventContextClass *) sp_pen_context_parent_class)->root_handler; - if (parent_root_handler) { - ret = parent_root_handler(ec, event); - } +// gint (*const parent_root_handler)(SPEventContext *, GdkEvent *) +// = ((SPEventContextClass *) sp_pen_context_parent_class)->root_handler; +// if (parent_root_handler) { +// ret = parent_root_handler(ec, event); +// } + ret = CDrawContext::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/pen-context.cpp | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) (limited to 'src/pen-context.cpp') 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; @@ -138,6 +140,14 @@ static void sp_pen_context_init(SPPenContext *pc) pc->waiting_item = NULL; } +/** + * 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. */ -- 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/pen-context.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/pen-context.cpp') diff --git a/src/pen-context.cpp b/src/pen-context.cpp index 333f9ef87..180152642 100644 --- a/src/pen-context.cpp +++ b/src/pen-context.cpp @@ -80,6 +80,8 @@ static void pen_set_to_nearest_horiz_vert(const SPPenContext *const pc, Geom::Po static int pen_last_paraxial_dir = 0; // last used direction in horizontal/vertical mode; 0 = horizontal, 1 = vertical +const std::string SPPenContext::prefsPath = "/tools/freehand/pen"; + G_DEFINE_TYPE(SPPenContext, sp_pen_context, SP_TYPE_DRAW_CONTEXT); /** -- 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/pen-context.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/pen-context.cpp') diff --git a/src/pen-context.cpp b/src/pen-context.cpp index 180152642..7e85b46af 100644 --- a/src/pen-context.cpp +++ b/src/pen-context.cpp @@ -80,6 +80,21 @@ static void pen_set_to_nearest_horiz_vert(const SPPenContext *const pc, Geom::Po static int pen_last_paraxial_dir = 0; // last used direction in horizontal/vertical mode; 0 = horizontal, 1 = vertical + +#include "sp-factory.h" + +namespace { + SPEventContext* createPenContext() { + return new SPPenContext(); + } + + bool penContextRegistered = ToolFactory::instance().registerObject("/tools/freehand/pen", createPenContext); +} + +const std::string& CPenContext::getPrefsPath() { + return SPPenContext::prefsPath; +} + const std::string SPPenContext::prefsPath = "/tools/freehand/pen"; G_DEFINE_TYPE(SPPenContext, sp_pen_context, SP_TYPE_DRAW_CONTEXT); @@ -115,6 +130,7 @@ SPPenContext::SPPenContext() : SPDrawContext() { delete pc->cdrawcontext; pc->cdrawcontext = pc->cpencontext; pc->ceventcontext = pc->cpencontext; + types.insert(typeid(SPPenContext)); pc->polylines_only = false; pc->polylines_paraxial = false; -- 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/pen-context.cpp | 113 +++++++++------------------------------------------- 1 file changed, 18 insertions(+), 95 deletions(-) (limited to 'src/pen-context.cpp') diff --git a/src/pen-context.cpp b/src/pen-context.cpp index 7e85b46af..caaac32db 100644 --- a/src/pen-context.cpp +++ b/src/pen-context.cpp @@ -47,14 +47,6 @@ using Inkscape::ControlManager; -static void sp_pen_context_dispose(GObject *object); - -static void sp_pen_context_setup(SPEventContext *ec); -static void sp_pen_context_finish(SPEventContext *ec); -static void sp_pen_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val); -static gint sp_pen_context_root_handler(SPEventContext *ec, GdkEvent *event); -static gint sp_pen_context_item_handler(SPEventContext *event_context, SPItem *item, GdkEvent *event); - static void spdc_pen_set_initial_point(SPPenContext *pc, Geom::Point const p); static void spdc_pen_set_subsequent_point(SPPenContext *const pc, Geom::Point const p, bool statusbar, guint status = 0); static void spdc_pen_set_ctrl(SPPenContext *pc, Geom::Point const p, guint state); @@ -91,47 +83,15 @@ namespace { bool penContextRegistered = ToolFactory::instance().registerObject("/tools/freehand/pen", createPenContext); } -const std::string& CPenContext::getPrefsPath() { +const std::string& SPPenContext::getPrefsPath() { return SPPenContext::prefsPath; } const std::string SPPenContext::prefsPath = "/tools/freehand/pen"; -G_DEFINE_TYPE(SPPenContext, sp_pen_context, SP_TYPE_DRAW_CONTEXT); - -/** - * Initialize the SPPenContext vtable. - */ -static void sp_pen_context_class_init(SPPenContextClass *klass) -{ - GObjectClass *object_class; - SPEventContextClass *event_context_class; - - object_class = (GObjectClass *) klass; - event_context_class = (SPEventContextClass *) 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; -} - -CPenContext::CPenContext(SPPenContext* pencontext) : CDrawContext(pencontext) { - this->sppencontext = pencontext; -} - SPPenContext::SPPenContext() : SPDrawContext() { SPPenContext* pc = this; - pc->cpencontext = new CPenContext(pc); - delete pc->cdrawcontext; - pc->cdrawcontext = pc->cpencontext; - pc->ceventcontext = pc->cpencontext; - types.insert(typeid(SPPenContext)); - pc->polylines_only = false; pc->polylines_paraxial = false; pc->expecting_clicks_for_LPE = 0; @@ -158,20 +118,8 @@ SPPenContext::SPPenContext() : SPDrawContext() { pc->waiting_item = NULL; } -/** - * 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) -{ - SPPenContext *pc = SP_PEN_CONTEXT(object); +SPPenContext::~SPPenContext() { + SPPenContext *pc = SP_PEN_CONTEXT(this); if (pc->c0) { sp_canvas_item_destroy(pc->c0); @@ -190,7 +138,7 @@ static void sp_pen_context_dispose(GObject *object) pc->cl1 = NULL; } - G_OBJECT_CLASS(sp_pen_context_parent_class)->dispose(object); + //G_OBJECT_CLASS(sp_pen_context_parent_class)->dispose(object); if (pc->expecting_clicks_for_LPE > 0) { // we received too few clicks to sanely set the parameter path so we remove the LPE from the item @@ -208,20 +156,15 @@ void sp_pen_context_set_polyline_mode(SPPenContext *const pc) { /** * Callback to initialize SPPenContext object. */ -static void sp_pen_context_setup(SPEventContext *ec) -{ - ec->ceventcontext->setup(); -} - -void CPenContext::setup() { - SPEventContext* ec = this->speventcontext; +void SPPenContext::setup() { + SPEventContext* ec = this; SPPenContext *pc = SP_PEN_CONTEXT(ec); // if (((SPEventContextClass *) sp_pen_context_parent_class)->setup) { // ((SPEventContextClass *) sp_pen_context_parent_class)->setup(ec); // } - CDrawContext::setup(); + SPDrawContext::setup(); ControlManager &mgr = ControlManager::getManager(); @@ -271,13 +214,8 @@ static void pen_cancel (SPPenContext *const pc) /** * Finalization callback. */ -static void sp_pen_context_finish(SPEventContext *ec) -{ - ec->ceventcontext->finish(); -} - -void CPenContext::finish() { - SPEventContext* ec = this->speventcontext; +void SPPenContext::finish() { + SPEventContext* ec = this; SPPenContext *pc = SP_PEN_CONTEXT(ec); @@ -290,19 +228,14 @@ void CPenContext::finish() { // if (((SPEventContextClass *) sp_pen_context_parent_class)->finish) { // ((SPEventContextClass *) sp_pen_context_parent_class)->finish(ec); // } - CDrawContext::finish(); + SPDrawContext::finish(); } /** * Callback that sets key to value in pen context. */ -static void sp_pen_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val) -{ - ec->ceventcontext->set(val); -} - -void CPenContext::set(Inkscape::Preferences::Entry* val) { - SPEventContext* ec = this->speventcontext; +void SPPenContext::set(Inkscape::Preferences::Entry* val) { + SPEventContext* ec = this; SPPenContext *pc = SP_PEN_CONTEXT(ec); Glib::ustring name = val->getEntryName(); @@ -358,13 +291,8 @@ static void spdc_endpoint_snap_handle(SPPenContext const *const pc, Geom::Point } } -static gint sp_pen_context_item_handler(SPEventContext *ec, SPItem *item, GdkEvent *event) -{ - return ec->ceventcontext->item_handler(item, event); -} - -gint CPenContext::item_handler(SPItem* item, GdkEvent* event) { - SPEventContext* ec = this->speventcontext; +gint SPPenContext::item_handler(SPItem* item, GdkEvent* event) { + SPEventContext* ec = this; SPPenContext *const pc = SP_PEN_CONTEXT(ec); @@ -384,7 +312,7 @@ gint CPenContext::item_handler(SPItem* item, GdkEvent* event) { if (!ret) { // if (((SPEventContextClass *) sp_pen_context_parent_class)->item_handler) // ret = ((SPEventContextClass *) sp_pen_context_parent_class)->item_handler(ec, item, event); - ret = CDrawContext::item_handler(item, event); + ret = SPDrawContext::item_handler(item, event); } return ret; @@ -393,13 +321,8 @@ gint CPenContext::item_handler(SPItem* item, GdkEvent* event) { /** * Callback to handle all pen events. */ -static gint sp_pen_context_root_handler(SPEventContext *ec, GdkEvent *event) -{ - return ec->ceventcontext->root_handler(event); -} - -gint CPenContext::root_handler(GdkEvent* event) { - SPEventContext* ec = this->speventcontext; +gint SPPenContext::root_handler(GdkEvent* event) { + SPEventContext* ec = this; SPPenContext *const pc = SP_PEN_CONTEXT(ec); @@ -436,7 +359,7 @@ gint CPenContext::root_handler(GdkEvent* event) { // if (parent_root_handler) { // ret = parent_root_handler(ec, event); // } - ret = CDrawContext::root_handler(event); + ret = SPDrawContext::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/pen-context.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/pen-context.cpp') diff --git a/src/pen-context.cpp b/src/pen-context.cpp index caaac32db..177aeaca9 100644 --- a/src/pen-context.cpp +++ b/src/pen-context.cpp @@ -73,7 +73,7 @@ static void pen_set_to_nearest_horiz_vert(const SPPenContext *const pc, Geom::Po static int pen_last_paraxial_dir = 0; // last used direction in horizontal/vertical mode; 0 = horizontal, 1 = vertical -#include "sp-factory.h" +#include "tool-factory.h" namespace { SPEventContext* createPenContext() { -- 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/pen-context.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/pen-context.cpp') diff --git a/src/pen-context.cpp b/src/pen-context.cpp index 177aeaca9..00f7294be 100644 --- a/src/pen-context.cpp +++ b/src/pen-context.cpp @@ -234,14 +234,14 @@ void SPPenContext::finish() { /** * Callback that sets key to value in pen context. */ -void SPPenContext::set(Inkscape::Preferences::Entry* val) { +void SPPenContext::set(const Inkscape::Preferences::Entry& val) { SPEventContext* ec = this; SPPenContext *pc = SP_PEN_CONTEXT(ec); - Glib::ustring name = val->getEntryName(); + Glib::ustring name = val.getEntryName(); if (name == "mode") { - if ( val->getString() == "drag" ) { + if ( val.getString() == "drag" ) { pc->mode = SP_PEN_CONTEXT_MODE_DRAG; } else { pc->mode = SP_PEN_CONTEXT_MODE_CLICK; -- 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/pen-context.cpp | 94 ++++++++++++++++++++++++++--------------------------- 1 file changed, 47 insertions(+), 47 deletions(-) (limited to 'src/pen-context.cpp') diff --git a/src/pen-context.cpp b/src/pen-context.cpp index 00f7294be..4281fdc54 100644 --- a/src/pen-context.cpp +++ b/src/pen-context.cpp @@ -103,8 +103,8 @@ SPPenContext::SPPenContext() : SPDrawContext() { event_context->hot_y = 4; pc->npoints = 0; - pc->mode = SP_PEN_CONTEXT_MODE_CLICK; - pc->state = SP_PEN_CONTEXT_POINT; + pc->mode = MODE_CLICK; + pc->state = POINT; pc->c0 = NULL; pc->c1 = NULL; @@ -199,7 +199,7 @@ void SPPenContext::setup() { static void pen_cancel (SPPenContext *const pc) { pc->num_clicks = 0; - pc->state = SP_PEN_CONTEXT_STOP; + pc->state = SPPenContext::STOP; spdc_reset_colors(pc); sp_canvas_item_hide(pc->c0); sp_canvas_item_hide(pc->c1); @@ -242,9 +242,9 @@ void SPPenContext::set(const Inkscape::Preferences::Entry& val) { if (name == "mode") { if ( val.getString() == "drag" ) { - pc->mode = SP_PEN_CONTEXT_MODE_DRAG; + pc->mode = MODE_DRAG; } else { - pc->mode = SP_PEN_CONTEXT_MODE_CLICK; + pc->mode = MODE_CLICK; } } } @@ -406,26 +406,26 @@ static gint pen_handle_button_press(SPPenContext *const pc, GdkEventButton const SPDrawAnchor * const anchor = spdc_test_inside(pc, event_w); switch (pc->mode) { - case SP_PEN_CONTEXT_MODE_CLICK: + case SPPenContext::MODE_CLICK: // In click mode we add point on release switch (pc->state) { - case SP_PEN_CONTEXT_POINT: - case SP_PEN_CONTEXT_CONTROL: - case SP_PEN_CONTEXT_CLOSE: + case SPPenContext::POINT: + case SPPenContext::CONTROL: + case SPPenContext::CLOSE: break; - case SP_PEN_CONTEXT_STOP: + case SPPenContext::STOP: // This is allowed, if we just canceled curve - pc->state = SP_PEN_CONTEXT_POINT; + pc->state = SPPenContext::POINT; break; default: break; } break; - case SP_PEN_CONTEXT_MODE_DRAG: + case SPPenContext::MODE_DRAG: switch (pc->state) { - case SP_PEN_CONTEXT_STOP: + case SPPenContext::STOP: // This is allowed, if we just canceled curve - case SP_PEN_CONTEXT_POINT: + case SPPenContext::POINT: if (pc->npoints == 0) { Geom::Point p; @@ -481,7 +481,7 @@ static gint pen_handle_button_press(SPPenContext *const pc, GdkEventButton const p = anchor->dp; // we hit an anchor, will finish the curve (either with or without closing) // in release handler - pc->state = SP_PEN_CONTEXT_CLOSE; + pc->state = SPPenContext::CLOSE; if (pc->green_anchor && pc->green_anchor->active) { // we clicked on the current curve start, so close it even if @@ -498,13 +498,13 @@ static gint pen_handle_button_press(SPPenContext *const pc, GdkEventButton const } } - pc->state = pc->polylines_only ? SP_PEN_CONTEXT_POINT : SP_PEN_CONTEXT_CONTROL; + pc->state = pc->polylines_only ? SPPenContext::POINT : SPPenContext::CONTROL; ret = TRUE; break; - case SP_PEN_CONTEXT_CONTROL: + case SPPenContext::CONTROL: g_warning("Button down in CONTROL state"); break; - case SP_PEN_CONTEXT_CLOSE: + case SPPenContext::CLOSE: g_warning("Button down in CLOSE state"); break; default: @@ -580,9 +580,9 @@ static gint pen_handle_motion_notify(SPPenContext *const pc, GdkEventMotion cons SPDrawAnchor *anchor = spdc_test_inside(pc, event_w); switch (pc->mode) { - case SP_PEN_CONTEXT_MODE_CLICK: + case SPPenContext::MODE_CLICK: switch (pc->state) { - case SP_PEN_CONTEXT_POINT: + case SPPenContext::POINT: if ( pc->npoints != 0 ) { // Only set point, if we are already appending spdc_endpoint_snap(pc, p, mevent.state); @@ -595,23 +595,23 @@ static gint pen_handle_motion_notify(SPPenContext *const pc, GdkEventMotion cons m.unSetup(); } break; - case SP_PEN_CONTEXT_CONTROL: - case SP_PEN_CONTEXT_CLOSE: + case SPPenContext::CONTROL: + case SPPenContext::CLOSE: // Placing controls is last operation in CLOSE state spdc_endpoint_snap(pc, p, mevent.state); spdc_pen_set_ctrl(pc, p, mevent.state); ret = TRUE; break; - case SP_PEN_CONTEXT_STOP: + case SPPenContext::STOP: // This is perfectly valid break; default: break; } break; - case SP_PEN_CONTEXT_MODE_DRAG: + case SPPenContext::MODE_DRAG: switch (pc->state) { - case SP_PEN_CONTEXT_POINT: + case SPPenContext::POINT: if ( pc->npoints > 0 ) { // Only set point, if we are already appending @@ -647,8 +647,8 @@ static gint pen_handle_motion_notify(SPPenContext *const pc, GdkEventMotion cons } } break; - case SP_PEN_CONTEXT_CONTROL: - case SP_PEN_CONTEXT_CLOSE: + case SPPenContext::CONTROL: + case SPPenContext::CLOSE: // Placing controls is last operation in CLOSE state // snap the handle @@ -662,7 +662,7 @@ static gint pen_handle_motion_notify(SPPenContext *const pc, GdkEventMotion cons gobble_motion_events(GDK_BUTTON1_MASK); ret = TRUE; break; - case SP_PEN_CONTEXT_STOP: + case SPPenContext::STOP: // This is perfectly valid break; default: @@ -706,9 +706,9 @@ static gint pen_handle_button_release(SPPenContext *const pc, GdkEventButton con SPDrawAnchor *anchor = spdc_test_inside(pc, event_w); switch (pc->mode) { - case SP_PEN_CONTEXT_MODE_CLICK: + case SPPenContext::MODE_CLICK: switch (pc->state) { - case SP_PEN_CONTEXT_POINT: + case SPPenContext::POINT: if ( pc->npoints == 0 ) { // Start new thread only with button release if (anchor) { @@ -723,43 +723,43 @@ static gint pen_handle_button_release(SPPenContext *const pc, GdkEventButton con p = anchor->dp; } } - pc->state = SP_PEN_CONTEXT_CONTROL; + pc->state = SPPenContext::CONTROL; ret = TRUE; break; - case SP_PEN_CONTEXT_CONTROL: + case SPPenContext::CONTROL: // End current segment spdc_endpoint_snap(pc, p, revent.state); spdc_pen_finish_segment(pc, p, revent.state); - pc->state = SP_PEN_CONTEXT_POINT; + pc->state = SPPenContext::POINT; ret = TRUE; break; - case SP_PEN_CONTEXT_CLOSE: + case SPPenContext::CLOSE: // End current segment if (!anchor) { // Snap node only if not hitting anchor spdc_endpoint_snap(pc, p, revent.state); } spdc_pen_finish_segment(pc, p, revent.state); spdc_pen_finish(pc, TRUE); - pc->state = SP_PEN_CONTEXT_POINT; + pc->state = SPPenContext::POINT; ret = TRUE; break; - case SP_PEN_CONTEXT_STOP: + case SPPenContext::STOP: // This is allowed, if we just canceled curve - pc->state = SP_PEN_CONTEXT_POINT; + pc->state = SPPenContext::POINT; ret = TRUE; break; default: break; } break; - case SP_PEN_CONTEXT_MODE_DRAG: + case SPPenContext::MODE_DRAG: switch (pc->state) { - case SP_PEN_CONTEXT_POINT: - case SP_PEN_CONTEXT_CONTROL: + case SPPenContext::POINT: + case SPPenContext::CONTROL: spdc_endpoint_snap(pc, p, revent.state); spdc_pen_finish_segment(pc, p, revent.state); break; - case SP_PEN_CONTEXT_CLOSE: + case SPPenContext::CLOSE: spdc_endpoint_snap(pc, p, revent.state); spdc_pen_finish_segment(pc, p, revent.state); if (pc->green_closed) { @@ -770,13 +770,13 @@ static gint pen_handle_button_release(SPPenContext *const pc, GdkEventButton con spdc_pen_finish(pc, FALSE); } break; - case SP_PEN_CONTEXT_STOP: + case SPPenContext::STOP: // This is allowed, if we just cancelled curve break; default: break; } - pc->state = SP_PEN_CONTEXT_POINT; + pc->state = SPPenContext::POINT; ret = TRUE; break; default: @@ -1118,7 +1118,7 @@ static gint pen_handle_key_press(SPPenContext *const pc, GdkEvent *event) sp_canvas_item_hide(pc->c1); sp_canvas_item_hide(pc->cl0); sp_canvas_item_hide(pc->cl1); - pc->state = SP_PEN_CONTEXT_POINT; + pc->state = SPPenContext::POINT; spdc_pen_set_subsequent_point(pc, pt, true); pen_last_paraxial_dir = !pen_last_paraxial_dir; ret = TRUE; @@ -1252,8 +1252,8 @@ static void spdc_pen_set_ctrl(SPPenContext *const pc, Geom::Point const p, guint sp_canvas_item_show(pc->c0); sp_canvas_item_show(pc->cl0); bool is_symm = false; - if ( ( ( pc->mode == SP_PEN_CONTEXT_MODE_CLICK ) && ( state & GDK_CONTROL_MASK ) ) || - ( ( pc->mode == SP_PEN_CONTEXT_MODE_DRAG ) && !( state & GDK_SHIFT_MASK ) ) ) { + if ( ( ( pc->mode == SPPenContext::MODE_CLICK ) && ( state & GDK_CONTROL_MASK ) ) || + ( ( pc->mode == SPPenContext::MODE_DRAG ) && !( state & GDK_SHIFT_MASK ) ) ) { Geom::Point delta = p - pc->p[3]; pc->p[2] = pc->p[3] - delta; is_symm = true; @@ -1323,7 +1323,7 @@ static void spdc_pen_finish(SPPenContext *const pc, gboolean const closed) pc->ea = NULL; pc->npoints = 0; - pc->state = SP_PEN_CONTEXT_POINT; + pc->state = SPPenContext::POINT; sp_canvas_item_hide(pc->c0); sp_canvas_item_hide(pc->c1); -- 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/pen-context.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/pen-context.cpp') diff --git a/src/pen-context.cpp b/src/pen-context.cpp index 21fc4fc51..690b520bc 100644 --- a/src/pen-context.cpp +++ b/src/pen-context.cpp @@ -291,7 +291,7 @@ static void spdc_endpoint_snap_handle(SPPenContext const *const pc, Geom::Point } } -gint SPPenContext::item_handler(SPItem* item, GdkEvent* event) { +bool SPPenContext::item_handler(SPItem* item, GdkEvent* event) { SPEventContext* ec = this; SPPenContext *const pc = SP_PEN_CONTEXT(ec); @@ -321,7 +321,7 @@ gint SPPenContext::item_handler(SPItem* item, GdkEvent* event) { /** * Callback to handle all pen events. */ -gint SPPenContext::root_handler(GdkEvent* event) { +bool SPPenContext::root_handler(GdkEvent* event) { SPEventContext* ec = this; SPPenContext *const pc = SP_PEN_CONTEXT(ec); -- 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/pen-context.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'src/pen-context.cpp') diff --git a/src/pen-context.cpp b/src/pen-context.cpp index 690b520bc..fbcb6dae5 100644 --- a/src/pen-context.cpp +++ b/src/pen-context.cpp @@ -205,8 +205,8 @@ static void pen_cancel (SPPenContext *const pc) sp_canvas_item_hide(pc->c1); sp_canvas_item_hide(pc->cl0); sp_canvas_item_hide(pc->cl1); - pc->_message_context->clear(); - pc->_message_context->flash(Inkscape::NORMAL_MESSAGE, _("Drawing cancelled")); + pc->message_context->clear(); + pc->message_context->flash(Inkscape::NORMAL_MESSAGE, _("Drawing cancelled")); pc->desktop->canvas->endForcedFullRedraws(); } @@ -386,7 +386,7 @@ static gint pen_handle_button_press(SPPenContext *const pc, GdkEventButton const // make sure this is not the last click for a waiting LPE (otherwise we want to finish the path) && pc->expecting_clicks_for_LPE != 1) { - if (Inkscape::have_viable_layer(desktop, dc->_message_context) == false) { + if (Inkscape::have_viable_layer(desktop, dc->message_context) == false) { return TRUE; } @@ -623,20 +623,20 @@ static gint pen_handle_motion_notify(SPPenContext *const pc, GdkEventMotion cons } if (anchor && !pc->anchor_statusbar) { - pc->_message_context->set(Inkscape::NORMAL_MESSAGE, _("Click or click and drag to close and finish the path.")); + pc->message_context->set(Inkscape::NORMAL_MESSAGE, _("Click or click and drag to close and finish the path.")); pc->anchor_statusbar = true; } else if (!anchor && pc->anchor_statusbar) { - pc->_message_context->clear(); + pc->message_context->clear(); pc->anchor_statusbar = false; } ret = TRUE; } else { if (anchor && !pc->anchor_statusbar) { - pc->_message_context->set(Inkscape::NORMAL_MESSAGE, _("Click or click and drag to continue the path from this point.")); + pc->message_context->set(Inkscape::NORMAL_MESSAGE, _("Click or click and drag to continue the path from this point.")); pc->anchor_statusbar = true; } else if (!anchor && pc->anchor_statusbar) { - pc->_message_context->clear(); + pc->message_context->clear(); pc->anchor_statusbar = false; } if (!sp_event_context_knot_mouseover(pc)) { @@ -1185,7 +1185,7 @@ static void spdc_pen_set_angle_distance_status_message(SPPenContext *const pc, G if (prefs->getBool("/options/compassangledisplay/value", 0) != 0) angle = angle_to_compass (angle); - pc->_message_context->setF(Inkscape::IMMEDIATE_MESSAGE, message, angle, dist->str); + pc->message_context->setF(Inkscape::IMMEDIATE_MESSAGE, message, angle, dist->str); g_string_free(dist, FALSE); } @@ -1314,7 +1314,7 @@ static void spdc_pen_finish(SPPenContext *const pc, gboolean const closed) pen_disable_events(pc); SPDesktop *const desktop = pc->desktop; - pc->_message_context->clear(); + pc->message_context->clear(); desktop->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Drawing finished")); pc->red_curve->reset(); -- cgit v1.2.3 From ef3c72e61987caa06a105c70cec83089892581ed Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sun, 4 Aug 2013 15:09:03 +0200 Subject: Cleaned up once more. (bzr r11608.1.118) --- src/pen-context.cpp | 155 +++++++++++++++++++--------------------------------- 1 file changed, 57 insertions(+), 98 deletions(-) (limited to 'src/pen-context.cpp') diff --git a/src/pen-context.cpp b/src/pen-context.cpp index fbcb6dae5..1221c7ec7 100644 --- a/src/pen-context.cpp +++ b/src/pen-context.cpp @@ -90,59 +90,51 @@ const std::string& SPPenContext::getPrefsPath() { const std::string SPPenContext::prefsPath = "/tools/freehand/pen"; SPPenContext::SPPenContext() : SPDrawContext() { - SPPenContext* pc = this; + this->polylines_only = false; + this->polylines_paraxial = false; + this->expecting_clicks_for_LPE = 0; - pc->polylines_only = false; - pc->polylines_paraxial = false; - pc->expecting_clicks_for_LPE = 0; + this->cursor_shape = cursor_pen_xpm; + this->hot_x = 4; + this->hot_y = 4; - SPEventContext *event_context = SP_EVENT_CONTEXT(pc); - - event_context->cursor_shape = cursor_pen_xpm; - event_context->hot_x = 4; - event_context->hot_y = 4; - - pc->npoints = 0; - pc->mode = MODE_CLICK; - pc->state = POINT; + this->npoints = 0; + this->mode = MODE_CLICK; + this->state = POINT; - pc->c0 = NULL; - pc->c1 = NULL; - pc->cl0 = NULL; - pc->cl1 = NULL; + this->c0 = NULL; + this->c1 = NULL; + this->cl0 = NULL; + this->cl1 = NULL; - pc->events_disabled = 0; + this->events_disabled = 0; - pc->num_clicks = 0; - pc->waiting_LPE = NULL; - pc->waiting_item = NULL; + this->num_clicks = 0; + this->waiting_LPE = NULL; + this->waiting_item = NULL; } SPPenContext::~SPPenContext() { - SPPenContext *pc = SP_PEN_CONTEXT(this); - - if (pc->c0) { - sp_canvas_item_destroy(pc->c0); - pc->c0 = NULL; + if (this->c0) { + sp_canvas_item_destroy(this->c0); + this->c0 = NULL; } - if (pc->c1) { - sp_canvas_item_destroy(pc->c1); - pc->c1 = NULL; + if (this->c1) { + sp_canvas_item_destroy(this->c1); + this->c1 = NULL; } - if (pc->cl0) { - sp_canvas_item_destroy(pc->cl0); - pc->cl0 = NULL; + if (this->cl0) { + sp_canvas_item_destroy(this->cl0); + this->cl0 = NULL; } - if (pc->cl1) { - sp_canvas_item_destroy(pc->cl1); - pc->cl1 = NULL; + if (this->cl1) { + sp_canvas_item_destroy(this->cl1); + this->cl1 = NULL; } - //G_OBJECT_CLASS(sp_pen_context_parent_class)->dispose(object); - - if (pc->expecting_clicks_for_LPE > 0) { + if (this->expecting_clicks_for_LPE > 0) { // we received too few clicks to sanely set the parameter path so we remove the LPE from the item - sp_lpe_item_remove_current_path_effect(pc->waiting_item, false); + sp_lpe_item_remove_current_path_effect(this->waiting_item, false); } } @@ -157,42 +149,34 @@ void sp_pen_context_set_polyline_mode(SPPenContext *const pc) { * Callback to initialize SPPenContext object. */ void SPPenContext::setup() { - SPEventContext* ec = this; - - SPPenContext *pc = SP_PEN_CONTEXT(ec); - -// if (((SPEventContextClass *) sp_pen_context_parent_class)->setup) { -// ((SPEventContextClass *) sp_pen_context_parent_class)->setup(ec); -// } SPDrawContext::setup(); ControlManager &mgr = ControlManager::getManager(); // Pen indicators - pc->c0 = mgr.createControl(sp_desktop_controls(SP_EVENT_CONTEXT_DESKTOP(ec)), Inkscape::CTRL_TYPE_ADJ_HANDLE); - mgr.track(pc->c0); + this->c0 = mgr.createControl(sp_desktop_controls(SP_EVENT_CONTEXT_DESKTOP(this)), Inkscape::CTRL_TYPE_ADJ_HANDLE); + mgr.track(this->c0); - pc->c1 = mgr.createControl(sp_desktop_controls(SP_EVENT_CONTEXT_DESKTOP(ec)), Inkscape::CTRL_TYPE_ADJ_HANDLE); - mgr.track(pc->c1); + this->c1 = mgr.createControl(sp_desktop_controls(SP_EVENT_CONTEXT_DESKTOP(this)), Inkscape::CTRL_TYPE_ADJ_HANDLE); + mgr.track(this->c1); - pc->cl0 = mgr.createControlLine(sp_desktop_controls(SP_EVENT_CONTEXT_DESKTOP(ec))); - pc->cl1 = mgr.createControlLine(sp_desktop_controls(SP_EVENT_CONTEXT_DESKTOP(ec))); + this->cl0 = mgr.createControlLine(sp_desktop_controls(SP_EVENT_CONTEXT_DESKTOP(this))); + this->cl1 = mgr.createControlLine(sp_desktop_controls(SP_EVENT_CONTEXT_DESKTOP(this))); + sp_canvas_item_hide(this->c0); + sp_canvas_item_hide(this->c1); + sp_canvas_item_hide(this->cl0); + sp_canvas_item_hide(this->cl1); - sp_canvas_item_hide(pc->c0); - sp_canvas_item_hide(pc->c1); - sp_canvas_item_hide(pc->cl0); - sp_canvas_item_hide(pc->cl1); - - sp_event_context_read(ec, "mode"); + sp_event_context_read(this, "mode"); - pc->anchor_statusbar = false; + this->anchor_statusbar = false; - sp_pen_context_set_polyline_mode(pc); + sp_pen_context_set_polyline_mode(this); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); if (prefs->getBool("/tools/freehand/pen/selcue")) { - ec->enableSelectionCue(); + this->enableSelectionCue(); } } @@ -215,19 +199,12 @@ static void pen_cancel (SPPenContext *const pc) * Finalization callback. */ void SPPenContext::finish() { - SPEventContext* ec = this; - - SPPenContext *pc = SP_PEN_CONTEXT(ec); - - sp_event_context_discard_delayed_snap_event(ec); + sp_event_context_discard_delayed_snap_event(this); - if (pc->npoints != 0) { - pen_cancel (pc); + if (this->npoints != 0) { + pen_cancel(this); } -// if (((SPEventContextClass *) sp_pen_context_parent_class)->finish) { -// ((SPEventContextClass *) sp_pen_context_parent_class)->finish(ec); -// } SPDrawContext::finish(); } @@ -235,16 +212,13 @@ void SPPenContext::finish() { * Callback that sets key to value in pen context. */ void SPPenContext::set(const Inkscape::Preferences::Entry& val) { - SPEventContext* ec = this; - - SPPenContext *pc = SP_PEN_CONTEXT(ec); Glib::ustring name = val.getEntryName(); if (name == "mode") { if ( val.getString() == "drag" ) { - pc->mode = MODE_DRAG; + this->mode = MODE_DRAG; } else { - pc->mode = MODE_CLICK; + this->mode = MODE_CLICK; } } } @@ -292,26 +266,20 @@ static void spdc_endpoint_snap_handle(SPPenContext const *const pc, Geom::Point } bool SPPenContext::item_handler(SPItem* item, GdkEvent* event) { - SPEventContext* ec = this; - - SPPenContext *const pc = SP_PEN_CONTEXT(ec); - gint ret = FALSE; switch (event->type) { case GDK_BUTTON_PRESS: - ret = pen_handle_button_press(pc, event->button); + ret = pen_handle_button_press(this, event->button); break; case GDK_BUTTON_RELEASE: - ret = pen_handle_button_release(pc, event->button); + ret = pen_handle_button_release(this, event->button); break; default: break; } if (!ret) { -// if (((SPEventContextClass *) sp_pen_context_parent_class)->item_handler) -// ret = ((SPEventContextClass *) sp_pen_context_parent_class)->item_handler(ec, item, event); ret = SPDrawContext::item_handler(item, event); } @@ -322,31 +290,27 @@ bool SPPenContext::item_handler(SPItem* item, GdkEvent* event) { * Callback to handle all pen events. */ bool SPPenContext::root_handler(GdkEvent* event) { - SPEventContext* ec = this; - - SPPenContext *const pc = SP_PEN_CONTEXT(ec); - gint ret = FALSE; switch (event->type) { case GDK_BUTTON_PRESS: - ret = pen_handle_button_press(pc, event->button); + ret = pen_handle_button_press(this, event->button); break; case GDK_MOTION_NOTIFY: - ret = pen_handle_motion_notify(pc, event->motion); + ret = pen_handle_motion_notify(this, event->motion); break; case GDK_BUTTON_RELEASE: - ret = pen_handle_button_release(pc, event->button); + ret = pen_handle_button_release(this, event->button); break; case GDK_2BUTTON_PRESS: - ret = pen_handle_2button_press(pc, event->button); + ret = pen_handle_2button_press(this, event->button); break; case GDK_KEY_PRESS: - ret = pen_handle_key_press(pc, event); + ret = pen_handle_key_press(this, event); break; default: @@ -354,11 +318,6 @@ bool SPPenContext::root_handler(GdkEvent* event) { } if (!ret) { -// gint (*const parent_root_handler)(SPEventContext *, GdkEvent *) -// = ((SPEventContextClass *) sp_pen_context_parent_class)->root_handler; -// if (parent_root_handler) { -// ret = parent_root_handler(ec, event); -// } ret = SPDrawContext::root_handler(event); } -- cgit v1.2.3