diff options
| -rw-r--r-- | app/include/turns/app/widgets/participant_row.hpp | 1 | ||||
| -rw-r--r-- | app/src/widgets/participant_row.cpp | 32 | ||||
| -rw-r--r-- | res/style-dark.css | 16 | ||||
| -rw-r--r-- | res/style.css | 16 |
4 files changed, 56 insertions, 9 deletions
diff --git a/app/include/turns/app/widgets/participant_row.hpp b/app/include/turns/app/widgets/participant_row.hpp index 79de1e9..03c674c 100644 --- a/app/include/turns/app/widgets/participant_row.hpp +++ b/app/include/turns/app/widgets/participant_row.hpp @@ -43,6 +43,7 @@ namespace turns::app::widgets Glib::RefPtr<Glib::Binding> m_title_label{}; Glib::RefPtr<Glib::Binding> m_title_visibility{}; Glib::RefPtr<Glib::Binding> m_toggle_defeated_icon{}; + Glib::RefPtr<Glib::Binding> m_toggle_defeated_css_classes{}; }; } // namespace turns::app::widgets diff --git a/app/src/widgets/participant_row.cpp b/app/src/widgets/participant_row.cpp index 75321e5..4f55898 100644 --- a/app/src/widgets/participant_row.cpp +++ b/app/src/widgets/participant_row.cpp @@ -2,8 +2,9 @@ #include "turns/lang/messages.hpp" +#include <algorithm> #include <format> -#include <print> +#include <vector> #include <glibmm/i18n.h> #include <glibmm/ustring.h> @@ -15,6 +16,21 @@ namespace turns::app::widgets { auto constexpr static TYPE_NAME = "participant_row"; auto constexpr static TEMPLATE = "/ch/arknet/Turns/widgets/participant_row.ui"; + + auto css_class_for(domain::disposition value) -> Glib::ustring + { + switch (value) + { + case domain::disposition::friendly: + return "disposition-friendly"; + case domain::disposition::hostile: + return "disposition-hostile"; + case domain::disposition::secret: + return "disposition-secret"; + default: + return ""; + } + } } // namespace participant_row::participant_row(Glib::RefPtr<domain::participant> participant) @@ -51,8 +67,22 @@ namespace turns::app::widgets m_subtitle->property_label(), Glib::Binding::Flags::SYNC_CREATE, [](auto n) { return std::vformat(_(lang::priority_number), std::make_format_args(n)); }); + + m_toggle_defeated_css_classes = Glib::Binding::bind_property(participant->property_disposition(), + m_toggle_defeated->property_css_classes(), + Glib::Binding::Flags::SYNC_CREATE, + [this](auto value) { + auto classes = m_toggle_defeated->get_css_classes(); + auto removed = std::ranges::remove_if(classes, [](auto cls) { + return (cls == "disposition-friendly") | (cls == "disposition-hostile") || (cls == "disposition-secret"); + }); + classes.erase(removed.begin(), removed.end()); + classes.push_back(css_class_for(value)); + return classes; + }); } } + auto participant_row::handle_delete() -> void { auto index = Glib::Variant<int>::create(get_index()); diff --git a/res/style-dark.css b/res/style-dark.css index 15dee3e..926150f 100644 --- a/res/style-dark.css +++ b/res/style-dark.css @@ -1,17 +1,25 @@ button.disposition-hostile { - background-color: shade(@orange_5, 1.6); + background-color: mix(shade(@red_3, 0.8), @window_bg_color, 0.5); } button:checked.disposition-hostile { - background-color: shade(@orange_5, 1.8); + background-color: mix(shade(@red_3, 0.5), @window_bg_color, 0.5); } button.disposition-friendly { - background-color: shade(@green_5, 1.6); + background-color: mix(shade(@green_3, 0.8), @window_bg_color, 0.5); } button:checked.disposition-friendly { - background-color: shade(@green_5, 1.8); + background-color: mix(shade(@green_3, 0.5), @window_bg_color, 0.5); +} + +button.disposition-secret { + background-color: mix(shade(@purple_1, 0.8), @window_bg_color, 0.5); +} + +button:checked.disposition-secret { + background-color: mix(shade(@purple_1, 0.5), @window_bg_color, 0.5); } .active-participant { diff --git a/res/style.css b/res/style.css index 1d9ff14..fbc70ad 100644 --- a/res/style.css +++ b/res/style.css @@ -1,17 +1,25 @@ button.disposition-hostile { - background-color: shade(@orange_1, 1); + background-color: mix(shade(@red_3, 1.6), @window_bg_color, 0.5); } button:checked.disposition-hostile { - background-color: shade(@orange_1, 0.6); + background-color: mix(shade(@red_3, 1), @window_bg_color, 0.5); } button.disposition-friendly { - background-color: shade(@green_1, 1); + background-color: mix(shade(@green_3, 1.6), @window_bg_color, 0.5); } button:checked.disposition-friendly { - background-color: shade(@green_1, 0.6); + background-color: mix(shade(@green_3, 1), @window_bg_color, 0.5); +} + +button.disposition-secret { + background-color: mix(shade(@purple_3, 1.6), @window_bg_color, 0.5); +} + +button:checked.disposition-secret { + background-color: mix(shade(@purple_3, 1), @window_bg_color, 0.5); } .active-participant { |
