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 |
#pragma once |
||||||
|
|
||||||
namespace BK { |
#include <bkpch.h> |
||||||
|
#include "layer.h" |
||||||
|
|
||||||
|
namespace Bk { |
||||||
class LayerStack |
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