64 lines
1.4 KiB
C++
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
|