2021-07-16 12:11:12 -07:00
|
|
|
//! Keyboard key IDs.
|
|
|
|
//!
|
2021-07-16 12:20:32 -07:00
|
|
|
//! See glfw.setKeyCallback for how these are used.
|
2021-07-16 12:11:12 -07:00
|
|
|
//!
|
|
|
|
//! These key codes are inspired by the _USB HID Usage Tables v1.12_ (p. 53-60), but re-arranged to
|
|
|
|
//! map to 7-bit ASCII for printable keys (function keys are put in the 256+ range).
|
|
|
|
//!
|
|
|
|
//! The naming of the key codes follow these rules:
|
|
|
|
//!
|
|
|
|
//! - The US keyboard layout is used
|
2021-10-23 10:30:40 -07:00
|
|
|
//! - Names of printable alpha-numeric characters are used (e.g. "a", "r", "three", etc.)
|
|
|
|
//! - For non-alphanumeric characters, Unicode:ish names are used (e.g. "comma", "left_bracket",
|
|
|
|
//! etc.). Note that some names do not correspond to the Unicode standard (usually for brevity)
|
|
|
|
//! - Keys that lack a clear US mapping are named "world_x"
|
|
|
|
//! - For non-printable keys, custom names are used (e.g. "F4", "backspace", etc.)
|
|
|
|
|
|
|
|
const std = @import("std");
|
2021-07-16 12:11:12 -07:00
|
|
|
|
2021-10-23 10:18:38 -07:00
|
|
|
const cc = @import("c.zig").c;
|
2021-10-23 10:30:40 -07:00
|
|
|
const Error = @import("errors.zig").Error;
|
|
|
|
const getError = @import("errors.zig").getError;
|
2021-07-16 12:11:12 -07:00
|
|
|
|
|
|
|
/// The unknown key
|
2021-07-16 15:07:26 -07:00
|
|
|
pub const unknown = cc.GLFW_KEY_UNKNOWN;
|
2021-07-16 12:11:12 -07:00
|
|
|
|
|
|
|
/// Printable keys
|
2021-07-16 15:07:26 -07:00
|
|
|
pub const space = cc.GLFW_KEY_SPACE;
|
|
|
|
pub const apostrophe = cc.GLFW_KEY_APOSTROPHE;
|
|
|
|
pub const comma = cc.GLFW_KEY_COMMA;
|
|
|
|
pub const minus = cc.GLFW_KEY_MINUS;
|
|
|
|
pub const period = cc.GLFW_KEY_PERIOD;
|
|
|
|
pub const slash = cc.GLFW_KEY_SLASH;
|
|
|
|
pub const zero = cc.GLFW_KEY_0;
|
|
|
|
pub const one = cc.GLFW_KEY_1;
|
|
|
|
pub const two = cc.GLFW_KEY_2;
|
|
|
|
pub const three = cc.GLFW_KEY_3;
|
|
|
|
pub const four = cc.GLFW_KEY_4;
|
|
|
|
pub const five = cc.GLFW_KEY_5;
|
|
|
|
pub const six = cc.GLFW_KEY_6;
|
|
|
|
pub const seven = cc.GLFW_KEY_7;
|
|
|
|
pub const eight = cc.GLFW_KEY_8;
|
|
|
|
pub const nine = cc.GLFW_KEY_9;
|
|
|
|
pub const semicolon = cc.GLFW_KEY_SEMICOLON;
|
|
|
|
pub const equal = cc.GLFW_KEY_EQUAL;
|
|
|
|
pub const a = cc.GLFW_KEY_A;
|
|
|
|
pub const b = cc.GLFW_KEY_B;
|
|
|
|
pub const c = cc.GLFW_KEY_C;
|
|
|
|
pub const d = cc.GLFW_KEY_D;
|
|
|
|
pub const e = cc.GLFW_KEY_E;
|
|
|
|
pub const f = cc.GLFW_KEY_F;
|
|
|
|
pub const g = cc.GLFW_KEY_G;
|
|
|
|
pub const h = cc.GLFW_KEY_H;
|
|
|
|
pub const i = cc.GLFW_KEY_I;
|
|
|
|
pub const j = cc.GLFW_KEY_J;
|
|
|
|
pub const k = cc.GLFW_KEY_K;
|
|
|
|
pub const l = cc.GLFW_KEY_L;
|
|
|
|
pub const m = cc.GLFW_KEY_M;
|
|
|
|
pub const n = cc.GLFW_KEY_N;
|
|
|
|
pub const o = cc.GLFW_KEY_O;
|
|
|
|
pub const p = cc.GLFW_KEY_P;
|
|
|
|
pub const q = cc.GLFW_KEY_Q;
|
|
|
|
pub const r = cc.GLFW_KEY_R;
|
|
|
|
pub const s = cc.GLFW_KEY_S;
|
|
|
|
pub const t = cc.GLFW_KEY_T;
|
|
|
|
pub const u = cc.GLFW_KEY_U;
|
|
|
|
pub const v = cc.GLFW_KEY_V;
|
|
|
|
pub const w = cc.GLFW_KEY_W;
|
|
|
|
pub const x = cc.GLFW_KEY_X;
|
|
|
|
pub const y = cc.GLFW_KEY_Y;
|
|
|
|
pub const z = cc.GLFW_KEY_Z;
|
|
|
|
pub const left_bracket = cc.GLFW_KEY_LEFT_BRACKET;
|
|
|
|
pub const backslash = cc.GLFW_KEY_BACKSLASH;
|
|
|
|
pub const right_bracket = cc.GLFW_KEY_RIGHT_BRACKET;
|
|
|
|
pub const grave_accent = cc.GLFW_KEY_GRAVE_ACCENT;
|
|
|
|
pub const world_1 = cc.GLFW_KEY_WORLD_1; // non-US #1
|
|
|
|
pub const world_2 = cc.GLFW_KEY_WORLD_2; // non-US #2
|
2021-07-16 12:11:12 -07:00
|
|
|
|
|
|
|
/// Function keys
|
2021-07-16 15:07:26 -07:00
|
|
|
pub const escape = cc.GLFW_KEY_ESCAPE;
|
|
|
|
pub const enter = cc.GLFW_KEY_ENTER;
|
|
|
|
pub const tab = cc.GLFW_KEY_TAB;
|
|
|
|
pub const backspace = cc.GLFW_KEY_BACKSPACE;
|
|
|
|
pub const insert = cc.GLFW_KEY_INSERT;
|
|
|
|
pub const delete = cc.GLFW_KEY_DELETE;
|
|
|
|
pub const right = cc.GLFW_KEY_RIGHT;
|
|
|
|
pub const left = cc.GLFW_KEY_LEFT;
|
|
|
|
pub const down = cc.GLFW_KEY_DOWN;
|
|
|
|
pub const up = cc.GLFW_KEY_UP;
|
|
|
|
pub const page_up = cc.GLFW_KEY_PAGE_UP;
|
|
|
|
pub const page_down = cc.GLFW_KEY_PAGE_DOWN;
|
|
|
|
pub const home = cc.GLFW_KEY_HOME;
|
|
|
|
pub const end = cc.GLFW_KEY_END;
|
|
|
|
pub const caps_lock = cc.GLFW_KEY_CAPS_LOCK;
|
|
|
|
pub const scroll_lock = cc.GLFW_KEY_SCROLL_LOCK;
|
|
|
|
pub const num_lock = cc.GLFW_KEY_NUM_LOCK;
|
|
|
|
pub const print_screen = cc.GLFW_KEY_PRINT_SCREEN;
|
|
|
|
pub const pause = cc.GLFW_KEY_PAUSE;
|
|
|
|
pub const F1 = cc.GLFW_KEY_F1;
|
|
|
|
pub const F2 = cc.GLFW_KEY_F2;
|
|
|
|
pub const F3 = cc.GLFW_KEY_F3;
|
|
|
|
pub const F4 = cc.GLFW_KEY_F4;
|
|
|
|
pub const F5 = cc.GLFW_KEY_F5;
|
|
|
|
pub const F6 = cc.GLFW_KEY_F6;
|
|
|
|
pub const F7 = cc.GLFW_KEY_F7;
|
|
|
|
pub const F8 = cc.GLFW_KEY_F8;
|
|
|
|
pub const F9 = cc.GLFW_KEY_F9;
|
|
|
|
pub const F10 = cc.GLFW_KEY_F10;
|
|
|
|
pub const F11 = cc.GLFW_KEY_F11;
|
|
|
|
pub const F12 = cc.GLFW_KEY_F12;
|
|
|
|
pub const F13 = cc.GLFW_KEY_F13;
|
|
|
|
pub const F14 = cc.GLFW_KEY_F14;
|
|
|
|
pub const F15 = cc.GLFW_KEY_F15;
|
|
|
|
pub const F16 = cc.GLFW_KEY_F16;
|
|
|
|
pub const F17 = cc.GLFW_KEY_F17;
|
|
|
|
pub const F18 = cc.GLFW_KEY_F18;
|
|
|
|
pub const F19 = cc.GLFW_KEY_F19;
|
|
|
|
pub const F20 = cc.GLFW_KEY_F20;
|
|
|
|
pub const F21 = cc.GLFW_KEY_F21;
|
|
|
|
pub const F22 = cc.GLFW_KEY_F22;
|
|
|
|
pub const F23 = cc.GLFW_KEY_F23;
|
|
|
|
pub const F24 = cc.GLFW_KEY_F24;
|
|
|
|
pub const F25 = cc.GLFW_KEY_F25;
|
|
|
|
pub const kp_0 = cc.GLFW_KEY_KP_0;
|
|
|
|
pub const kp_1 = cc.GLFW_KEY_KP_1;
|
|
|
|
pub const kp_2 = cc.GLFW_KEY_KP_2;
|
|
|
|
pub const kp_3 = cc.GLFW_KEY_KP_3;
|
|
|
|
pub const kp_4 = cc.GLFW_KEY_KP_4;
|
|
|
|
pub const kp_5 = cc.GLFW_KEY_KP_5;
|
|
|
|
pub const kp_6 = cc.GLFW_KEY_KP_6;
|
|
|
|
pub const kp_7 = cc.GLFW_KEY_KP_7;
|
|
|
|
pub const kp_8 = cc.GLFW_KEY_KP_8;
|
|
|
|
pub const kp_9 = cc.GLFW_KEY_KP_9;
|
|
|
|
pub const kp_decimal = cc.GLFW_KEY_KP_DECIMAL;
|
|
|
|
pub const kp_divide = cc.GLFW_KEY_KP_DIVIDE;
|
|
|
|
pub const kp_multiply = cc.GLFW_KEY_KP_MULTIPLY;
|
|
|
|
pub const kp_subtract = cc.GLFW_KEY_KP_SUBTRACT;
|
|
|
|
pub const kp_add = cc.GLFW_KEY_KP_ADD;
|
|
|
|
pub const kp_enter = cc.GLFW_KEY_KP_ENTER;
|
|
|
|
pub const kp_equal = cc.GLFW_KEY_KP_EQUAL;
|
|
|
|
pub const left_shift = cc.GLFW_KEY_LEFT_SHIFT;
|
|
|
|
pub const left_control = cc.GLFW_KEY_LEFT_CONTROL;
|
|
|
|
pub const left_alt = cc.GLFW_KEY_LEFT_ALT;
|
|
|
|
pub const left_super = cc.GLFW_KEY_LEFT_SUPER;
|
|
|
|
pub const right_shift = cc.GLFW_KEY_RIGHT_SHIFT;
|
|
|
|
pub const right_control = cc.GLFW_KEY_RIGHT_CONTROL;
|
|
|
|
pub const right_alt = cc.GLFW_KEY_RIGHT_ALT;
|
|
|
|
pub const right_super = cc.GLFW_KEY_RIGHT_SUPER;
|
|
|
|
pub const menu = cc.GLFW_KEY_MENU;
|
2021-07-16 12:11:12 -07:00
|
|
|
|
2021-07-16 15:07:26 -07:00
|
|
|
pub const last = cc.GLFW_KEY_LAST;
|
2021-10-21 23:48:53 -07:00
|
|
|
|
2021-10-23 10:30:40 -07:00
|
|
|
/// Returns the layout-specific name of the specified printable key.
|
|
|
|
///
|
|
|
|
/// This function returns the name of the specified printable key, encoded as UTF-8. This is
|
|
|
|
/// typically the character that key would produce without any modifier keys, intended for
|
|
|
|
/// displaying key bindings to the user. For dead keys, it is typically the diacritic it would add
|
|
|
|
/// to a character.
|
|
|
|
///
|
|
|
|
/// __Do not use this function__ for text input (see input_char). You will break text input for many
|
|
|
|
/// languages even if it happens to work for yours.
|
|
|
|
///
|
|
|
|
/// If the key is `glfw.key.unknown`, the scancode is used to identify the key, otherwise the
|
|
|
|
/// scancode is ignored. If you specify a non-printable key, or `glfw.key.unknown` and a scancode
|
|
|
|
/// that maps to a non-printable key, this function returns null but does not emit an error.
|
|
|
|
///
|
|
|
|
/// This behavior allows you to always pass in the arguments in the key callback (see input_key)
|
|
|
|
/// without modification.
|
|
|
|
///
|
|
|
|
/// The printable keys are:
|
|
|
|
///
|
|
|
|
/// - `glfw.key.apostrophe`
|
|
|
|
/// - `glfw.key.comma`
|
|
|
|
/// - `glfw.key.minus`
|
|
|
|
/// - `glfw.key.period`
|
|
|
|
/// - `glfw.key.slash`
|
|
|
|
/// - `glfw.key.semicolon`
|
|
|
|
/// - `glfw.key.equal`
|
|
|
|
/// - `glfw.key.left_bracket`
|
|
|
|
/// - `glfw.key.right_bracket`
|
|
|
|
/// - `glfw.key.backslash`
|
|
|
|
/// - `glfw.key.world_1`
|
|
|
|
/// - `glfw.key.world_2`
|
|
|
|
/// - `glfw.key.0` to `glfw.key.9`
|
|
|
|
/// - `glfw.key.a` to `glfw.key.z`
|
|
|
|
/// - `glfw.key.kp_0` to `glfw.key.kp_9`
|
|
|
|
/// - `glfw.key.kp_decimal`
|
|
|
|
/// - `glfw.key.kp_divide`
|
|
|
|
/// - `glfw.key.kp_multiply`
|
|
|
|
/// - `glfw.key.kp_subtract`
|
|
|
|
/// - `glfw.key.kp_add`
|
|
|
|
/// - `glfw.key.kp_equal`
|
|
|
|
///
|
|
|
|
/// Names for printable keys depend on keyboard layout, while names for non-printable keys are the
|
|
|
|
/// same across layouts but depend on the application language and should be localized along with
|
|
|
|
/// other user interface text.
|
|
|
|
///
|
|
|
|
/// @param[in] key The key to query, or `glfw.key.unknown`.
|
|
|
|
/// @param[in] scancode The scancode of the key to query.
|
|
|
|
/// @return The UTF-8 encoded, layout-specific name of the key, or null.
|
|
|
|
///
|
|
|
|
/// Possible errors include glfw.Error.NotInitialized and glfw.Error.PlatformError.
|
|
|
|
///
|
|
|
|
/// The contents of the returned string may change when a keyboard layout change event is received.
|
|
|
|
///
|
|
|
|
/// @pointer_lifetime The returned string is allocated and freed by GLFW. You should not free it
|
|
|
|
/// yourself. It is valid until the library is terminated.
|
|
|
|
///
|
|
|
|
/// @thread_safety This function must only be called from the main thread.
|
|
|
|
///
|
|
|
|
/// see also: input_key_name
|
|
|
|
pub inline fn getName(key: isize, scancode: isize) Error![*c]const u8 {
|
|
|
|
const name = cc.glfwGetKeyName(@intCast(c_int, key), @intCast(c_int, scancode));
|
|
|
|
try getError();
|
|
|
|
return name;
|
|
|
|
}
|
2021-10-21 23:48:53 -07:00
|
|
|
|
|
|
|
// TODO(keyboard scancode)
|
|
|
|
// /// Returns the platform-specific scancode of the specified key.
|
|
|
|
// ///
|
|
|
|
// /// This function returns the platform-specific scancode of the specified key.
|
|
|
|
// ///
|
2021-10-23 10:30:40 -07:00
|
|
|
// /// If the key is `glfw.key.UNKNOWN` or does not exist on the keyboard this
|
2021-10-21 23:48:53 -07:00
|
|
|
// /// method will return `-1`.
|
|
|
|
// ///
|
|
|
|
// /// @param[in] key Any [named key](@ref keys).
|
|
|
|
// /// @return The platform-specific scancode for the key, or `-1` if an
|
|
|
|
// /// error occurred.
|
|
|
|
// ///
|
|
|
|
// /// Possible errors include glfw.Error.NotInitialized, glfw.Error.InvalidEnum and glfw.Error.PlatformError.
|
|
|
|
// ///
|
|
|
|
// /// @thread_safety This function may be called from any thread.
|
|
|
|
// ///
|
|
|
|
// /// see also: input_key
|
|
|
|
// ///
|
|
|
|
// ///
|
|
|
|
// /// @ingroup input
|
|
|
|
// GLFWAPI int glfwGetKeyScancode(int key);
|
2021-10-23 10:30:40 -07:00
|
|
|
|
|
|
|
test "getName" {
|
|
|
|
const glfw = @import("main.zig");
|
|
|
|
try glfw.init();
|
|
|
|
defer glfw.terminate();
|
|
|
|
|
|
|
|
_ = glfw.key.getName(glfw.key.a, 0) catch |err| std.debug.print("failed to get key name, not supported? error={}\n", .{err});
|
|
|
|
}
|