summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main-menu.c62
1 files changed, 51 insertions, 11 deletions
diff --git a/src/main-menu.c b/src/main-menu.c
index 243fcdd..3d13986 100644
--- a/src/main-menu.c
+++ b/src/main-menu.c
@@ -27,15 +27,17 @@
#include "util.h"
struct _db_main_menu_button {
- SDL_Texture *texture_text;
- SDL_Texture *texture_over;
- SDL_Rect rect;
- struct _db_main_menu_button *u;
- struct _db_main_menu_button *d;
- struct _db_main_menu_button *l;
- struct _db_main_menu_button *r;
- struct _db_main_menu_button *p;
- struct _db_main_menu_button *n;
+ SDL_Texture *texture_text;
+ SDL_Texture *texture_over;
+ SDL_Rect rect;
+ struct _db_main_menu_button *u;
+ struct _db_main_menu_button *d;
+ struct _db_main_menu_button *l;
+ struct _db_main_menu_button *r;
+ struct _db_main_menu_button *p;
+ struct _db_main_menu_button *n;
+ void (*action)(void *);
+ void *user_data;
};
static SDL_Texture *
@@ -65,6 +67,26 @@ _db_main_menu_text(TTF_Font *font, const char *text, SDL_Color *color,
return texture;
}
+static void
+_db_main_menu_help(void *user_data __attribute__((__unused__)))
+{
+}
+
+static void
+_db_main_menu_quit(void *user_data __attribute__((__unused__)))
+{
+}
+
+static void
+_db_main_menu_game(void *user_data)
+{
+ struct db_game *game;
+
+ game = user_data;
+
+ db_dbg("Loading game \"%s\"", db_game_get_name(game));
+}
+
void
db_main_menu(void)
{
@@ -81,6 +103,7 @@ db_main_menu(void)
struct _db_main_menu_button **buttons;
char *name_desc;
int i;
+ struct _db_main_menu_button *active;
games_dir = db_get_games_dir();
font_path = db_strcat(db_get_fonts_dir(), "/UbuntuTitling-Bold.ttf");
@@ -153,6 +176,8 @@ db_main_menu(void)
}
buttons[0]->rect.x = 640 - 16 - buttons[0]->rect.w;
buttons[0]->rect.y = 16;
+ buttons[0]->action = &_db_main_menu_help;
+ buttons[0]->user_data = NULL;
/* Render quit button */
buttons[1] = malloc(sizeof(**buttons));
@@ -172,6 +197,8 @@ db_main_menu(void)
}
buttons[1]->rect.x = 640 - 16 - buttons[1]->rect.w;
buttons[1]->rect.y = 48;
+ buttons[1]->action = &_db_main_menu_quit;
+ buttons[1]->user_data = NULL;
/* Render game buttons */
buttons[1]->n = buttons[0]; /* Quit button link (may change below) */
@@ -214,6 +241,8 @@ db_main_menu(void)
buttons[i + 2]->r = buttons[0];
buttons[i + 2]->p = buttons[i + 1];
buttons[i + 1]->n = buttons[i + 2];
+ buttons[i + 2]->action = &_db_main_menu_game;
+ buttons[i + 2]->user_data = games[i];
}
if (n > 0) {
buttons[i + 1]->n = buttons[0];
@@ -242,9 +271,20 @@ db_main_menu(void)
buttons[1]->r = NULL;
buttons[1]->p = buttons[0];
+ if (n > 0) {
+ active = buttons[2];
+ } else {
+ active = buttons[1];
+ }
+
for (i = 0; i < n + 2; ++i) {
- SDL_RenderCopy(renderer, buttons[i]->texture_text, NULL,
- &buttons[i]->rect);
+ if (buttons[i] == active) {
+ SDL_RenderCopy(renderer, buttons[i]->texture_over, NULL,
+ &buttons[i]->rect);
+ } else {
+ SDL_RenderCopy(renderer, buttons[i]->texture_text, NULL,
+ &buttons[i]->rect);
+ }
}
SDL_RenderPresent(renderer);