From a18d60dcb026dd364d02c6d14949b43eec920e5a Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Fri, 9 May 2025 11:20:22 -0400 Subject: [PATCH] Added direct theme support and will slowly move more things into this struct for configuring the look. --- include/guecs/sfml/backend.hpp | 1 + include/guecs/sfml/color.hpp | 15 ------------- include/guecs/sfml/components.hpp | 36 +++++++++++-------------------- include/guecs/ui.hpp | 20 +---------------- meson.build | 1 + src/guecs/sfml/backend.cpp | 17 +++++++++++++++ src/guecs/sfml/components.cpp | 6 ------ src/guecs/theme.cpp | 11 ++++++++++ src/guecs/ui.cpp | 8 +++---- 9 files changed, 48 insertions(+), 67 deletions(-) delete mode 100644 include/guecs/sfml/color.hpp create mode 100644 src/guecs/theme.cpp diff --git a/include/guecs/sfml/backend.hpp b/include/guecs/sfml/backend.hpp index 7a238a9..a5c4985 100644 --- a/include/guecs/sfml/backend.hpp +++ b/include/guecs/sfml/backend.hpp @@ -12,5 +12,6 @@ namespace sfml { void sound_stop(const string& name); std::shared_ptr shader_get(const std::string& name); bool shader_updated(); + guecs::Theme theme(); }; } diff --git a/include/guecs/sfml/color.hpp b/include/guecs/sfml/color.hpp deleted file mode 100644 index 7815893..0000000 --- a/include/guecs/sfml/color.hpp +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once -#include - -namespace ColorValue { - constexpr const sf::Color BLACK{0, 0, 0}; - constexpr const sf::Color DARK_DARK{10, 10, 10}; - constexpr const sf::Color DARK_MID{30, 30, 30}; - constexpr const sf::Color DARK_LIGHT{60, 60, 60}; - constexpr const sf::Color MID{100, 100, 100}; - constexpr const sf::Color LIGHT_DARK{150, 150, 150}; - constexpr const sf::Color LIGHT_MID{200, 200, 200}; - constexpr const sf::Color LIGHT_LIGHT{230, 230, 230}; - constexpr const sf::Color WHITE{255, 255, 255}; - constexpr const sf::Color TRANSPARENT = sf::Color::Transparent; -} diff --git a/include/guecs/sfml/components.hpp b/include/guecs/sfml/components.hpp index 17ddd34..0222d5d 100644 --- a/include/guecs/sfml/components.hpp +++ b/include/guecs/sfml/components.hpp @@ -1,31 +1,21 @@ #pragma once #include #include "guecs/dbc.hpp" -#include "guecs/sfml/color.hpp" #include "guecs/lel.hpp" #include #include #include #include +#include "guecs/theme.hpp" namespace guecs { using std::shared_ptr, std::wstring, std::string; - constexpr const int PADDING = 3; - constexpr const int BORDER_PX = 1; - constexpr const int TEXT_SIZE = 30; - constexpr const int LABEL_SIZE = 20; - constexpr const sf::Color FILL_COLOR = ColorValue::DARK_MID; - constexpr const sf::Color TEXT_COLOR = ColorValue::LIGHT_LIGHT; - constexpr const sf::Color BG_COLOR = ColorValue::MID; - constexpr const sf::Color BORDER_COLOR = ColorValue::MID; - constexpr const char *FONT_FILE_NAME="assets/text.otf"; - struct Textual { std::wstring content; - unsigned int size = TEXT_SIZE; - sf::Color color = TEXT_COLOR; - int padding = PADDING; + unsigned int size = THEME.TEXT_SIZE; + sf::Color color = THEME.TEXT_COLOR; + int padding = THEME.PADDING; bool centered = false; shared_ptr font = nullptr; shared_ptr text = nullptr; @@ -39,7 +29,7 @@ namespace guecs { Label(Args... args) : Textual(args...) { centered = true; - size = LABEL_SIZE; + size = THEME.LABEL_SIZE; } Label() { @@ -55,7 +45,7 @@ namespace guecs { // or there's a static config function you call once, // that's passed an object with all the necessary gear string name; - int padding = PADDING; + int padding = THEME.PADDING; std::shared_ptr sprite = nullptr; void init(lel::Cell &cell); @@ -63,10 +53,10 @@ namespace guecs { }; struct Rectangle { - int padding = PADDING; - sf::Color color = FILL_COLOR; - sf::Color border_color = BORDER_COLOR; - int border_px = BORDER_PX; + int padding = THEME.PADDING; + sf::Color color = THEME.FILL_COLOR; + sf::Color border_color = THEME.BORDER_COLOR; + int border_px = THEME.BORDER_PX; shared_ptr shape = nullptr; void init(lel::Cell& cell); @@ -74,7 +64,7 @@ namespace guecs { struct Meter { float percent = 1.0f; - sf::Color color = ColorValue::BLACK; + sf::Color color = THEME.BG_COLOR_DARK; Rectangle bar; void init(lel::Cell& cell); @@ -108,10 +98,10 @@ namespace guecs { float y = 0.0f; float w = 0.0f; float h = 0.0f; - sf::Color color = BG_COLOR; + sf::Color color = THEME.BG_COLOR; shared_ptr shape = nullptr; - Background(lel::Parser& parser, sf::Color bg_color=BG_COLOR) : + Background(lel::Parser& parser, sf::Color bg_color=THEME.BG_COLOR) : x(parser.grid_x), y(parser.grid_y), w(parser.grid_w), diff --git a/include/guecs/ui.hpp b/include/guecs/ui.hpp index e4d06c2..82b51e0 100644 --- a/include/guecs/ui.hpp +++ b/include/guecs/ui.hpp @@ -8,6 +8,7 @@ #include #include #include +#include "guecs/theme.hpp" #include "guecs/sfml/components.hpp" namespace guecs { @@ -38,25 +39,6 @@ namespace guecs { string name; }; - struct SpriteTexture { - std::shared_ptr sprite = nullptr; - std::shared_ptr texture = nullptr; - }; - - class Backend { - public: - virtual SpriteTexture texture_get(const string& name) = 0; - - virtual void sound_play(const string& name) = 0; - - virtual void sound_stop(const string& name) = 0; - - virtual std::shared_ptr shader_get(const std::string& name) = 0; - - virtual bool shader_updated() = 0; - }; - - void init(Backend* backend); class UI { public: diff --git a/meson.build b/meson.build index c4d49cb..46ac8f9 100644 --- a/meson.build +++ b/meson.build @@ -73,6 +73,7 @@ sources = [ 'src/guecs/dbc.cpp', 'src/guecs/ui.cpp', 'src/guecs/lel.cpp', + 'src/guecs/theme.cpp', 'src/guecs/sfml/components.cpp', ] diff --git a/src/guecs/sfml/backend.cpp b/src/guecs/sfml/backend.cpp index 52f06f7..33f2c69 100644 --- a/src/guecs/sfml/backend.cpp +++ b/src/guecs/sfml/backend.cpp @@ -35,4 +35,21 @@ namespace sfml { return false; } } + + guecs::Theme Backend::theme() { + guecs::Theme theme; + + theme.PADDING = 3; + theme.BORDER_PX = 1; + theme.TEXT_SIZE = 30; + theme.LABEL_SIZE = 20; + theme.FILL_COLOR = theme.DARK_MID; + theme.TEXT_COLOR = theme.LIGHT_LIGHT; + theme.BG_COLOR = theme.MID; + theme.BORDER_COLOR = theme.LIGHT_DARK; + theme.BG_COLOR_DARK = theme.BLACK; + theme.FONT_FILE_NAME = "assets/text.otf"; + + return theme; + } } diff --git a/src/guecs/sfml/components.cpp b/src/guecs/sfml/components.cpp index d661ecb..970bd9a 100644 --- a/src/guecs/sfml/components.cpp +++ b/src/guecs/sfml/components.cpp @@ -2,14 +2,8 @@ #include "guecs/sfml/backend.hpp" namespace guecs { - static Backend* BACKEND = nullptr; - using std::make_shared; - void init(Backend* backend) { - BACKEND = backend; - } - void Textual::init(lel::Cell &cell, shared_ptr font_ptr) { dbc::check(font_ptr != nullptr, "you failed to initialize this WideText"); if(font == nullptr) font = font_ptr; diff --git a/src/guecs/theme.cpp b/src/guecs/theme.cpp new file mode 100644 index 0000000..5f634ec --- /dev/null +++ b/src/guecs/theme.cpp @@ -0,0 +1,11 @@ +#include "guecs/theme.hpp" + +namespace guecs { + Backend* BACKEND = nullptr; + Theme THEME; + + void init(Backend* backend) { + BACKEND = backend; + THEME = BACKEND->theme(); + } +} diff --git a/src/guecs/ui.cpp b/src/guecs/ui.cpp index 87c07cb..b97dbb6 100644 --- a/src/guecs/ui.cpp +++ b/src/guecs/ui.cpp @@ -5,7 +5,7 @@ namespace guecs { using std::make_shared; UI::UI() { - $font = make_shared(FONT_FILE_NAME); + $font = make_shared(THEME.FONT_FILE_NAME); } void UI::position(int x, int y, int width, int height) { @@ -180,7 +180,7 @@ namespace guecs { tc->text->setString(content); } else { auto &cell = cell_for(ent); - Textual to_set{content, TEXT_SIZE}; + Textual to_set{content, THEME.TEXT_SIZE}; to_set.init(cell, $font); set(ent, to_set); } @@ -214,9 +214,9 @@ namespace guecs { tc->text->setString(content); } else { auto &cell = cell_for(ent); - Label to_set{content, LABEL_SIZE}; + Label to_set{content, THEME.LABEL_SIZE}; to_set.init(cell, $font); - to_set.text->setFillColor(TEXT_COLOR); + to_set.text->setFillColor(THEME.TEXT_COLOR); set