/// Optional window package, mainly to run gfx-d examples
module gfx.window;

import gfx.graal : Instance;
import gfx.graal.presentation;

alias MouseHandler = void delegate(uint x, uint y);
alias KeyHandler = void delegate(uint key);

interface Window
{
    void prepareSurface();
    void show(uint width, uint height);
    void close();

    @property Surface surface();

    @property void mouseMove(MouseHandler handler);
    @property void mouseOn(MouseHandler handler);
    @property void mouseOff(MouseHandler handler);
    @property void keyOn(KeyHandler handler);
    @property void keyOff(KeyHandler handler);

    void pollAndDispatch();
}

Window createWindow(Instance instance)
{
    version(linux) {
        import gfx.window.wayland : refDisplay, unrefDisplay;
        auto dpy = refDisplay();
        scope(exit) unrefDisplay();
        auto win = dpy.createWindow(instance);
        win.prepareSurface();
        return win;
    }
    else {
        pragma(msg, "unsupported window");
        return null;
    }
}