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
34#define LPK_SPACE_AS_ESC 250000 /* Returned by lg_wait_for_any_key_pressed_or_left_click() if <space> was pressed */
35
36typedef struct {
37 /* Linux */
38 uint8_t arrow_keys_state; /* LEFT, RIGHT, UP, DOWN */
39 zboolean kmod_ctrl;
40 zboolean kmod_shift;
41 zboolean kmod_alt;
42 uint32_t last_pressed_key;
43 /* Android (touchscreen) */
44 lg_finger_down_loc finger_down_loc; /* Logical OR of values */
45 float x;
46 float y;
47 /* Mouse or touchscreen */
48 uint32_t tzw_i; /* Index + 1 of clicked/tapped TZW area in array */
49 /* Cam/object motions and rotations = -1, 0, 1 */
50 int move_forward; /* Z transl */
51 int move_up; /* Y transl - not an aircraft motion */
52 int cam_truck; /* X transl - not an aircraft motion */
53 /* Yaw/Pitch/Roll = -1, 0, 1 */ /* Aircraft/flight simulator standard order */
54 int yaw;
55 int pitch;
56 int roll;
57 /* Orbit cam */
58 int h_orbit;
59 int v_orbit;
60 /* Mouse inputs */
61 zboolean left_click;
62 zboolean right_click;
63 int mouse_x;
64 int mouse_y;
65 int dx;
66 int dy;
67 int dz_wheel; /* Mouse wheel also set move_forward */
68 float thrust;
69 /* Apply for keyboard and mouse */
70 zboolean slow_motion;
72
73/*
74 * TZ/tz means Touch Zone (not Time Zone)
75 */
76typedef enum {
77 TZ_LEFT,
78 TZ_H_CENTER,
79 TZ_RIGHT,
80 TZ_BOTTOM,
81 TZ_V_CENTER,
82 TZ_TOP
83} lg_touch_zone;
84
85/* Stuff defined in lg_win.h -
86#define N_TZW_MAX 1024
87
88typedef struct {
89 LG_Window win;
90 LG_Color_u color;
91 Rec2Di area;
92} LG_TouchZoneWindow;
93
94// Array of all TZ wins for one frame
95typedef struct {
96 LG_TouchZoneWindow *tzw[N_TZW_MAX];
97} LG_TZW_Array;
98*/
99
100#define TZW_ARROW_POINTS_NUM 7
101
102typedef enum {
103 TZW_NOTHING,
104 TZW_RECTANGLE,
105 TZW_RECT_CORNERS,
106 TZW_ARROW_UP,
107 TZW_ARROW_DOWN,
108 TZW_ARROW_LEFT,
109 TZW_ARROW_RIGHT,
110 TZW_DOUBLE_ARROW_HORIZ,
111 TZW_DOUBLE_ARROW_VERT,
112 TZW_TRIANGLE_LEFT,
113 TZW_TRIANGLE_RIGHT,
114 TZW_TRIANGLE_UP,
115 TZW_TRIANGLE_DOWN
116} lg_tzw_type;
117
118/* Helper struct to deal with TZ win area rects */
119typedef struct {
120 Rec2Di *r[N_TZW_MAX];
121 Rec2Di r0[N_TZW_MAX];
123
125
127
128LG_TouchZoneWindow *lg_tzwin_new(const char *, zboolean, LG_Color_u, int, int, TTF_Font *);
129
130void lg_tzwin_show(LG_TouchZoneWindow *, lg_tzw_type);
131
133
135
137
139
140void lg_draw_arrow(Rec2Di r, LG_Color_u c, lg_tzw_type);
141
142void lg_rectangle_to_arrow(Rec2Di, lg_tzw_type, Point2Di *[]);
143
144void lg_draw_triangle(Rec2Di, LG_Color_u, lg_tzw_type);
145
147
149
151
153
155
157
159
161
163
165
166const char **lg_camcontrols_keys_str();
167
168#endif /* LG_UI_H */
zboolean lg_tzwin_add_to_array(LG_TZW_Array *tzw_array, LG_TouchZoneWindow *tzwin)
Definition lg_ui.c:809
void lg_tzwin_draw_bg(LG_TouchZoneWindow *tzwin, LG_Color_u bg_color)
Definition lg_ui.c:480
Rec2Di lg_tzwin_get_area(LG_TouchZoneWindow *tzwin)
Definition lg_ui.c:505
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:853
void lg_rectangle_to_arrow(Rec2Di r, lg_tzw_type arrow_type, Point2Di *p[])
Definition lg_ui.c:576
void lg_draw_arrow(Rec2Di r, LG_Color_u c, lg_tzw_type type)
Definition lg_ui.c:553
LG_TZW_Array * lg_tzw_array_new()
Definition lg_ui.c:790
void lg_tzw_array_free_all_tzwin(LG_TZW_Array *tzw_array)
Definition lg_ui.c:874
const char ** lg_camcontrols_keys_str()
Definition lg_ui.c:981
void lg_flush_in_clicks(LG_InputState *in)
Definition lg_ui.c:914
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:733
void lg_draw_triangle(Rec2Di r, LG_Color_u c, lg_tzw_type type)
Definition lg_ui.c:699
void lg_draw_rect_corners(Rec2Di r, LG_Color_u c, int len)
Definition lg_ui.c:522
void lg_input_state_info(LG_InputState *in)
Definition lg_ui.c:927
void lg_tzw_array_free_all_tzwin_after(LG_TZW_Array *tzw_array, uint32_t next_index)
Definition lg_ui.c:885
void lg_tzw_array_free(LG_TZW_Array *tzw_array)
Definition lg_ui.c:904
void lg_tzwin_free(LG_TouchZoneWindow *tzwin)
Definition lg_ui.c:492
LG_TZRec_Array lg_tzrec_array_from_tzw_array(LG_TZW_Array *tzw_array)
Definition lg_ui.c:829
Definition lg_vertex.h:111
Definition lg_ui.h:36
Definition lg_ui.h:119
Definition lg_wins.h:99
Definition lg_wins.h:92
Definition lg_gr_func.h:15
Definition lg_gr_func.h:49