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.
This commit is contained in:
Sam Atkins 2022-08-20 14:09:46 +01:00 committed by Andreas Kling
parent a01c4c50d1
commit c5b7ad6004
Notes: sideshowbarker 2024-07-17 08:04:36 +09:00
3 changed files with 71 additions and 1 deletions

View File

@ -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)

View File

@ -0,0 +1,39 @@
/*
* Copyright (c) 2022, Sam Atkins <atkinssj@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include "CardGame.h"
#include <LibConfig/Client.h>
#include <LibGfx/Palette.h>
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);
}
}

View File

@ -0,0 +1,30 @@
/*
* Copyright (c) 2022, Sam Atkins <atkinssj@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <LibConfig/Listener.h>
#include <LibGUI/Frame.h>
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;
};
}