// Copyright 2014 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.

#include <map>

// DO NOT EDIT -- DO NOT EDIT -- DO NOT EDIT
// This file is generated by flutter/flutter@dev/tools/gen_keycodes/bin/gen_keycodes.dart and
// should not be edited directly.
//
// Edit the template dev/tools/gen_keycodes/data/keyboard_map_windows_cc.tmpl instead.
// See dev/tools/gen_keycodes/README.md for more information.

/// Maps g_windows_to_physical_key specific key code values representing [PhysicalKeyboardKey].
const std::map<int, uint64_t> g_windows_to_physical_key = {
@@@WINDOWS_SCAN_CODE_MAP@@@
};

/// Maps Windows-specific key codes to the matching [LogicalKeyboardKey].
const std::map<int, uint64_t> g_windows_to_logical_key = {
@@@WINDOWS_KEY_CODE_MAP@@@
};

/// A map of GLFW key codes which have printable representations, but appear
/// on the number pad. Used to provide different key objects for keys like
/// KEY_EQUALS and NUMPAD_EQUALS.
const std::map<int, uint64_t> g_windows_numpad_map = {
@@@WINDOWS_NUMPAD_MAP@@@
};
