blob: 9b1468586f9a911a43a3f41af692765cf317811f [file] [log] [blame]
// 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_