77 lines
1.5 KiB
C++
Executable File
77 lines
1.5 KiB
C++
Executable File
#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;
|
|
}
|
|
}
|
|
} |