diff options
| author | Markus Engel <markus.engel@tum.de> | 2013-11-12 01:48:38 +0000 |
|---|---|---|
| committer | Markus Engel <markus.engel@tum.de> | 2013-11-12 01:48:38 +0000 |
| commit | 0d56cd0b0b22de7385f173f0848f1ee71bdf5788 (patch) | |
| tree | 2388a7841679186599ba85c269072947b456b2d1 /src | |
| parent | Fix bug in SPSwitch. (diff) | |
| download | inkscape-0d56cd0b0b22de7385f173f0848f1ee71bdf5788.tar.gz inkscape-0d56cd0b0b22de7385f173f0848f1ee71bdf5788.zip | |
Clean up some tool related things.
(bzr r12795)
Diffstat (limited to 'src')
| -rw-r--r-- | src/desktop-handles.cpp | 8 | ||||
| -rw-r--r-- | src/desktop.cpp | 113 | ||||
| -rw-r--r-- | src/draw-anchor.cpp | 7 | ||||
| -rw-r--r-- | src/ui/tools/connector-tool.cpp | 14 | ||||
| -rw-r--r-- | src/ui/tools/flood-tool.h | 6 | ||||
| -rw-r--r-- | src/ui/tools/freehand-base.cpp | 16 | ||||
| -rw-r--r-- | src/ui/tools/pen-tool.cpp | 12 | ||||
| -rw-r--r-- | src/ui/tools/pencil-tool.cpp | 2 | ||||
| -rw-r--r-- | src/ui/tools/spiral-tool.cpp | 2 | ||||
| -rw-r--r-- | src/ui/tools/text-tool.cpp | 8 | ||||
| -rw-r--r-- | src/ui/tools/tool-base.cpp | 121 | ||||
| -rw-r--r-- | src/ui/tools/tool-base.h | 33 |
12 files changed, 63 insertions, 279 deletions
diff --git a/src/desktop-handles.cpp b/src/desktop-handles.cpp index bb8699d89..8fa7ad986 100644 --- a/src/desktop-handles.cpp +++ b/src/desktop-handles.cpp @@ -15,14 +15,6 @@ #include "desktop.h" #include "desktop-handles.h" -//ToolBase * -//sp_desktop_event_context (SPDesktop const * desktop) -//{ -// g_return_val_if_fail (desktop != NULL, NULL); -// -// return desktop->event_context; -//} - Inkscape::Selection * sp_desktop_selection (SPDesktop const * desktop) { diff --git a/src/desktop.cpp b/src/desktop.cpp index cf8c60fec..e24d7eef0 100644 --- a/src/desktop.cpp +++ b/src/desktop.cpp @@ -71,6 +71,7 @@ #include "sp-namedview.h" #include "sp-root.h" #include "sp-defs.h" +#include "tool-factory.h" #include "widgets/desktop-widget.h" #include "xml/repr.h" #include "helper/action.h" //sp_action_perform @@ -229,14 +230,7 @@ SPDesktop::init (SPNamedView *nv, SPCanvas *aCanvas, Inkscape::UI::View::EditWid tempgroup = (SPCanvasGroup *) sp_canvas_item_new (main, SP_TYPE_CANVAS_GROUP, NULL); controls = (SPCanvasGroup *) sp_canvas_item_new (main, SP_TYPE_CANVAS_GROUP, NULL); - /* Push select tool to the bottom of stack */ - /** \todo - * FIXME: this is the only call to this. Everything else seems to just - * call "set" instead of "push". Can we assume that there is only one - * context ever? - */ - //push_event_context (SP_TYPE_SELECT_CONTEXT, "/tools/select", SP_EVENT_CONTEXT_STATIC); - //set_event_context(SP_TYPE_SELECT_CONTEXT, "/tools/select"); + // Set the select tool as the active tool. set_event_context2("/tools/select"); // display rect and zoom are now handled in sp_desktop_widget_realize() @@ -361,18 +355,10 @@ void SPDesktop::destroy() g_signal_handlers_disconnect_by_func(G_OBJECT (main), (gpointer) G_CALLBACK(sp_desktop_root_handler), this); g_signal_handlers_disconnect_by_func(G_OBJECT (drawing), (gpointer) G_CALLBACK(_arena_handler), this); -// while (event_context) { -// ToolBase *ec = event_context; -// event_context = ec->next; -// sp_event_context_finish (ec); -// g_object_unref (G_OBJECT (ec)); -// } - //sp_event_context_finish(event_context); - event_context->finish(); - //g_object_unref(G_OBJECT(event_context)); if (event_context) { + event_context->finish(); delete event_context; - event_context = 0; + event_context = NULL; } delete layers; @@ -668,92 +654,33 @@ SPDesktop::change_document (SPDocument *theDocument) _document_replaced_signal.emit (this, theDocument); } - -#include "tool-factory.h" - +/** + * Replaces the currently active tool with a new one. + */ void SPDesktop::set_event_context2(const std::string& toolName) { - Inkscape::UI::Tools::ToolBase* ec_old = event_context; - - if (ec_old) { - ec_old->deactivate(); - } - - Inkscape::UI::Tools::ToolBase* ec_new = ToolFactory::instance().createObject(toolName); - ec_new->desktop = this; - ec_new->message_context = new Inkscape::MessageContext(this->messageStack()); + Inkscape::UI::Tools::ToolBase* new_tool = ToolFactory::instance().createObject(toolName); + new_tool->desktop = this; + new_tool->message_context = new Inkscape::MessageContext(this->messageStack()); - event_context = ec_new; + Inkscape::UI::Tools::ToolBase* old_tool = event_context; + event_context = new_tool; - if (ec_old) { - ec_old->finish(); - delete ec_old; + if (old_tool) { + old_tool->finish(); + delete old_tool; } - ec_new->setup(); + new_tool->setup(); - sp_event_context_activate(event_context); + // Make sure no delayed snapping events are carried over after switching tools + // (this is only an additional safety measure against sloppy coding, because each + // tool should take care of this by itself) + sp_event_context_discard_delayed_snap_event(event_context); _event_context_changed_signal.emit(this, event_context); } /** - * Make desktop switch event contexts. - */ -//void -//SPDesktop::set_event_context (GType type, const gchar *config) -//{ -// //ToolBase *ec; -// //while (event_context) { -// //ec = event_context; -// sp_event_context_deactivate (event_context); -// // we have to keep event_context valid during destruction - otherwise writing -// // destructors is next to impossible -// // ToolBase *next = ec->next; -// sp_event_context_finish (event_context); -// g_object_unref (G_OBJECT (event_context)); -// // event_context = next; -// //} -// -// // The event_context will be null. This means that it will be impossible -// // to process any event invoked by the lines below. See for example bug -// // LP #622350. Cutting and undoing again in the node tool resets the event -// // context to the node tool. In this bug the line bellow invokes GDK_LEAVE_NOTIFY -// // events which cannot be handled and must be discarded. -// event_context = sp_event_context_new (type, this, config, SP_EVENT_CONTEXT_STATIC); -// // ec->next = event_context; -// //event_context = ec; -// // Now the event_context has been set again and we can process all events again -// sp_event_context_activate (event_context); -// _event_context_changed_signal.emit (this, event_context); -//} - -/** - * Push event context onto desktop's context stack. - */ -//void -//SPDesktop::push_event_context (GType type, const gchar *config, unsigned int key) -//{ -// ToolBase *ref, *ec; -// -// if (event_context && event_context->key == key) return; -// ref = event_context; -// while (ref && ref->next && ref->next->key != key) ref = ref->next; -// if (ref && ref->next) { -// ec = ref->next; -// ref->next = ec->next; -// sp_event_context_finish (ec); -// g_object_unref (G_OBJECT (ec)); -// } -// -// if (event_context) sp_event_context_deactivate (event_context); -// ec = sp_event_context_new (type, this, config, key); -// ec->next = event_context; -// event_context = ec; -// sp_event_context_activate (ec); -// _event_context_changed_signal.emit (this, ec); -//} - -/** * Sets the coordinate status to a given point */ void diff --git a/src/draw-anchor.cpp b/src/draw-anchor.cpp index cd57b2461..00db936e1 100644 --- a/src/draw-anchor.cpp +++ b/src/draw-anchor.cpp @@ -37,8 +37,6 @@ SPDrawAnchor *sp_draw_anchor_new(Inkscape::UI::Tools::FreehandBase *dc, SPCurve return NULL; } - SPDesktop *dt = SP_EVENT_CONTEXT_DESKTOP(dc); - SPDrawAnchor *a = g_new(SPDrawAnchor, 1); a->dc = dc; @@ -47,7 +45,7 @@ SPDrawAnchor *sp_draw_anchor_new(Inkscape::UI::Tools::FreehandBase *dc, SPCurve a->start = start; a->active = FALSE; a->dp = delta; - a->ctrl = ControlManager::getManager().createControl(sp_desktop_controls(dt), Inkscape::CTRL_TYPE_ANCHOR); + a->ctrl = ControlManager::getManager().createControl(sp_desktop_controls(&dc->getDesktop()), Inkscape::CTRL_TYPE_ANCHOR); SP_CTRL(a->ctrl)->moveto(delta); @@ -77,10 +75,9 @@ SPDrawAnchor *sp_draw_anchor_destroy(SPDrawAnchor *anchor) */ SPDrawAnchor *sp_draw_anchor_test(SPDrawAnchor *anchor, Geom::Point w, gboolean activate) { - SPDesktop *dt = SP_EVENT_CONTEXT_DESKTOP(anchor->dc); SPCtrl *ctrl = SP_CTRL(anchor->ctrl); - if ( activate && ( Geom::LInfty( w - dt->d2w(anchor->dp) ) <= (ctrl->box.width() / 2.0) ) ) { + if ( activate && ( Geom::LInfty( w - anchor->dc->getDesktop().d2w(anchor->dp) ) <= (ctrl->box.width() / 2.0) ) ) { if (!anchor->active) { g_object_set(anchor->ctrl, "fill_color", FILL_COLOR_MOUSEOVER, NULL); anchor->active = TRUE; diff --git a/src/ui/tools/connector-tool.cpp b/src/ui/tools/connector-tool.cpp index 36e013ba8..62d52f6af 100644 --- a/src/ui/tools/connector-tool.cpp +++ b/src/ui/tools/connector-tool.cpp @@ -519,7 +519,7 @@ connector_handle_button_press(ConnectorTool *const cc, GdkEventButton const &bev if ( bevent.button == 1 && !event_context->space_panning ) { - SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(cc); + SPDesktop *desktop = cc->desktop; if (Inkscape::have_viable_layer(desktop, cc->message_context) == false) { return TRUE; @@ -544,7 +544,7 @@ connector_handle_button_press(ConnectorTool *const cc, GdkEventButton const &bev if ( cc->npoints == 0 ) { cc_clear_active_conn(cc); - SP_EVENT_CONTEXT_DESKTOP(cc)->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Creating new connector")); + cc->desktop->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Creating new connector")); /* Set start anchor */ /* Create green anchor */ @@ -715,7 +715,7 @@ connector_handle_button_release(ConnectorTool *const cc, GdkEventButton const &r ToolBase *event_context = SP_EVENT_CONTEXT(cc); if ( revent.button == 1 && !event_context->space_panning ) { - SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(cc); + SPDesktop *desktop = cc->desktop; SPDocument *doc = sp_desktop_document(desktop); SnapManager &m = desktop->namedview->snap_manager; @@ -790,7 +790,7 @@ connector_handle_key_press(ConnectorTool *const cc, guint const keyval) case GDK_KEY_Escape: if (cc->state == SP_CONNECTOR_CONTEXT_REROUTING) { - SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(cc); + SPDesktop *desktop = cc->desktop; SPDocument *doc = sp_desktop_document(desktop); cc_connector_rerouting_finish(cc, NULL); @@ -819,7 +819,7 @@ connector_handle_key_press(ConnectorTool *const cc, guint const keyval) static void cc_connector_rerouting_finish(ConnectorTool *const cc, Geom::Point *const p) { - SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(cc); + SPDesktop *desktop = cc->desktop; SPDocument *doc = sp_desktop_document(desktop); // Clear the temporary path: @@ -953,9 +953,9 @@ spcc_flush_white(ConnectorTool *cc, SPCurve *gc) } /* Now we have to go back to item coordinates at last */ - c->transform(SP_EVENT_CONTEXT_DESKTOP(cc)->dt2doc()); + c->transform(cc->desktop->dt2doc()); - SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(cc); + SPDesktop *desktop = cc->desktop; SPDocument *doc = sp_desktop_document(desktop); Inkscape::XML::Document *xml_doc = doc->getReprDoc(); diff --git a/src/ui/tools/flood-tool.h b/src/ui/tools/flood-tool.h index 77dd2f13a..3ed670e8b 100644 --- a/src/ui/tools/flood-tool.h +++ b/src/ui/tools/flood-tool.h @@ -19,12 +19,6 @@ #define SP_FLOOD_CONTEXT(obj) (dynamic_cast<Inkscape::UI::Tools::FloodTool*>((Inkscape::UI::Tools::ToolBase*)obj)) #define SP_IS_FLOOD_CONTEXT(obj) (dynamic_cast<const Inkscape::UI::Tools::FloodTool*>((const Inkscape::UI::Tools::ToolBase*)obj) != NULL) - -#define FLOOD_COLOR_CHANNEL_R 1 -#define FLOOD_COLOR_CHANNEL_G 2 -#define FLOOD_COLOR_CHANNEL_B 4 -#define FLOOD_COLOR_CHANNEL_A 8 - namespace Inkscape { namespace UI { namespace Tools { diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index 6cf1d7a5b..c3c269743 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -408,8 +408,8 @@ void spdc_endpoint_snap_rotation(ToolBase const *const ec, Geom::Point &p, Geom: Inkscape::Preferences *prefs = Inkscape::Preferences::get(); unsigned const snaps = abs(prefs->getInt("/options/rotationsnapsperpi/value", 12)); - SnapManager &m = SP_EVENT_CONTEXT_DESKTOP(ec)->namedview->snap_manager; - m.setup(SP_EVENT_CONTEXT_DESKTOP(ec)); + SnapManager &m = ec->desktop->namedview->snap_manager; + m.setup(ec->desktop); bool snap_enabled = m.snapprefs.getSnapEnabledGlobally(); if (state & GDK_SHIFT_MASK) { @@ -433,7 +433,7 @@ void spdc_endpoint_snap_rotation(ToolBase const *const ec, Geom::Point &p, Geom: void spdc_endpoint_snap_free(ToolBase const * const ec, Geom::Point& p, boost::optional<Geom::Point> &start_of_line, guint const /*state*/) { - SPDesktop *dt = SP_EVENT_CONTEXT_DESKTOP(ec); + SPDesktop *dt = ec->desktop; SnapManager &m = dt->namedview->snap_manager; Inkscape::Selection *selection = sp_desktop_selection (dt); @@ -491,7 +491,7 @@ void spdc_concat_colors_and_flush(FreehandBase *dc, gboolean forceclosed) // Step A - test, whether we ended on green anchor if ( forceclosed || ( dc->green_anchor && dc->green_anchor->active ) ) { // We hit green anchor, closing Green-Blue-Red - SP_EVENT_CONTEXT_DESKTOP(dc)->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Path is closed.")); + dc->desktop->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Path is closed.")); c->closepath_current(); // Closed path, just flush spdc_flush_white(dc, c); @@ -506,7 +506,7 @@ void spdc_concat_colors_and_flush(FreehandBase *dc, gboolean forceclosed) || dc->sa->curve->is_closed() ) ) { // We hit bot start and end of single curve, closing paths - SP_EVENT_CONTEXT_DESKTOP(dc)->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Closing path.")); + dc->desktop->messageStack()->flash(Inkscape::NORMAL_MESSAGE, _("Closing path.")); if (dc->sa->start && !(dc->sa->curve->is_closed()) ) { c = reverse_then_unref(c); } @@ -565,9 +565,9 @@ static void spdc_flush_white(FreehandBase *dc, SPCurve *gc) // Now we have to go back to item coordinates at last c->transform( dc->white_item ? (dc->white_item)->dt2i_affine() - : SP_EVENT_CONTEXT_DESKTOP(dc)->dt2doc() ); + : dc->desktop->dt2doc() ); - SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(dc); + SPDesktop *desktop = dc->desktop; SPDocument *doc = sp_desktop_document(desktop); Inkscape::XML::Document *xml_doc = doc->getReprDoc(); @@ -710,7 +710,7 @@ void spdc_create_single_dot(ToolBase *ec, Geom::Point const &pt, char const *too g_return_if_fail(!strcmp(tool, "/tools/freehand/pen") || !strcmp(tool, "/tools/freehand/pencil")); Glib::ustring tool_path = tool; - SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(ec); + SPDesktop *desktop = ec->desktop; Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc(); Inkscape::XML::Node *repr = xml_doc->createElement("svg:path"); repr->setAttribute("sodipodi:type", "arc"); diff --git a/src/ui/tools/pen-tool.cpp b/src/ui/tools/pen-tool.cpp index 4c573a244..dc5e801c0 100644 --- a/src/ui/tools/pen-tool.cpp +++ b/src/ui/tools/pen-tool.cpp @@ -154,14 +154,14 @@ void PenTool::setup() { ControlManager &mgr = ControlManager::getManager(); // Pen indicators - this->c0 = mgr.createControl(sp_desktop_controls(SP_EVENT_CONTEXT_DESKTOP(this)), Inkscape::CTRL_TYPE_ADJ_HANDLE); + this->c0 = mgr.createControl(sp_desktop_controls(this->desktop), Inkscape::CTRL_TYPE_ADJ_HANDLE); mgr.track(this->c0); - this->c1 = mgr.createControl(sp_desktop_controls(SP_EVENT_CONTEXT_DESKTOP(this)), Inkscape::CTRL_TYPE_ADJ_HANDLE); + this->c1 = mgr.createControl(sp_desktop_controls(this->desktop), Inkscape::CTRL_TYPE_ADJ_HANDLE); mgr.track(this->c1); - this->cl0 = mgr.createControlLine(sp_desktop_controls(SP_EVENT_CONTEXT_DESKTOP(this))); - this->cl1 = mgr.createControlLine(sp_desktop_controls(SP_EVENT_CONTEXT_DESKTOP(this))); + this->cl0 = mgr.createControlLine(sp_desktop_controls(this->desktop)); + this->cl1 = mgr.createControlLine(sp_desktop_controls(this->desktop)); sp_canvas_item_hide(this->c0); sp_canvas_item_hide(this->c1); @@ -335,7 +335,7 @@ static gint pen_handle_button_press(PenTool *const pc, GdkEventButton const &bev } FreehandBase * const dc = SP_DRAW_CONTEXT(pc); - SPDesktop * const desktop = SP_EVENT_CONTEXT_DESKTOP(dc); + SPDesktop * const desktop = dc->desktop; Geom::Point const event_w(bevent.x, bevent.y); Geom::Point event_dt(desktop->w2d(event_w)); ToolBase *event_context = SP_EVENT_CONTEXT(pc); @@ -506,7 +506,7 @@ static gint pen_handle_motion_notify(PenTool *const pc, GdkEventMotion const &me gint ret = FALSE; ToolBase *event_context = SP_EVENT_CONTEXT(pc); - SPDesktop * const dt = SP_EVENT_CONTEXT_DESKTOP(event_context); + SPDesktop * const dt = event_context->desktop; if (event_context->space_panning || mevent.state & GDK_BUTTON2_MASK || mevent.state & GDK_BUTTON3_MASK) { // allow scrolling diff --git a/src/ui/tools/pencil-tool.cpp b/src/ui/tools/pencil-tool.cpp index 7edf5d8ff..52779d551 100644 --- a/src/ui/tools/pencil-tool.cpp +++ b/src/ui/tools/pencil-tool.cpp @@ -178,7 +178,7 @@ pencil_handle_button_press(PencilTool *const pc, GdkEventButton const &bevent) if ( bevent.button == 1 && !event_context->space_panning) { FreehandBase *dc = SP_DRAW_CONTEXT (pc); - SPDesktop *desktop = SP_EVENT_CONTEXT_DESKTOP(dc); + SPDesktop *desktop = dc->desktop; Inkscape::Selection *selection = sp_desktop_selection(desktop); if (Inkscape::have_viable_layer(desktop, dc->message_context) == false) { diff --git a/src/ui/tools/spiral-tool.cpp b/src/ui/tools/spiral-tool.cpp index 3199ee06e..005b2d239 100644 --- a/src/ui/tools/spiral-tool.cpp +++ b/src/ui/tools/spiral-tool.cpp @@ -362,7 +362,7 @@ void SpiralTool::drag(Geom::Point const &p, guint state) { } // Create object - Inkscape::XML::Document *xml_doc = SP_EVENT_CONTEXT_DOCUMENT(this)->getReprDoc(); + Inkscape::XML::Document *xml_doc = this->desktop->doc()->getReprDoc(); Inkscape::XML::Node *repr = xml_doc->createElement("svg:path"); repr->setAttribute("sodipodi:type", "spiral"); diff --git a/src/ui/tools/text-tool.cpp b/src/ui/tools/text-tool.cpp index 0a8b35110..2927606a7 100644 --- a/src/ui/tools/text-tool.cpp +++ b/src/ui/tools/text-tool.cpp @@ -415,12 +415,12 @@ static void sp_text_context_setup_text(TextTool *tc) ToolBase *ec = SP_EVENT_CONTEXT(tc); /* Create <text> */ - Inkscape::XML::Document *xml_doc = SP_EVENT_CONTEXT_DESKTOP(ec)->doc()->getReprDoc(); + Inkscape::XML::Document *xml_doc = ec->desktop->doc()->getReprDoc(); Inkscape::XML::Node *rtext = xml_doc->createElement("svg:text"); rtext->setAttribute("xml:space", "preserve"); // we preserve spaces in the text objects we create /* Set style */ - sp_desktop_apply_style_tool(SP_EVENT_CONTEXT_DESKTOP(ec), rtext, "/tools/text", true); + sp_desktop_apply_style_tool(ec->desktop, rtext, "/tools/text", true); sp_repr_set_svg_double(rtext, "x", tc->pdoc[Geom::X]); sp_repr_set_svg_double(rtext, "y", tc->pdoc[Geom::Y]); @@ -1730,7 +1730,7 @@ static void sptc_commit(GtkIMContext */*imc*/, gchar *string, TextTool *tc) void sp_text_context_place_cursor (TextTool *tc, SPObject *text, Inkscape::Text::Layout::iterator where) { - SP_EVENT_CONTEXT_DESKTOP (tc)->selection->set (text); + tc->desktop->selection->set (text); tc->text_sel_start = tc->text_sel_end = where; sp_text_context_update_cursor(tc); sp_text_context_update_text_selection(tc); @@ -1738,7 +1738,7 @@ void sp_text_context_place_cursor (TextTool *tc, SPObject *text, Inkscape::Text: void sp_text_context_place_cursor_at (TextTool *tc, SPObject *text, Geom::Point const p) { - SP_EVENT_CONTEXT_DESKTOP (tc)->selection->set (text); + tc->desktop->selection->set (text); sp_text_context_place_cursor (tc, text, sp_te_get_position_by_coords(tc->text, p)); } diff --git a/src/ui/tools/tool-base.cpp b/src/ui/tools/tool-base.cpp index c123aec27..6c7867633 100644 --- a/src/ui/tools/tool-base.cpp +++ b/src/ui/tools/tool-base.cpp @@ -66,10 +66,6 @@ static int switch_selector_to = 0; static bool dropper_toggled = FALSE; static int switch_dropper_to = 0; -//static gint xp = 0, yp = 0; // where drag started -//static gint tolerance = 0; -//static bool within_tolerance = false; - // globals for keeping track of keyboard scroll events in order to accelerate static guint32 scroll_event_time = 0; static gdouble scroll_multiply = 1; @@ -86,16 +82,14 @@ static void set_event_location(SPDesktop * desktop, GdkEvent * event); void ToolBase::set(const Inkscape::Preferences::Entry& /*val*/) { } -void ToolBase::activate() { -} - -void ToolBase::deactivate() { -} - void ToolBase::finish() { this->enableSelectionCue(false); } +SPDesktop const& ToolBase::getDesktop() const { + return *desktop; +} + ToolBase::ToolBase() { this->hot_y = 0; this->xp = 0; @@ -231,9 +225,7 @@ void ToolBase::sp_event_context_update_cursor() { /** * Callback that gets called on initialization of ToolBase object. * Redraws mouse cursor, at the moment. - */ - -/** + * * When you override it, call this method first. */ void ToolBase::setup() { @@ -358,15 +350,6 @@ static gdouble accelerate_scroll(GdkEvent *event, gdouble acceleration, return scroll_multiply; } -/** - * Main event dispatch, gets called from Gdk. - */ -//static gint sp_event_context_private_root_handler( -// ToolBase *event_context, GdkEvent *event) { -// -// return event_context->ceventcontext->root_handler(event); -//} - bool ToolBase::root_handler(GdkEvent* event) { static Geom::Point button_w; static unsigned int panning = 0; @@ -872,12 +855,6 @@ bool ToolBase::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(ToolBase *ec, SPItem *item, -// GdkEvent *event) { -// -// return ec->ceventcontext->item_handler(item, event); -//} - bool ToolBase::item_handler(SPItem* item, GdkEvent* event) { int ret = FALSE; @@ -909,58 +886,6 @@ bool sp_event_context_knot_mouseover(ToolBase *ec) } /** - * Creates new ToolBase object and calls its virtual setup() function. - * @todo This is bogus. pref_path should be a private property of the inheriting objects. - */ -//ToolBase * -//sp_event_context_new(GType type, SPDesktop *desktop, gchar const *pref_path, -// unsigned int key) { -// g_return_val_if_fail(g_type_is_a(type, SP_TYPE_EVENT_CONTEXT), NULL); -// g_return_val_if_fail(desktop != NULL, NULL); -// -// ToolBase * const ec = static_cast<ToolBase*>(g_object_new(type, NULL)); -// -// ec->desktop = desktop; -// ec->_message_context -// = new Inkscape::MessageContext(desktop->messageStack()); -// ec->key = key; -// ec->pref_observer = NULL; -// -// if (pref_path) { -// ec->pref_observer = new ToolPrefObserver(pref_path, ec); -// -// Inkscape::Preferences *prefs = Inkscape::Preferences::get(); -// 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); -// ec->ceventcontext->setup(); -// -// return ec; -//} - -/** - * Finishes ToolBase. - */ -//void sp_event_context_finish(ToolBase *ec) { -// g_return_if_fail(ec != NULL); -// g_return_if_fail(SP_IS_EVENT_CONTEXT(ec)); -// -// ec->enableSelectionCue(false); -// -//// if (ec->next) { -//// 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); -// ec->finish(); -//} - -//-------------------------------member functions - -/** * Enables/disables the ToolBase's SelCue. */ void ToolBase::enableSelectionCue(bool enable) { @@ -1011,48 +936,12 @@ void sp_event_context_read(ToolBase *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); -// } - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); Inkscape::Preferences::Entry val = prefs->getEntry(ec->pref_observer->observed_path + '/' + key); ec->set(val); } /** - * Calls virtual activate() function of ToolBase. - */ -void sp_event_context_activate(ToolBase *ec) { - g_return_if_fail(ec != NULL); - g_return_if_fail(SP_IS_EVENT_CONTEXT(ec)); - - // Make sure no delayed snapping events are carried over after switching contexts - // (this is only an additional safety measure against sloppy coding, because each - // 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); - ec->activate(); -} - -/** - * Calls virtual deactivate() function of ToolBase. - */ -//void sp_event_context_deactivate(ToolBase *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); -// ec->deactivate(); -//} - -/** * Calls virtual root_handler(), the main event handling function. */ gint sp_event_context_root_handler(ToolBase * event_context, diff --git a/src/ui/tools/tool-base.h b/src/ui/tools/tool-base.h index 5185f89b1..7ed5875b1 100644 --- a/src/ui/tools/tool-base.h +++ b/src/ui/tools/tool-base.h @@ -113,10 +113,7 @@ public: ToolBase(); virtual ~ToolBase(); - SPDesktop *desktop; Inkscape::Preferences::Observer *pref_observer; - gchar const *const *cursor_shape; - gint hot_x, hot_y; ///< indicates the cursor's hot spot GdkCursor *cursor; gint xp, yp; ///< where drag started @@ -150,9 +147,6 @@ public: // Is called by our pref_observer if a preference has been changed. virtual void set(const Inkscape::Preferences::Entry& val); - virtual void activate(); - virtual void deactivate(); - virtual bool root_handler(GdkEvent* event); virtual bool item_handler(SPItem* item, GdkEvent* event); @@ -175,24 +169,24 @@ public: ToolBase * const ec; }; + SPDesktop const& getDesktop() const; + + //protected: void sp_event_context_update_cursor(); + SPDesktop *desktop; + +protected: + gchar const *const *cursor_shape; + gint hot_x, hot_y; ///< indicates the cursor's hot spot + private: ToolBase(const ToolBase&); ToolBase& operator=(const ToolBase&); }; -#define SP_EVENT_CONTEXT_DESKTOP(e) (SP_EVENT_CONTEXT(e)->desktop) -#define SP_EVENT_CONTEXT_DOCUMENT(e) ((SP_EVENT_CONTEXT_DESKTOP(e))->doc()) - -#define SP_EVENT_CONTEXT_STATIC 0 - -//ToolBase *sp_event_context_new(GType type, SPDesktop *desktop, gchar const *pref_path, unsigned key); -//void sp_event_context_finish(ToolBase *ec); void sp_event_context_read(ToolBase *ec, gchar const *key); -void sp_event_context_activate(ToolBase *ec); -//void sp_event_context_deactivate(ToolBase *ec); gint sp_event_context_root_handler(ToolBase *ec, GdkEvent *event); gint sp_event_context_virtual_root_handler(ToolBase *ec, GdkEvent *event); @@ -204,8 +198,6 @@ void sp_event_root_menu_popup(SPDesktop *desktop, SPItem *item, GdkEvent *event) gint gobble_key_events(guint keyval, gint mask); gint gobble_motion_events(gint mask); -//void sp_event_context_update_cursor(ToolBase *ec); - void sp_event_show_modifier_tip(Inkscape::MessageContext *message_context, GdkEvent *event, gchar const *ctrl_tip, gchar const *shift_tip, gchar const *alt_tip); @@ -216,15 +208,8 @@ SPItem *sp_event_context_over_item (SPDesktop *desktop, SPItem *item, Geom::Poin void sp_toggle_dropper(SPDesktop *dt); -//ShapeEditor *sp_event_context_get_shape_editor (ToolBase *ec); bool sp_event_context_knot_mouseover(ToolBase *ec); -//void ec_shape_event_attr_changed(Inkscape::XML::Node *shape_repr, -// gchar const *name, gchar const *old_value, gchar const *new_value, -// bool const is_interactive, gpointer const data); -// -//void event_context_print_event_info(GdkEvent *event, bool print_return = true); - } } } |
