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; +}; + +}