From deeef8c412c1d8b39039a6d47f92f4ce11430b0b Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Sun, 21 Aug 2022 16:02:56 +0100 Subject: [PATCH] GamesSettings: Add a setting for the card-back image And also add a couple of images so there's more than one option. :^) (My yak silhouette isn't very good, so please replace that, artists!) --- Base/res/icons/cards/ladyball-deck.png | Bin 0 -> 2887 bytes Base/res/icons/cards/yak-deck.png | Bin 0 -> 1176 bytes .../GamesSettings/CardSettingsWidget.cpp | 32 ++++++++++++++++++ .../GamesSettings/CardSettingsWidget.gml | 11 ++++++ .../GamesSettings/CardSettingsWidget.h | 5 +++ Userland/Applications/GamesSettings/main.cpp | 2 +- 6 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 Base/res/icons/cards/ladyball-deck.png create mode 100644 Base/res/icons/cards/yak-deck.png diff --git a/Base/res/icons/cards/ladyball-deck.png b/Base/res/icons/cards/ladyball-deck.png new file mode 100644 index 0000000000000000000000000000000000000000..8a74a3b18481f7e9e342337f3b7a33f0e2422096 GIT binary patch literal 2887 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 literal 0 HcmV?d00001 diff --git a/Userland/Applications/GamesSettings/CardSettingsWidget.cpp b/Userland/Applications/GamesSettings/CardSettingsWidget.cpp index cf13e413f3..edb7914dd4 100644 --- a/Userland/Applications/GamesSettings/CardSettingsWidget.cpp +++ b/Userland/Applications/GamesSettings/CardSettingsWidget.cpp @@ -7,6 +7,9 @@ #include "CardSettingsWidget.h" #include #include +#include + +static constexpr StringView default_card_back_image_path = "/res/icons/cards/buggie-deck.png"sv; CardSettingsWidget::CardSettingsWidget() { @@ -16,14 +19,43 @@ CardSettingsWidget::CardSettingsWidget() auto background_color = Gfx::Color::from_string(Config::read_string("Games"sv, "Cards"sv, "BackgroundColor"sv)).value_or(Gfx::Color::from_rgb(0x008000)); m_background_color_input->set_color(background_color, GUI::AllowCallback::No); m_background_color_input->on_change = [&]() { set_modified(true); }; + + m_card_back_image_view = find_descendant_of_type_named("cards_back_image"); + m_card_back_image_view->set_model(GUI::FileSystemModel::create("/res/icons/cards")); + m_card_back_image_view->set_model_column(GUI::FileSystemModel::Column::Name); + if (!set_card_back_image_path(Config::read_string("Games"sv, "Cards"sv, "CardBackImage"sv))) + set_card_back_image_path(default_card_back_image_path); + m_card_back_image_view->on_selection_change = [&]() { + if (m_card_back_image_view->selection().is_empty()) + return; + set_modified(true); + }; } void CardSettingsWidget::apply_settings() { Config::write_string("Games"sv, "Cards"sv, "BackgroundColor"sv, m_background_color_input->text()); + Config::write_string("Games"sv, "Cards"sv, "CardBackImage"sv, card_back_image_path()); } void CardSettingsWidget::reset_default_values() { m_background_color_input->set_color(Gfx::Color::from_rgb(0x008000)); + set_card_back_image_path(default_card_back_image_path); +} + +bool CardSettingsWidget::set_card_back_image_path(String const& path) +{ + auto index = static_cast(m_card_back_image_view->model())->index(path, m_card_back_image_view->model_column()); + if (index.is_valid()) { + m_card_back_image_view->set_cursor(index, GUI::AbstractView::SelectionUpdate::Set); + return true; + } + return false; +} + +String CardSettingsWidget::card_back_image_path() const +{ + auto card_back_image_index = m_card_back_image_view->selection().first(); + return static_cast(m_card_back_image_view->model())->full_path(card_back_image_index); } diff --git a/Userland/Applications/GamesSettings/CardSettingsWidget.gml b/Userland/Applications/GamesSettings/CardSettingsWidget.gml index 6cc6a6e2dd..a40621564c 100644 --- a/Userland/Applications/GamesSettings/CardSettingsWidget.gml +++ b/Userland/Applications/GamesSettings/CardSettingsWidget.gml @@ -16,4 +16,15 @@ has_alpha_channel: false } } + + @GUI::GroupBox { + title: "Card Back" + layout: @GUI::VerticalBoxLayout { + margins: [8] + } + + @GUI::IconView { + name: "cards_back_image" + } + } } diff --git a/Userland/Applications/GamesSettings/CardSettingsWidget.h b/Userland/Applications/GamesSettings/CardSettingsWidget.h index 503a445eed..2d828a2a0f 100644 --- a/Userland/Applications/GamesSettings/CardSettingsWidget.h +++ b/Userland/Applications/GamesSettings/CardSettingsWidget.h @@ -7,6 +7,7 @@ #pragma once #include +#include #include class CardSettingsWidget final : public GUI::SettingsWindow::Tab { @@ -20,5 +21,9 @@ public: private: CardSettingsWidget(); + bool set_card_back_image_path(String const&); + String card_back_image_path() const; + RefPtr m_background_color_input; + RefPtr m_card_back_image_view; }; diff --git a/Userland/Applications/GamesSettings/main.cpp b/Userland/Applications/GamesSettings/main.cpp index 6753f9355d..9aea881ae3 100644 --- a/Userland/Applications/GamesSettings/main.cpp +++ b/Userland/Applications/GamesSettings/main.cpp @@ -15,7 +15,7 @@ ErrorOr serenity_main(Main::Arguments arguments) { - TRY(Core::System::pledge("stdio rpath recvfd sendfd unix")); + TRY(Core::System::pledge("stdio rpath recvfd sendfd unix thread")); auto app = TRY(GUI::Application::try_create(arguments)); Config::pledge_domain("Games");