light/modules/app/public/layer_stack.hpp

51 lines
877 B
C++
Raw Normal View History

2025-07-05 13:28:41 +03:30
#pragma once
2025-07-11 00:05:48 +03:30
namespace lt {
2025-07-05 13:28:41 +03:30
class Layer;
class Event;
class LayerStack
2025-07-05 13:28:41 +03:30
{
public:
template<typename Layer_T, typename... Args>
2025-07-11 00:56:57 +03:30
void emplace_layer(Args &&...args)
2025-07-05 13:28:41 +03:30
{
2025-07-11 00:56:57 +03:30
attach_layer(create_ref<Layer_T>(std::forward<Args>(args)...));
2025-07-05 13:28:41 +03:30
}
2025-07-11 00:56:57 +03:30
void attach_layer(Ref<Layer> layer);
2025-07-06 14:02:50 +03:30
2025-07-11 00:56:57 +03:30
void detach_layer(const Ref<Layer> &layer);
2025-07-05 13:28:41 +03:30
2025-07-11 00:56:57 +03:30
[[nodiscard]] auto is_empty() const -> bool
2025-07-05 13:28:41 +03:30
{
return m_layers.empty();
2025-07-05 13:28:41 +03:30
}
2025-07-11 00:56:57 +03:30
[[nodiscard]] auto begin() -> std::vector<Ref<Layer>>::iterator
2025-07-05 13:28:41 +03:30
{
return m_layers.begin();
2025-07-05 13:28:41 +03:30
}
2025-07-05 16:07:51 +03:30
2025-07-11 00:56:57 +03:30
[[nodiscard]] auto end() -> std::vector<Ref<Layer>>::iterator
2025-07-05 13:28:41 +03:30
{
return m_layers.end();
2025-07-05 13:28:41 +03:30
}
2025-07-05 16:07:51 +03:30
2025-07-11 00:56:57 +03:30
[[nodiscard]] auto rbegin() -> std::vector<Ref<Layer>>::reverse_iterator
2025-07-05 13:28:41 +03:30
{
return m_layers.rbegin();
2025-07-05 13:28:41 +03:30
}
2025-07-05 16:07:51 +03:30
2025-07-11 00:56:57 +03:30
[[nodiscard]] auto rend() -> std::vector<Ref<Layer>>::reverse_iterator
2025-07-05 13:28:41 +03:30
{
return m_layers.rend();
2025-07-05 13:28:41 +03:30
}
private:
std::vector<Ref<Layer>> m_layers;
2025-07-05 13:28:41 +03:30
};
2025-07-11 00:05:48 +03:30
} // namespace lt