From 46c93e74067de844b35c1249122fcf878a0db924 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 15 Aug 2024 20:41:34 +0200 Subject: ui: prepare basic color preference infrastructure --- ui/include/turns/ui/windows/tracker.hpp | 9 ++++++++- ui/src/windows/tracker.cpp | 29 +++++++++++++++++++++++++++++ ui/src/windows/tracker/event_handlers.cpp | 6 ++++++ 3 files changed, 43 insertions(+), 1 deletion(-) (limited to 'ui') diff --git a/ui/include/turns/ui/windows/tracker.hpp b/ui/include/turns/ui/windows/tracker.hpp index 7e5f799..e14f08a 100644 --- a/ui/include/turns/ui/windows/tracker.hpp +++ b/ui/include/turns/ui/windows/tracker.hpp @@ -1,7 +1,6 @@ #ifndef TURNS_UI_WINDOWS_TRACKER_HPP #define TURNS_UI_WINDOWS_TRACKER_HPP -#include "turns/adw/toast.hpp" #include "turns/adw/toastoverlay.hpp" #include "turns/core/turn_order.hpp" #include "turns/ui/widgets/turn_order_view.hpp" @@ -13,6 +12,7 @@ #include #include +#include #include #include @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -37,6 +38,7 @@ namespace turns::ui::windows private: /** Setup */ auto setup_actions() -> void; + auto setup_colors() -> void; /** Actions */ auto add_participant() -> void; @@ -51,11 +53,13 @@ namespace turns::ui::windows auto on_save_response(Glib::RefPtr result, Glib::RefPtr dialog) -> void; auto on_load_content_done(Glib::RefPtr result) -> void; auto on_replace_content_done(Glib::RefPtr result) -> void; + auto on_settings_changed(Glib::ustring key) -> void; /** Helpers */ auto show_error(std::exception const & e) -> void; auto show_toast(std::string const & message) -> void; auto start_replace_content() -> void; + auto update_colors() -> void; auto update_subtitle() -> void; Gtk::Revealer * m_controls; @@ -71,6 +75,9 @@ namespace turns::ui::windows Glib::RefPtr m_file{}; std::string m_file_etag{}; std::string m_file_buffer{}; + + Glib::RefPtr m_css{}; + Glib::RefPtr m_settings{}; }; } // namespace turns::ui::windows diff --git a/ui/src/windows/tracker.cpp b/ui/src/windows/tracker.cpp index 0b581af..c6dc731 100644 --- a/ui/src/windows/tracker.cpp +++ b/ui/src/windows/tracker.cpp @@ -11,22 +11,28 @@ #include #include +#include #include +#include #include #include +#include #include #include #include +#include #include #include #include #include #include +#include #include #include +#include #include #include @@ -48,7 +54,10 @@ namespace turns::ui::windows , m_turn_order{core::turn_order::create()} , m_turn_order_view{Gtk::make_managed(m_turn_order)} , m_subtitle{m_title, "subtitle"} + , m_css{Gtk::CssProvider::create()} + , m_settings{Gio::Settings::create("ch.arknet.Turns")} { + setup_colors(); setup_actions(); m_stack->add(*m_turn_order_view); @@ -159,6 +168,13 @@ namespace turns::ui::windows } } + auto tracker::setup_colors() -> void + { + Gtk::CssProvider::add_provider_for_display(get_display(), m_css, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + m_settings->signal_changed().connect(sigc::mem_fun(*this, &tracker::on_settings_changed)); + update_colors(); + } + auto tracker::start_replace_content() -> void { m_file_buffer = m_turn_order->serialize().dump(2); @@ -176,6 +192,19 @@ namespace turns::ui::windows m_overlay->add(adw::Toast{message}); } + auto tracker::update_colors() -> void + { + auto friendly_color = m_settings->get_string("disposition-color-friendly"); + auto hostile_color = m_settings->get_string("disposition-color-hostile"); + auto secret_color = m_settings->get_string("disposition-color-secret"); + m_css->load_from_string(std::format("@define-color friendly {};\n" + "@define-color hostile {};\n" + "@define-color secret {};\n", + friendly_color.c_str(), + hostile_color.c_str(), + secret_color.c_str())); + } + auto tracker::update_subtitle() -> void { if (m_turn_order->is_empty()) diff --git a/ui/src/windows/tracker/event_handlers.cpp b/ui/src/windows/tracker/event_handlers.cpp index 3fc1c53..e33e889 100644 --- a/ui/src/windows/tracker/event_handlers.cpp +++ b/ui/src/windows/tracker/event_handlers.cpp @@ -5,6 +5,7 @@ #include #include +#include #include #include @@ -97,4 +98,9 @@ namespace turns::ui::windows set_sensitive(false); } + auto tracker::on_settings_changed(Glib::ustring) -> void + { + update_colors(); + } + } // namespace turns::ui::windows \ No newline at end of file -- cgit v1.2.3