1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
//! Interactions with the keyboard. pub use crate::{error::*, keycode::*, stdinc::*, video::*}; /// SDL uses this for key events. /// /// Key events are for raw key events. For translated textual input you want the /// "text input" events instead. #[derive(Debug, Clone, Copy, Default, PartialEq, Eq, PartialOrd, Ord, Hash)] #[repr(C)] pub struct SDL_Keysym { /// SDL physical key code scancode: SDL_Scancode, /// SDL virtual key code sym: SDL_Keycode, /// current key modifiers mod_: Uint16, unused: Uint32, } extern "C" { /// Get the window which currently has keyboard focus. pub fn SDL_GetKeyboardFocus() -> *mut SDL_Window; /// Get a snapshot of the current state of the keyboard. /// /// * `numkeys` if non-NULL, receives the length of the returned array. /// /// **Returns:** An array of key states. Indexes into this array are obtained /// by using [`SDL_Scancode`] values. pub fn SDL_GetKeyboardState(numkeys: *mut c_int) -> *const u8; /// Get the current key modifier state for the keyboard. pub fn SDL_GetModState() -> SDL_Keymod; /// Set the current key modifier state for the keyboard. /// /// This does not change the keyboard state, only the key modifier flags. pub fn SDL_SetModState(modstate: SDL_Keymod); /// Get the key code corresponding to the given scancode according to the /// current keyboard layout. /// /// See [`SDL_Keycode`] for details. /// /// See Also: [`SDL_GetKeyName`] pub fn SDL_GetKeyFromScancode(scancode: SDL_Scancode) -> SDL_Keycode; /// Get the scancode corresponding to the given key code according to the /// current keyboard layout. /// /// See [`SDL_Scancode`] /// /// See Also: [`SDL_GetScancodeName`] pub fn SDL_GetScancodeFromKey(key: SDL_Keycode) -> SDL_Scancode; /// Get a human-readable name for a scancode. /// /// **Returns** A pointer to the name for the scancode. If the scancode /// doesn't have a name, this function returns an empty string (""). pub fn SDL_GetScancodeName(scancode: SDL_Scancode) -> *const c_char; /// Get a scancode from a human-readable name. /// /// **Return:** the scancode, or `SDL_SCANCODE_UNKNOWN` if the name wasn't /// recognized. pub fn SDL_GetScancodeFromName(name: *const c_char) -> SDL_Scancode; /// Get a human-readable name for a key. /// /// **Return:** A pointer to a UTF-8 string that stays valid at least until /// the next call to this function. If you need it around any longer, you must /// copy it. If the key doesn't have a name, this function returns an empty /// string (""). pub fn SDL_GetKeyName(key: SDL_Keycode) -> *const c_char; /// Get a key code from a human-readable name. /// /// **Returns:** the key code, or `SDLK_UNKNOWN` if the name wasn't /// recognized. pub fn SDL_GetKeyFromName(name: *const c_char) -> SDL_Keycode; /// Start accepting Unicode text input events. /// /// This function will show the on-screen keyboard if supported. /// /// See Also: [`SDL_StopTextInput`], [`SDL_SetTextInputRect`], /// [`SDL_HasScreenKeyboardSupport`] pub fn SDL_StartTextInput(); /// Return whether or not Unicode text input events are enabled. /// /// See Also: [`SDL_StartTextInput`], [`SDL_StopTextInput`] pub fn SDL_IsTextInputActive() -> SDL_bool; /// Stop receiving any text input events. /// /// This function will hide the on-screen keyboard if supported. /// /// See Also: [`SDL_StartTextInput`], [`SDL_HasScreenKeyboardSupport`] pub fn SDL_StopTextInput(); /// Set the rectangle used to type Unicode text inputs. /// /// This is used as a hint for IME and on-screen keyboard placement. /// /// See Also: [`SDL_StartTextInput`] pub fn SDL_SetTextInputRect(rect: *mut SDL_Rect); /// Returns whether the platform has some screen keyboard support. /// /// **Returns:** `SDL_TRUE` if some keyboard support is available, else /// `SDL_FALSE`. /// /// **Note:** Not all screen keyboard functions are supported on all /// platforms. /// /// See Also: [`SDL_IsScreenKeyboardShown`] pub fn SDL_HasScreenKeyboardSupport() -> SDL_bool; /// Returns whether the screen keyboard is shown for given window. /// /// * `window` The window for which screen keyboard should be queried. /// /// **Returns:** `SDL_TRUE` if screen keyboard is shown, else `SDL_FALSE`. /// /// See Also: [`SDL_HasScreenKeyboardSupport`] pub fn SDL_IsScreenKeyboardShown(window: *mut SDL_Window) -> SDL_bool; }