From c5b7ad60047a49f7cbbd6435184b84ddec93506a Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Sat, 20 Aug 2022 14:09:46 +0100 Subject: [PATCH] LibCards: Add a CardGame base class For now, the only feature of this is that it sets the background colour from the `Games::Cards::BackgroundColor` config value. Later, other card game configuration and shared behaviour can go here, to save duplicating it in each game. --- Userland/Libraries/LibCards/CMakeLists.txt | 3 +- Userland/Libraries/LibCards/CardGame.cpp | 39 ++++++++++++++++++++++ Userland/Libraries/LibCards/CardGame.h | 30 +++++++++++++++++ 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 Userland/Libraries/LibCards/CardGame.cpp create mode 100644 Userland/Libraries/LibCards/CardGame.h diff --git a/Userland/Libraries/LibCards/CMakeLists.txt b/Userland/Libraries/LibCards/CMakeLists.txt index b9a6084719..0b1ed02a2d 100644 --- a/Userland/Libraries/LibCards/CMakeLists.txt +++ b/Userland/Libraries/LibCards/CMakeLists.txt @@ -1,7 +1,8 @@ set(SOURCES Card.cpp + CardGame.cpp CardStack.cpp ) serenity_lib(LibCards cards) -target_link_libraries(LibCards LibC LibCore) +target_link_libraries(LibCards LibC LibCore LibConfig LibGUI) diff --git a/Userland/Libraries/LibCards/CardGame.cpp b/Userland/Libraries/LibCards/CardGame.cpp new file mode 100644 index 0000000000..4d816b2cff --- /dev/null +++ b/Userland/Libraries/LibCards/CardGame.cpp @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2022, Sam Atkins + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include "CardGame.h" +#include +#include + +namespace Cards { + +CardGame::CardGame() +{ + auto background_color = Gfx::Color::from_string(Config::read_string("Games"sv, "Cards"sv, "BackgroundColor"sv)); + set_background_color(background_color.value_or(Color::from_rgb(0x008000))); +} + +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()); + } + } +} + +Gfx::Color CardGame::background_color() const +{ + return palette().color(background_role()); +} + +void CardGame::set_background_color(Gfx::Color const& color) +{ + auto new_palette = palette(); + new_palette.set_color(Gfx::ColorRole::Background, color); + set_palette(new_palette); +} +} diff --git a/Userland/Libraries/LibCards/CardGame.h b/Userland/Libraries/LibCards/CardGame.h new file mode 100644 index 0000000000..6c9f697a5d --- /dev/null +++ b/Userland/Libraries/LibCards/CardGame.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2022, Sam Atkins + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include + +namespace Cards { + +class CardGame + : public GUI::Frame + , public Config::Listener { +public: + virtual ~CardGame() = default; + + Gfx::Color background_color() const; + void set_background_color(Gfx::Color const&); + +protected: + CardGame(); + +private: + virtual void config_string_did_change(String const& domain, String const& group, String const& key, String const& value) override; +}; + +}