1 /* 2 * Copyright 2009-2021 Peter Kosyh <p.kosyh at gmail.com> 3 * 4 * Permission is hereby granted, free of charge, to any person 5 * obtaining a copy of this software and associated documentation files 6 * (the "Software"), to deal in the Software without restriction, 7 * including without limitation the rights to use, copy, modify, merge, 8 * publish, distribute, sublicense, and/or sell copies of the Software, 9 * and to permit persons to whom the Software is furnished to do so, 10 * subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice shall be 13 * included in all copies or substantial portions of the Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 19 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 20 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 21 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 * 23 */ 24 25 #ifndef __THEMES_INCLUDED_H 26 #define __THEMES_INCLUDED_H 27 28 #include "graphics.h" 29 #include "sound.h" 30 31 #define DEFAULT_THEME "default" 32 #ifndef THEMES_PATH 33 #define THEMES_PATH "./themes" 34 #endif 35 36 #define THEME_FILE "theme.ini" 37 38 #define THEME_GLOBAL 0 39 #define THEME_GAME 1 40 41 struct game_theme { 42 float scale; 43 float img_scale; 44 int scale_aware; 45 struct dpi { 46 int min; 47 int max; 48 } dpi; 49 int w; 50 int h; 51 int gfx_scalable; 52 color_t bgcol; 53 color_t brdcol; 54 char *bg_name; 55 img_t bg; 56 char *use_name; 57 char *cursor_name; 58 int cur_x; 59 int cur_y; 60 img_t use; 61 img_t cursor; 62 int pad; 63 64 int win_align; 65 int win_x; 66 int win_y; 67 int win_w; 68 int win_h; 69 int win_scroll_mode; 70 71 char *font_name; 72 int font_size; 73 float font_height; 74 fnt_t font; 75 76 int gfx_x; 77 int gfx_y; 78 int max_scene_w; 79 int max_scene_h; 80 81 char *a_up_name; 82 char *a_down_name; 83 img_t a_up; 84 img_t a_down; 85 int a_up_x; int a_up_y; 86 int a_down_x; int a_down_y; 87 88 color_t fgcol; 89 color_t lcol; 90 color_t acol; 91 92 int inv_x; 93 int inv_y; 94 int inv_w; 95 int inv_h; 96 97 color_t icol; 98 color_t ilcol; 99 color_t iacol; 100 char *inv_font_name; 101 int inv_font_size; 102 float inv_font_height; 103 fnt_t inv_font; 104 105 char *inv_a_up_name; 106 char *inv_a_down_name; 107 img_t inv_a_up; 108 img_t inv_a_down; 109 110 int inv_a_up_x; int inv_a_up_y; 111 int inv_a_down_x; int inv_a_down_y; 112 113 /* int lstyle; 114 int ilstyle; */ 115 116 color_t menu_bg; 117 color_t menu_fg; 118 color_t border_col; 119 color_t menu_link; 120 color_t menu_alink; 121 int menu_alpha; 122 int border_w; 123 char *menu_font_name; 124 int menu_font_size; 125 float menu_font_height; 126 fnt_t menu_font; 127 128 char *menu_button_name; 129 img_t menu_button; 130 int menu_button_x; 131 int menu_button_y; 132 int gfx_mode; 133 int inv_mode; 134 int ways_mode; 135 char *click_name; 136 void *click; 137 char *icon_name; 138 img_t icon; 139 int xoff; 140 int yoff; 141 int changed; 142 }; 143 144 #define CHANGED_FONT 1 145 #define CHANGED_IFONT 2 146 #define CHANGED_MFONT 4 147 #define CHANGED_BG 8 148 #define CHANGED_WIN 0x10 149 #define CHANGED_INV 0x20 150 #define CHANGED_CLICK 0x40 151 #define CHANGED_CURSOR 0x80 152 #define CHANGED_USE 0x100 153 #define CHANGED_UP 0x200 154 #define CHANGED_DOWN 0x400 155 #define CHANGED_IUP 0x800 156 #define CHANGED_IDOWN 0x1000 157 #define CHANGED_BUTTON 0x2000 158 #define CHANGED_ICON 0x4000 159 #define CHANGED_IMG (CHANGED_BG | CHANGED_CLICK | CHANGED_CURSOR | CHANGED_USE | \ 160 CHANGED_UP | CHANGED_DOWN | CHANGED_IUP |CHANGED_IDOWN | \ 161 CHANGED_BUTTON) 162 #define CHANGED_ALL 0xffff 163 164 struct theme { 165 char *path; 166 char *name; 167 char *dir; 168 int type; 169 int idf; 170 }; 171 172 extern struct theme *themes; 173 extern int themes_nr; 174 extern char *curtheme_dir[]; 175 extern char *curgametheme_dir; 176 177 extern struct game_theme game_theme; 178 extern struct game_theme game_theme_unscaled; 179 180 extern int game_default_theme(void); 181 extern int game_theme_select(const char *name); 182 183 extern int themes_lookup(const char *path, int type); 184 extern int themes_lookup_idf(idf_t idf, const char *path, int type); 185 186 extern struct theme *theme_lookup(const char *name, int type); 187 extern int themes_rename(void); 188 extern int themes_count(int type); 189 extern int themes_max(int *type); 190 extern void themes_drop(int type); 191 192 extern int game_theme_load(const char *name, int type); 193 extern int game_theme_init(void); 194 extern int game_theme_free(void); 195 extern int game_theme_optimize(void); 196 extern int game_theme_update(void); 197 198 extern int theme_load(const char *name); 199 extern int theme_load_idf(idf_t idf, const char *name); 200 extern int theme_img_scale(img_t *p); 201 extern int theme_gfx_scale(img_t *p, float scale); 202 extern int theme_scalable_mode(int w, int h); 203 204 extern int theme_relative; 205 206 #define GFX_MODE_FLOAT 1 207 #define GFX_MODE_FIXED 2 208 #define GFX_MODE_EMBEDDED 4 209 #define GFX_MODE_DIRECT 0x100 210 #define GFX_MODE(v) ((v) & 0x1ff) 211 #define GFX_DIRECT(v) (!!((v) & 0x100)) 212 #define GFX_DIRECT_SET(v) ((v)|0x100) 213 #define GFX_DIRECT_CLR(v) ((v)&(~0x100)) 214 #define GFX_ALIGN(v) ((v)>>16) 215 #define GFX_ALIGN_SET(v) ((v)<<16) 216 217 #define INV_MODE_DISABLED -1 218 #define INV_MODE_VERT 0 219 #define INV_MODE_HORIZ 1 220 #define INV_MODE(v) ((v)&0xff) 221 #define INV_ALIGN(v) ((v)>>8) 222 #define INV_ALIGN_SET(v) ((v)<<8) 223 224 #define WAYS_BOTTOM (game_theme.ways_mode == ALIGN_BOTTOM) 225 #define DIRECT_MODE (GFX_DIRECT(game_theme.gfx_mode)) 226 227 #define SCALABLE_FONT (!(game_theme.gfx_scalable & 4)) 228 #define SCALABLE_THEME (game_theme.gfx_scalable & 3) 229 #define SCALABLE_THEME_SMOOTH (game_theme.gfx_scalable & 1) 230 231 #define DEFAULT_DPI_MIN 96 232 #define DEFAULT_DPI_MAX 96 233 234 #endif 235