70 lines
1.3 KiB
C++
70 lines
1.3 KiB
C++
/**
|
|
* @file App.h
|
|
* @author apio (cloudapio.eu)
|
|
* @brief UI application event loop.
|
|
*
|
|
* @copyright Copyright (c) 2023, the Luna authors.
|
|
*
|
|
*/
|
|
|
|
#pragma once
|
|
#include <luna/HashMap.h>
|
|
#include <os/LocalClient.h>
|
|
#include <ui/Window.h>
|
|
|
|
namespace ui
|
|
{
|
|
class App
|
|
{
|
|
public:
|
|
App();
|
|
~App();
|
|
|
|
Result<void> init(int, char**);
|
|
Result<int> run();
|
|
|
|
Rect screen_rect();
|
|
|
|
os::LocalClient& client()
|
|
{
|
|
return *m_client;
|
|
}
|
|
|
|
void set_should_close(bool b)
|
|
{
|
|
m_should_close = b;
|
|
}
|
|
|
|
void set_nonblocking();
|
|
|
|
void set_main_window(Window* window)
|
|
{
|
|
check(!m_main_window);
|
|
m_main_window = window;
|
|
}
|
|
|
|
Window* main_window()
|
|
{
|
|
return m_main_window;
|
|
}
|
|
|
|
Result<void> register_window(OwnedPtr<Window>&& window, Badge<Window>);
|
|
void unregister_window(Window* window, Badge<Window>);
|
|
|
|
Result<void> handle_ipc_event(u8 id);
|
|
|
|
bool process_events();
|
|
|
|
static App& the();
|
|
|
|
private:
|
|
static App* s_app;
|
|
OwnedPtr<os::LocalClient> m_client;
|
|
Window* m_main_window { nullptr };
|
|
HashMap<int, OwnedPtr<Window>> m_windows;
|
|
bool m_should_close { false };
|
|
|
|
Window* find_window(int id);
|
|
};
|
|
}
|