diff --git a/pixelgl/window.go b/pixelgl/window.go index 8b12876..65c95f9 100644 --- a/pixelgl/window.go +++ b/pixelgl/window.go @@ -42,9 +42,10 @@ type WindowConfig struct { type Window struct { window *glfw.Window - bounds pixel.Rect - canvas *Canvas - vsync bool + bounds pixel.Rect + canvas *Canvas + vsync bool + cursorVisible bool // need to save these to correctly restore a fullscreen window restore struct { @@ -291,6 +292,23 @@ func (w *Window) VSync() bool { return w.vsync } +// SetCursorVisible sets the visibility of the mouse cursor inside the Window client area. +func (w *Window) SetCursorVisible(visible bool) { + w.cursorVisible = visible + mainthread.Call(func() { + if visible { + w.window.SetInputMode(glfw.CursorMode, glfw.CursorNormal) + } else { + w.window.SetInputMode(glfw.CursorMode, glfw.CursorHidden) + } + }) +} + +// CursorVisible returns the visibility status of the mouse cursor. +func (w *Window) CursorVisible() bool { + return w.cursorVisible +} + // Note: must be called inside the main thread. func (w *Window) begin() { if currWin != w {