parent
67f65e11cb
commit
6cde09d273
5 changed files with 92 additions and 6 deletions
@ -0,0 +1,50 @@ |
||||
#include "layer_stack.h" |
||||
|
||||
namespace Bk { |
||||
LayerStack::~LayerStack() |
||||
{ |
||||
std::for_each(p_layers.begin(), p_layers.end(), [](Layer* layer) |
||||
{ |
||||
layer->on_detach(); |
||||
delete layer; |
||||
}); |
||||
p_layers.clear(); |
||||
} |
||||
|
||||
void LayerStack::push_overlay(Layer* layer) |
||||
{ |
||||
layer->on_attach(); |
||||
p_layers.emplace_back(layer); |
||||
} |
||||
|
||||
std::unique_ptr<Layer> LayerStack::pop_overlay() |
||||
{ |
||||
if(auto layer = p_layers.back()) |
||||
{
|
||||
p_layers.pop_back(); |
||||
return std::make_unique<Layer>(*layer);
|
||||
} |
||||
return nullptr; |
||||
} |
||||
|
||||
void LayerStack::push_layer(Layer* layer) |
||||
{ |
||||
layer->on_attach(); |
||||
p_layers.emplace_front(layer); |
||||
} |
||||
|
||||
std::unique_ptr<Layer> LayerStack::pop_layer() |
||||
{ |
||||
if(auto layer = p_layers.front())
|
||||
{
|
||||
p_layers.pop_front(); |
||||
return std::make_unique<Layer>(*layer);
|
||||
} |
||||
return nullptr; |
||||
} |
||||
|
||||
void LayerStack::clear() |
||||
{ |
||||
p_layers.clear(); |
||||
} |
||||
} |
@ -1,8 +1,29 @@ |
||||
#pragma once |
||||
|
||||
namespace BK { |
||||
#include <bkpch.h> |
||||
#include "layer.h" |
||||
|
||||
namespace Bk { |
||||
class LayerStack |
||||
{ |
||||
public: |
||||
LayerStack() = default; |
||||
~LayerStack(); |
||||
|
||||
void push_overlay(Layer* layer); |
||||
std::unique_ptr<Layer> pop_overlay(); |
||||
void push_layer(Layer* layer); |
||||
std::unique_ptr<Layer> pop_layer(); |
||||
void clear(); |
||||
|
||||
std::deque<Layer*>::iterator begin() { return p_layers.begin(); } |
||||
std::deque<Layer*>::iterator end() { return p_layers.end(); } |
||||
|
||||
std::deque<Layer*>::reverse_iterator rbegin() { return p_layers.rbegin(); } |
||||
std::deque<Layer*>::reverse_iterator rend() { return p_layers.rend(); } |
||||
|
||||
private: |
||||
std::deque<Layer*> p_layers; |
||||
uint p_layer_index = 0;
|
||||
}; |
||||
} |
Loading…
Reference in New Issue