| Index: views/events/event_gtk.cc
|
| diff --git a/views/events/event_gtk.cc b/views/events/event_gtk.cc
|
| index 13c8a8d67c2f0b1669102d3402756159a0109422..1cb914757baa28e419fa7949bb669f2097ecde6a 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.
|
| +
|
| +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;
|
| +}
|
|
|
| -// static
|
| -int Event::GetFlagsFromGdkEvent(NativeEvent native_event) {
|
| - int flags = GetFlagsFromGdkState(GetGdkStateFromNative(native_event));
|
| - if (native_event->type == GDK_2BUTTON_PRESS)
|
| +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,85 @@ 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
|
|
|