Nix (Dev) 3.5.10
dev - 3.5.10 - 1af9301
Loading...
Searching...
No Matches
Theme.hpp
Go to the documentation of this file.
1#ifndef IV_SRC_UI_THEMES_THEME_HPP_
2#define IV_SRC_UI_THEMES_THEME_HPP_
3
5
6#include <iostream>
7
8namespace iv::ui::theme
9{
10
11template<typename T>
12concept ThemeImplementation = requires {
13 { T::applyTheme() } -> std::same_as<void>;
14 { T::normalFont } -> std::same_as<const std::string &>;
15 { T::boldFont } -> std::same_as<const std::string &>;
16 { T::italicFont } -> std::same_as<const std::string &>;
17 { T::boldItalicFont } -> std::same_as<const std::string &>;
18 { T::fontSize } -> std::same_as<const double &>;
19 { T::alternateListMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
20 { T::backgroundMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
21 { T::buttonBackgroundMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
22 { T::buttonSelectedBackgroundMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
23 { T::buttonShadowBackgroundMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
24 { T::buttonTextMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
25 { T::buttonsGroupBackgroundMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
26 { T::buttonsGroupEdgeMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
27 { T::contextMenuButtonMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
28 { T::defaultMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
29 { T::dialogBackgroundMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
30 { T::dialogShadowBackgroundMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
31 { T::dialogTitleMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
32 { T::editBackgroundMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
33 { T::editMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
34 { T::focusMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
35 { T::frameViewMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
36 { T::headerListMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
37 { T::illuminationMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
38 { T::inactiveMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
39 { T::indicatorTitleMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
40 { T::menuBackgroundMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
41 { T::progressMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
42 { T::scrollBackgroundMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
43 { T::scrollMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
44 { T::separatorLineMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
45 { T::textMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
46 { T::titleMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
47 { T::titleLabelMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
48 { T::valueLabelMaterial } -> std::same_as<const iv::ui::graphics::Material &>;
49};
50
52{
53public:
54 virtual ~ThemeBase() = default;
55 virtual void applyTheme() const = 0;
56};
57
58template<ThemeImplementation T>
59class Theme final : public ThemeBase
60{
61public:
62 void applyTheme() const override
63 {
64 //T::applyTheme();
65 std::cout << "Theme applied" << std::endl;
66 std::cout << "Normal font: " << T::normalFont << std::endl;
67 std::cout << "Applying theme with font size: " << T::fontSize << std::endl;
68 }
69};
70
71}// namespace iv::ui::theme
72
73#endif//IV_SRC_UI_THEMES_THEME_HPP_
Definition Theme.hpp:52
virtual ~ThemeBase()=default
virtual void applyTheme() const =0
Definition Theme.hpp:60
void applyTheme() const override
Definition Theme.hpp:62
Definition Theme.hpp:12
Definition Dark.cpp:6