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