OLD | NEW |
---|---|
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "views/events/event.h" | 5 #include "views/events/event.h" |
6 | 6 |
7 #include <gdk/gdk.h> | 7 #include <gdk/gdk.h> |
8 | 8 |
9 #include "base/logging.h" | |
9 #include "ui/base/keycodes/keyboard_code_conversion_gtk.h" | 10 #include "ui/base/keycodes/keyboard_code_conversion_gtk.h" |
10 | 11 |
11 namespace views { | 12 namespace views { |
12 | 13 |
13 KeyEvent::KeyEvent(const GdkEventKey* event) | 14 namespace { |
14 : Event(event->type == GDK_KEY_PRESS ? | 15 |
15 ui::ET_KEY_PRESSED : ui::ET_KEY_RELEASED, | 16 ui::EventType EventTypeFromNative(NativeEvent native_event) { |
16 GetFlagsFromGdkState(event->state)), | 17 switch (native_event->type) { |
17 // TODO(erg): All these values are iffy. | 18 case GDK_KEY_PRESS: |
18 key_code_(ui::WindowsKeyCodeForGdkKeyCode(event->keyval)), | 19 return ui::ET_KEY_PRESSED; |
19 repeat_count_(0), | 20 case GDK_KEY_RELEASE: |
20 message_flags_(0) | 21 return ui::ET_KEY_RELEASED; |
21 #if !defined(TOUCH_UI) | 22 default: |
22 , native_event_(event) | 23 NOTREACHED(); |
23 #endif | 24 break; |
24 { | 25 } |
26 return ui::ET_UNKNOWN; | |
25 } | 27 } |
26 | 28 |
29 GdkEventKey* GetGdkEventKeyFromNative(NativeEvent native_event) { | |
30 DCHECK(native_event->type == GDK_KEY_PRESS || | |
31 native_event->type == GDK_KEY_RELEASE); | |
32 return &native_event->key; | |
33 } | |
34 | |
35 } // namespace | |
36 | |
37 //////////////////////////////////////////////////////////////////////////////// | |
38 // Event, public: | |
39 | |
27 // static | 40 // static |
28 int Event::GetFlagsFromGdkState(int state) { | 41 int Event::GetFlagsFromGdkState(int state) { |
29 int flags = 0; | 42 int flags = 0; |
30 if (state & GDK_LOCK_MASK) | 43 if (state & GDK_LOCK_MASK) |
31 flags |= ui::EF_CAPS_LOCK_DOWN; | 44 flags |= ui::EF_CAPS_LOCK_DOWN; |
32 if (state & GDK_CONTROL_MASK) | 45 if (state & GDK_CONTROL_MASK) |
33 flags |= ui::EF_CONTROL_DOWN; | 46 flags |= ui::EF_CONTROL_DOWN; |
34 if (state & GDK_SHIFT_MASK) | 47 if (state & GDK_SHIFT_MASK) |
35 flags |= ui::EF_SHIFT_DOWN; | 48 flags |= ui::EF_SHIFT_DOWN; |
36 if (state & GDK_MOD1_MASK) | 49 if (state & GDK_MOD1_MASK) |
37 flags |= ui::EF_ALT_DOWN; | 50 flags |= ui::EF_ALT_DOWN; |
38 if (state & GDK_BUTTON1_MASK) | 51 if (state & GDK_BUTTON1_MASK) |
39 flags |= ui::EF_LEFT_BUTTON_DOWN; | 52 flags |= ui::EF_LEFT_BUTTON_DOWN; |
40 if (state & GDK_BUTTON2_MASK) | 53 if (state & GDK_BUTTON2_MASK) |
41 flags |= ui::EF_MIDDLE_BUTTON_DOWN; | 54 flags |= ui::EF_MIDDLE_BUTTON_DOWN; |
42 if (state & GDK_BUTTON3_MASK) | 55 if (state & GDK_BUTTON3_MASK) |
43 flags |= ui::EF_RIGHT_BUTTON_DOWN; | 56 flags |= ui::EF_RIGHT_BUTTON_DOWN; |
44 return flags; | 57 return flags; |
45 } | 58 } |
46 | 59 |
60 //////////////////////////////////////////////////////////////////////////////// | |
61 // Event, private: | |
62 | |
63 void Event::Init() { | |
sadrul
2011/02/11 16:12:47
Event::Init and Event::InitWithNativeEvent are als
| |
64 native_event_ = NULL; | |
65 native_event_2_ = NULL; | |
66 } | |
67 | |
68 void Event::InitWithNativeEvent(NativeEvent native_event) { | |
69 native_event_ = native_event; | |
70 // TODO(beng): remove once we rid views of Gtk/Gdk. | |
71 native_event_2_ = NULL; | |
72 } | |
73 | |
74 #if !defined(TOUCH_UI) | |
75 void Event::InitWithNativeEvent2(NativeEvent2 native_event_2, | |
76 FromNativeEvent2) { | |
77 // No one should ever call this on non-Touch Linux. | |
78 // TODO(beng): remove once we rid views of Gtk/Gdk. | |
79 NOTREACHED(); | |
80 native_event_2_ = NULL; | |
81 } | |
82 #endif | |
83 | |
84 //////////////////////////////////////////////////////////////////////////////// | |
85 // KeyEvent, public: | |
86 | |
87 KeyEvent::KeyEvent(NativeEvent native_event) | |
88 : Event(native_event, EventTypeFromNative(native_event), | |
89 GetFlagsFromGdkState( | |
90 GetGdkEventKeyFromNative(native_event)->state)), | |
91 key_code_(ui::WindowsKeyCodeForGdkKeyCode( | |
92 GetGdkEventKeyFromNative(native_event)->keyval)) { | |
93 } | |
94 | |
95 #if !defined(TOUCH_UI) | |
96 KeyEvent::KeyEvent(NativeEvent2 native_event_2, FromNativeEvent2 from_native) | |
97 : Event(native_event_2, ui::ET_UNKNOWN, 0, from_native) { | |
98 // No one should ever call this on Gtk-views. | |
99 // TODO(beng): remove once we rid views of Gtk/Gdk. | |
100 NOTREACHED(); | |
101 } | |
102 #endif | |
103 | |
47 } // namespace views | 104 } // namespace views |
OLD | NEW |