1#pragma once
2#include <cstdint>
3#include <libg/Color.h>
4
5struct StatusBarStyle {
6public:
7 enum Mode : uint32_t {
8 LightText = (1 << 0),
9 HideText = (1 << 1),
10 };
11
12 StatusBarStyle()
13 : m_flags(0)
14 , m_color(LG::Color::LightSystemBackground)
15 {
16 }
17
18 StatusBarStyle(uint32_t attr)
19 : m_flags(attr)
20 {
21 }
22
23 StatusBarStyle(Mode attr)
24 : m_flags(uint32_t(attr))
25 {
26 }
27
28 StatusBarStyle(uint32_t attr, const LG::Color& clr)
29 : m_flags(attr)
30 , m_color(clr)
31 {
32 }
33
34 StatusBarStyle(Mode attr, const LG::Color& clr)
35 : m_flags(uint32_t(attr))
36 , m_color(clr)
37 {
38 }
39
40 explicit StatusBarStyle(const LG::Color& clr)
41 : m_flags(0)
42 , m_color(clr)
43 {
44 }
45
46 struct StandardLightType {
47 };
48 static const StandardLightType StandardLight;
49 StatusBarStyle(StandardLightType)
50 : m_flags(0)
51 , m_color(LG::Color::LightSystemBackground)
52 {
53 }
54
55 struct StandardOpaqueType {
56 };
57 static const StandardOpaqueType StandardOpaque;
58 StatusBarStyle(StandardOpaqueType)
59 : m_flags(0)
60 , m_color(LG::Color::Opaque)
61 {
62 }
63
64 ~StatusBarStyle() = default;
65
66 inline bool hide_text() const { return has_attr(Mode::HideText); }
67 inline bool show_text() const { return !hide_text(); }
68
69 inline bool light_text() const { return has_attr(Mode::LightText); }
70 inline bool dark_text() const { return !light_text(); }
71
72 inline StatusBarStyle& set_light_text()
73 {
74 set_attr(Mode::LightText);
75 return *this;
76 }
77
78 inline StatusBarStyle& set_dark_text()
79 {
80 rem_attr(Mode::LightText);
81 return *this;
82 }
83
84 inline StatusBarStyle& set_hide_text()
85 {
86 set_attr(Mode::HideText);
87 return *this;
88 }
89
90 inline StatusBarStyle& set_show_text()
91 {
92 rem_attr(Mode::HideText);
93 return *this;
94 }
95
96 inline uint32_t flags() const { return m_flags; }
97 inline void set_flags(uint32_t attr) { m_flags = attr; }
98
99 inline StatusBarStyle& set_mode(Mode attr)
100 {
101 m_flags = (uint32_t)attr;
102 return *this;
103 }
104
105 inline const LG::Color& color() const { return m_color; }
106 inline void set_color(const LG::Color& clr) { m_color = clr; }
107
108private:
109 inline bool has_attr(Mode mode) const { return ((m_flags & (uint32_t)mode) == (uint32_t)mode); }
110 inline void set_attr(Mode mode) { m_flags |= (uint32_t)mode; }
111 inline void rem_attr(Mode mode) { m_flags = m_flags & (~(uint32_t)mode); }
112
113 uint32_t m_flags { 0 };
114 LG::Color m_color { LG::Color::LightSystemBackground };
115};