Files
qbz/crates/vendor/i-slint-common-1.16.1/key_codes.rs
T
vicrodh fa3ee1e410 fix(fonts): pre-register macOS CJK fallback families in vendored i-slint-common
fontique's CoreText-based Han-script fallback fails to resolve a family on
modern macOS (the suggested PingFang is not always in the scanned family
map), so Japanese kanji rendered blank while kana worked. Vendor
i-slint-common 1.16.1 and pre-register Hiragino / PingFang / Apple SD
Gothic Neo / Arial Unicode MS in the fallback map at collection creation
(Japanese-biased default; the map takes priority over the CoreText query).
macOS-only cfg; Linux keeps its working fontconfig fallback. Type-checked
against aarch64-apple-darwin.

cc
2026-07-03 10:00:31 -06:00

208 lines
12 KiB
Rust

// Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0
//! This module is meant to be included by different crates and each crate must define the macro
//! for_each_keys
//!
//! The key code comes from <https://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/CORPCHAR.TXT>
//! the names for the special keys should match with <https://www.w3.org/TR/uievents-key/#named-key-attribute-values>,
//! and for normal keys with: <https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode>
//!
//! The format is a semicolon separated list of keys
//! `<char code> # Slint name # Shifted key => Muda accelerator code # Qt code # Winit code # xkb code`
//!
//! Note: The values after and including the => only exist for special keys. The Shifted key and
//! Muda accelerator code may both be empty.
//!
//! ## Example
//!
//! ```
//! macro_rules! do_something_with_keys {
//! ($($char:literal # $name:ident # $($shifted:ident)? $(=> $($muda:ident)? # $($qt:ident)|* # $($winit:ident $(($_pos:ident))?)|* # $($xkb:ident)|*)? ;)*) => {
//! //...
//! };
//! }
//! i_slint_common::for_each_keys!(do_something_with_keys);
//! ```
//!
// NOTE: Run `cargo xtask slintdocs` when changing/adding/removing keys, to keep the docs in sync!
#[macro_export]
macro_rules! for_each_keys {
($macro:ident) => {
$macro![
'\u{0008}' # Backspace # => Backspace # Qt_Key_Key_Backspace # Backspace # BackSpace ;
'\u{0009}' # Tab # => Tab # Qt_Key_Key_Tab # Tab # Tab ;
'\u{000a}' # Return # => Enter # Qt_Key_Key_Enter|Qt_Key_Key_Return # Enter # Return;
'\u{001b}' # Escape # => Escape # Qt_Key_Key_Escape # Escape # Escape ;
'\u{0019}' # Backtab # => # Qt_Key_Key_Backtab # # BackTab ;
'\u{007f}' # Delete # => Delete # Qt_Key_Key_Delete # Delete # Delete ;
// The modifier key codes comes from https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode.
'\u{0010}' # Shift # => # Qt_Key_Key_Shift # Shift(Left) # Shift_L ;
'\u{0011}' # Control # => # Qt_Key_Key_Control # Control(Left)# Control_L ;
'\u{0012}' # Alt # => # Qt_Key_Key_Alt # Alt # Alt_L ;
'\u{0013}' # AltGr # => # Qt_Key_Key_AltGr # AltGraph # Mode_switch;
'\u{0014}' # CapsLock # => # Qt_Key_Key_CapsLock # # Caps_Lock ;
'\u{0015}' # ShiftR # => # # Shift(Right) # Shift_R ;
'\u{0016}' # ControlR # => # # Control(Right)# Control_R ;
// Use custom codes instead of DOM_VK_META for meta, because the Mozilla defined code is a regular character (E0; LATIN SMALL LETTER A WITH GRAVE)
// which makes those keys appear as text.
'\u{0017}' # Meta # => # Qt_Key_Key_Meta # Super(Left) # Meta_L ;
'\u{0018}' # MetaR # => # # Super(Right) # Meta_R ;
'\u{0020}' # Space # => # Qt_Key_Key_Space # Space # space ;
'\u{F700}' # UpArrow # => ArrowUp # Qt_Key_Key_Up # ArrowUp # Up ;
'\u{F701}' # DownArrow # => ArrowDown # Qt_Key_Key_Down # ArrowDown # Down ;
'\u{F702}' # LeftArrow # => ArrowLeft # Qt_Key_Key_Left # ArrowLeft # Left ;
'\u{F703}' # RightArrow # => ArrowRight # Qt_Key_Key_Right # ArrowRight # Right ;
'\u{F704}' # F1 # => F1 # Qt_Key_Key_F1 # F1 # F1 ;
'\u{F705}' # F2 # => F2 # Qt_Key_Key_F2 # F2 # F2 ;
'\u{F706}' # F3 # => F3 # Qt_Key_Key_F3 # F3 # F3 ;
'\u{F707}' # F4 # => F4 # Qt_Key_Key_F4 # F4 # F4 ;
'\u{F708}' # F5 # => F5 # Qt_Key_Key_F5 # F5 # F5 ;
'\u{F709}' # F6 # => F6 # Qt_Key_Key_F6 # F6 # F6 ;
'\u{F70A}' # F7 # => F7 # Qt_Key_Key_F7 # F7 # F7 ;
'\u{F70B}' # F8 # => F8 # Qt_Key_Key_F8 # F8 # F8 ;
'\u{F70C}' # F9 # => F9 # Qt_Key_Key_F9 # F9 # F9 ;
'\u{F70D}' # F10 # => F10 # Qt_Key_Key_F10 # F10 # F10 ;
'\u{F70E}' # F11 # => F11 # Qt_Key_Key_F11 # F11 # F11 ;
'\u{F70F}' # F12 # => F12 # Qt_Key_Key_F12 # F12 # F12 ;
'\u{F710}' # F13 # => F13 # Qt_Key_Key_F13 # F13 # F13 ;
'\u{F711}' # F14 # => F14 # Qt_Key_Key_F14 # F14 # F14 ;
'\u{F712}' # F15 # => F15 # Qt_Key_Key_F15 # F15 # F15 ;
'\u{F713}' # F16 # => F16 # Qt_Key_Key_F16 # F16 # F16 ;
'\u{F714}' # F17 # => F17 # Qt_Key_Key_F17 # F17 # F17 ;
'\u{F715}' # F18 # => F18 # Qt_Key_Key_F18 # F18 # F18 ;
'\u{F716}' # F19 # => F19 # Qt_Key_Key_F19 # F19 # F19 ;
'\u{F717}' # F20 # => F20 # Qt_Key_Key_F20 # F20 # F20 ;
'\u{F718}' # F21 # => F21 # Qt_Key_Key_F21 # F21 # F21 ;
'\u{F719}' # F22 # => F22 # Qt_Key_Key_F22 # F22 # F22 ;
'\u{F71A}' # F23 # => F23 # Qt_Key_Key_F23 # F23 # F23 ;
'\u{F71B}' # F24 # => F24 # Qt_Key_Key_F24 # F24 # F24 ;
//'\u{F71C}' # F25 # # F25 => Qt_Key_Key_F25 # F25 # F25 ;
//'\u{F71D}' # F26 # # F26 => Qt_Key_Key_F26 # F26 # F26 ;
//'\u{F71E}' # F27 # # F27 => Qt_Key_Key_F27 # F27 # F27 ;
//'\u{F71F}' # F28 # # F28 => Qt_Key_Key_F28 # F28 # F28 ;
//'\u{F720}' # F29 # # F29 => Qt_Key_Key_F29 # F29 # F29 ;
//'\u{F721}' # F30 # # F30 => Qt_Key_Key_F30 # F30 # F30 ;
//'\u{F722}' # F31 # # F31 => Qt_Key_Key_F31 # F31 # F31 ;
//'\u{F723}' # F32 # # F32 => Qt_Key_Key_F32 # F32 # F32 ;
//'\u{F724}' # F33 # # F33 => Qt_Key_Key_F33 # F33 # F33 ;
//'\u{F725}' # F34 # # F34 => Qt_Key_Key_F34 # F34 # F34 ;
//'\u{F726}' # F35 # # F35 => Qt_Key_Key_F35 # F35 # F35 ;
'\u{F727}' # Insert # => Insert # Qt_Key_Key_Insert # Insert # Insert ;
//'\u{F728}' # Delete ; // already as a control code
'\u{F729}' # Home # => Home # Qt_Key_Key_Home # Home # Home ;
//'\u{F72A}' # Begin # => # # ;
'\u{F72B}' # End # => End # Qt_Key_Key_End # End # End ;
'\u{F72C}' # PageUp # => PageUp # Qt_Key_Key_PageUp # PageUp # Page_Up ;
'\u{F72D}' # PageDown # => PageDown # Qt_Key_Key_PageDown # PageDown # Page_Down ;
//'\u{F72E}' # PrintScreen # => # # Snapshot ;
'\u{F72F}' # ScrollLock # => ScrollLock # Qt_Key_Key_ScrollLock # ScrollLock # Scroll_Lock;
'\u{F730}' # Pause # => Pause # Qt_Key_Key_Pause # Pause # Pause ;
'\u{F731}' # SysReq # => PrintScreen # Qt_Key_Key_SysReq # PrintScreen # Sys_Req ;
//'\u{F732}' # Break # => # # ;
//'\u{F733}' # Reset # => # # ;
'\u{F734}' # Stop # => # Qt_Key_Key_Stop # # XF86_Stop ;
'\u{F735}' # Menu # => ContextMenu # Qt_Key_Key_Menu # ContextMenu # Menu ;
//'\u{F736}' # User # # => # ;
//'\u{F737}' # System # # => # ;
//'\u{F738}' # Print # # => Qt_Key_Key_Print # ;
//'\u{F739}' # ClearLine # # => # ;
//'\u{F73A}' # ClearDisplay# # => # ;
//'\u{F73B}' # InsertLine # # => # ;
//'\u{F73C}' # DeleteLine # # => # ;
//'\u{F73D}' # InsertChar # # => # ;
//'\u{F73E}' # DeleteChar # # => # ;
//'\u{F73F}' # Prev # # => # ;
//'\u{F740}' # Next # # => # ;
//'\u{F741}' # Select # # => Qt_Key_Key_Select # ;
//'\u{F742}' # Execute # # => Qt_Key_Key_Execute # ;
//'\u{F743}' # Undo # # => Qt_Key_Key_Undo # ;
//'\u{F744}' # Redo # # => Qt_Key_Key_Redo # ;
//'\u{F745}' # Find # # => Qt_Key_Key_Find # ;
//'\u{F746}' # Help # # => Qt_Key_Key_Help # ;
//'\u{F747}' # ModeSwitch # # => Qt_Key_Key_Mode_switch # ;
'\u{F748}' # Back # => # Qt_Key_Key_Back # # ;
// -------------------- NORMAL KEYS ------------------------------
// The names are based on: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
'a' # A # ;
'b' # B # ;
'c' # C # ;
'd' # D # ;
'e' # E # ;
'f' # F # ;
'g' # G # ;
'h' # H # ;
'i' # I # ;
'j' # J # ;
'k' # K # ;
'l' # L # ;
'm' # M # ;
'n' # N # ;
'o' # O # ;
'p' # P # ;
'q' # Q # ;
'r' # R # ;
's' # S # ;
't' # T # ;
'u' # U # ;
'v' # V # ;
'w' # W # ;
'x' # X # ;
'y' # Y # ;
'z' # Z # ;
'0' # Digit0 # CloseParen ;
'1' # Digit1 # Exclamation ;
'2' # Digit2 # At ;
'3' # Digit3 # Hash ;
'4' # Digit4 # Dollar ;
'5' # Digit5 # Percent ;
'6' # Digit6 # Circumflex ;
'7' # Digit7 # Ampersand ;
'8' # Digit8 # Asterisk ;
'9' # Digit9 # OpenParen ;
'^' # Circumflex # Digit6 ;
'!' # Exclamation # Digit1 ;
'"' # DoubleQuote # Quote ;
'#' # Hash # Digit3 ;
'$' # Dollar # Digit4 ;
'%' # Percent # Digit5 ;
'&' # Ampersand # Digit7 ;
'_' # Underscore # HyphenMinus ;
'(' # OpenParen # Digit9 ;
')' # CloseParen # Digit0 ;
'*' # Asterisk # Digit8 ;
'+' # Plus # Equals ;
'|' # Pipe # BackSlash ;
'-' # HyphenMinus # Underscore ;
'{' # OpenCurlyBracket # OpenBracket ;
'}' # CloseCurlyBracket # CloseBracket ;
'~' # Tilde # BackQuote ;
':' # Colon # Semicolon ;
';' # Semicolon # Colon ;
'<' # LessThan # Comma ;
'=' # Equals # Plus ;
'>' # GreaterThan # Period ;
'?' # QuestionMark # Slash ;
'@' # At # Digit2 ;
',' # Comma # LessThan ;
'.' # Period # GreaterThan ;
'/' # Slash # QuestionMark ;
'`' # BackQuote # Tilde ;
'[' # OpenBracket # OpenCurlyBracket ;
'\\'# BackSlash # Pipe ;
']' # CloseBracket # CloseCurlyBracket ;
'\''# Quote # DoubleQuote ;
];
};
}