Files
sphaira/sphaira/include/ui/notification.hpp
ITotalJustice 0370e47f7f public release
2024-12-16 21:13:05 +00:00

58 lines
1.2 KiB
C++

#pragma once
#include "object.hpp"
#include <deque>
namespace sphaira::ui {
class NotifEntry final : public Object {
public:
enum class Side { LEFT, RIGHT };
public:
NotifEntry(std::string text, Side side);
~NotifEntry() = default;
auto Draw(NVGcontext* vg, Theme* theme, float y) -> bool;
auto GetSide() const noexcept { return m_side; }
auto IsDone() const noexcept { return m_count == 0; }
private:
void OnLayoutChange() override;
void Draw(NVGcontext* vg, Theme* theme) override;
private:
std::string m_text;
std::size_t m_count{180}; // count down to zero
Side m_side;
bool m_bounds_measured{};
};
class NotifMananger final : public Object {
public:
NotifMananger() = default;
~NotifMananger() = default;
void OnLayoutChange() override;
void Draw(NVGcontext* vg, Theme* theme) override;
void Push(const NotifEntry& entry);
void Pop(NotifEntry::Side side);
void Clear(NotifEntry::Side side);
void Clear();
private:
using Entries = std::deque<NotifEntry>;
private:
void Draw(NVGcontext* vg, Theme* theme, Entries& entries);
private:
Entries m_entries_left;
Entries m_entries_right;
Mutex m_mutex{};
};
} // namespace sphaira::ui