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 /* Apply for keyboard and mouse */
66 zboolean slow_motion;
68
69/*
70 * TZ/tz means Touch Zone (not Time Zone)
71 */
72typedef enum {
73 TZ_LEFT,
74 TZ_H_CENTER,
75 TZ_RIGHT,
76 TZ_BOTTOM,
77 TZ_V_CENTER,
78 TZ_TOP
79} lg_touch_zone;
80
81/* Stuff defined in lg_win.h -
82#define N_TZW_MAX 1024
83
84typedef struct {
85 LG_Window win;
86 LG_Color_u color;
87 Rec2Di area;
88} LG_TouchZoneWindow;
89
90// Array of all TZ wins for one frame
91typedef struct {
92 LG_TouchZoneWindow *tzw[N_TZW_MAX];
93} LG_TZW_Array;
94*/
95
96#define TZW_ARROW_POINTS_NUM 7
97
98typedef enum {
99 TZW_NOTHING,
100 TZW_RECTANGLE,
101 TZW_RECT_CORNERS,
102 TZW_ARROW_UP,
103 TZW_ARROW_DOWN,
104 TZW_ARROW_LEFT,
105 TZW_ARROW_RIGHT,
106 TZW_DOUBLE_ARROW_HORIZ,
107 TZW_DOUBLE_ARROW_VERT,
108 TZW_TRIANGLE_LEFT,
109 TZW_TRIANGLE_RIGHT,
110 TZW_TRIANGLE_UP,
111 TZW_TRIANGLE_DOWN
112} lg_tzw_type;
113
114/* Helper struct to deal with TZ win area rects */
115typedef struct {
116 Rec2Di *r[N_TZW_MAX];
117 Rec2Di r0[N_TZW_MAX];
119
121
123
124LG_TouchZoneWindow *lg_tzwin_new(const char *, zboolean, LG_Color_u, int, int, TTF_Font *);
125
126void lg_tzwin_show(LG_TouchZoneWindow *, lg_tzw_type);
127
129
131
133
134void lg_draw_arrow(Rec2Di r, LG_Color_u c, lg_tzw_type);
135
136void lg_rectangle_to_arrow(Rec2Di, lg_tzw_type, Point2Di *[]);
137
138void lg_draw_triangle(Rec2Di, LG_Color_u, lg_tzw_type);
139
141
143
145
147
149
151
153
155
157
158const char **lg_camcontrols_keys_str();
159
160#endif /* LG_UI_H */
zboolean lg_tzwin_add_to_array(LG_TZW_Array *tzw_array, LG_TouchZoneWindow *tzwin)
Definition lg_ui.c:794
Rec2Di lg_tzwin_get_area(LG_TouchZoneWindow *tzwin)
Definition lg_ui.c:490
void lg_tzwin_show(LG_TouchZoneWindow *tzwin, lg_tzw_type type)
Definition lg_ui.c:423
void lg_zero_input_state(LG_InputState *u_in)
Definition lg_ui.c:320
void lg_rectangle_to_arrow(Rec2Di r, lg_tzw_type arrow_type, Point2Di *p[])
Definition lg_ui.c:561
void lg_draw_arrow(Rec2Di r, LG_Color_u c, lg_tzw_type type)
Definition lg_ui.c:538
LG_TZW_Array * lg_tzw_array_new()
Definition lg_ui.c:775
void lg_tzw_array_free_all_tzwin(LG_TZW_Array *tzw_array)
Definition lg_ui.c:836
const char ** lg_camcontrols_keys_str()
Definition lg_ui.c:943
void lg_flush_in_clicks(LG_InputState *in)
Definition lg_ui.c:876
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:347
LG_TZRec_Array lg_rec2di_array_from_tzw_array(LG_TZW_Array *tzw_array)
Definition lg_ui.c:814
uint32_t lg_get_user_input(LG_InputState *in, LG_TZRec_Array *tzr_array)
Definition lg_ui.c:146
void lg_set_special_keys_repeat_delay(uint32_t delay)
Definition lg_ui.c:718
void lg_draw_triangle(Rec2Di r, LG_Color_u c, lg_tzw_type type)
Definition lg_ui.c:684
void lg_draw_rect_corners(Rec2Di r, LG_Color_u c, int len)
Definition lg_ui.c:507
void lg_input_state_info(LG_InputState *in)
Definition lg_ui.c:889
void lg_tzw_array_free_all_tzwin_after(LG_TZW_Array *tzw_array, uint32_t next_index)
Definition lg_ui.c:847
void lg_tzw_array_free(LG_TZW_Array *tzw_array)
Definition lg_ui.c:866
void lg_tzwin_free(LG_TouchZoneWindow *tzwin)
Definition lg_ui.c:477
Definition lg_vertex.h:111
Definition lg_ui.h:32
Definition lg_ui.h:115
Definition lg_wins.h:99
Definition lg_wins.h:92
Definition lg_gr_func.h:15
Definition lg_gr_func.h:49