diff options
Diffstat (limited to 'src/ui/tool/selector.cpp')
| -rw-r--r-- | src/ui/tool/selector.cpp | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/src/ui/tool/selector.cpp b/src/ui/tool/selector.cpp index 364776ce4..bdeacadc9 100644 --- a/src/ui/tool/selector.cpp +++ b/src/ui/tool/selector.cpp @@ -3,6 +3,7 @@ */ /* Authors: * Krzysztof KosiĆski <tweenk.pl@gmail.com> + * Jon A. Cruz <jon@joncruz.org> * * Copyright (C) 2009 Authors * Released under GNU GPL, read the file 'COPYING' for more information @@ -12,17 +13,13 @@ #include "desktop.h" #include "desktop-handles.h" #include "display/sodipodi-ctrlrect.h" -#include "event-context.h" +#include "ui/tools/tool-base.h" #include "preferences.h" #include "ui/tool/event-utils.h" #include "ui/tool/selector.h" #include <gdk/gdkkeysyms.h> -#if !GTK_CHECK_VERSION(2,22,0) -#include "compat-key-syms.h" -#endif - namespace Inkscape { namespace UI { @@ -32,27 +29,31 @@ namespace UI { * is pressed, it grabs events and handles drags and clicks in the usual way. */ class SelectorPoint : public ControlPoint { public: - SelectorPoint(SPDesktop *d, SPCanvasGroup *group, Selector *s) - : ControlPoint(d, Geom::Point(0,0), SP_ANCHOR_CENTER, SP_CTRL_SHAPE_SQUARE, - 1, &invisible_cset, group) - , _selector(s) - , _cancel(false) + SelectorPoint(SPDesktop *d, SPCanvasGroup *group, Selector *s) : + ControlPoint(d, Geom::Point(0,0), SP_ANCHOR_CENTER, + CTRL_TYPE_INVISIPOINT, + invisible_cset, group), + _selector(s), + _cancel(false) { setVisible(false); _rubber = static_cast<CtrlRect*>(sp_canvas_item_new(sp_desktop_controls(_desktop), SP_TYPE_CTRLRECT, NULL)); sp_canvas_item_hide(_rubber); } + ~SelectorPoint() { - gtk_object_destroy(_rubber); + sp_canvas_item_destroy(_rubber); } + SPDesktop *desktop() { return _desktop; } - bool event(SPEventContext *ec, GdkEvent *e) { + + bool event(Inkscape::UI::Tools::ToolBase *ec, GdkEvent *e) { return _eventHandler(ec, e); } protected: - virtual bool _eventHandler(SPEventContext *event_context, GdkEvent *event) { + virtual bool _eventHandler(Inkscape::UI::Tools::ToolBase *event_context, GdkEvent *event) { if (event->type == GDK_KEY_PRESS && shortcut_key(event->key) == GDK_KEY_Escape && sp_canvas_item_is_visible(_rubber)) { @@ -70,22 +71,26 @@ private: sp_canvas_item_show(_rubber); return false; } + virtual void dragged(Geom::Point &new_pos, GdkEventMotion *) { if (_cancel) return; Geom::Rect sel(_start, new_pos); _rubber->setRectangle(sel); } + virtual void ungrabbed(GdkEventButton *event) { if (_cancel) return; sp_canvas_item_hide(_rubber); Geom::Rect sel(_start, position()); _selector->signal_area.emit(sel, event); } + virtual bool clicked(GdkEventButton *event) { if (event->button != 1) return false; _selector->signal_point.emit(position(), event); return true; } + CtrlRect *_rubber; Selector *_selector; Geom::Point _start; @@ -105,7 +110,7 @@ Selector::~Selector() delete _dragger; } -bool Selector::event(SPEventContext *event_context, GdkEvent *event) +bool Selector::event(Inkscape::UI::Tools::ToolBase *event_context, GdkEvent *event) { // The hidden control point will capture all events after it obtains the grab, // but it relies on this function to initiate it. If we pass only first button @@ -113,7 +118,7 @@ bool Selector::event(SPEventContext *event_context, GdkEvent *event) switch (event->type) { case GDK_BUTTON_PRESS: // Do not pass button presses other than left button to the control point. - // This way middle click and right click can be handled in SPEventContext. + // This way middle click and right click can be handled in ToolBase. if (event->button.button == 1 && !event_context->space_panning) { _dragger->setPosition(_desktop->w2d(event_point(event->motion))); return _dragger->event(event_context, event); |
