From 1e90e6ff6ca16b39c813b73562e1ce37bc8f01a2 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Tue, 16 Jul 2024 14:49:22 +0200 Subject: app/ui: add css class based on disposition to toggle defeated button Implements #1 --- app/include/turns/app/widgets/participant_row.hpp | 1 + app/src/widgets/participant_row.cpp | 32 ++++++++++++++++++++++- res/style-dark.css | 16 +++++++++--- 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 m_title_label{}; Glib::RefPtr m_title_visibility{}; Glib::RefPtr m_toggle_defeated_icon{}; + Glib::RefPtr 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 #include -#include +#include #include #include @@ -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 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::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 { -- cgit v1.2.3