diff --git a/Userland/Libraries/LibCards/CardGame.cpp b/Userland/Libraries/LibCards/CardGame.cpp index 4d816b2cff..bb3fb5abd9 100644 --- a/Userland/Libraries/LibCards/CardGame.cpp +++ b/Userland/Libraries/LibCards/CardGame.cpp @@ -5,6 +5,7 @@ */ #include "CardGame.h" +#include #include #include @@ -18,9 +19,16 @@ CardGame::CardGame() void CardGame::config_string_did_change(String const& domain, String const& group, String const& key, String const& value) { - if (domain == "Games" && group == "Cards" && key == "BackgroundColor") { - if (auto maybe_color = Gfx::Color::from_string(value); maybe_color.has_value()) { - set_background_color(maybe_color.value()); + if (domain == "Games" && group == "Cards") { + if (key == "BackgroundColor") { + if (auto maybe_color = Gfx::Color::from_string(value); maybe_color.has_value()) + set_background_color(maybe_color.value()); + return; + } + if (key == "CardBackImage") { + CardPainter::the().set_background_image_path(value); + update(); + return; } } } diff --git a/Userland/Libraries/LibCards/CardPainter.cpp b/Userland/Libraries/LibCards/CardPainter.cpp index c0f63e227e..a141863b44 100644 --- a/Userland/Libraries/LibCards/CardPainter.cpp +++ b/Userland/Libraries/LibCards/CardPainter.cpp @@ -7,6 +7,7 @@ */ #include "CardPainter.h" +#include #include #include @@ -18,6 +19,11 @@ CardPainter& CardPainter::the() return s_card_painter; } +CardPainter::CardPainter() +{ + m_background_image_path = Config::read_string("Games"sv, "Cards"sv, "CardBackImage"sv, "/res/icons/cards/buggie-deck.png"sv); +} + static constexpr Gfx::CharacterBitmap s_diamond { " # " " ### " @@ -122,6 +128,18 @@ NonnullRefPtr CardPainter::card_back_inverted() return *m_card_back_inverted; } +void CardPainter::set_background_image_path(String path) +{ + if (m_background_image_path == path) + return; + + m_background_image_path = path; + if (!m_card_back.is_null()) + paint_card_back(*m_card_back); + if (!m_card_back_inverted.is_null()) + paint_inverted_card(*m_card_back_inverted, *m_card_back); +} + NonnullRefPtr CardPainter::create_card_bitmap() { return Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRA8888, { Card::width, Card::height }).release_value_but_fixme_should_propagate_errors(); @@ -177,7 +195,7 @@ void CardPainter::paint_card_back(Gfx::Bitmap& bitmap) auto paint_rect = bitmap.rect(); painter.clear_rect(paint_rect, Gfx::Color::Transparent); - auto image = Gfx::Bitmap::try_load_from_file("/res/icons/cards/buggie-deck.png"sv).release_value_but_fixme_should_propagate_errors(); + auto image = Gfx::Bitmap::try_load_from_file(m_background_image_path).release_value_but_fixme_should_propagate_errors(); float aspect_ratio = image->width() / static_cast(image->height()); Gfx::IntSize target_size { static_cast(aspect_ratio * (Card::height - 5)), Card::height - 5 }; diff --git a/Userland/Libraries/LibCards/CardPainter.h b/Userland/Libraries/LibCards/CardPainter.h index 247101e295..301ea51749 100644 --- a/Userland/Libraries/LibCards/CardPainter.h +++ b/Userland/Libraries/LibCards/CardPainter.h @@ -21,7 +21,10 @@ public: NonnullRefPtr card_front_inverted(Suit, Rank); NonnullRefPtr card_back_inverted(); + void set_background_image_path(String path); + private: + CardPainter(); NonnullRefPtr create_card_bitmap(); void paint_card_front(Gfx::Bitmap&, Suit, Rank); void paint_card_back(Gfx::Bitmap&); @@ -31,6 +34,8 @@ private: Array, to_underlying(Rank::__Count)>, to_underlying(Suit::__Count)> m_cards_inverted; RefPtr m_card_back; RefPtr m_card_back_inverted; + + String m_background_image_path; }; }