OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "ui/base/accelerators/platform_accelerator_gtk.h" | |
6 | |
7 #include "ui/events/keycodes/keyboard_code_conversion_gtk.h" | |
8 | |
9 namespace ui { | |
10 | |
11 namespace { | |
12 | |
13 int GdkModifierToEventFlag(GdkModifierType gdk_modifier) { | |
14 int event_flags = 0; | |
15 if (gdk_modifier & GDK_SHIFT_MASK) | |
16 event_flags |= EF_SHIFT_DOWN; | |
17 if (gdk_modifier & GDK_CONTROL_MASK) | |
18 event_flags |= EF_CONTROL_DOWN; | |
19 if (gdk_modifier & GDK_MOD1_MASK) | |
20 event_flags |= EF_ALT_DOWN; | |
21 return event_flags; | |
22 } | |
23 | |
24 GdkModifierType EventFlagToGdkModifier(int event_flag) { | |
25 int modifier = 0; | |
26 if (event_flag & EF_SHIFT_DOWN) | |
27 modifier |= GDK_SHIFT_MASK; | |
28 if (event_flag & EF_CONTROL_DOWN) | |
29 modifier |= GDK_CONTROL_MASK; | |
30 if (event_flag & EF_ALT_DOWN) | |
31 modifier |= GDK_MOD1_MASK; | |
32 return static_cast<GdkModifierType>(modifier); | |
33 } | |
34 | |
35 } // namespace | |
36 | |
37 PlatformAcceleratorGtk::PlatformAcceleratorGtk() | |
38 : gdk_key_code_(0), | |
39 gdk_modifier_(static_cast<GdkModifierType>(0)) { | |
40 } | |
41 | |
42 PlatformAcceleratorGtk::PlatformAcceleratorGtk(guint gdk_key_code, | |
43 GdkModifierType gdk_modifier) | |
44 : gdk_key_code_(gdk_key_code), | |
45 gdk_modifier_(gdk_modifier) { | |
46 } | |
47 | |
48 PlatformAcceleratorGtk::~PlatformAcceleratorGtk() { | |
49 } | |
50 | |
51 scoped_ptr<PlatformAccelerator> PlatformAcceleratorGtk::CreateCopy() const { | |
52 scoped_ptr<PlatformAcceleratorGtk> copy(new PlatformAcceleratorGtk); | |
53 copy->gdk_key_code_ = gdk_key_code_; | |
54 copy->gdk_modifier_ = gdk_modifier_; | |
55 return scoped_ptr<PlatformAccelerator>(copy.release()); | |
56 } | |
57 | |
58 bool PlatformAcceleratorGtk::Equals(const PlatformAccelerator& rhs) const { | |
59 const PlatformAcceleratorGtk& rhs_gtk = | |
60 static_cast<const PlatformAcceleratorGtk&>(rhs); | |
61 return gdk_key_code_ == rhs_gtk.gdk_key_code_ && | |
62 gdk_modifier_ == rhs_gtk.gdk_modifier_; | |
63 } | |
64 | |
65 Accelerator AcceleratorForGdkKeyCodeAndModifier(guint gdk_key_code, | |
66 GdkModifierType gdk_modifier) { | |
67 ui::Accelerator accelerator(ui::WindowsKeyCodeForGdkKeyCode(gdk_key_code), | |
68 ui::GdkModifierToEventFlag(gdk_modifier)); | |
69 scoped_ptr<PlatformAccelerator> platform_accelerator( | |
70 new PlatformAcceleratorGtk(gdk_key_code, gdk_modifier)); | |
71 accelerator.set_platform_accelerator(platform_accelerator.Pass()); | |
72 return accelerator; | |
73 } | |
74 | |
75 guint GetGdkKeyCodeForAccelerator(const Accelerator& accelerator) { | |
76 if (accelerator.platform_accelerator()) { | |
77 return static_cast<const PlatformAcceleratorGtk*>( | |
78 accelerator.platform_accelerator())->gdk_key_code(); | |
79 } | |
80 // The second parameter is false because accelerator keys are expressed in | |
81 // terms of the non-shift-modified key. | |
82 return GdkKeyCodeForWindowsKeyCode(accelerator.key_code(), false); | |
83 } | |
84 | |
85 GdkModifierType GetGdkModifierForAccelerator(const Accelerator& accelerator) { | |
86 if (accelerator.platform_accelerator()) { | |
87 return static_cast<const PlatformAcceleratorGtk*>( | |
88 accelerator.platform_accelerator())->gdk_modifier(); | |
89 } | |
90 return EventFlagToGdkModifier(accelerator.modifiers()); | |
91 } | |
92 | |
93 } // namespace ui | |
OLD | NEW |