Files
MontaukOS/template/sysroot/include/gui/mtk/hosts.hpp
T

64 lines
1.4 KiB
C++

/*
* hosts.hpp
* Montauk Toolkit host adapters for desktop and standalone apps
* Copyright (c) 2026 Daniel Hammer
*/
#pragma once
#include "gui/canvas.hpp"
#include "gui/standalone.hpp"
#include "gui/window.hpp"
namespace gui::mtk {
struct DesktopHost {
Window* window;
explicit DesktopHost(Window* win) : window(win) {}
Canvas canvas() const {
return window ? Canvas(window) : Canvas(nullptr, 0, 0);
}
Rect bounds() const {
return {0, 0, window ? window->content_w : 0, window ? window->content_h : 0};
}
bool map_mouse(const MouseEvent& ev, int* out_x, int* out_y) const {
if (!window || !out_x || !out_y) return false;
Rect cr = window->content_rect();
*out_x = ev.x - cr.x;
*out_y = ev.y - cr.y;
return true;
}
void invalidate() const {
if (window) window->dirty = true;
}
};
struct StandaloneHost {
WsWindow* window;
explicit StandaloneHost(WsWindow* win) : window(win) {}
Canvas canvas() const {
return window ? window->canvas() : Canvas(nullptr, 0, 0);
}
Rect bounds() const {
return {0, 0, window ? window->width : 0, window ? window->height : 0};
}
void present() const {
if (window) window->present();
}
void set_cursor(int cursor) const {
if (window) window->set_cursor(cursor);
}
};
} // namespace gui::mtk