From cde45527102b67ffeaf30ccac5d14dfca355de3f Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Sun, 21 Aug 2022 16:07:46 +0100 Subject: GamesSettings: Add a preview for the current card-game settings :^) --- Userland/Applications/GamesSettings/CMakeLists.txt | 2 +- .../GamesSettings/CardSettingsWidget.cpp | 32 ++++++++++++++++++++-- .../GamesSettings/CardSettingsWidget.gml | 27 ++++++++++++++++++ .../GamesSettings/CardSettingsWidget.h | 8 ++++++ 4 files changed, 66 insertions(+), 3 deletions(-) (limited to 'Userland') diff --git a/Userland/Applications/GamesSettings/CMakeLists.txt b/Userland/Applications/GamesSettings/CMakeLists.txt index 3793d46ebf..7e5d41706c 100644 --- a/Userland/Applications/GamesSettings/CMakeLists.txt +++ b/Userland/Applications/GamesSettings/CMakeLists.txt @@ -14,4 +14,4 @@ set(SOURCES ) serenity_app(GamesSettings ICON games) -target_link_libraries(GamesSettings LibGUI LibMain) +target_link_libraries(GamesSettings LibGUI LibMain LibCards) diff --git a/Userland/Applications/GamesSettings/CardSettingsWidget.cpp b/Userland/Applications/GamesSettings/CardSettingsWidget.cpp index edb7914dd4..4869501106 100644 --- a/Userland/Applications/GamesSettings/CardSettingsWidget.cpp +++ b/Userland/Applications/GamesSettings/CardSettingsWidget.cpp @@ -6,8 +6,10 @@ #include "CardSettingsWidget.h" #include +#include #include #include +#include static constexpr StringView default_card_back_image_path = "/res/icons/cards/buggie-deck.png"sv; @@ -15,10 +17,25 @@ CardSettingsWidget::CardSettingsWidget() { load_from_gml(card_settings_widget_gml); - m_background_color_input = find_descendant_of_type_named("cards_background_color"); auto background_color = Gfx::Color::from_string(Config::read_string("Games"sv, "Cards"sv, "BackgroundColor"sv)).value_or(Gfx::Color::from_rgb(0x008000)); + + m_preview_frame = find_descendant_of_type_named("cards_preview"); + set_cards_background_color(background_color); + + m_preview_card_back = find_descendant_of_type_named("cards_preview_card_back"); + m_preview_card_back->set_bitmap(Cards::CardPainter::the().card_back()); + + m_preview_card_front_ace = find_descendant_of_type_named("cards_preview_card_front_ace"); + m_preview_card_front_ace->set_bitmap(Cards::CardPainter::the().card_front(Cards::Suit::Spades, Cards::Rank::Ace)); + m_preview_card_front_queen = find_descendant_of_type_named("cards_preview_card_front_queen"); + m_preview_card_front_queen->set_bitmap(Cards::CardPainter::the().card_front(Cards::Suit::Hearts, Cards::Rank::Queen)); + + m_background_color_input = find_descendant_of_type_named("cards_background_color"); m_background_color_input->set_color(background_color, GUI::AllowCallback::No); - m_background_color_input->on_change = [&]() { set_modified(true); }; + m_background_color_input->on_change = [&]() { + set_modified(true); + set_cards_background_color(m_background_color_input->color()); + }; 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")); @@ -29,6 +46,8 @@ CardSettingsWidget::CardSettingsWidget() if (m_card_back_image_view->selection().is_empty()) return; set_modified(true); + Cards::CardPainter::the().set_background_image_path(card_back_image_path()); + m_preview_card_back->update(); }; } @@ -44,11 +63,20 @@ void CardSettingsWidget::reset_default_values() set_card_back_image_path(default_card_back_image_path); } +void CardSettingsWidget::set_cards_background_color(Gfx::Color color) +{ + auto new_palette = m_preview_frame->palette(); + new_palette.set_color(Gfx::ColorRole::Background, color); + m_preview_frame->set_palette(new_palette); +} + 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); + Cards::CardPainter::the().set_background_image_path(path); + m_preview_card_back->update(); return true; } return false; diff --git a/Userland/Applications/GamesSettings/CardSettingsWidget.gml b/Userland/Applications/GamesSettings/CardSettingsWidget.gml index a40621564c..e4a8788472 100644 --- a/Userland/Applications/GamesSettings/CardSettingsWidget.gml +++ b/Userland/Applications/GamesSettings/CardSettingsWidget.gml @@ -4,6 +4,33 @@ margins: [8] } + @GUI::Frame { + name: "cards_preview" + max_height: "shrink" + background_color: "green" + fill_with_background_color: true + layout: @GUI::HorizontalBoxLayout { + margins: [8] + spacing: 8 + } + + @GUI::Layout::Spacer {} + + @GUI::ImageWidget { + name: "cards_preview_card_back" + } + + @GUI::ImageWidget { + name: "cards_preview_card_front_ace" + } + + @GUI::ImageWidget { + name: "cards_preview_card_front_queen" + } + + @GUI::Layout::Spacer {} + } + @GUI::GroupBox { title: "Background Color" max_height: "shrink" diff --git a/Userland/Applications/GamesSettings/CardSettingsWidget.h b/Userland/Applications/GamesSettings/CardSettingsWidget.h index 2d828a2a0f..5b1832a984 100644 --- a/Userland/Applications/GamesSettings/CardSettingsWidget.h +++ b/Userland/Applications/GamesSettings/CardSettingsWidget.h @@ -7,7 +7,9 @@ #pragma once #include +#include #include +#include #include class CardSettingsWidget final : public GUI::SettingsWindow::Tab { @@ -21,9 +23,15 @@ public: private: CardSettingsWidget(); + void set_cards_background_color(Gfx::Color); bool set_card_back_image_path(String const&); String card_back_image_path() const; + RefPtr m_preview_frame; + RefPtr m_preview_card_back; + RefPtr m_preview_card_front_ace; + RefPtr m_preview_card_front_queen; + RefPtr m_background_color_input; RefPtr m_card_back_image_view; }; -- cgit v1.2.3