Begin Repo
This commit is contained in:
77
layers/layerstack.cpp
Normal file
77
layers/layerstack.cpp
Normal file
@@ -0,0 +1,77 @@
|
||||
#include "layerstack.h"
|
||||
#include "application.h"
|
||||
|
||||
|
||||
LayerStack::LayerStack() {
|
||||
|
||||
insert = layers.begin();
|
||||
}
|
||||
|
||||
LayerStack::~LayerStack() {
|
||||
|
||||
for(Layer* layer : layers) {
|
||||
delete layer;
|
||||
}
|
||||
}
|
||||
|
||||
void LayerStack::pushLayer(Layer* layer) {
|
||||
layers.emplace(insert, layer);
|
||||
layer->onAttach();
|
||||
}
|
||||
|
||||
void LayerStack::pushOverlay(Layer* layer) {
|
||||
layers.emplace_back(layer);
|
||||
layer->onAttach();
|
||||
}
|
||||
|
||||
void LayerStack::popLayer(Layer* layer) {
|
||||
auto it = find(layers.begin(), layers.end(), layer);
|
||||
if(it != layers.end()) {
|
||||
layers.erase(it);
|
||||
insert--;
|
||||
}
|
||||
layer->onDetach();
|
||||
}
|
||||
|
||||
void LayerStack::popOverlay(Layer* layer) {
|
||||
auto it = find(layers.begin(), layers.end(), layer);
|
||||
if(it != layers.end()) {
|
||||
layers.erase(it);
|
||||
}
|
||||
layer->onDetach();
|
||||
}
|
||||
|
||||
void LayerStack::propagateEvent(const Event* e) {
|
||||
eventHandled = false;
|
||||
if(e == nullptr)
|
||||
return;
|
||||
else {
|
||||
if(layers.size() > 0) {
|
||||
for(int i = layers.size() - 1; i >= 0; i--) {
|
||||
if(!eventHandled)
|
||||
eventHandled = layers.at(i)->onEvent(e);
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
delete e;
|
||||
}
|
||||
}
|
||||
|
||||
void LayerStack::updateLayers() {
|
||||
if(layers.size() > 0) {
|
||||
for(Layer* layer : layers) {
|
||||
layer->onUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LayerStack::shutdown() {
|
||||
if(layers.size() > 0) {
|
||||
for(Layer* layer : layers) {
|
||||
popLayer(layer);
|
||||
layer->onDetach();
|
||||
delete layer;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user