Can now set a color to another already existing color.

This commit is contained in:
Zed A. Shaw 2025-07-17 12:39:24 -04:00
parent f4fa50a413
commit 379060b8c7
5 changed files with 69 additions and 81 deletions

View file

@ -3,6 +3,7 @@
#include "sound.hpp"
#include "textures.hpp"
#include "config.hpp"
#include "palette.hpp"
namespace sfml {
using namespace nlohmann;
@ -39,46 +40,32 @@ namespace sfml {
}
}
inline sf::Color to_color(json& config, const std::string& name) {
json& val = config[name];
if(val.type() == json::value_t::array) {
return sf::Color{val[0], val[1], val[2], val[3]};
} else if(val.type() == json::value_t::string) {
json& array = config[val];
return sf::Color{array[0], array[1], array[2], array[3]};
} else {
dbc::sentinel(fmt::format(
"theme config {} has invalid color setting,"
"either use an array of 4 ints or a string"
"referencing another config with 4 ints.", name));
}
}
guecs::Theme Backend::theme() {
palette::init();
auto config = Config("assets/config.json")["theme"];
guecs::Theme theme {
.BLACK=to_color(config, "black"),
.DARK_DARK=to_color(config, "dark_dark"),
.DARK_MID=to_color(config, "dark_mid"),
.DARK_LIGHT=to_color(config, "dark_light"),
.MID=to_color(config, "mid"),
.LIGHT_DARK=to_color(config, "light_dark"),
.LIGHT_MID=to_color(config, "light_mid"),
.LIGHT_LIGHT=to_color(config, "light_light"),
.WHITE=to_color(config, "white"),
.TRANSPARENT = sf::Color::Transparent
.BLACK=palette::get("gui/theme:black"),
.DARK_DARK=palette::get("gui/theme:dark_dark"),
.DARK_MID=palette::get("gui/theme:dark_mid"),
.DARK_LIGHT=palette::get("gui/theme:dark_light"),
.MID=palette::get("gui/theme:mid"),
.LIGHT_DARK=palette::get("gui/theme:light_dark"),
.LIGHT_MID=palette::get("gui/theme:light_mid"),
.LIGHT_LIGHT=palette::get("gui/theme:light_light"),
.WHITE=palette::get("gui/theme:white"),
.TRANSPARENT = palette::get("color:transparent")
};
theme.PADDING = config["padding"];
theme.BORDER_PX = config["border_px"];
theme.TEXT_SIZE = config["text_size"];
theme.LABEL_SIZE = config["label_size"];
theme.FILL_COLOR = to_color(config, "fill_color");
theme.TEXT_COLOR = to_color(config, "text_color");
theme.BG_COLOR = to_color(config, "bg_color");
theme.BORDER_COLOR = to_color(config, "border_color");
theme.BG_COLOR_DARK = to_color(config, "bg_color_dark");
theme.FILL_COLOR = palette::get("gui/theme:fill_color");
theme.TEXT_COLOR = palette::get("gui/theme:text_color");
theme.BG_COLOR = palette::get("gui/theme:bg_color");
theme.BORDER_COLOR = palette::get("gui/theme:border_color");
theme.BG_COLOR_DARK = palette::get("gui/theme:bg_color_dark");
theme.FONT_FILE_NAME = Config::path_to(config["font_file_name"]).string();
return theme;