X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=gui_theme.c;h=fb8f2f9c367101eb3b4111fe133df9c8806b72c0;hp=647eb66f97b2801e607c6fca2b420ab406a11fcd;hb=eacc2982fbf7e0c0b69508b57f85e839d1ba1013;hpb=e8089cd5efad59a5eec689117acf563a38b8c6c7 diff --git a/gui_theme.c b/gui_theme.c index 647eb66f..fb8f2f9c 100644 --- a/gui_theme.c +++ b/gui_theme.c @@ -1,49 +1,43 @@ /* - * Copyright (C) 2005-2010 Andre Noll + * Copyright (C) 2005 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ +/** \file gui_theme.c Theme definitions. */ + #include "para.h" #include "gui.h" #include -#define NUM_THEMES 2 - - -static int current_theme_num; - static void init_theme_simple(struct gui_theme *t) { struct stat_item_data *d = t->data; - t->name = "simple"; t->author = "Andre Noll"; t->lines_min = 5; t->top_lines_min = 2; t->cols_min = 40; t->top_lines_default = 2; - t->sb_bg = COLOR_CYAN; - t->sb_fg = COLOR_BLACK; - t->cmd_bg = COLOR_WHITE; - t->cmd_fg = COLOR_BLACK; - t->output_bg = COLOR_BLUE; - t->output_fg = COLOR_WHITE; - t->msg_bg = COLOR_BLUE; - t->msg_fg = COLOR_YELLOW; - t->err_msg_bg = COLOR_RED; - t->err_msg_fg = COLOR_WHITE; - t->welcome_bg = COLOR_BLUE; - t->welcome_fg = COLOR_WHITE; - t->sep_bg = COLOR_BLUE; - t->sep_fg = COLOR_CYAN; - t->default_fg = COLOR_WHITE; - t->default_bg = COLOR_BLUE; - t->sep_str = "*"; + t->sb.bg = COLOR_CYAN; + t->sb.fg = COLOR_BLACK; + t->cmd.bg = COLOR_WHITE; + t->cmd.fg = COLOR_BLACK; + t->output.bg = COLOR_BLUE; + t->output.fg = COLOR_WHITE; + t->msg.bg = COLOR_BLUE; + t->msg.fg = COLOR_YELLOW; + t->err_msg.bg = COLOR_RED; + t->err_msg.fg = COLOR_WHITE; + t->sep.bg = COLOR_BLUE; + t->sep.fg = COLOR_CYAN; + t->dflt.fg = COLOR_WHITE; + t->dflt.bg = COLOR_BLUE; + t->sep_char = '*'; d[SI_BASENAME].prefix = ""; d[SI_BASENAME].postfix = ""; - d[SI_BASENAME].fg = COLOR_WHITE; - d[SI_BASENAME].bg = COLOR_BLUE; + d[SI_BASENAME].color.fg = COLOR_WHITE; + d[SI_BASENAME].color.bg = COLOR_BLUE; d[SI_BASENAME].align = CENTER; d[SI_BASENAME].x = 0; d[SI_BASENAME].y = 7; @@ -51,8 +45,8 @@ static void init_theme_simple(struct gui_theme *t) d[SI_STATUS].prefix = "para_server: "; d[SI_STATUS].postfix = ""; - d[SI_STATUS].fg = COLOR_WHITE; - d[SI_STATUS].bg = COLOR_BLUE; + d[SI_STATUS].color.fg = COLOR_WHITE; + d[SI_STATUS].color.bg = COLOR_BLUE; d[SI_STATUS].align = CENTER; d[SI_STATUS].x = 0; d[SI_STATUS].y = 60; @@ -60,8 +54,8 @@ static void init_theme_simple(struct gui_theme *t) d[SI_AUDIOD_STATUS].prefix = "para_audiod: "; d[SI_AUDIOD_STATUS].postfix = ""; - d[SI_AUDIOD_STATUS].fg = COLOR_WHITE; - d[SI_AUDIOD_STATUS].bg = COLOR_BLUE; + d[SI_AUDIOD_STATUS].color.fg = COLOR_WHITE; + d[SI_AUDIOD_STATUS].color.bg = COLOR_BLUE; d[SI_AUDIOD_STATUS].align = CENTER; d[SI_AUDIOD_STATUS].x = 50; d[SI_AUDIOD_STATUS].y = 60; @@ -72,7 +66,6 @@ static void init_theme_simple(struct gui_theme *t) static void init_theme_colorful_blackness(struct gui_theme *t) { struct stat_item_data *d = t->data; - t->name = "colorful blackness"; t->author = "Andre Noll"; /* minimal number of lines that is needed to display all * information provided by this theme @@ -82,29 +75,27 @@ static void init_theme_colorful_blackness(struct gui_theme *t) t->top_lines_min = 9; t->top_lines_default = 11; /* default number of lines */ - t->sb_bg = COLOR_GREEN; /* status bar background */ - t->sb_fg = COLOR_BLACK; /* status bar foreground */ - t->cmd_bg = COLOR_BLACK; - t->cmd_fg = COLOR_YELLOW; - t->output_bg = COLOR_BLACK; - t->output_fg = COLOR_CYAN; - t->msg_bg = COLOR_BLACK; - t->msg_fg = COLOR_WHITE; - t->err_msg_bg = COLOR_RED; - t->err_msg_fg = COLOR_WHITE; - t->welcome_bg = COLOR_BLUE; - t->welcome_fg = COLOR_WHITE; - t->sep_bg = COLOR_BLACK; /* color of the separator */ - t->sep_fg = COLOR_BLUE; - t->sep_str = "-"; - t->default_bg = COLOR_BLACK; - t->default_fg = COLOR_MAGENTA; + t->sb.bg = COLOR_GREEN; /* status bar background */ + t->sb.fg = COLOR_BLACK; /* status bar foreground */ + t->cmd.bg = COLOR_BLACK; + t->cmd.fg = COLOR_YELLOW; + t->output.bg = COLOR_BLACK; + t->output.fg = COLOR_CYAN; + t->msg.bg = COLOR_BLACK; + t->msg.fg = COLOR_WHITE; + t->err_msg.bg = COLOR_RED; + t->err_msg.fg = COLOR_WHITE; + t->sep.bg = COLOR_BLACK; /* color of the separator */ + t->sep.fg = COLOR_BLUE; + t->sep_char = 0; /* default (ACS_HLINE) */ + t->dflt.bg = COLOR_BLACK; + t->dflt.fg = COLOR_MAGENTA; d[SI_PLAY_TIME].prefix = ""; d[SI_PLAY_TIME].postfix = ""; - d[SI_PLAY_TIME].fg = COLOR_CYAN; - d[SI_PLAY_TIME].bg = COLOR_BLACK; + d[SI_PLAY_TIME].color.fg = COLOR_CYAN; + d[SI_PLAY_TIME].color.bg = COLOR_BLACK; d[SI_PLAY_TIME].align = CENTER; d[SI_PLAY_TIME].x = 0; d[SI_PLAY_TIME].y = 7; @@ -112,8 +103,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_BASENAME].prefix = ""; d[SI_BASENAME].postfix = ""; - d[SI_BASENAME].fg = COLOR_CYAN; - d[SI_BASENAME].bg = COLOR_BLACK; + d[SI_BASENAME].color.fg = COLOR_CYAN; + d[SI_BASENAME].color.bg = COLOR_BLACK; d[SI_BASENAME].align = LEFT; d[SI_BASENAME].x = 35; d[SI_BASENAME].y = 7; @@ -121,8 +112,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_STATUS].prefix = ""; d[SI_STATUS].postfix = " "; - d[SI_STATUS].fg = COLOR_RED; - d[SI_STATUS].bg = COLOR_BLACK; + d[SI_STATUS].color.fg = COLOR_RED; + d[SI_STATUS].color.bg = COLOR_BLACK; d[SI_STATUS].align = RIGHT; d[SI_STATUS].x = 0; d[SI_STATUS].y = 17; @@ -130,8 +121,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_STATUS_FLAGS].prefix = "("; d[SI_STATUS_FLAGS].postfix = ")"; - d[SI_STATUS_FLAGS].fg = COLOR_RED; - d[SI_STATUS_FLAGS].bg = COLOR_BLACK; + d[SI_STATUS_FLAGS].color.fg = COLOR_RED; + d[SI_STATUS_FLAGS].color.bg = COLOR_BLACK; d[SI_STATUS_FLAGS].align = LEFT; d[SI_STATUS_FLAGS].x = 11; d[SI_STATUS_FLAGS].y = 17; @@ -139,8 +130,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_IMAGE_ID].prefix = "img: "; d[SI_IMAGE_ID].postfix = ""; - d[SI_IMAGE_ID].fg = COLOR_RED; - d[SI_IMAGE_ID].bg = COLOR_BLACK; + d[SI_IMAGE_ID].color.fg = COLOR_RED; + d[SI_IMAGE_ID].color.bg = COLOR_BLACK; d[SI_IMAGE_ID].align = CENTER; d[SI_IMAGE_ID].x = 21; d[SI_IMAGE_ID].y = 17; @@ -148,8 +139,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_LYRICS_ID].prefix = "lyr: "; d[SI_LYRICS_ID].postfix = ""; - d[SI_LYRICS_ID].fg = COLOR_RED; - d[SI_LYRICS_ID].bg = COLOR_BLACK; + d[SI_LYRICS_ID].color.fg = COLOR_RED; + d[SI_LYRICS_ID].color.bg = COLOR_BLACK; d[SI_LYRICS_ID].align = CENTER; d[SI_LYRICS_ID].x = 31; d[SI_LYRICS_ID].y = 17; @@ -157,8 +148,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_FORMAT].prefix = "format: "; d[SI_FORMAT].postfix = ""; - d[SI_FORMAT].fg = COLOR_RED; - d[SI_FORMAT].bg = COLOR_BLACK; + d[SI_FORMAT].color.fg = COLOR_RED; + d[SI_FORMAT].color.bg = COLOR_BLACK; d[SI_FORMAT].align = CENTER; d[SI_FORMAT].x = 42; d[SI_FORMAT].y = 17; @@ -166,8 +157,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_NUM_PLAYED].prefix = "#"; d[SI_NUM_PLAYED].postfix = ""; - d[SI_NUM_PLAYED].fg = COLOR_RED; - d[SI_NUM_PLAYED].bg = COLOR_BLACK; + d[SI_NUM_PLAYED].color.fg = COLOR_RED; + d[SI_NUM_PLAYED].color.bg = COLOR_BLACK; d[SI_NUM_PLAYED].align = LEFT; d[SI_NUM_PLAYED].x = 60; d[SI_NUM_PLAYED].y = 17; @@ -175,8 +166,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_BITRATE].prefix = ""; d[SI_BITRATE].postfix = ""; - d[SI_BITRATE].fg = COLOR_RED; - d[SI_BITRATE].bg = COLOR_BLACK; + d[SI_BITRATE].color.fg = COLOR_RED; + d[SI_BITRATE].color.bg = COLOR_BLACK; d[SI_BITRATE].align = CENTER; d[SI_BITRATE].x = 65; d[SI_BITRATE].y = 17; @@ -184,8 +175,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_FREQUENCY].prefix = ""; d[SI_FREQUENCY].postfix = ""; - d[SI_FREQUENCY].fg = COLOR_RED; - d[SI_FREQUENCY].bg = COLOR_BLACK; + d[SI_FREQUENCY].color.fg = COLOR_RED; + d[SI_FREQUENCY].color.bg = COLOR_BLACK; d[SI_FREQUENCY].align = CENTER; d[SI_FREQUENCY].x = 78; d[SI_FREQUENCY].y = 17; @@ -193,8 +184,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_SCORE].prefix = "sc: "; d[SI_SCORE].postfix = ""; - d[SI_SCORE].fg = COLOR_RED; - d[SI_SCORE].bg = COLOR_BLACK; + d[SI_SCORE].color.fg = COLOR_RED; + d[SI_SCORE].color.bg = COLOR_BLACK; d[SI_SCORE].align = CENTER; d[SI_SCORE].x = 88; d[SI_SCORE].y = 17; @@ -202,8 +193,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_AUDIOD_STATUS].prefix = ""; d[SI_AUDIOD_STATUS].postfix = ""; - d[SI_AUDIOD_STATUS].fg = COLOR_MAGENTA; - d[SI_AUDIOD_STATUS].bg = COLOR_BLACK; + d[SI_AUDIOD_STATUS].color.fg = COLOR_MAGENTA; + d[SI_AUDIOD_STATUS].color.bg = COLOR_BLACK; d[SI_AUDIOD_STATUS].align = CENTER; d[SI_AUDIOD_STATUS].x = 0; d[SI_AUDIOD_STATUS].y = 27; @@ -211,8 +202,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_DECODER_FLAGS].prefix = "["; d[SI_DECODER_FLAGS].postfix = "]"; - d[SI_DECODER_FLAGS].fg = COLOR_MAGENTA; - d[SI_DECODER_FLAGS].bg = COLOR_BLACK; + d[SI_DECODER_FLAGS].color.fg = COLOR_MAGENTA; + d[SI_DECODER_FLAGS].color.bg = COLOR_BLACK; d[SI_DECODER_FLAGS].align = CENTER; d[SI_DECODER_FLAGS].x = 5; d[SI_DECODER_FLAGS].y = 27; @@ -220,8 +211,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_MTIME].prefix = "mod: "; d[SI_MTIME].postfix = ""; - d[SI_MTIME].fg = COLOR_MAGENTA; - d[SI_MTIME].bg = COLOR_BLACK; + d[SI_MTIME].color.fg = COLOR_MAGENTA; + d[SI_MTIME].color.bg = COLOR_BLACK; d[SI_MTIME].align = CENTER; d[SI_MTIME].x = 15; d[SI_MTIME].y = 27; @@ -229,8 +220,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_FILE_SIZE].prefix = ""; d[SI_FILE_SIZE].postfix = "kb"; - d[SI_FILE_SIZE].fg = COLOR_MAGENTA; - d[SI_FILE_SIZE].bg = COLOR_BLACK; + d[SI_FILE_SIZE].color.fg = COLOR_MAGENTA; + d[SI_FILE_SIZE].color.bg = COLOR_BLACK; d[SI_FILE_SIZE].align = CENTER; d[SI_FILE_SIZE].x = 37; d[SI_FILE_SIZE].y = 27; @@ -238,8 +229,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_CHANNELS].prefix = ""; d[SI_CHANNELS].postfix = "ch"; - d[SI_CHANNELS].fg = COLOR_MAGENTA; - d[SI_CHANNELS].bg = COLOR_BLACK; + d[SI_CHANNELS].color.fg = COLOR_MAGENTA; + d[SI_CHANNELS].color.bg = COLOR_BLACK; d[SI_CHANNELS].align = CENTER; d[SI_CHANNELS].x = 47; d[SI_CHANNELS].y = 27; @@ -247,8 +238,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_LAST_PLAYED].prefix = "lp: "; d[SI_LAST_PLAYED].postfix = ""; - d[SI_LAST_PLAYED].fg = COLOR_MAGENTA; - d[SI_LAST_PLAYED].bg = COLOR_BLACK; + d[SI_LAST_PLAYED].color.fg = COLOR_MAGENTA; + d[SI_LAST_PLAYED].color.bg = COLOR_BLACK; d[SI_LAST_PLAYED].align = CENTER; d[SI_LAST_PLAYED].x = 52; d[SI_LAST_PLAYED].y = 27; @@ -256,8 +247,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_NUM_CHUNKS].prefix = ""; d[SI_NUM_CHUNKS].postfix = "x"; - d[SI_NUM_CHUNKS].fg = COLOR_MAGENTA; - d[SI_NUM_CHUNKS].bg = COLOR_BLACK; + d[SI_NUM_CHUNKS].color.fg = COLOR_MAGENTA; + d[SI_NUM_CHUNKS].color.bg = COLOR_BLACK; d[SI_NUM_CHUNKS].align = RIGHT; d[SI_NUM_CHUNKS].x = 73; d[SI_NUM_CHUNKS].y = 27; @@ -265,8 +256,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_CHUNK_TIME].prefix = ""; d[SI_CHUNK_TIME].postfix = "ms"; - d[SI_CHUNK_TIME].fg = COLOR_MAGENTA; - d[SI_CHUNK_TIME].bg = COLOR_BLACK; + d[SI_CHUNK_TIME].color.fg = COLOR_MAGENTA; + d[SI_CHUNK_TIME].color.bg = COLOR_BLACK; d[SI_CHUNK_TIME].align = LEFT; d[SI_CHUNK_TIME].x = 84; d[SI_CHUNK_TIME].y = 27; @@ -274,8 +265,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_AMPLIFICATION].prefix = "amp:"; d[SI_AMPLIFICATION].postfix = ""; - d[SI_AMPLIFICATION].fg = COLOR_MAGENTA; - d[SI_AMPLIFICATION].bg = COLOR_BLACK; + d[SI_AMPLIFICATION].color.fg = COLOR_MAGENTA; + d[SI_AMPLIFICATION].color.bg = COLOR_BLACK; d[SI_AMPLIFICATION].align = RIGHT; d[SI_AMPLIFICATION].x = 92; d[SI_AMPLIFICATION].y = 27; @@ -283,8 +274,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_TECHINFO].prefix = ""; d[SI_TECHINFO].postfix = ""; - d[SI_TECHINFO].fg = COLOR_GREEN; - d[SI_TECHINFO].bg = COLOR_BLACK; + d[SI_TECHINFO].color.fg = COLOR_GREEN; + d[SI_TECHINFO].color.bg = COLOR_BLACK; d[SI_TECHINFO].align = CENTER; d[SI_TECHINFO].x = 0; d[SI_TECHINFO].y = 43; @@ -292,8 +283,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_TITLE].prefix = ""; d[SI_TITLE].postfix = ","; - d[SI_TITLE].fg = COLOR_GREEN; - d[SI_TITLE].bg = COLOR_BLACK; + d[SI_TITLE].color.fg = COLOR_GREEN; + d[SI_TITLE].color.bg = COLOR_BLACK; d[SI_TITLE].align = RIGHT; d[SI_TITLE].x = 0; d[SI_TITLE].y = 53; @@ -301,8 +292,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_ARTIST].prefix = " by "; d[SI_ARTIST].postfix = ""; - d[SI_ARTIST].fg = COLOR_GREEN; - d[SI_ARTIST].bg = COLOR_BLACK; + d[SI_ARTIST].color.fg = COLOR_GREEN; + d[SI_ARTIST].color.bg = COLOR_BLACK; d[SI_ARTIST].align = LEFT; d[SI_ARTIST].x = 45; d[SI_ARTIST].y = 53; @@ -310,8 +301,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_YEAR].prefix = "("; d[SI_YEAR].postfix = ")"; - d[SI_YEAR].fg = COLOR_GREEN; - d[SI_YEAR].bg = COLOR_BLACK; + d[SI_YEAR].color.fg = COLOR_GREEN; + d[SI_YEAR].color.bg = COLOR_BLACK; d[SI_YEAR].align = RIGHT; d[SI_YEAR].x = 90; d[SI_YEAR].y = 53; @@ -319,8 +310,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_ALBUM].prefix = "A: "; d[SI_ALBUM].postfix = ","; - d[SI_ALBUM].fg = COLOR_GREEN; - d[SI_ALBUM].bg = COLOR_BLACK; + d[SI_ALBUM].color.fg = COLOR_GREEN; + d[SI_ALBUM].color.bg = COLOR_BLACK; d[SI_ALBUM].align = RIGHT; d[SI_ALBUM].x = 0; d[SI_ALBUM].y = 63; @@ -328,8 +319,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_COMMENT].prefix = " C: "; d[SI_COMMENT].postfix = ""; - d[SI_COMMENT].fg = COLOR_GREEN; - d[SI_COMMENT].bg = COLOR_BLACK; + d[SI_COMMENT].color.fg = COLOR_GREEN; + d[SI_COMMENT].color.bg = COLOR_BLACK; d[SI_COMMENT].align = LEFT; d[SI_COMMENT].x = 50; d[SI_COMMENT].y = 63; @@ -337,8 +328,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_AFS_MODE].prefix = ""; d[SI_AFS_MODE].postfix = ""; - d[SI_AFS_MODE].fg = COLOR_YELLOW; - d[SI_AFS_MODE].bg = COLOR_BLACK; + d[SI_AFS_MODE].color.fg = COLOR_YELLOW; + d[SI_AFS_MODE].color.bg = COLOR_BLACK; d[SI_AFS_MODE].align = CENTER; d[SI_AFS_MODE].x = 0; d[SI_AFS_MODE].y = 77; @@ -346,8 +337,8 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_ATTRIBUTES_TXT].prefix = ""; d[SI_ATTRIBUTES_TXT].postfix = ""; - d[SI_ATTRIBUTES_TXT].fg = COLOR_YELLOW; - d[SI_ATTRIBUTES_TXT].bg = COLOR_BLACK; + d[SI_ATTRIBUTES_TXT].color.fg = COLOR_YELLOW; + d[SI_ATTRIBUTES_TXT].color.bg = COLOR_BLACK; d[SI_ATTRIBUTES_TXT].align = CENTER; d[SI_ATTRIBUTES_TXT].x = 0; d[SI_ATTRIBUTES_TXT].y = 87; @@ -355,32 +346,94 @@ static void init_theme_colorful_blackness(struct gui_theme *t) d[SI_DIRECTORY].prefix = "dir: "; d[SI_DIRECTORY].postfix = ""; - d[SI_DIRECTORY].fg = COLOR_YELLOW; - d[SI_DIRECTORY].bg = COLOR_BLACK; + d[SI_DIRECTORY].color.fg = COLOR_YELLOW; + d[SI_DIRECTORY].color.bg = COLOR_BLACK; d[SI_DIRECTORY].align = CENTER; d[SI_DIRECTORY].x = 0; d[SI_DIRECTORY].y = 97; d[SI_DIRECTORY].len = 100; } -void init_theme(int num, struct gui_theme *t) +struct theme_description { + const char *name; + void (*init)(struct gui_theme *t); +}; + +static struct theme_description themes[] = { + { + .name = "colorful blackness", + .init = init_theme_colorful_blackness, + }, + { + .name = "simple", + .init = init_theme_simple, + }, +}; + +/** Number of elements in the \a themes array. */ +#define NUM_THEMES (ARRAY_SIZE(themes)) + +static int current_theme_num; + +static void set_theme(int num, struct gui_theme *t) { int i; FOR_EACH_STATUS_ITEM(i) t->data[i].len = 0; + num %= NUM_THEMES; + t->name = themes[num].name; + themes[num].init(t); current_theme_num = num; - - return (num % NUM_THEMES)? - init_theme_simple(t) : init_theme_colorful_blackness(t); + PARA_NOTICE_LOG("theme: %s\n", t->name); } -void prev_theme(struct gui_theme *t) +/** + * Initialize a theme. + * + * \param name Name of the theme to be initialized. + * \param t The function fills out this structure. + * + * This function exits if there is no theme called \a name. + */ +void theme_init(const char *name, struct gui_theme *t) { - return init_theme(++current_theme_num, t); + int i; + + if (!name) + return set_theme(0, t); + for (i = 0; i < NUM_THEMES; i++) + if (strcmp(name, themes[i].name) == 0) + return set_theme(i, t); + fprintf(stderr, "Available themes:\n"); + for (i = 0; i < NUM_THEMES; i++) + fprintf(stderr, "\t%s\n", themes[i].name); + exit(EXIT_FAILURE); } -void next_theme(struct gui_theme *t) +/** + * Activate the previous available theme. + * + * \param t Theme definition is stored here. + * + * This picks the theme that comes before the currently active one, or the last + * available theme, if the current one is the first. + * + * \sa \ref theme_next(). + */ +void theme_prev(struct gui_theme *t) { - return init_theme(--current_theme_num, t); + return set_theme(++current_theme_num, t); } +/** + * Activate the next available theme. + * + * \param t Theme definition is stored here. + * + * This works exactly as theme_prev() but cycles forwards through the list of + * available themes. + */ +void theme_next(struct gui_theme *t) +{ + return set_theme(--current_theme_num, t); +}