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(NULL, NULL);}
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
32#define LPK_LEFT_CLICK 200000 /* Returned by lg_wait_for_any_key_pressed_or_left_click() if left-clicked occured */
33
34typedef struct {
35 /* Linux */
36 uint8_t arrow_keys_state; /* LEFT, RIGHT, UP, DOWN */
37 zboolean kmod_ctrl;
38 zboolean kmod_shift;
39 zboolean kmod_alt;
40 uint32_t last_pressed_key;
41 /* Android (touchscreen) */
42 lg_finger_down_loc finger_down_loc; /* Logical OR of values */
43 float x;
44 float y;
45 /* Mouse or touchscreen */
46 uint32_t tzw_i; /* Index + 1 of clicked/tapped TZW area in array */
47 /* Cam/object motions and rotations = -1, 0, 1 */
48 int move_forward; /* Z transl */
49 int move_up; /* Y transl - not an aircraft motion */
50 int cam_truck; /* X transl - not an aircraft motion */
51 /* Yaw/Pitch/Roll = -1, 0, 1 */ /* Aircraft/flight simulator standard order */
52 int yaw;
53 int pitch;
54 int roll;
55 /* Orbit cam */
56 int h_orbit;
57 int v_orbit;
58 /* Mouse inputs */
59 zboolean left_click;
60 zboolean right_click;
61 int mouse_x;
62 int mouse_y;
63 int dx;
64 int dy;
65 int dz_wheel; /* Mouse wheel also set move_forward */
66 float thrust;
67 /* Apply for keyboard and mouse */
68 zboolean slow_motion;
70
71/*
72 * TZ/tz means Touch Zone (not Time Zone)
73 */
74typedef enum {
75 TZ_LEFT,
76 TZ_H_CENTER,
77 TZ_RIGHT,
78 TZ_BOTTOM,
79 TZ_V_CENTER,
80 TZ_TOP
81} lg_touch_zone;
82
83/* Stuff defined in lg_win.h -
84#define N_TZW_MAX 1024
85
86typedef struct {
87 LG_Window win;
88 LG_Color_u color;
89 Rec2Di area;
90} LG_TouchZoneWindow;
91
92// Array of all TZ wins for one frame
93typedef struct {
94 LG_TouchZoneWindow *tzw[N_TZW_MAX];
95} LG_TZW_Array;
96*/
97
98#define TZW_ARROW_POINTS_NUM 7
99
100typedef enum {
101 TZW_NOTHING,
102 TZW_RECTANGLE,
103 TZW_RECT_CORNERS,
104 TZW_ARROW_UP,
105 TZW_ARROW_DOWN,
106 TZW_ARROW_LEFT,
107 TZW_ARROW_RIGHT,
108 TZW_DOUBLE_ARROW_HORIZ,
109 TZW_DOUBLE_ARROW_VERT,
110 TZW_TRIANGLE_LEFT,
111 TZW_TRIANGLE_RIGHT,
112 TZW_TRIANGLE_UP,
113 TZW_TRIANGLE_DOWN
114} lg_tzw_type;
115
116/* Helper struct to deal with TZ win area rects */
117typedef struct {
118 Rec2Di *r[N_TZW_MAX];
119 Rec2Di r0[N_TZW_MAX];
121
123
125
126LG_TouchZoneWindow *lg_tzwin_new(const char *, zboolean, LG_Color_u, int, int, TTF_Font *);
127
128void lg_tzwin_show(LG_TouchZoneWindow *, lg_tzw_type);
129
131
133
135
136void lg_draw_arrow(Rec2Di r, LG_Color_u c, lg_tzw_type);
137
138void lg_rectangle_to_arrow(Rec2Di, lg_tzw_type, Point2Di *[]);
139
140void lg_draw_triangle(Rec2Di, LG_Color_u, lg_tzw_type);
141
143
145
147
149
151
153
155
157
159
161
162const char **lg_camcontrols_keys_str();
163
164#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
LG_TZRec_Array lg_tzrec_array_from_rec2di_array(Rec2Di r[], int l)
Definition lg_ui.c:838
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:859
const char ** lg_camcontrols_keys_str()
Definition lg_ui.c:966
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:347
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:912
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:477
LG_TZRec_Array lg_tzrec_array_from_tzw_array(LG_TZW_Array *tzw_array)
Definition lg_ui.c:814
Definition lg_vertex.h:111
Definition lg_ui.h:34
Definition lg_ui.h:117
Definition lg_wins.h:99
Definition lg_wins.h:92
Definition lg_gr_func.h:15
Definition lg_gr_func.h:49