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
30#define LPK_SDLWINDOW_CLOSE 150000 /* Returned by lg_get_user_input() as last pressed key if the SDL window close area ([x]) was clicked */
31
32typedef struct {
33 /* Linux */
34 uint8_t arrow_keys_state; /* LEFT, RIGHT, UP, DOWN */
35 zboolean kmod_ctrl;
36 zboolean kmod_shift;
37 zboolean kmod_alt;
38 uint32_t last_pressed_key;
39 /* Android (touchscreen) */
40 lg_finger_down_loc finger_down_loc; /* Logical OR of values */
41 float x;
42 float y;
43 /* Mouse or touchscreen */
44 uint32_t tzw_i; /* Index + 1 of clicked/tapped TZW area in array */
45 /* Cam/object motions and rotations = -1, 0, 1 */
46 int move_forward; /* Z transl */
47 int move_up; /* Y transl - not an aircraft motion */
48 int cam_truck; /* X transl - not an aircraft motion */
49 /* Yaw/Pitch/Roll = -1, 0, 1 */ /* Aircraft/flight simulator standard order */
50 int yaw;
51 int pitch;
52 int roll;
53 /* Orbit cam */
54 int h_orbit;
55 int v_orbit;
56 /* Mouse inputs */
57 zboolean left_click;
58 zboolean right_click;
59 int mouse_x;
60 int mouse_y;
61 int dx;
62 int dy;
63 int dz_wheel; /* Mouse wheel also set move_forward */
64 float thrust;
65 /* Appply for keyboard and mouse */
66 zboolean slow_motion;
68
69/*
70 * Nothing done yet
71 */
72typedef struct {
73 // ...
75
76/*
77 * TZ/tz means Touch Zone (not Time Zone)
78 */
79typedef enum {
80 TZ_LEFT,
81 TZ_H_CENTER,
82 TZ_RIGHT,
83 TZ_BOTTOM,
84 TZ_V_CENTER,
85 TZ_TOP
86} lg_touch_zone;
87
88typedef struct {
89 LG_Window win;
90 LG_Color_u color;
91 Rec2Di area;
93
94#define TZW_ARROW_POINTS_NUM 7
95
96typedef enum {
97 TZW_NOTHING,
98 TZW_RECTANGLE,
99 TZW_RECT_CORNERS,
100 TZW_ARROW_UP,
101 TZW_ARROW_DOWN,
102 TZW_ARROW_LEFT,
103 TZW_ARROW_RIGHT,
104 TZW_DOUBLE_ARROW_HORIZ,
105 TZW_DOUBLE_ARROW_VERT,
106 TZW_TRIANGLE_LEFT,
107 TZW_TRIANGLE_RIGHT,
108 TZW_TRIANGLE_UP,
109 TZW_TRIANGLE_DOWN
110} lg_tzw_type;
111
112#define N_TZW_MAX 256
113
114/* Array of all TZ wins for one frame */
115typedef struct {
116 LG_TouchZoneWindow *tzw[N_TZW_MAX];
118
119/* Helper struct to deal with TZ win area rects */
120typedef struct {
121 Rec2Di *r[N_TZW_MAX];
122 Rec2Di r0[N_TZW_MAX];
124
125const char **lg_camcontrols_keys_str();
126
128
130
132
133LG_TouchZoneWindow *lg_tzwin_new(const char *, zboolean, LG_Color_u, int, int, TTF_Font *);
134
135void lg_tzwin_show(LG_TouchZoneWindow *, lg_tzw_type);
136
138
140
142
143void lg_draw_arrow(Rec2Di r, LG_Color_u c, lg_tzw_type);
144
145void lg_rectangle_to_arrow(Rec2Di, lg_tzw_type, Point2Di *[]);
146
147void lg_draw_triangle(Rec2Di, LG_Color_u, lg_tzw_type);
148
150
152
154
156
158
160
162
164
166
167#endif /* LG_UI_H */
zboolean lg_tzwin_add_to_array(LG_TZW_Array *tzw_array, LG_TouchZoneWindow *tzwin)
Definition lg_ui.c:845
Rec2Di lg_tzwin_get_area(LG_TouchZoneWindow *tzwin)
Definition lg_ui.c:541
void lg_tzwin_show(LG_TouchZoneWindow *tzwin, lg_tzw_type type)
Definition lg_ui.c:474
void lg_zero_input_state(LG_InputState *u_in)
Definition lg_ui.c:364
void lg_rectangle_to_arrow(Rec2Di r, lg_tzw_type arrow_type, Point2Di *p[])
Definition lg_ui.c:612
void lg_draw_arrow(Rec2Di r, LG_Color_u c, lg_tzw_type type)
Definition lg_ui.c:589
LG_TZW_Array * lg_tzw_array_new()
Definition lg_ui.c:826
void lg_tzw_array_free_all_tzwin(LG_TZW_Array *tzw_array)
Definition lg_ui.c:887
const char ** lg_camcontrols_keys_str()
Definition lg_ui.c:115
void lg_flush_in_clicks(LG_InputState *in)
Definition lg_ui.c:927
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:398
LG_TZRec_Array lg_rec2di_array_from_tzw_array(LG_TZW_Array *tzw_array)
Definition lg_ui.c:865
void lg_set_special_keys_repeat_delay(uint32_t delay)
Definition lg_ui.c:769
void lg_draw_triangle(Rec2Di r, LG_Color_u c, lg_tzw_type type)
Definition lg_ui.c:735
void lg_draw_rect_corners(Rec2Di r, LG_Color_u c, int len)
Definition lg_ui.c:558
void lg_input_state_info(LG_InputState *in)
Definition lg_ui.c:940
uint32_t lg_get_user_input(LG_InputState *in, LG_TZW_Array *tzw_array)
Definition lg_ui.c:188
void lg_tzw_array_free_all_tzwin_after(LG_TZW_Array *tzw_array, uint32_t next_index)
Definition lg_ui.c:898
LG_MenuSys * lg_menu_sys()
Definition lg_ui.c:376
void lg_tzw_array_free(LG_TZW_Array *tzw_array)
Definition lg_ui.c:917
void lg_tzwin_free(LG_TouchZoneWindow *tzwin)
Definition lg_ui.c:528
Definition lg_vertex.h:111
Definition lg_ui.h:32
Definition lg_ui.h:72
Definition lg_ui.h:120
Definition lg_ui.h:115
Definition lg_ui.h:88
Definition lg_wins.h:45
Definition lg_gr_func.h:15
Definition lg_gr_func.h:49