Begin Repo

This commit is contained in:
2024-08-10 21:20:28 -05:00
commit 08115f90ce
41 changed files with 19581 additions and 0 deletions

77
layers/layerstack.cpp Normal file
View 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;
}
}
}