1 | /* |
2 | Simple DirectMedia Layer |
3 | Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org> |
4 | |
5 | This software is provided 'as-is', without any express or implied |
6 | warranty. In no event will the authors be held liable for any damages |
7 | arising from the use of this software. |
8 | |
9 | Permission is granted to anyone to use this software for any purpose, |
10 | including commercial applications, and to alter it and redistribute it |
11 | freely, subject to the following restrictions: |
12 | |
13 | 1. The origin of this software must not be misrepresented; you must not |
14 | claim that you wrote the original software. If you use this software |
15 | in a product, an acknowledgment in the product documentation would be |
16 | appreciated but is not required. |
17 | 2. Altered source versions must be plainly marked as such, and must not be |
18 | misrepresented as being the original software. |
19 | 3. This notice may not be removed or altered from any source distribution. |
20 | */ |
21 | |
22 | /** |
23 | * \file SDL_keyboard.h |
24 | * |
25 | * Include file for SDL keyboard event handling |
26 | */ |
27 | |
28 | #ifndef SDL_keyboard_h_ |
29 | #define SDL_keyboard_h_ |
30 | |
31 | #include "SDL_stdinc.h" |
32 | #include "SDL_error.h" |
33 | #include "SDL_keycode.h" |
34 | #include "SDL_video.h" |
35 | |
36 | #include "begin_code.h" |
37 | /* Set up for C function definitions, even when using C++ */ |
38 | #ifdef __cplusplus |
39 | extern "C" { |
40 | #endif |
41 | |
42 | /** |
43 | * \brief The SDL keysym structure, used in key events. |
44 | * |
45 | * \note If you are looking for translated character input, see the ::SDL_TEXTINPUT event. |
46 | */ |
47 | typedef struct SDL_Keysym |
48 | { |
49 | SDL_Scancode scancode; /**< SDL physical key code - see ::SDL_Scancode for details */ |
50 | SDL_Keycode sym; /**< SDL virtual key code - see ::SDL_Keycode for details */ |
51 | Uint16 mod; /**< current key modifiers */ |
52 | Uint32 unused; |
53 | } SDL_Keysym; |
54 | |
55 | /* Function prototypes */ |
56 | |
57 | /** |
58 | * \brief Get the window which currently has keyboard focus. |
59 | */ |
60 | extern DECLSPEC SDL_Window * SDLCALL SDL_GetKeyboardFocus(void); |
61 | |
62 | /** |
63 | * \brief Get a snapshot of the current state of the keyboard. |
64 | * |
65 | * \param numkeys if non-NULL, receives the length of the returned array. |
66 | * |
67 | * \return An array of key states. Indexes into this array are obtained by using ::SDL_Scancode values. |
68 | * |
69 | * \b Example: |
70 | * \code |
71 | * const Uint8 *state = SDL_GetKeyboardState(NULL); |
72 | * if ( state[SDL_SCANCODE_RETURN] ) { |
73 | * printf("<RETURN> is pressed.\n"); |
74 | * } |
75 | * \endcode |
76 | */ |
77 | extern DECLSPEC const Uint8 *SDLCALL SDL_GetKeyboardState(int *numkeys); |
78 | |
79 | /** |
80 | * \brief Get the current key modifier state for the keyboard. |
81 | */ |
82 | extern DECLSPEC SDL_Keymod SDLCALL SDL_GetModState(void); |
83 | |
84 | /** |
85 | * \brief Set the current key modifier state for the keyboard. |
86 | * |
87 | * \note This does not change the keyboard state, only the key modifier flags. |
88 | */ |
89 | extern DECLSPEC void SDLCALL SDL_SetModState(SDL_Keymod modstate); |
90 | |
91 | /** |
92 | * \brief Get the key code corresponding to the given scancode according |
93 | * to the current keyboard layout. |
94 | * |
95 | * See ::SDL_Keycode for details. |
96 | * |
97 | * \sa SDL_GetKeyName() |
98 | */ |
99 | extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromScancode(SDL_Scancode scancode); |
100 | |
101 | /** |
102 | * \brief Get the scancode corresponding to the given key code according to the |
103 | * current keyboard layout. |
104 | * |
105 | * See ::SDL_Scancode for details. |
106 | * |
107 | * \sa SDL_GetScancodeName() |
108 | */ |
109 | extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromKey(SDL_Keycode key); |
110 | |
111 | /** |
112 | * \brief Get a human-readable name for a scancode. |
113 | * |
114 | * \return A pointer to the name for the scancode. |
115 | * If the scancode doesn't have a name, this function returns |
116 | * an empty string (""). |
117 | * |
118 | * \sa SDL_Scancode |
119 | */ |
120 | extern DECLSPEC const char *SDLCALL SDL_GetScancodeName(SDL_Scancode scancode); |
121 | |
122 | /** |
123 | * \brief Get a scancode from a human-readable name |
124 | * |
125 | * \return scancode, or SDL_SCANCODE_UNKNOWN if the name wasn't recognized |
126 | * |
127 | * \sa SDL_Scancode |
128 | */ |
129 | extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromName(const char *name); |
130 | |
131 | /** |
132 | * \brief Get a human-readable name for a key. |
133 | * |
134 | * \return A pointer to a UTF-8 string that stays valid at least until the next |
135 | * call to this function. If you need it around any longer, you must |
136 | * copy it. If the key doesn't have a name, this function returns an |
137 | * empty string (""). |
138 | * |
139 | * \sa SDL_Keycode |
140 | */ |
141 | extern DECLSPEC const char *SDLCALL SDL_GetKeyName(SDL_Keycode key); |
142 | |
143 | /** |
144 | * \brief Get a key code from a human-readable name |
145 | * |
146 | * \return key code, or SDLK_UNKNOWN if the name wasn't recognized |
147 | * |
148 | * \sa SDL_Keycode |
149 | */ |
150 | extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromName(const char *name); |
151 | |
152 | /** |
153 | * \brief Start accepting Unicode text input events. |
154 | * This function will show the on-screen keyboard if supported. |
155 | * |
156 | * \sa SDL_StopTextInput() |
157 | * \sa SDL_SetTextInputRect() |
158 | * \sa SDL_HasScreenKeyboardSupport() |
159 | */ |
160 | extern DECLSPEC void SDLCALL SDL_StartTextInput(void); |
161 | |
162 | /** |
163 | * \brief Return whether or not Unicode text input events are enabled. |
164 | * |
165 | * \sa SDL_StartTextInput() |
166 | * \sa SDL_StopTextInput() |
167 | */ |
168 | extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputActive(void); |
169 | |
170 | /** |
171 | * \brief Stop receiving any text input events. |
172 | * This function will hide the on-screen keyboard if supported. |
173 | * |
174 | * \sa SDL_StartTextInput() |
175 | * \sa SDL_HasScreenKeyboardSupport() |
176 | */ |
177 | extern DECLSPEC void SDLCALL SDL_StopTextInput(void); |
178 | |
179 | /** |
180 | * \brief Set the rectangle used to type Unicode text inputs. |
181 | * This is used as a hint for IME and on-screen keyboard placement. |
182 | * |
183 | * \sa SDL_StartTextInput() |
184 | */ |
185 | extern DECLSPEC void SDLCALL SDL_SetTextInputRect(SDL_Rect *rect); |
186 | |
187 | /** |
188 | * \brief Returns whether the platform has some screen keyboard support. |
189 | * |
190 | * \return SDL_TRUE if some keyboard support is available else SDL_FALSE. |
191 | * |
192 | * \note Not all screen keyboard functions are supported on all platforms. |
193 | * |
194 | * \sa SDL_IsScreenKeyboardShown() |
195 | */ |
196 | extern DECLSPEC SDL_bool SDLCALL SDL_HasScreenKeyboardSupport(void); |
197 | |
198 | /** |
199 | * \brief Returns whether the screen keyboard is shown for given window. |
200 | * |
201 | * \param window The window for which screen keyboard should be queried. |
202 | * |
203 | * \return SDL_TRUE if screen keyboard is shown else SDL_FALSE. |
204 | * |
205 | * \sa SDL_HasScreenKeyboardSupport() |
206 | */ |
207 | extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenKeyboardShown(SDL_Window *window); |
208 | |
209 | /* Ends C function definitions when using C++ */ |
210 | #ifdef __cplusplus |
211 | } |
212 | #endif |
213 | #include "close_code.h" |
214 | |
215 | #endif /* SDL_keyboard_h_ */ |
216 | |
217 | /* vi: set ts=4 sw=4 expandtab: */ |
218 | |