summaryrefslogtreecommitdiffstats
path: root/src/main-menu.c
diff options
context:
space:
mode:
authorP. J. McDermott <pj@pehjota.net>2021-03-18 17:54:45 (EDT)
committer P. J. McDermott <pj@pehjota.net>2021-03-18 17:54:45 (EDT)
commit7a06de57bc7c0f0f71ea5ef51de73dad204d8e0d (patch)
tree7bdbf30842bf2fb539c25b17bfe1f609b7525880 /src/main-menu.c
parent7258ef298cd531c9b7dcf6fda0365a2d2ed28057 (diff)
downloaddodge-balls-7a06de57bc7c0f0f71ea5ef51de73dad204d8e0d.zip
dodge-balls-7a06de57bc7c0f0f71ea5ef51de73dad204d8e0d.tar.gz
dodge-balls-7a06de57bc7c0f0f71ea5ef51de73dad204d8e0d.tar.bz2
main-menu: Render game names and descriptions
Diffstat (limited to 'src/main-menu.c')
-rw-r--r--src/main-menu.c82
1 files changed, 75 insertions, 7 deletions
diff --git a/src/main-menu.c b/src/main-menu.c
index 7b724a1..025ffd9 100644
--- a/src/main-menu.c
+++ b/src/main-menu.c
@@ -60,11 +60,15 @@ db_main_menu(void)
char *font_path;
SDL_Renderer *renderer;
SDL_Color text_color;
+ SDL_Color over_color;
SDL_Rect dest_rect;
TTF_Font *font;
SDL_Texture *texture_title;
struct db_game **games;
int n;
+ char *name_desc;
+ SDL_Texture **texture_games_text;
+ SDL_Texture **texture_games_over;
int i;
games_dir = db_get_games_dir();
@@ -81,6 +85,11 @@ db_main_menu(void)
text_color.b = 0xFF;
text_color.a = 0xFF;
+ over_color.r = 0xFF;
+ over_color.g = 0xFF;
+ over_color.b = 0xFF;
+ over_color.a = 0xFF;
+
/* Render title text */
font = TTF_OpenFont(font_path, 48);
if (font == NULL) {
@@ -91,30 +100,89 @@ db_main_menu(void)
texture_title = _db_main_menu_text(font, "Dodge Balls", &text_color, 0,
renderer, &dest_rect);
if (texture_title == NULL) {
- free(font_path);
- TTF_CloseFont(font);
- return;
+ n = 0;
+ goto err;
}
dest_rect.x = 16;
dest_rect.y = 16;
SDL_RenderCopy(renderer, texture_title, NULL, &dest_rect);
SDL_DestroyTexture(texture_title);
+ TTF_CloseFont(font);
+ font = TTF_OpenFont(font_path, 16);
+ if (font == NULL) {
+ db_err("Failed to open font (%s)", TTF_GetError());
+ free(font_path);
+ return;
+ }
+
/* Find games */
n = db_games_find(games_dir, &games);
if (n > 0) {
- printf("%d games:\n", n);
+ texture_games_text = calloc(n, sizeof(*texture_games_text));
+ if (texture_games_text == NULL) {
+ goto err;
+ }
+ texture_games_over = calloc(n, sizeof(*texture_games_over));
+ if (texture_games_over == NULL) {
+ goto err;
+ }
for (i = 0; i < n; ++i) {
- printf("\t%s - %s\n", db_game_get_name(games[i]),
+ name_desc = malloc((strlen(db_game_get_name(games[i])) +
+ strlen(db_game_get_desc(
+ games[i])) + 2)
+ * sizeof(*name_desc));
+ if (name_desc == NULL) {
+ db_err("Failed to allocate memory");
+ goto err;
+ }
+ sprintf(name_desc, "%s\n%s", db_game_get_name(games[i]),
db_game_get_desc(games[i]));
- db_game_free(games[i]);
+ texture_games_text[i] = _db_main_menu_text(font,
+ name_desc, &text_color, 608, renderer,
+ &dest_rect);
+ if (texture_games_text[i] == NULL) {
+ free(name_desc);
+ goto err;
+ }
+ dest_rect.x = 16;
+ dest_rect.y = 80 + 32 * i;
+ SDL_RenderCopy(renderer, texture_games_text[i], NULL,
+ &dest_rect);
+ texture_games_over[i] = _db_main_menu_text(font,
+ name_desc, &over_color, 608, renderer,
+ &dest_rect);
+ free(name_desc);
+ if (texture_games_over[i] == NULL) {
+ goto err;
+ }
}
- free(games);
}
SDL_RenderPresent(renderer);
SDL_Delay(1000);
+ err:
+ if (n > 0) {
+ for (i = 0; i < n; ++i) {
+ db_game_free(games[i]);
+ if (texture_games_text != NULL &&
+ texture_games_text[i] != NULL) {
+ free(texture_games_text[i]);
+ }
+ if (texture_games_over != NULL &&
+ texture_games_over[i] != NULL) {
+ free(texture_games_over[i]);
+ }
+ }
+ if (texture_games_text != NULL) {
+ free(texture_games_text);
+ }
+ if (texture_games_over != NULL) {
+ free(texture_games_over);
+ }
+ free(games);
+ }
free(font_path);
TTF_CloseFont(font);
}