LibGame  v0.4.0
The LG Game Engine - Copyright (C) 2024-2025 ETMSoftware
lg_wins.h
1 /*
2  * LibGame - Copyright (C) Emmanuel Thomas-Maurin 2011-2025
3  * All rights reserved
4  */
5 
6 #ifndef LG_WIN_H
7 #define LG_WIN_H
8 
9 /* A few helpers for wins funcs: */
10 #define BLOCK TRUE
11 #define NO_BLOCK (!BLOCK)
12 
13 #define WITH_FRAME TRUE
14 #define FRAMELESS (!WITH_FRAME)
15 
16 #define SWAP_FB TRUE
17 #define NO_SWAP (!SWAP_FB)
18 
19 #if defined(LINUX_V) || defined(WIN32_V)
20  #define PRESS_OR_TAP_ANYTHING "Press any key ..."
21 #elif defined(ANDROID_V)
22  #define PRESS_OR_TAP_ANYTHING "Tap anywhere to continue ..."
23 #endif
24 
25 /* Fully transparent colors actually */
26 #define UNUSED_SDL_COLOR ((SDL_Color){0, 0, 0, 0})
27 #define UNUSED_LG_COLOR_U ((LG_Color_u){0, 0, 0, 0})
28 
29 #define TMP_STR_MAXLEN 1023
30 
31 #define H_PADDING 12
32 #define V_PADDING 8
33 #define BORDER_WIDTH 2
34 
35 #define LG_WIN_TXT_NBSP '~'
36 
37 /* TODO: what if win text is over 24 lines ? */
38 #define LG_WIN_N_LINES_MAX 24
39 
40 #define LG_LEFT_MARGIN 5
41 #define LG_BOTTOM_MARGIN 5
42 
43 #define LG_WIN_TIMESTAMP_MAXLEN (64 - 1)
44 
45 typedef struct {
46  int id; /* (So far) 0 -> OK, -1 -> invalid win */
47  LG_Texture *tex; /* Used inside new/open/close/free_win(), don't modify elsewhere */
48  Rec2Di text_rect;
49  int x;
50  int y;
51  /* === Don't modify === */
52  int w;
53  int h;
54  int last_open_x;
55  int last_open_y;
56  char timestamp[LG_WIN_TIMESTAMP_MAXLEN + 1];
57 } LG_Window;
58 
59 /* Wins colors */
60 #define ALL_WINS_BG_COLOR "dark-grey2"
61 #define ALL_WINS_BORDER_COLOR "dark-grey2"
62 
63 #define INFO_WIN_TEXT_COLOR "white"
64 #define INFO_WIN_BG_COLOR ALL_WINS_BG_COLOR
65 #define INFO_WIN_BORDER_COLOR ALL_WINS_BORDER_COLOR
66 #define INFO_WIN_FONT
67 #define INFO_WIN_STYLE
68 
69 #define QUESTION_WIN_TEXT_COLOR "white"
70 #define QUESTION_WIN_BG_COLOR ALL_WINS_BG_COLOR
71 #define QUESTION_WIN_BORDER_COLOR ALL_WINS_BORDER_COLOR
72 #define QUESTION_WIN_FONT
73 #define QUESTION_WIN_STYLE
74 
75 #define WARNING_WIN_TEXT_COLOR "orange"
76 #define WARNING_WIN_BG_COLOR ALL_WINS_BG_COLOR
77 #define WARNING_WIN_BORDER_COLOR ALL_WINS_BORDER_COLOR
78 #define WARNING_WIN_FONT
79 #define WARNING_WIN_STYLE
80 
81 #define ERROR_WIN_TEXT_COLOR "red"
82 #define ERROR_WIN_BG_COLOR ALL_WINS_BG_COLOR
83 #define ERROR_WIN_BORDER_COLOR ALL_WINS_BORDER_COLOR
84 #define ERROR_WIN_FONT
85 #define ERROR_WIN_STYLE
86 
87 /*
88  * Default, modifiable colors
89  * Never used:
90  * win_colors.warning[BG_I]
91  * win_colors.warning[BORDER_I]
92  * win_colors.error[BG_I],
93  * win_colors.error[BORDER_I]
94  * Almost never used:
95  * win_colors.question[BG_I]
96  * win_colors.question[BORDER_I]
97  */
98 
99 typedef struct {
100  LG_Color_u info[3]; /* Text, bg, and border */
101  LG_Color_u question[3];
102  LG_Color_u warning[3];
103  LG_Color_u error[3];
104 } LG_WinColors;
105 
106 /* and for each their indices */
107 enum {TEXT_I, BG_I, BORDER_I};
108 
109 /* Fonts things */
110 #define N_FONTS_MAX 256
111 
112 typedef struct {
113  LG_String *name;
114  LG_String *relative_path; /* Path inside the fonts folder, not relative if symlink */
115  int size;
116  TTF_Font *f;
117 } LG_Font;
118 
119 /* Font description */
120 typedef struct {
121  const char *name;
122  const char *relative_path; /* Path inside the fonts folder, not relative if symlink */
123  int size;
124 } LG_Font_Des;
125 
126 typedef struct {
127  LG_Color_u text_color;
128  zboolean with_frame;
129  LG_Color_u bg_color;
130  LG_Color_u border_color;
131  const char *font;
132 } LG_Win_Style;
133 
134 void lg_info_win_no_block(const char *, zboolean, zboolean);
135 
136 void lg_info_win(const char *, zboolean, zboolean);
137 
138 void lg_info_win_s(const char *, LG_Win_Style *); /* swap_fb */
139 
140 int lg_question_win(const char *); /* swap_fb */
141 
142 int lg_question_win_s(const char *, LG_Win_Style *); /* swap_fb */
143 
144 void lg_warning_win(const char *); /* swap_fb */
145 
146 void lg_error_win(const char *); /* swap_fb */
147 
148 char *lg_entry_win(const char *, int, int); /* swap_fb */
149 
151 
152 LG_Window lg_win(const char *, LG_Color_u, zboolean, LG_Color_u, LG_Color_u, TTF_Font *);
153 
155 
157 
158 int lg_win_open(LG_Window *, int, int);
159 
160 int lg_win_close(LG_Window *);
161 
162 void lg_win_free_tex(LG_Window *);
163 
164 zboolean is_lg_win(LG_Window *);
165 
166 int lg_get_win_w(LG_Window *);
167 
168 int lg_get_win_h(LG_Window *);
169 
171 
173 
174 char *lg_wrap_lines(const char *, TTF_Font *, int);
175 
176 void lg_fonts_list_init();
177 
179 
180 zboolean lg_font_add_to_list(const char *, const char *, int);
181 
182 LG_Font *lg_font_get(const char *);
183 
184 TTF_Font *lg_font_get_ttf(const char *);
185 
186 void lg_font_free(const char *);
187 
188 void lg_font_free_all();
189 
190 void lg_font_list_all();
191 
192 void lg_font_info(LG_Font *);
193 
194 zboolean lg_font_load_array(LG_Font_Des [], int);
195 
196 void lg_font_list_array(LG_Font_Des [], int);
197 
198 #endif /* LG_WIN_H */
lg_question_win
int lg_question_win(const char *text)
Definition: lg_wins.c:160
LG_Font
Definition: lg_wins.h:112
lg_info_win_s
void lg_info_win_s(const char *text, LG_Win_Style *style)
Definition: lg_wins.c:116
LG_Win_Style
Definition: lg_wins.h:126
lg_font_info
void lg_font_info(LG_Font *font)
Definition: lg_wins.c:1322
lg_get_win_h
int lg_get_win_h(LG_Window *win)
Definition: lg_wins.c:970
lg_font_add_to_list
zboolean lg_font_add_to_list(const char *name, const char *relative_path, int size)
Definition: lg_wins.c:1163
lg_font_list_all
void lg_font_list_all()
Definition: lg_wins.c:1305
lg_win_open
int lg_win_open(LG_Window *win, int x, int y)
Definition: lg_wins.c:830
lg_wrap_lines
char * lg_wrap_lines(const char *txt, TTF_Font *font, int max_width)
Definition: lg_wins.c:1026
lg_win_close
int lg_win_close(LG_Window *win)
Definition: lg_wins.c:900
lg_win_free_tex
void lg_win_free_tex(LG_Window *win)
Definition: lg_wins.c:914
lg_warning_win
void lg_warning_win(const char *text)
Definition: lg_wins.c:299
LG_WinColors
Definition: lg_wins.h:99
lg_font_load_array
zboolean lg_font_load_array(LG_Font_Des fonts[], int n_fonts)
Definition: lg_wins.c:1351
lg_win_open_centered
int lg_win_open_centered(LG_Window *win)
Definition: lg_wins.c:517
lg_win
LG_Window lg_win(const char *text, LG_Color_u text_color, zboolean with_frame, LG_Color_u bg_color, LG_Color_u border_color, TTF_Font *font)
Definition: lg_wins.c:556
lg_font_free
void lg_font_free(const char *name)
Definition: lg_wins.c:1257
lg_fonts_list_is_initialized
zboolean lg_fonts_list_is_initialized()
Definition: lg_wins.c:1131
lg_font_list_array
void lg_font_list_array(LG_Font_Des fonts[], int n_fonts)
Definition: lg_wins.c:1376
lg_font_free_all
void lg_font_free_all()
Definition: lg_wins.c:1282
LG_String
Definition: lg_string.h:17
lg_get_win_colors
LG_WinColors * lg_get_win_colors()
Definition: lg_wins.c:984
LG_Color_u
Definition: lg_vertex.h:111
lg_win_show_annoying_errors
void lg_win_show_annoying_errors()
Definition: lg_wins.c:807
lg_info_win
void lg_info_win(const char *text, zboolean with_frame, zboolean swap_fb)
Definition: lg_wins.c:72
lg_win_no_annoying_errors
void lg_win_no_annoying_errors()
Definition: lg_wins.c:815
lg_entry_win
char * lg_entry_win(const char *label, int x, int y)
Definition: lg_wins.c:384
lg_fonts_list_init
void lg_fonts_list_init()
Definition: lg_wins.c:1117
LG_Font_Des
Definition: lg_wins.h:120
LG_Texture
Definition: lg_textures.h:45
lg_font_get
LG_Font * lg_font_get(const char *name)
Definition: lg_wins.c:1214
lg_set_default_win_colors
void lg_set_default_win_colors()
Definition: lg_wins.c:992
LG_Window
Definition: lg_wins.h:45
lg_get_win_w
int lg_get_win_w(LG_Window *win)
Definition: lg_wins.c:957
is_lg_win
zboolean is_lg_win(LG_Window *win)
Definition: lg_wins.c:926
lg_error_win
void lg_error_win(const char *text)
Definition: lg_wins.c:334
warning
void warning(int block, const char *format,...)
Definition: lg_error.c:85
lg_info_win_no_block
void lg_info_win_no_block(const char *text, zboolean with_frame, zboolean swap_fb)
Definition: lg_wins.c:36
lg_font_get_ttf
TTF_Font * lg_font_get_ttf(const char *name)
Definition: lg_wins.c:1234
lg_question_win_s
int lg_question_win_s(const char *text, LG_Win_Style *style)
Definition: lg_wins.c:233
Rec2Di
Definition: lg_gr_func.h:49