Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(250)

Side by Side Diff: ui/events/event.cc

Issue 742103002: Ozone keyboard layout (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lite-code
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | ui/events/events.gyp » ('j') | ui/events/events.gyp » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/events/event.h" 5 #include "ui/events/event.h"
6 6
7 #if defined(USE_X11) 7 #if defined(USE_X11)
8 #include <X11/extensions/XInput2.h> 8 #include <X11/extensions/XInput2.h>
9 #include <X11/Xlib.h> 9 #include <X11/Xlib.h>
10 #include <X11/keysym.h> 10 #include <X11/keysym.h>
11 #endif 11 #endif
12 12
13 #include <cmath> 13 #include <cmath>
14 #include <cstring> 14 #include <cstring>
15 15
16 #include "base/metrics/histogram.h" 16 #include "base/metrics/histogram.h"
17 #include "base/strings/stringprintf.h" 17 #include "base/strings/stringprintf.h"
18 #include "ui/events/event_utils.h" 18 #include "ui/events/event_utils.h"
19 #include "ui/events/keycodes/dom3/dom_code.h" 19 #include "ui/events/keycodes/dom3/dom_code.h"
20 #include "ui/events/keycodes/dom3/dom_key.h"
20 #include "ui/events/keycodes/dom4/keycode_converter.h" 21 #include "ui/events/keycodes/dom4/keycode_converter.h"
21 #include "ui/events/keycodes/keyboard_code_conversion.h" 22 #include "ui/events/keycodes/keyboard_code_conversion.h"
22 #include "ui/gfx/geometry/safe_integer_conversions.h" 23 #include "ui/gfx/geometry/safe_integer_conversions.h"
23 #include "ui/gfx/point3_f.h" 24 #include "ui/gfx/point3_f.h"
24 #include "ui/gfx/point_conversions.h" 25 #include "ui/gfx/point_conversions.h"
25 #include "ui/gfx/transform.h" 26 #include "ui/gfx/transform.h"
26 #include "ui/gfx/transform_util.h" 27 #include "ui/gfx/transform_util.h"
27 28
28 #if defined(USE_X11) 29 #if defined(USE_X11)
29 #include "ui/events/keycodes/keyboard_code_conversion_x.h" 30 #include "ui/events/keycodes/keyboard_code_conversion_x.h"
30 #elif defined(USE_OZONE) 31 #elif defined(USE_OZONE)
31 #include "ui/events/keycodes/keyboard_code_conversion.h" 32 #include "ui/events/keycodes/keyboard_code_conversion.h"
33 #include "ui/ozone/public/keyboard_layouts.h"
34 #include "ui/ozone/public/ozone_platform.h"
kpschoedel 2014/11/20 16:18:38 Will need +ui/ozone dependency.
sadrul 2014/11/21 21:25:25 //ui/ozone has deps on //ui/events/, so we can't c
kpschoedel 2014/11/21 21:43:33 Argh. OK, this needs a rethink. Layout is fortunat
spang 2014/11/21 21:58:52 Can we really say it is orthogonal? I think we sh
32 #endif 35 #endif
33
34 namespace { 36 namespace {
35 37
36 std::string EventTypeName(ui::EventType type) { 38 std::string EventTypeName(ui::EventType type) {
37 #define RETURN_IF_TYPE(t) if (type == ui::t) return #t 39 #define RETURN_IF_TYPE(t) if (type == ui::t) return #t
38 #define CASE_TYPE(t) case ui::t: return #t 40 #define CASE_TYPE(t) case ui::t: return #t
39 switch (type) { 41 switch (type) {
40 CASE_TYPE(ET_UNKNOWN); 42 CASE_TYPE(ET_UNKNOWN);
41 CASE_TYPE(ET_MOUSE_PRESSED); 43 CASE_TYPE(ET_MOUSE_PRESSED);
42 CASE_TYPE(ET_MOUSE_DRAGGED); 44 CASE_TYPE(ET_MOUSE_DRAGGED);
43 CASE_TYPE(ET_MOUSE_RELEASED); 45 CASE_TYPE(ET_MOUSE_RELEASED);
(...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after
658 KeyEvent::KeyEvent(EventType type, 660 KeyEvent::KeyEvent(EventType type,
659 KeyboardCode key_code, 661 KeyboardCode key_code,
660 DomCode code, 662 DomCode code,
661 int flags) 663 int flags)
662 : Event(type, EventTimeForNow(), flags), 664 : Event(type, EventTimeForNow(), flags),
663 key_code_(key_code), 665 key_code_(key_code),
664 code_(code), 666 code_(code),
665 is_char_(false), 667 is_char_(false),
666 platform_keycode_(0), 668 platform_keycode_(0),
667 character_(0) { 669 character_(0) {
670 #if defined(USE_OZONE)
671 // TODO(kpschoedel): Change after keyboard_code_conversion_ozone.
672 if (key_code_ == VKEY_UNKNOWN) {
673 DomKey todo_dom_key = DomKey::NONE;
674 OzonePlatform::GetInstance()->GetKeyboardLayouts()->Lookup(code_,
675 this->flags(),
676 &todo_dom_key,
677 &character_,
678 &key_code_);
679 }
680 #endif
kpschoedel 2014/11/20 16:18:38 Should the Ozone event source instead be responsib
sadrul 2014/11/21 21:25:25 I think so, yeah.
kpschoedel 2014/11/21 21:43:33 In that case, I think we'll want the extended cons
668 } 681 }
669 682
670 KeyEvent::KeyEvent(base::char16 character, KeyboardCode key_code, int flags) 683 KeyEvent::KeyEvent(base::char16 character, KeyboardCode key_code, int flags)
671 : Event(ET_KEY_PRESSED, EventTimeForNow(), flags), 684 : Event(ET_KEY_PRESSED, EventTimeForNow(), flags),
672 key_code_(key_code), 685 key_code_(key_code),
673 code_(DomCode::NONE), 686 code_(DomCode::NONE),
674 is_char_(true), 687 is_char_(true),
675 platform_keycode_(0), 688 platform_keycode_(0),
676 character_(character) { 689 character_(character) {
677 } 690 }
(...skipping 28 matching lines...) Expand all
706 719
707 void KeyEvent::SetExtendedKeyEventData(scoped_ptr<ExtendedKeyEventData> data) { 720 void KeyEvent::SetExtendedKeyEventData(scoped_ptr<ExtendedKeyEventData> data) {
708 extended_key_event_data_ = data.Pass(); 721 extended_key_event_data_ = data.Pass();
709 } 722 }
710 723
711 base::char16 KeyEvent::GetCharacter() const { 724 base::char16 KeyEvent::GetCharacter() const {
712 if (is_char_ || character_) 725 if (is_char_ || character_)
713 return character_; 726 return character_;
714 727
715 // TODO(kpschoedel): streamline these cases after settling Ozone 728 // TODO(kpschoedel): streamline these cases after settling Ozone
716 // positional coding. 729 // positional coding.
kpschoedel 2014/11/20 16:18:38 I have a refactoring of GetCharacter() in the upco
717 #if defined(OS_WIN) 730 #if defined(OS_WIN)
718 // Native Windows character events always have is_char_ == true, 731 // Native Windows character events always have is_char_ == true,
719 // so this is a synthetic or native keystroke event. 732 // so this is a synthetic or native keystroke event.
720 character_ = GetCharacterFromKeyCode(key_code_, flags()); 733 character_ = GetCharacterFromKeyCode(key_code_, flags());
721 return character_; 734 return character_;
722 #elif defined(USE_X11) 735 #elif defined(USE_X11)
723 if (!native_event()) { 736 if (!native_event()) {
724 character_ = GetCharacterFromKeyCode(key_code_, flags()); 737 character_ = GetCharacterFromKeyCode(key_code_, flags());
725 return character_; 738 return character_;
726 } 739 }
727 740
728 DCHECK(native_event()->type == KeyPress || 741 DCHECK(native_event()->type == KeyPress ||
729 native_event()->type == KeyRelease || 742 native_event()->type == KeyRelease ||
730 (native_event()->type == GenericEvent && 743 (native_event()->type == GenericEvent &&
731 (native_event()->xgeneric.evtype == XI_KeyPress || 744 (native_event()->xgeneric.evtype == XI_KeyPress ||
732 native_event()->xgeneric.evtype == XI_KeyRelease))); 745 native_event()->xgeneric.evtype == XI_KeyRelease)));
733 746
734 // When a control key is held, prefer ASCII characters to non ASCII 747 // When a control key is held, prefer ASCII characters to non ASCII
735 // characters in order to use it for shortcut keys. GetCharacterFromKeyCode 748 // characters in order to use it for shortcut keys. GetCharacterFromKeyCode
736 // returns 'a' for VKEY_A even if the key is actually bound to 'à' in X11. 749 // returns 'a' for VKEY_A even if the key is actually bound to 'à' in X11.
737 // GetCharacterFromXEvent returns 'à' in that case. 750 // GetCharacterFromXEvent returns 'à' in that case.
738 return IsControlDown() ? 751 return IsControlDown() ?
739 GetCharacterFromKeyCode(key_code_, flags()) : 752 GetCharacterFromKeyCode(key_code_, flags()) :
740 GetCharacterFromXEvent(native_event()); 753 GetCharacterFromXEvent(native_event());
754 #elif defined(USE_OZONE)
755 DomKey todo_dom_key = DomKey::NONE;
756 KeyboardCode dummy_key_code = VKEY_UNKNOWN;
757 if (OzonePlatform::GetInstance()->GetKeyboardLayouts()->Lookup(
758 code_,
759 flags(),
760 &todo_dom_key,
761 &character_,
762 &dummy_key_code)) {
763 return character_;
764 }
765 return GetCharacterFromKeyCode(key_code_, flags());
741 #else 766 #else
742 if (native_event()) { 767 if (native_event()) {
743 DCHECK(EventTypeFromNative(native_event()) == ET_KEY_PRESSED || 768 DCHECK(EventTypeFromNative(native_event()) == ET_KEY_PRESSED ||
744 EventTypeFromNative(native_event()) == ET_KEY_RELEASED); 769 EventTypeFromNative(native_event()) == ET_KEY_RELEASED);
745 } 770 }
746 771
747 return GetCharacterFromKeyCode(key_code_, flags()); 772 return GetCharacterFromKeyCode(key_code_, flags());
748 #endif 773 #endif
749 } 774 }
750 775
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
983 gfx::PointF(x, y), 1008 gfx::PointF(x, y),
984 time_stamp, 1009 time_stamp,
985 flags | EF_FROM_TOUCH), 1010 flags | EF_FROM_TOUCH),
986 details_(details) { 1011 details_(details) {
987 } 1012 }
988 1013
989 GestureEvent::~GestureEvent() { 1014 GestureEvent::~GestureEvent() {
990 } 1015 }
991 1016
992 } // namespace ui 1017 } // namespace ui
OLDNEW
« no previous file with comments | « no previous file | ui/events/events.gyp » ('j') | ui/events/events.gyp » ('J')

Powered by Google App Engine
This is Rietveld 408576698