LibGame v0.4.0
The LG Game Engine - Copyright (C) 2024-2026 ETMSoftware
Loading...
Searching...
No Matches
lg_ui.h
1/*
2 * LibGame - Copyright (C) Emmanuel Thomas-Maurin 2011-2026
3 * All rights reserved
4 */
5
6#ifndef LG_UI_H
7#define LG_UI_H
8
9#ifndef ANDROID_V
10# define FLUSH_KEYB_OR_TOUCHSCREEN_BUF {lg_flush_keyb_events();} /* Don't call lg_flush_mouse_events() */
11#else
12# define FLUSH_KEYB_OR_TOUCHSCREEN_BUF {lg_flush_touch_events();}
13#endif
14
15#ifndef ANDROID_V
16# define WAIT_FOR_PRESS_OR_TOUCH {lg_wait_for_any_key_pressed();}
17# define WAIT_FOR_PRESS_OR_CLICK_OR_TOUCH {lg_wait_for_any_key_pressed_or_left_click();}
18#else
19# define WAIT_FOR_PRESS_OR_TOUCH {lg_wait_for_finger_down(NULL, NULL);}
20# define WAIT_FOR_PRESS_OR_CLICK_OR_TOUCH {lg_wait_for_finger_down(NULL, NULL);} /* ???? - whatever */
21#endif
22
23#define SPECIAL_KEYS_REPEAT_DELAY 200 /* In ms */
24
25/* LPK = Last Pressed_Key */
26#define LPK_MOUSE_CLICK_ACTIVITY 50000 /* Returned (+ in->tzw_i) by lg_get_user_input() as last pressed key in case of mouse activity */
27
28#define LPK_TOUCH_ACTIVITY 100000 /* Returned (+ in->tzw_i) by lg_get_user_input() as last pressed key in case of touch activity */
29
30typedef struct {
31 /* Linux */
32 uint8_t arrow_keys_state; /* LEFT, RIGHT, UP, DOWN */
33 zboolean kmod_ctrl;
34 zboolean kmod_shift;
35 zboolean kmod_alt;
36 uint32_t last_pressed_key;
37 /* Android (touchscreen) */
38 lg_finger_down_loc finger_down_loc; /* Logical OR of values */
39 float x;
40 float y;
41 /* Mouse or touchscreen */
42 uint32_t tzw_i; /* Index + 1 of clicked/tapped TZW area in array */
43 /* Cam/object motions and rotations = -1, 0, 1 */
44 int move_forward; /* Z transl */
45 int move_up; /* Y transl - not an aircraft motion */
46 int cam_truck; /* X transl - not an aircraft motion */
47 /* Yaw/Pitch/Roll = -1, 0, 1 */ /* Aircraft/flight simulator standard order */
48 int yaw;
49 int pitch;
50 int roll;
51 /* Orbit cam */
52 int h_orbit;
53 int v_orbit;
54 /* Mouse inputs */
55 zboolean left_click;
56 zboolean right_click;
57 int mouse_x;
58 int mouse_y;
59 int dx;
60 int dy;
61 int dz_wheel; /* Mouse wheel also set move_forward */
62 float thrust;
63 /* Appply for keyboard and mouse */
64 zboolean slow_motion;
66
67/*
68 * TZ/tz means Touch Zone (not Time Zone)
69 */
70typedef enum {
71 TZ_LEFT,
72 TZ_H_CENTER,
73 TZ_RIGHT,
74 TZ_BOTTOM,
75 TZ_V_CENTER,
76 TZ_TOP
77} lg_touch_zone;
78
79typedef struct {
80 LG_Window win;
81 LG_Color_u color;
82 Rec2Di area;
84
85#define TZW_ARROW_POINTS_NUM 7
86
87typedef enum {
88 TZW_RECTANGLE,
89 TZW_RECT_CORNERS,
90 TZW_ARROW_UP,
91 TZW_ARROW_DOWN,
92 TZW_ARROW_LEFT,
93 TZW_ARROW_RIGHT,
94 TZW_DOUBLE_ARROW_HORIZ,
95 TZW_DOUBLE_ARROW_VERT,
96 TZW_TRIANGLE_LEFT,
97 TZW_TRIANGLE_RIGHT,
98 TZW_TRIANGLE_UP,
99 TZW_TRIANGLE_DOWN
100} lg_tzw_type;
101
102#define N_TZW_MAX 256
103
104/* Array of all TZ wins for one frame */
105typedef struct {
106 LG_TouchZoneWindow *tzw[N_TZW_MAX];
108
109/* Helper struct to deal with TZ win area rects */
110typedef struct {
111 Rec2Di *r[N_TZW_MAX];
112 Rec2Di r0[N_TZW_MAX];
114
115const char **lg_camcontrols_keys_str();
116
118
120
121LG_TouchZoneWindow *lg_tzwin_new(const char *, zboolean, LG_Color_u, int, int, TTF_Font *);
122
123void lg_tzwin_show(LG_TouchZoneWindow *, lg_tzw_type);
124
126
128
130
131void lg_draw_arrow(Rec2Di r, LG_Color_u c, lg_tzw_type);
132
133void lg_rectangle_to_arrow(Rec2Di, lg_tzw_type, Point2Di *[]);
134
135void lg_draw_triangle(Rec2Di, LG_Color_u, lg_tzw_type);
136
138
140
142
144
146
148
150
152
154
155#endif /* LG_UI_H */
zboolean lg_tzwin_add_to_array(LG_TZW_Array *tzw_array, LG_TouchZoneWindow *tzwin)
Definition lg_ui.c:817
Rec2Di lg_tzwin_get_area(LG_TouchZoneWindow *tzwin)
Definition lg_ui.c:513
void lg_tzwin_show(LG_TouchZoneWindow *tzwin, lg_tzw_type type)
Definition lg_ui.c:446
void lg_zero_input_state(LG_InputState *u_in)
Definition lg_ui.c:346
void lg_rectangle_to_arrow(Rec2Di r, lg_tzw_type arrow_type, Point2Di *p[])
Definition lg_ui.c:584
void lg_draw_arrow(Rec2Di r, LG_Color_u c, lg_tzw_type type)
Definition lg_ui.c:561
LG_TZW_Array * lg_tzw_array_new()
Definition lg_ui.c:798
void lg_tzw_array_free_all_tzwin(LG_TZW_Array *tzw_array)
Definition lg_ui.c:859
const char ** lg_camcontrols_keys_str()
Definition lg_ui.c:106
void lg_flush_in_clicks(LG_InputState *in)
Definition lg_ui.c:899
LG_TouchZoneWindow * lg_tzwin_new(const char *str, zboolean no_margin, LG_Color_u text_color, int x_loc, int y_loc, TTF_Font *f)
Definition lg_ui.c:371
LG_TZRec_Array lg_rec2di_array_from_tzw_array(LG_TZW_Array *tzw_array)
Definition lg_ui.c:837
void lg_set_special_keys_repeat_delay(uint32_t delay)
Definition lg_ui.c:741
void lg_draw_triangle(Rec2Di r, LG_Color_u c, lg_tzw_type type)
Definition lg_ui.c:707
void lg_draw_rect_corners(Rec2Di r, LG_Color_u c, int len)
Definition lg_ui.c:530
void lg_input_state_info(LG_InputState *in)
Definition lg_ui.c:912
uint32_t lg_get_user_input(LG_InputState *in, LG_TZW_Array *tzw_array)
Definition lg_ui.c:177
void lg_tzw_array_free_all_tzwin_after(LG_TZW_Array *tzw_array, uint32_t next_index)
Definition lg_ui.c:870
void lg_tzw_array_free(LG_TZW_Array *tzw_array)
Definition lg_ui.c:889
void lg_tzwin_free(LG_TouchZoneWindow *tzwin)
Definition lg_ui.c:500
Definition lg_vertex.h:111
Definition lg_ui.h:30
Definition lg_ui.h:110
Definition lg_ui.h:105
Definition lg_ui.h:79
Definition lg_wins.h:45
Definition lg_gr_func.h:15
Definition lg_gr_func.h:49