| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef FLUTTER_SHELL_PLATFORM_LINUX_KEY_MAPPING_H_ |
| #define FLUTTER_SHELL_PLATFORM_LINUX_KEY_MAPPING_H_ |
| |
| #include <gdk/gdk.h> |
| #include <cinttypes> |
| #include <map> |
| #include <vector> |
| |
| inline uint64_t gpointer_to_uint64(gpointer pointer) { |
| return pointer == nullptr ? 0 : reinterpret_cast<uint64_t>(pointer); |
| } |
| |
| inline gpointer uint64_to_gpointer(uint64_t number) { |
| return reinterpret_cast<gpointer>(number); |
| } |
| |
| // Maps XKB specific key code values to Flutter's physical key code values. |
| extern std::map<uint64_t, uint64_t> xkb_to_physical_key_map; |
| |
| // Maps GDK keyval values to Flutter's logical key code values. |
| extern std::map<uint64_t, uint64_t> gtk_keyval_to_logical_key_map; |
| |
| void initialize_modifier_bit_to_checked_keys(GHashTable* table); |
| |
| void initialize_lock_bit_to_checked_keys(GHashTable* table); |
| |
| // Mask for the 32-bit value portion of the key code. |
| extern const uint64_t kValueMask; |
| |
| // The plane value for keys which have a Unicode representation. |
| extern const uint64_t kUnicodePlane; |
| |
| // The plane value for the private keys defined by the GTK embedding. |
| extern const uint64_t kGtkPlane; |
| |
| typedef struct { |
| // The key code for a key that prints `keyChar` in the US keyboard layout. |
| uint16_t keycode; |
| |
| // The logical key for this key. |
| uint64_t logical_key; |
| |
| // If the goal is mandatory, the keyboard manager will make sure to find a |
| // logical key for this character, falling back to the US keyboard layout. |
| bool mandatory; |
| } LayoutGoal; |
| |
| // NOLINTNEXTLINE(readability-identifier-naming) |
| extern const std::vector<LayoutGoal> layout_goals; |
| |
| #endif // FLUTTER_SHELL_PLATFORM_LINUX_KEY_MAPPING_H_ |