src/ascension/input.h

Mon, 16 Jun 2025 20:58:51 +0200

author
Mike Becker <universe@uap-core.de>
date
Mon, 16 Jun 2025 20:58:51 +0200
changeset 156
bd15eeaa88c0
parent 145
a3231310d66d
permissions
-rw-r--r--

change order of members in asc_behavior_create_args so that you can just specify the func without designators

63
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 * Copyright 2024 Mike Becker. All rights reserved.
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 *
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 * Redistribution and use in source and binary forms, with or without
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * modification, are permitted provided that the following conditions are met:
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 *
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 * 1. Redistributions of source code must retain the above copyright
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * notice, this list of conditions and the following disclaimer.
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 *
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 * 2. Redistributions in binary form must reproduce the above copyright
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * notice, this list of conditions and the following disclaimer in the
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * documentation and/or other materials provided with the distribution.
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 *
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * POSSIBILITY OF SUCH DAMAGE.
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 */
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28 #ifndef ASCENSION_INPUT_H
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29 #define ASCENSION_INPUT_H
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
31 #include <SDL2/SDL_scancode.h>
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
32
145
a3231310d66d consistent naming of structs and their typedefs
Mike Becker <universe@uap-core.de>
parents: 141
diff changeset
33 typedef struct asc_input_s {
68
823c03733e42 add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents: 65
diff changeset
34 /**
823c03733e42 add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents: 65
diff changeset
35 * The last X position of the mouse in \c mouse_window.
823c03733e42 add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents: 65
diff changeset
36 */
63
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
37 int mouse_x;
68
823c03733e42 add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents: 65
diff changeset
38 /**
823c03733e42 add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents: 65
diff changeset
39 * The last Y position of the mouse in \c mouse_window.
823c03733e42 add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents: 65
diff changeset
40 */
63
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
41 int mouse_y;
68
823c03733e42 add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents: 65
diff changeset
42 /**
823c03733e42 add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents: 65
diff changeset
43 * The mouse movement in X direction since the last frame.
823c03733e42 add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents: 65
diff changeset
44 */
63
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
45 int mouse_xrel;
68
823c03733e42 add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents: 65
diff changeset
46 /**
823c03733e42 add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents: 65
diff changeset
47 * The mouse movement in Y direction since the last frame.
823c03733e42 add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents: 65
diff changeset
48 */
63
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
49 int mouse_yrel;
68
823c03733e42 add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents: 65
diff changeset
50 /**
823c03733e42 add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents: 65
diff changeset
51 * The index of the window, the mouse was last seen in.
823c03733e42 add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents: 65
diff changeset
52 */
823c03733e42 add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents: 65
diff changeset
53 unsigned mouse_window;
141
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
54 /**
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
55 * State of the keys.
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
56 * @see asc_key_pressed()
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
57 * @see asc_key_released()
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
58 * @see asc_key_down()
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
59 * @see asc_key_up()
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
60 */
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
61 unsigned char keys[SDL_NUM_SCANCODES];
145
a3231310d66d consistent naming of structs and their typedefs
Mike Becker <universe@uap-core.de>
parents: 141
diff changeset
62 } AscInput;
63
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
63
141
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
64 #define ASC_KEY_DOWN_FLAG 1u
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
65 #define ASC_KEY_PRESS_FLAG 2u
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
66 #define ASC_KEY_RELEASE_FLAG 4u
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
67
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
68 #define ASC_KEY(name) SDL_SCANCODE_##name
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
69
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
70 #define asc_key_down(scancode) \
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
71 (asc_context.input.keys[scancode] & ASC_KEY_DOWN_FLAG)
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
72 #define asc_key_up(scancode) \
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
73 (asc_context.input.keys[scancode] == 0)
63
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
74 #define asc_key_pressed(scancode) \
141
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
75 (asc_context.input.keys[scancode] & ASC_KEY_PRESS_FLAG)
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
76 #define asc_key_released(scancode) \
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
77 (asc_context.input.keys[scancode] & ASC_KEY_RELEASE_FLAG)
63
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
78
65
9c44c55d327a consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents: 63
diff changeset
79 #define asc_mouse_x asc_context.input.mouse_x
9c44c55d327a consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents: 63
diff changeset
80 #define asc_mouse_y asc_context.input.mouse_y
68
823c03733e42 add mouse and window focus - resolves #382
Mike Becker <universe@uap-core.de>
parents: 65
diff changeset
81 #define asc_mouse_window asc_context.input.mouse_window
141
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
82 // TODO: think about whether this should be asc_vec2u
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
83 #define asc_mouse_pos ((asc_vec2i) {asc_mouse_x, asc_mouse_y})
65
9c44c55d327a consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents: 63
diff changeset
84
9c44c55d327a consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents: 63
diff changeset
85 #define asc_mouse_move_x asc_context.input.mouse_xrel
9c44c55d327a consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents: 63
diff changeset
86 #define asc_mouse_move_y asc_context.input.mouse_yrel
141
cd82643bb6d9 implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents: 68
diff changeset
87 #define asc_mouse_move ((asc_vec2i) {asc_mouse_move_x, asc_mouse_move_y})
65
9c44c55d327a consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents: 63
diff changeset
88
63
e3cacdd636e4 implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
diff changeset
89 #endif //ASCENSION_INPUT_H

mercurial