opuntiaOS - an operating system targeting x86 and ARMv7
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};