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 #define WARNING_TIMEOUT 3000
26 
27 /* Fully transparent colors actually */
28 #define UNUSED_SDL_COLOR ((SDL_Color){0, 0, 0, 0})
29 #define UNUSED_LG_COLOR_U ((LG_Color_u){0, 0, 0, 0})
30 
31 #define TMP_STR_MAXLEN 1023
32 
33 #define H_PADDING 12
34 #define V_PADDING 8
35 #define BORDER_WIDTH 2
36 
37 #define LG_WIN_TXT_NBSP '~'
38 
39 /* TODO: what if win text is over 24 lines ? */
40 #define LG_WIN_N_LINES_MAX 24
41 
42 #define LG_LEFT_MARGIN 5
43 #define LG_BOTTOM_MARGIN 5
44 
45 #define LG_WIN_TIMESTAMP_MAXLEN (64 - 1)
46 
47 typedef struct {
48  int id; /* (So far) 0 -> OK, -1 -> invalid win */
49  LG_Texture *tex; /* Used inside new/open/close/free_win(), don't modify elsewhere */
50  Rec2Di text_rect;
51  int x;
52  int y;
53  /* === Don't modify === */
54  int w;
55  int h;
56  int last_open_x;
57  int last_open_y;
58  char timestamp[LG_WIN_TIMESTAMP_MAXLEN + 1];
59 } LG_Window;
60 
61 /* Wins colors */
62 #define ALL_WINS_BG_COLOR "dark-grey2"
63 #define ALL_WINS_BORDER_COLOR "dark-grey2"
64 
65 #define INFO_WIN_TEXT_COLOR "white"
66 #define INFO_WIN_BG_COLOR ALL_WINS_BG_COLOR
67 #define INFO_WIN_BORDER_COLOR ALL_WINS_BORDER_COLOR
68 #define INFO_WIN_FONT
69 #define INFO_WIN_STYLE
70 
71 #define QUESTION_WIN_TEXT_COLOR "white"
72 #define QUESTION_WIN_BG_COLOR ALL_WINS_BG_COLOR
73 #define QUESTION_WIN_BORDER_COLOR ALL_WINS_BORDER_COLOR
74 #define QUESTION_WIN_FONT
75 #define QUESTION_WIN_STYLE
76 
77 #define WARNING_WIN_TEXT_COLOR "orange"
78 #define WARNING_WIN_BG_COLOR ALL_WINS_BG_COLOR
79 #define WARNING_WIN_BORDER_COLOR ALL_WINS_BORDER_COLOR
80 #define WARNING_WIN_FONT
81 #define WARNING_WIN_STYLE
82 
83 #define ERROR_WIN_TEXT_COLOR "red"
84 #define ERROR_WIN_BG_COLOR ALL_WINS_BG_COLOR
85 #define ERROR_WIN_BORDER_COLOR ALL_WINS_BORDER_COLOR
86 #define ERROR_WIN_FONT
87 #define ERROR_WIN_STYLE
88 
89 /*
90  * Default, modifiable colors
91  * Never used:
92  * win_colors.warning[BG_I]
93  * win_colors.warning[BORDER_I]
94  * win_colors.error[BG_I],
95  * win_colors.error[BORDER_I]
96  * Almost never used:
97  * win_colors.question[BG_I]
98  * win_colors.question[BORDER_I]
99  */
100 
101 typedef struct {
102  LG_Color_u info[3]; /* Text, bg, and border */
103  LG_Color_u question[3];
104  LG_Color_u warning[3];
105  LG_Color_u error[3];
106 } LG_WinColors;
107 
108 /* and for each their indices */
109 enum {TEXT_I, BG_I, BORDER_I};
110 
111 /* Fonts things */
112 #define N_FONTS_MAX 64
113 
114 typedef struct {
115  LG_String *name;
116  LG_String *relative_path;
117  int size;
118  TTF_Font *f;
119 } LG_Font;
120 
121 void lg_info_win_no_block(const char *, zboolean, zboolean);
122 
123 void lg_info_win(const char *, zboolean, zboolean);
124 
125 int lg_question_win(const char *); /* swap_fb */
126 
127 void lg_warning_win(const char *); /* swap_fb */
128 
129 void lg_error_win(const char *); /* swap_fb */
130 
131 char *lg_entry_win(const char *, int, int); /* swap_fb */
132 
134 
135 LG_Window lg_win(const char *, LG_Color_u, zboolean, LG_Color_u, LG_Color_u, TTF_Font *);
136 
137 int lg_win_open(LG_Window *, int, int);
138 
139 int lg_win_close(LG_Window *);
140 
141 void lg_win_free_tex(LG_Window *);
142 
143 zboolean is_lg_win(LG_Window *);
144 
145 int lg_get_win_w(LG_Window *);
146 
147 int lg_get_win_h(LG_Window *);
148 
150 
152 
153 char *lg_wrap_lines(const char *, TTF_Font *);
154 
155 void lg_fonts_list_init();
156 
158 
159 zboolean lg_font_add_to_list(const char *, const char *, int);
160 
161 LG_Font *lg_font_get(const char *);
162 
163 TTF_Font *lg_font_get_ttf(const char *);
164 
165 void lg_font_free(const char *);
166 
167 void lg_font_free_all();
168 
169 void lg_font_list_all();
170 
171 void lg_font_info(LG_Font *);
172 
173 #endif /* LG_WIN_H */
lg_question_win
int lg_question_win(const char *text)
Definition: lg_wins.c:112
LG_Font
Definition: lg_wins.h:114
lg_font_info
void lg_font_info(LG_Font *font)
Definition: lg_wins.c:1128
lg_get_win_h
int lg_get_win_h(LG_Window *win)
Definition: lg_wins.c:785
lg_font_add_to_list
zboolean lg_font_add_to_list(const char *name, const char *relative_path, int size)
Definition: lg_wins.c:980
lg_font_list_all
void lg_font_list_all()
Definition: lg_wins.c:1111
lg_win_open
int lg_win_open(LG_Window *win, int x, int y)
Definition: lg_wins.c:658
lg_win_close
int lg_win_close(LG_Window *win)
Definition: lg_wins.c:724
lg_win_free_tex
void lg_win_free_tex(LG_Window *win)
Definition: lg_wins.c:737
lg_warning_win
void lg_warning_win(const char *text)
Definition: lg_wins.c:178
LG_WinColors
Definition: lg_wins.h:101
lg_win_open_centered
int lg_win_open_centered(LG_Window *win)
Definition: lg_wins.c:363
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:403
lg_font_free
void lg_font_free(const char *name)
Definition: lg_wins.c:1063
lg_fonts_list_is_initialized
zboolean lg_fonts_list_is_initialized()
Definition: lg_wins.c:950
lg_font_free_all
void lg_font_free_all()
Definition: lg_wins.c:1088
LG_String
Definition: lg_string.h:17
lg_get_win_colors
LG_WinColors * lg_get_win_colors()
Definition: lg_wins.c:799
LG_Color_u
Definition: lg_vertex.h:111
lg_info_win
void lg_info_win(const char *text, zboolean with_frame, zboolean swap_fb)
Definition: lg_wins.c:66
lg_entry_win
char * lg_entry_win(const char *label, int x, int y)
Definition: lg_wins.c:256
lg_fonts_list_init
void lg_fonts_list_init()
Definition: lg_wins.c:936
lg_wrap_lines
char * lg_wrap_lines(const char *txt, TTF_Font *font)
Definition: lg_wins.c:840
LG_Texture
Definition: lg_textures.h:42
lg_font_get
LG_Font * lg_font_get(const char *name)
Definition: lg_wins.c:1025
lg_set_default_win_colors
void lg_set_default_win_colors()
Definition: lg_wins.c:807
LG_Window
Definition: lg_wins.h:47
lg_get_win_w
int lg_get_win_w(LG_Window *win)
Definition: lg_wins.c:772
is_lg_win
zboolean is_lg_win(LG_Window *win)
Definition: lg_wins.c:749
lg_error_win
void lg_error_win(const char *text)
Definition: lg_wins.c:213
warning
void warning(int block, const char *format,...)
Definition: lg_error.c:82
lg_info_win_no_block
void lg_info_win_no_block(const char *text, zboolean with_frame, zboolean swap_fb)
Definition: lg_wins.c:30
lg_font_get_ttf
TTF_Font * lg_font_get_ttf(const char *name)
Definition: lg_wins.c:1045
Rec2Di
Definition: lg_gr_func.h:49