Files
luma/include/luma/application.hpp
T
khodowany 51339606a2
publish / publish (push) Successful in 27m4s
Initial public khodo snapshot
2026-09-04 19:30:11 -05:00

82 lines
3.6 KiB
C++

#pragma once
#include <chrono>
#include <cstdint>
#include <expected>
#include <functional>
#include <memory>
#include <mutex>
#include <string>
#include <type_traits>
#include <utility>
#include <modulus.hpp>
#include <luma/animation.hpp>
#include <luma/config.hpp>
#include <luma/control.hpp>
#include <luma/geometry.hpp>
#include <luma/overlays.hpp>
#include <luma/render.hpp>
#include <luma/window.hpp>
namespace luma {
namespace detail {
struct application_core;
}
struct frame_stats {
std::uint64_t frame{};
std::chrono::steady_clock::duration delta{};
};
class application {
public:
explicit application(luma::application_config config = {});
application(luma::application const&) = delete;
application(luma::application&&) noexcept;
~application();
auto operator=(luma::application const&) -> luma::application& = delete;
auto operator=(luma::application&&) noexcept -> luma::application&;
auto dispatch(std::function<std::expected<void, modulus::error>()> task) -> std::expected<void, modulus::error>;
auto register_route(std::string name, std::function<std::expected<std::unique_ptr<luma::control>, modulus::error>()> factory) -> std::expected<void, modulus::error>;
auto replace_route(std::string name) -> std::expected<void, modulus::error>;
auto push_route(std::string name) -> std::expected<void, modulus::error>;
auto pop_route() -> std::expected<void, modulus::error>;
auto current_route() const -> std::expected<std::string, modulus::error>;
auto add_animation(luma::animation animation) -> std::expected<void, modulus::error>;
auto clear_animations() -> std::expected<void, modulus::error>;
auto animations_empty() const -> std::expected<std::bool_t, modulus::error>;
auto open_window(luma::window_options options, std::unique_ptr<luma::control> content) -> std::expected<std::uint64_t, modulus::error>;
auto close_window(std::uint64_t id) -> std::expected<void, modulus::error>;
auto bring_window_to_front(std::uint64_t id) -> std::expected<void, modulus::error>;
auto set_window_bounds(std::uint64_t id, luma::rect bounds) -> std::expected<void, modulus::error>;
auto set_window_visible(std::uint64_t id, std::bool_t visible) -> std::expected<void, modulus::error>;
auto load_texture(std::string path) -> std::expected<std::shared_ptr<luma::texture>, modulus::error>;
auto request_layout() -> std::expected<void, modulus::error>;
auto set_root(std::expected<std::unique_ptr<luma::control>, modulus::error> root) -> std::expected<void, modulus::error>;
auto set_root(std::unique_ptr<luma::control> root) -> std::expected<void, modulus::error>;
template <typename CONTROL>
requires (std::is_base_of_v<luma::control, CONTROL> && !std::is_same_v<luma::control, CONTROL>)
auto set_root(std::unique_ptr<CONTROL> root) -> std::expected<void, modulus::error>;
auto show_dialog(luma::dialog_options options) -> std::expected<void, modulus::error>;
auto close_dialog(luma::dialog_result result) -> std::expected<void, modulus::error>;
auto show_toast(luma::toast toast) -> std::expected<void, modulus::error>;
auto request_stop() -> void;
auto should_stop() const -> std::bool_t;
auto run() -> std::expected<void, modulus::error>;
private:
auto core_snapshot() const -> std::shared_ptr<luma::detail::application_core>;
mutable std::mutex core_mutex_{};
std::shared_ptr<luma::detail::application_core> core_{};
};
template <typename CONTROL>
requires (std::is_base_of_v<luma::control, CONTROL> && !std::is_same_v<luma::control, CONTROL>)
auto application::set_root(std::unique_ptr<CONTROL> root) -> std::expected<void, modulus::error> {
return set_root(std::unique_ptr<luma::control>{std::move(root)});
}
}