sciter/capi/
scmsg.rs

1//! Sciter.Lite interface.
2
3#![allow(non_camel_case_types, non_snake_case)]
4#![allow(dead_code)]
5
6use capi::sctypes::*;
7use capi::scdef::{GFX_LAYER, ELEMENT_BITMAP_RECEIVER};
8use capi::scdom::HELEMENT;
9use capi::scbehavior::{MOUSE_BUTTONS, MOUSE_EVENTS, KEY_EVENTS, KEYBOARD_STATES};
10
11
12#[repr(C)]
13#[derive(Copy, Clone)]
14#[derive(Debug, PartialOrd, PartialEq)]
15pub enum SCITER_X_MSG_CODE
16{
17  SXM_CREATE  = 0,
18  SXM_DESTROY = 1,
19  SXM_SIZE    = 2,
20  SXM_PAINT   = 3,
21  SXM_RESOLUTION = 4,
22  SXM_HEARTBIT = 5,
23  SXM_MOUSE = 6,
24  SXM_KEY = 7,
25  SXM_FOCUS = 8,
26}
27
28#[repr(C)]
29#[derive(Debug)]
30/// Common header of message structures passed to `SciterProcX`.
31pub struct SCITER_X_MSG
32{
33	pub msg: SCITER_X_MSG_CODE,
34}
35
36impl From<SCITER_X_MSG_CODE> for SCITER_X_MSG {
37	fn from(code: SCITER_X_MSG_CODE) -> Self {
38		Self { msg: code }
39	}
40}
41
42#[repr(C)]
43#[derive(Debug)]
44/// Message to create the specific Sciter backend.
45pub struct SCITER_X_MSG_CREATE
46{
47	pub header: SCITER_X_MSG,
48	pub backend: GFX_LAYER,
49	pub transparent: BOOL,
50}
51
52#[repr(C)]
53#[derive(Debug)]
54/// Message to destroy the current Sciter backend.
55pub struct SCITER_X_MSG_DESTROY
56{
57	pub header: SCITER_X_MSG,
58}
59
60#[repr(C)]
61#[derive(Debug)]
62/// Message to notify Sciter about view resize.
63pub struct SCITER_X_MSG_SIZE
64{
65	pub header: SCITER_X_MSG,
66	pub width: UINT,
67	pub height: UINT,
68}
69
70#[repr(C)]
71#[derive(Debug)]
72/// Message to notify Sciter about screen resolution change.
73pub struct SCITER_X_MSG_RESOLUTION
74{
75	pub header: SCITER_X_MSG,
76
77	/// Pixels per inch.
78	pub ppi: UINT,
79}
80
81#[repr(C)]
82#[derive(Debug)]
83/// Message to notify Sciter about mouse input.
84pub struct SCITER_X_MSG_MOUSE
85{
86	pub header: SCITER_X_MSG,
87
88	pub event: MOUSE_EVENTS,
89	pub button: MOUSE_BUTTONS,
90	pub modifiers: KEYBOARD_STATES,
91	pub pos: POINT,
92}
93
94#[repr(C)]
95#[derive(Debug)]
96/// Message to notify Sciter about keyboard input.
97pub struct SCITER_X_MSG_KEY
98{
99	pub header: SCITER_X_MSG,
100
101	pub event: KEY_EVENTS,
102	pub code: UINT,
103	pub modifiers: KEYBOARD_STATES,
104}
105
106#[repr(C)]
107#[derive(Debug)]
108/// Message to notify Sciter about window focus change.
109pub struct SCITER_X_MSG_FOCUS
110{
111	pub header: SCITER_X_MSG,
112
113	pub enter: BOOL,
114}
115
116#[repr(C)]
117#[derive(Debug)]
118/// Give Sciter a chance to process animations, timers and other timed things.
119pub struct SCITER_X_MSG_HEARTBIT
120{
121	pub header: SCITER_X_MSG,
122
123	/// Absolute time in milliseconds.
124	pub time: UINT,
125}
126
127#[repr(C)]
128#[derive(Copy, Clone)]
129#[derive(Debug, PartialOrd, PartialEq)]
130/// `SCITER_X_MSG_PAINT` rendering targets.
131pub enum SCITER_PAINT_TARGET_TYPE
132{
133	/// Default target - OpenGL window surface.
134	SPT_DEFAULT   = 0,
135
136	/// Bitmap target.
137	SPT_RECEIVER  = 1,
138
139	/// `IDXGISurface` target (since 4.4.3.27).
140	SPT_SURFACE = 2,
141}
142
143/// Message to paint view to the provided target (HDC or callback).
144#[repr(C)]
145pub struct SCITER_X_MSG_PAINT
146{
147	pub header: SCITER_X_MSG,
148	pub element: HELEMENT,
149	pub isFore: BOOL,
150	pub targetType: SCITER_PAINT_TARGET_TYPE,
151
152	// union {
153	// HDC or LPVOID
154	pub context: LPVOID,
155	pub callback: Option<ELEMENT_BITMAP_RECEIVER>,
156	// }
157}
158
159/// Sciter.Lite key codes.
160///
161/// The table matches the [GLFW keyboard keys](https://www.glfw.org/docs/3.3/group__keys.html).
162pub mod key_codes
163{
164	#[repr(C)]
165	#[derive(Copy, Clone)]
166	#[derive(Debug, PartialOrd, PartialEq)]
167	/// The same keys, but wrapped as a enum.
168	pub enum KEYBOARD_CODES {
169  KB_SPACE              = 32,
170  KB_APOSTROPHE         = 39,  /* ' */
171	KB_COMMA              = 44,  /* , */
172	// KB_QUOTE = KB_COMMA,
173  KB_MINUS              = 45,  /* - */
174  KB_PERIOD             = 46,  /* . */
175  KB_SLASH              = 47,  /* / */
176  KB_0                  = 48,
177  KB_1                  = 49,
178  KB_2                  = 50,
179  KB_3                  = 51,
180  KB_4                  = 52,
181  KB_5                  = 53,
182  KB_6                  = 54,
183  KB_7                  = 55,
184  KB_8                  = 56,
185  KB_9                  = 57,
186  KB_SEMICOLON          = 59,  /* ; */
187  KB_EQUAL              = 61,  /* = */
188  KB_A                  = 65,
189  KB_B                  = 66,
190  KB_C                  = 67,
191  KB_D                  = 68,
192  KB_E                  = 69,
193  KB_F                  = 70,
194  KB_G                  = 71,
195  KB_H                  = 72,
196  KB_I                  = 73,
197  KB_J                  = 74,
198  KB_K                  = 75,
199  KB_L                  = 76,
200  KB_M                  = 77,
201  KB_N                  = 78,
202  KB_O                  = 79,
203  KB_P                  = 80,
204  KB_Q                  = 81,
205  KB_R                  = 82,
206  KB_S                  = 83,
207  KB_T                  = 84,
208  KB_U                  = 85,
209  KB_V                  = 86,
210  KB_W                  = 87,
211  KB_X                  = 88,
212  KB_Y                  = 89,
213  KB_Z                  = 90,
214	KB_LEFT_BRACKET       = 91,  /* [ */
215	// KB_LEFTBRACKET = KB_LEFT_BRACKET,
216  KB_BACKSLASH          = 92,  /* \ */
217	KB_RIGHT_BRACKET      = 93,  /* ] */
218	// KB_RIGHTBRACKET = KB_RIGHT_BRACKET,
219  KB_GRAVE_ACCENT       = 96,  /* ` */
220	KB_WORLD_1            = 161, /* non-US #1 */
221	// KB_DOT = KB_WORLD_1,
222  KB_WORLD_2            = 162, /* non-US #2 */
223
224/* Function keys */
225  KB_ESCAPE             = 256,
226	KB_ENTER              = 257,
227	// KB_RETURN = KB_ENTER,
228  KB_TAB                = 258,
229	KB_BACKSPACE          = 259,
230	// KB_BACK = KB_BACKSPACE,
231  KB_INSERT             = 260,
232  KB_DELETE             = 261,
233  KB_RIGHT              = 262,
234  KB_LEFT               = 263,
235  KB_DOWN               = 264,
236  KB_UP                 = 265,
237  KB_PAGE_UP            = 266,
238	// KB_PRIOR = KB_PAGE_UP,
239  KB_PAGE_DOWN          = 267,
240	// KB_NEXT = KB_PAGE_DOWN,
241  KB_HOME               = 268,
242  KB_END                = 269,
243  KB_CAPS_LOCK          = 280,
244	// KB_CAPITAL = KB_CAPS_LOCK,
245  KB_SCROLL_LOCK        = 281,
246	// KB_SCROLL = KB_SCROLL_LOCK,
247  KB_NUM_LOCK           = 282,
248	// KB_NUMLOCK = KB_NUM_LOCK,
249  KB_PRINT_SCREEN       = 283,
250  KB_PAUSE              = 284,
251  KB_F1                 = 290,
252  KB_F2                 = 291,
253  KB_F3                 = 292,
254  KB_F4                 = 293,
255  KB_F5                 = 294,
256  KB_F6                 = 295,
257  KB_F7                 = 296,
258  KB_F8                 = 297,
259  KB_F9                 = 298,
260  KB_F10                = 299,
261  KB_F11                = 300,
262  KB_F12                = 301,
263  KB_F13                = 302,
264  KB_F14                = 303,
265  KB_F15                = 304,
266  KB_F16                = 305,
267  KB_F17                = 306,
268  KB_F18                = 307,
269  KB_F19                = 308,
270  KB_F20                = 309,
271  KB_F21                = 310,
272  KB_F22                = 311,
273  KB_F23                = 312,
274  KB_F24                = 313,
275  KB_F25                = 314,
276  KB_NUMPAD0            = 320,
277  KB_NUMPAD1            = 321,
278  KB_NUMPAD2            = 322,
279  KB_NUMPAD3            = 323,
280  KB_NUMPAD4            = 324,
281  KB_NUMPAD5            = 325,
282  KB_NUMPAD6            = 326,
283  KB_NUMPAD7            = 327,
284  KB_NUMPAD8            = 328,
285  KB_NUMPAD9            = 329,
286  KB_NUMPAD_DECIMAL     = 330,
287	// KB_DECIMAL = KB_NUMPAD_DECIMAL, KB_SEPARATOR = KB_DECIMAL,
288  KB_NUMPAD_DIVIDE      = 331,
289	// KB_DIVIDE = KB_NUMPAD_DIVIDE,
290  KB_NUMPAD_MULTIPLY    = 332,
291	// KB_MULTIPLY = KB_NUMPAD_MULTIPLY,
292  KB_NUMPAD_SUBTRACT    = 333,
293	// KB_SUBTRACT = KB_NUMPAD_SUBTRACT,
294  KB_NUMPAD_ADD         = 334,
295	// KB_ADD = KB_NUMPAD_ADD, KB_PLUS = KB_ADD,
296  KB_NUMPAD_ENTER       = 335,
297  KB_NUMPAD_EQUAL       = 336,
298  KB_LEFT_SHIFT         = 340,
299	// KB_SHIFT = KB_LEFT_SHIFT,
300  KB_LEFT_CONTROL       = 341,
301	// KB_CONTROL = KB_LEFT_CONTROL, KB_SHORTCUT = KB_CONTROL,
302  KB_LEFT_ALT           = 342,
303  KB_LEFT_SUPER         = 343,
304  KB_RIGHT_SHIFT        = 344,
305  KB_RIGHT_CONTROL      = 345,
306  KB_RIGHT_ALT          = 346,
307  KB_RIGHT_SUPER        = 347,
308	KB_MENU               = 348,
309}
310
311  pub const KB_SPACE            : u32 = 32;
312  pub const KB_APOSTROPHE       : u32 = 39;  /* ' */
313	pub const KB_COMMA            : u32 = 44;  /* , */
314	pub const KB_QUOTE : u32 = KB_COMMA;
315  pub const KB_MINUS            : u32 = 45;  /* - */
316  pub const KB_PERIOD           : u32 = 46;  /* . */
317	pub const KB_SLASH            : u32 = 47;  /* / */
318
319  pub const KB_0                : u32 = 48;
320  pub const KB_1                : u32 = 49;
321  pub const KB_2                : u32 = 50;
322  pub const KB_3                : u32 = 51;
323  pub const KB_4                : u32 = 52;
324  pub const KB_5                : u32 = 53;
325  pub const KB_6                : u32 = 54;
326  pub const KB_7                : u32 = 55;
327  pub const KB_8                : u32 = 56;
328	pub const KB_9                : u32 = 57;
329
330  pub const KB_SEMICOLON        : u32 = 59;  /* ; */
331	pub const KB_EQUAL            : u32 = 61;  /* = */
332
333  pub const KB_A                : u32 = 65;
334  pub const KB_B                : u32 = 66;
335  pub const KB_C                : u32 = 67;
336  pub const KB_D                : u32 = 68;
337  pub const KB_E                : u32 = 69;
338  pub const KB_F                : u32 = 70;
339  pub const KB_G                : u32 = 71;
340  pub const KB_H                : u32 = 72;
341  pub const KB_I                : u32 = 73;
342  pub const KB_J                : u32 = 74;
343  pub const KB_K                : u32 = 75;
344  pub const KB_L                : u32 = 76;
345  pub const KB_M                : u32 = 77;
346  pub const KB_N                : u32 = 78;
347  pub const KB_O                : u32 = 79;
348  pub const KB_P                : u32 = 80;
349  pub const KB_Q                : u32 = 81;
350  pub const KB_R                : u32 = 82;
351  pub const KB_S                : u32 = 83;
352  pub const KB_T                : u32 = 84;
353  pub const KB_U                : u32 = 85;
354  pub const KB_V                : u32 = 86;
355  pub const KB_W                : u32 = 87;
356  pub const KB_X                : u32 = 88;
357  pub const KB_Y                : u32 = 89;
358	pub const KB_Z                : u32 = 90;
359
360	pub const KB_LEFT_BRACKET     : u32 = 91;  /* [ */
361	pub const KB_LEFTBRACKET : u32 = KB_LEFT_BRACKET;
362  pub const KB_BACKSLASH        : u32 = 92;  /* \ */
363	pub const KB_RIGHT_BRACKET    : u32 = 93;  /* ] */
364	pub const KB_RIGHTBRACKET : u32 = KB_RIGHT_BRACKET;
365  pub const KB_GRAVE_ACCENT     : u32 = 96;  /* ` */
366	pub const KB_WORLD_1          : u32 = 161; /* non-US #1 */
367	pub const KB_DOT : u32 = KB_WORLD_1;
368  pub const KB_WORLD_2          : u32 = 162; /* non-US #2 */
369
370/* Function keys */
371  pub const KB_ESCAPE           : u32 = 256;
372	pub const KB_ENTER            : u32 = 257;
373	pub const KB_RETURN : u32 = KB_ENTER;
374  pub const KB_TAB              : u32 = 258;
375	pub const KB_BACKSPACE        : u32 = 259;
376	pub const KB_BACK : u32 = KB_BACKSPACE;
377  pub const KB_INSERT           : u32 = 260;
378  pub const KB_DELETE           : u32 = 261;
379  pub const KB_RIGHT            : u32 = 262;
380  pub const KB_LEFT             : u32 = 263;
381  pub const KB_DOWN             : u32 = 264;
382  pub const KB_UP               : u32 = 265;
383	pub const KB_PAGE_UP          : u32 = 266;
384	pub const KB_PRIOR : u32 = KB_PAGE_UP;
385	pub const KB_PAGE_DOWN        : u32 = 267;
386	pub const KB_NEXT : u32 = KB_PAGE_DOWN;
387  pub const KB_HOME             : u32 = 268;
388  pub const KB_END              : u32 = 269;
389	pub const KB_CAPS_LOCK        : u32 = 280;
390	pub const KB_CAPITAL : u32 = KB_CAPS_LOCK;
391	pub const KB_SCROLL_LOCK      : u32 = 281;
392	pub const KB_SCROLL : u32 = KB_SCROLL_LOCK;
393	pub const KB_NUM_LOCK         : u32 = 282;
394	pub const KB_NUMLOCK : u32 = KB_NUM_LOCK;
395  pub const KB_PRINT_SCREEN     : u32 = 283;
396	pub const KB_PAUSE            : u32 = 284;
397
398  pub const KB_F1               : u32 = 290;
399  pub const KB_F2               : u32 = 291;
400  pub const KB_F3               : u32 = 292;
401  pub const KB_F4               : u32 = 293;
402  pub const KB_F5               : u32 = 294;
403  pub const KB_F6               : u32 = 295;
404  pub const KB_F7               : u32 = 296;
405  pub const KB_F8               : u32 = 297;
406  pub const KB_F9               : u32 = 298;
407  pub const KB_F10              : u32 = 299;
408  pub const KB_F11              : u32 = 300;
409  pub const KB_F12              : u32 = 301;
410  pub const KB_F13              : u32 = 302;
411  pub const KB_F14              : u32 = 303;
412  pub const KB_F15              : u32 = 304;
413  pub const KB_F16              : u32 = 305;
414  pub const KB_F17              : u32 = 306;
415  pub const KB_F18              : u32 = 307;
416  pub const KB_F19              : u32 = 308;
417  pub const KB_F20              : u32 = 309;
418  pub const KB_F21              : u32 = 310;
419  pub const KB_F22              : u32 = 311;
420  pub const KB_F23              : u32 = 312;
421  pub const KB_F24              : u32 = 313;
422	pub const KB_F25              : u32 = 314;
423
424  pub const KB_NUMPAD0          : u32 = 320;
425  pub const KB_NUMPAD1          : u32 = 321;
426  pub const KB_NUMPAD2          : u32 = 322;
427  pub const KB_NUMPAD3          : u32 = 323;
428  pub const KB_NUMPAD4          : u32 = 324;
429  pub const KB_NUMPAD5          : u32 = 325;
430  pub const KB_NUMPAD6          : u32 = 326;
431  pub const KB_NUMPAD7          : u32 = 327;
432  pub const KB_NUMPAD8          : u32 = 328;
433	pub const KB_NUMPAD9          : u32 = 329;
434
435	pub const KB_NUMPAD_DECIMAL   : u32 = 330;
436	pub const KB_DECIMAL : u32 = KB_NUMPAD_DECIMAL;
437	pub const KB_SEPARATOR : u32 = KB_DECIMAL;
438	pub const KB_NUMPAD_DIVIDE    : u32 = 331;
439	pub const KB_DIVIDE : u32 = KB_NUMPAD_DIVIDE;
440	pub const KB_NUMPAD_MULTIPLY  : u32 = 332;
441	pub const KB_MULTIPLY : u32 = KB_NUMPAD_MULTIPLY;
442	pub const KB_NUMPAD_SUBTRACT  : u32 = 333;
443	pub const KB_SUBTRACT : u32 = KB_NUMPAD_SUBTRACT;
444	pub const KB_NUMPAD_ADD       : u32 = 334;
445	pub const KB_ADD : u32 = KB_NUMPAD_ADD;
446	pub const KB_PLUS : u32 = KB_ADD;
447  pub const KB_NUMPAD_ENTER     : u32 = 335;
448	pub const KB_NUMPAD_EQUAL     : u32 = 336;
449
450	pub const KB_LEFT_SHIFT       : u32 = 340;
451	pub const KB_SHIFT : u32 = KB_LEFT_SHIFT;
452	pub const KB_LEFT_CONTROL     : u32 = 341;
453	pub const KB_CONTROL : u32 = KB_LEFT_CONTROL;
454	pub const KB_SHORTCUT : u32 = KB_CONTROL;
455  pub const KB_LEFT_ALT         : u32 = 342;
456  pub const KB_LEFT_SUPER       : u32 = 343;
457  pub const KB_RIGHT_SHIFT      : u32 = 344;
458  pub const KB_RIGHT_CONTROL    : u32 = 345;
459  pub const KB_RIGHT_ALT        : u32 = 346;
460  pub const KB_RIGHT_SUPER      : u32 = 347;
461  pub const KB_MENU             : u32 = 348;
462}