Files
Archimedes/modules/gui/layers/layerstack.cpp

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;
}
}
}