diff options
author | msw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-26 22:04:44 +0000 |
---|---|---|
committer | msw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-26 22:04:44 +0000 |
commit | a3e2de75e309b527cd694b16d23100bbec1710d9 (patch) | |
tree | 30f49027fbf74758595ee30b0b301206a4c2becf /views/events/event_gtk.cc | |
parent | e30e4d816f7e32f2be39f32159e020d3b037de04 (diff) | |
download | chromium_src-a3e2de75e309b527cd694b16d23100bbec1710d9.zip chromium_src-a3e2de75e309b527cd694b16d23100bbec1710d9.tar.gz chromium_src-a3e2de75e309b527cd694b16d23100bbec1710d9.tar.bz2 |
Consolidate/cleanup event cracking code; single out GdkEvents; saves ~850 lines.
Move ui::NativeEvent typdefs and common functions to ui/base/events.h.
Remove NativeEvent2 typedef, single out GdkEvent* uses that should be removed.
Implement platform specific ui/base/[platform]/events_[platform].cc.
Revise views::NativeEvent definitions (to support Aura abstraction).
Consolidate Event[Type/Flags/Location]FromNative(), GetMouseWheelOffset(), etc.
Remove GetRepeatCount(), GetWindowsFlags(), IsExtendedKey(), etc.
Add IsMouseEvent(), KeyboardCodeFromNative(), EF_EXTENDED flag, etc.
Localize GetFlagsFromGdkEvent(), move some file locals to new helpers files.
Move views/touchui/touch_factory.h|cc to ui/base/touch.
Stop mixing Windows mouse events' MK_*BUTTON into their wParams.
BUG=93945
TEST=No build breaks (many configs...), no mouse/key behavior changes.
Review URL: http://codereview.chromium.org/7942004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@102815 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/events/event_gtk.cc')
-rw-r--r-- | views/events/event_gtk.cc | 214 |
1 files changed, 110 insertions, 104 deletions
diff --git a/views/events/event_gtk.cc b/views/events/event_gtk.cc index 13c8a8d..9221d69 100644 --- a/views/events/event_gtk.cc +++ b/views/events/event_gtk.cc @@ -8,85 +8,27 @@ #include "base/logging.h" #include "ui/base/keycodes/keyboard_code_conversion_gtk.h" - -namespace views { +#include "ui/gfx/point.h" namespace { -ui::EventType EventTypeFromNative(NativeEvent native_event) { - // Add new event types as necessary. - switch (native_event->type) { - case GDK_2BUTTON_PRESS: - case GDK_3BUTTON_PRESS: - case GDK_BUTTON_PRESS: - return ui::ET_MOUSE_PRESSED; - case GDK_BUTTON_RELEASE: - return ui::ET_MOUSE_RELEASED; - case GDK_DRAG_MOTION: - return ui::ET_MOUSE_DRAGGED; - case GDK_ENTER_NOTIFY: - return ui::ET_MOUSE_ENTERED; +unsigned int GetGdkStateFromNative(GdkEvent* gdk_event) { + switch (gdk_event->type) { case GDK_KEY_PRESS: - return ui::ET_KEY_PRESSED; case GDK_KEY_RELEASE: - return ui::ET_KEY_RELEASED; - case GDK_LEAVE_NOTIFY: - return ui::ET_MOUSE_EXITED; - case GDK_MOTION_NOTIFY: - if (native_event->motion.state & GDK_BUTTON1_MASK || - native_event->motion.state & GDK_BUTTON2_MASK || - native_event->motion.state & GDK_BUTTON3_MASK || - native_event->motion.state & GDK_BUTTON4_MASK || - native_event->motion.state & GDK_BUTTON5_MASK) { - return ui::ET_MOUSE_DRAGGED; - } - return ui::ET_MOUSE_MOVED; - case GDK_SCROLL: - return ui::ET_MOUSEWHEEL; - default: - NOTREACHED(); - break; - } - return ui::ET_UNKNOWN; -} - -GdkEventKey* GetGdkEventKeyFromNative(NativeEvent native_event) { - DCHECK(native_event->type == GDK_KEY_PRESS || - native_event->type == GDK_KEY_RELEASE); - return &native_event->key; -} - -gfx::Point GetMouseEventLocation(NativeEvent native_event) { - double x = 0, y = 0; - if (gdk_event_get_coords(native_event, &x, &y)) - return gfx::Point(static_cast<int>(x), static_cast<int>(y)); - return gfx::Point(); -} - -int GetMouseWheelOffset(NativeEvent native_event) { - DCHECK(native_event->type == GDK_SCROLL); - int offset = (native_event->scroll.direction == GDK_SCROLL_UP || - native_event->scroll.direction == GDK_SCROLL_LEFT) ? 1 : -1; - return MouseWheelEvent::kWheelDelta * offset; -} - -unsigned int GetGdkStateFromNative(NativeEvent native_event) { - switch (native_event->type) { - case GDK_KEY_PRESS: - case GDK_KEY_RELEASE: - return native_event->key.state; + return gdk_event->key.state; case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: case GDK_BUTTON_RELEASE: - return native_event->button.state; + return gdk_event->button.state; case GDK_SCROLL: - return native_event->scroll.state; + return gdk_event->scroll.state; case GDK_MOTION_NOTIFY: - return native_event->motion.state; + return gdk_event->motion.state; case GDK_ENTER_NOTIFY: case GDK_LEAVE_NOTIFY: - return native_event->crossing.state; + return gdk_event->crossing.state; default: NOTREACHED(); break; @@ -106,21 +48,55 @@ int GetFlagsFromGdkState(unsigned int state) { return flags; } -} // namespace - //////////////////////////////////////////////////////////////////////////////// -// Event, public: +// These functions mirror ui/base/events.h, but GTK is in the midst of removal. -// static -int Event::GetFlagsFromGdkEvent(NativeEvent native_event) { - int flags = GetFlagsFromGdkState(GetGdkStateFromNative(native_event)); - if (native_event->type == GDK_2BUTTON_PRESS) +ui::EventType EventTypeFromNative(GdkEvent* gdk_event) { + // Add new event types as necessary. + switch (gdk_event->type) { + case GDK_2BUTTON_PRESS: + case GDK_3BUTTON_PRESS: + case GDK_BUTTON_PRESS: + return ui::ET_MOUSE_PRESSED; + case GDK_BUTTON_RELEASE: + return ui::ET_MOUSE_RELEASED; + case GDK_DRAG_MOTION: + return ui::ET_MOUSE_DRAGGED; + case GDK_ENTER_NOTIFY: + return ui::ET_MOUSE_ENTERED; + case GDK_KEY_PRESS: + return ui::ET_KEY_PRESSED; + case GDK_KEY_RELEASE: + return ui::ET_KEY_RELEASED; + case GDK_LEAVE_NOTIFY: + return ui::ET_MOUSE_EXITED; + case GDK_MOTION_NOTIFY: + if (gdk_event->motion.state & GDK_BUTTON1_MASK || + gdk_event->motion.state & GDK_BUTTON2_MASK || + gdk_event->motion.state & GDK_BUTTON3_MASK || + gdk_event->motion.state & GDK_BUTTON4_MASK || + gdk_event->motion.state & GDK_BUTTON5_MASK) { + return ui::ET_MOUSE_DRAGGED; + } + return ui::ET_MOUSE_MOVED; + case GDK_SCROLL: + return ui::ET_MOUSEWHEEL; + default: + NOTREACHED(); + break; + } + return ui::ET_UNKNOWN; +} + +int EventFlagsFromNative(GdkEvent* gdk_event) { + int flags = GetFlagsFromGdkState(GetGdkStateFromNative(gdk_event)); + if (gdk_event->type == GDK_2BUTTON_PRESS) flags |= ui::EF_IS_DOUBLE_CLICK; - if (native_event->type == GDK_BUTTON_PRESS || - native_event->type == GDK_2BUTTON_PRESS || - native_event->type == GDK_3BUTTON_PRESS || - native_event->type == GDK_BUTTON_RELEASE) { - switch (native_event->button.button) { + if (gdk_event->type == GDK_BUTTON_PRESS || + gdk_event->type == GDK_2BUTTON_PRESS || + gdk_event->type == GDK_3BUTTON_PRESS || + gdk_event->type == GDK_BUTTON_RELEASE) { + switch (gdk_event->button.button) { case 1: return flags | ui::EF_LEFT_BUTTON_DOWN; case 2: @@ -132,54 +108,84 @@ int Event::GetFlagsFromGdkEvent(NativeEvent native_event) { return flags; } -//////////////////////////////////////////////////////////////////////////////// -// Event, private: +gfx::Point EventLocationFromNative(GdkEvent* gdk_event) { + double x = 0, y = 0; + if (gdk_event_get_coords(gdk_event, &x, &y)) + return gfx::Point(static_cast<int>(x), static_cast<int>(y)); + return gfx::Point(); +} -void Event::Init() { - native_event_ = NULL; - native_event_2_ = NULL; +ui::KeyboardCode KeyboardCodeFromNative(GdkEvent* gdk_event) { + DCHECK(gdk_event->type == GDK_KEY_PRESS || + gdk_event->type == GDK_KEY_RELEASE); + return ui::KeyboardCodeFromGdkEventKey(&gdk_event->key); } -void Event::InitWithNativeEvent(NativeEvent native_event) { - native_event_ = native_event; - // TODO(beng): remove once we rid views of Gtk/Gdk. - native_event_2_ = NULL; +bool IsMouseEvent(GdkEvent* gdk_event) { + return gdk_event->type == GDK_MOTION_NOTIFY || + gdk_event->type == GDK_BUTTON_PRESS || + gdk_event->type == GDK_2BUTTON_PRESS || + gdk_event->type == GDK_3BUTTON_PRESS || + gdk_event->type == GDK_BUTTON_RELEASE; } -//////////////////////////////////////////////////////////////////////////////// -// LocatedEvent, protected: +int GetMouseWheelOffset(GdkEvent* gdk_event) { + DCHECK(gdk_event->type == GDK_SCROLL); + int offset = (gdk_event->scroll.direction == GDK_SCROLL_UP || + gdk_event->scroll.direction == GDK_SCROLL_LEFT) ? 1 : -1; + return offset; +} -LocatedEvent::LocatedEvent(NativeEvent native_event) - : Event(native_event, EventTypeFromNative(native_event), - GetFlagsFromGdkEvent(native_event)), - location_(GetMouseEventLocation(native_event)) { +} // namespace + +namespace views { + +//////////////////////////////////////////////////////////////////////////////// +// Event, protected: + +Event::Event(GdkEvent* gdk_event, ui::EventType type, int flags) + : native_event_(NULL), + gdk_event_(gdk_event), + type_(type), + time_stamp_(base::Time::NowFromSystemTime()), + flags_(flags) { } //////////////////////////////////////////////////////////////////////////////// -// MouseEvent, public: +// LocatedEvent, protected: -MouseEvent::MouseEvent(NativeEvent native_event) - : LocatedEvent(native_event) { +LocatedEvent::LocatedEvent(GdkEvent* gdk_event) + : Event(gdk_event, + EventTypeFromNative(gdk_event), + EventFlagsFromNative(gdk_event)), + location_(EventLocationFromNative(gdk_event)) { } //////////////////////////////////////////////////////////////////////////////// // KeyEvent, public: -KeyEvent::KeyEvent(NativeEvent native_event) - : Event(native_event, EventTypeFromNative(native_event), - GetFlagsFromGdkEvent(native_event)), - key_code_(ui::KeyboardCodeFromGdkEventKey( - GetGdkEventKeyFromNative(native_event))), +KeyEvent::KeyEvent(GdkEvent* gdk_event) + : Event(gdk_event, + EventTypeFromNative(gdk_event), + EventFlagsFromNative(gdk_event)), + key_code_(KeyboardCodeFromNative(gdk_event)), character_(0), unmodified_character_(0) { } //////////////////////////////////////////////////////////////////////////////// +// MouseEvent, public: + +MouseEvent::MouseEvent(GdkEvent* gdk_event) + : LocatedEvent(gdk_event) { +} + +//////////////////////////////////////////////////////////////////////////////// // MouseWheelEvent, public: -MouseWheelEvent::MouseWheelEvent(NativeEvent native_event) - : MouseEvent(native_event), - offset_(GetMouseWheelOffset(native_event)) { +MouseWheelEvent::MouseWheelEvent(GdkEvent* gdk_event) + : MouseEvent(gdk_event), + offset_(kWheelDelta * GetMouseWheelOffset(gdk_event)) { } } // namespace views |