BLT-Graphics/include/blt/app.h

52 lines
1.7 KiB
C
Raw Normal View History

2023-07-29 18:58:56 -04:00
#pragma once
#include <iostream>
2023-07-30 19:37:19 -04:00
#include "traits.h"
#include <utility>
2023-07-29 18:58:56 -04:00
#include <vector>
#include "blt/std/logging.h"
#include "status.h"
2023-07-30 19:37:19 -04:00
#include "error_logging.h"
#include <variant>
2023-07-29 18:58:56 -04:00
namespace blt::graphics {
enum class properties_t : int {
// The display window's title
WINDOW_TITLE,
// the initial display width/height. This value does not change if the window is resized. Use Window::getWidth and Window::getHeight
WINDOW_WIDTH,
WINDOW_HEIGHT,
WINDOW_RESIZABLE,
RENDER_MODE, // INT
};
2023-07-29 18:58:56 -04:00
class Settings {
public:
typedef std::variant<int32_t, float, bool, std::string> property_t;
2023-07-29 18:58:56 -04:00
Settings() = default;
~Settings() = default;
2023-07-29 18:58:56 -04:00
[[nodiscard]] const property_t* getProperty(properties_t property) const {
if (values.size() <= static_cast<int>(property))
2023-07-29 18:58:56 -04:00
return nullptr;
return &values[static_cast<int>(property)];
2023-07-29 18:58:56 -04:00
}
template<typename T>
[[nodiscard]] const T* getProperty(properties_t property) const {
if ((int)values.size() <= static_cast<int>(property))
2023-07-29 18:58:56 -04:00
return nullptr;
return &get<T>(values[static_cast<int>(property)]);
2023-07-29 18:58:56 -04:00
}
void setProperty(properties_t property, property_t value) {
if (values.capacity() <= static_cast<int>(property))
values.resize(static_cast<int>(property) * 2);
values[static_cast<int>(property)] = std::move(value);
2023-07-29 18:58:56 -04:00
}
private:
std::vector<property_t> values;
2023-07-29 18:58:56 -04:00
};
}