Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 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 "ui/aura/event.h" | 5 #include "ui/aura/event.h" |
| 6 | 6 |
| 7 #if defined(USE_X11) | |
| 8 #include <X11/Xlib.h> | |
| 9 #endif | |
| 10 | |
| 7 #include "ui/aura/window.h" | 11 #include "ui/aura/window.h" |
| 12 #include "ui/base/keycodes/keyboard_code_conversion.h" | |
| 8 #include "ui/gfx/point3.h" | 13 #include "ui/gfx/point3.h" |
| 9 #include "ui/gfx/transform.h" | 14 #include "ui/gfx/transform.h" |
| 10 | 15 |
| 16 #if defined(USE_X11) | |
| 17 #include "ui/base/keycodes/keyboard_code_conversion_x.h" | |
| 18 #endif | |
| 19 | |
| 11 namespace aura { | 20 namespace aura { |
| 12 | 21 |
| 13 Event::Event(ui::EventType type, int flags) | 22 Event::Event(ui::EventType type, int flags) |
| 14 : type_(type), | 23 : type_(type), |
| 15 time_stamp_(base::Time::NowFromSystemTime()), | 24 time_stamp_(base::Time::NowFromSystemTime()), |
| 16 flags_(flags) { | 25 flags_(flags) { |
| 17 Init(); | 26 Init(); |
| 18 } | 27 } |
| 19 | 28 |
| 20 Event::Event(const base::NativeEvent& native_event, | 29 Event::Event(const base::NativeEvent& native_event, |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 123 radius_y_(1.0f), | 132 radius_y_(1.0f), |
| 124 rotation_angle_(0.0f), | 133 rotation_angle_(0.0f), |
| 125 force_(0.0f) { | 134 force_(0.0f) { |
| 126 } | 135 } |
| 127 | 136 |
| 128 KeyEvent::KeyEvent(const base::NativeEvent& native_event, bool is_char) | 137 KeyEvent::KeyEvent(const base::NativeEvent& native_event, bool is_char) |
| 129 : Event(native_event, | 138 : Event(native_event, |
| 130 ui::EventTypeFromNative(native_event), | 139 ui::EventTypeFromNative(native_event), |
| 131 ui::EventFlagsFromNative(native_event)), | 140 ui::EventFlagsFromNative(native_event)), |
| 132 key_code_(ui::KeyboardCodeFromNative(native_event)), | 141 key_code_(ui::KeyboardCodeFromNative(native_event)), |
| 133 is_char_(is_char) { | 142 is_char_(is_char), |
| 143 character_(0), | |
| 144 unmodified_character_(0) { | |
| 134 } | 145 } |
| 135 | 146 |
| 136 KeyEvent::KeyEvent(ui::EventType type, | 147 KeyEvent::KeyEvent(ui::EventType type, |
| 137 ui::KeyboardCode key_code, | 148 ui::KeyboardCode key_code, |
| 138 int flags) | 149 int flags) |
| 139 : Event(type, flags), | 150 : Event(type, flags), |
| 140 key_code_(key_code), | 151 key_code_(key_code), |
| 141 is_char_(false) { | 152 is_char_(false), |
| 153 character_(ui::GetCharacterFromKeyCode(key_code, flags)), | |
| 154 unmodified_character_(0) { | |
| 155 } | |
| 156 | |
| 157 uint16 KeyEvent::GetCharacter() const { | |
| 158 if (character_) | |
| 159 return character_; | |
| 160 | |
| 161 #if defined(OS_WIN) | |
| 162 return (native_event().message == WM_CHAR) ? key_code_ : | |
| 163 ui::GetCharacterFromKeyCode(key_code_, flags()); | |
| 164 #elif defined(USE_X11) | |
| 165 if (!native_event()) { | |
|
James Su
2011/11/15 11:51:10
nit: no { } for single line if statement.
Yusuke Sato
2011/11/15 12:20:59
Done.
| |
| 166 return ui::GetCharacterFromKeyCode(key_code_, flags()); | |
| 167 } | |
| 168 | |
| 169 DCHECK(native_event()->type == KeyPress || | |
| 170 native_event()->type == KeyRelease); | |
| 171 | |
| 172 uint16 ch = ui::DefaultSymbolFromXEvent(native_event()); | |
| 173 return ch ? ch : ui::GetCharacterFromKeyCode(key_code_, flags()); | |
| 174 #else | |
| 175 NOTIMPLEMENTED(); | |
| 176 return 0; | |
| 177 #endif | |
| 178 } | |
| 179 | |
| 180 uint16 KeyEvent::GetUnmodifiedCharacter() const { | |
| 181 if (unmodified_character_) | |
| 182 return unmodified_character_; | |
| 183 | |
| 184 #if defined(OS_WIN) | |
| 185 // Looks like there is no way to get unmodified character on Windows. | |
| 186 return (native_event().message == WM_CHAR) ? key_code_ : | |
| 187 ui::GetCharacterFromKeyCode(key_code_, flags() & ui::EF_SHIFT_DOWN); | |
| 188 #elif defined(USE_X11) | |
| 189 if (!native_event()) { | |
| 190 return ui::GetCharacterFromKeyCode(key_code_, flags() & ui::EF_SHIFT_DOWN); | |
|
James Su
2011/11/15 11:51:10
ditto.
Yusuke Sato
2011/11/15 12:20:59
Done.
| |
| 191 } | |
| 192 | |
| 193 DCHECK(native_event()->type == KeyPress || | |
| 194 native_event()->type == KeyRelease); | |
| 195 | |
| 196 XKeyEvent *key = &native_event()->xkey; | |
| 197 | |
| 198 static const unsigned int kIgnoredModifiers = ControlMask | LockMask | | |
| 199 Mod1Mask | Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask; | |
| 200 | |
| 201 // We can't use things like (key.state & ShiftMask), as it may mask out bits | |
| 202 // used by X11 internally. | |
| 203 key->state &= ~kIgnoredModifiers; | |
| 204 uint16 ch = ui::DefaultSymbolFromXEvent(native_event()); | |
| 205 return ch ? ch : | |
| 206 ui::GetCharacterFromKeyCode(key_code_, flags() & ui::EF_SHIFT_DOWN); | |
| 207 #else | |
| 208 NOTIMPLEMENTED(); | |
| 209 return 0; | |
| 210 #endif | |
| 142 } | 211 } |
| 143 | 212 |
| 144 } // namespace aura | 213 } // namespace aura |
| OLD | NEW |