From cd885ce7c59e6493c45bf0a73604379d631ffa48 Mon Sep 17 00:00:00 2001 From: Hajime Hoshi Date: Sat, 3 Sep 2016 17:17:54 +0900 Subject: [PATCH] ui: Add SetCursorVisibility (#258) --- internal/ui/ui_glfw.go | 14 ++++++++++++++ internal/ui/ui_js.go | 8 ++++++++ internal/ui/ui_mobile.go | 4 ++++ run.go | 7 +++++++ 4 files changed, 33 insertions(+) diff --git a/internal/ui/ui_glfw.go b/internal/ui/ui_glfw.go index 94b7b3391..ab86732e7 100644 --- a/internal/ui/ui_glfw.go +++ b/internal/ui/ui_glfw.go @@ -142,6 +142,20 @@ func ScreenScale() float64 { return s } +func SetCursorVisibility(visible bool) { + // This can be called before Run: change the state asyncly. + go func() { + _ = currentUI.runOnMainThread(func() error { + c := glfw.CursorNormal + if !visible { + c = glfw.CursorHidden + } + currentUI.window.SetInputMode(glfw.CursorMode, c) + return nil + }) + }() +} + func Run(width, height int, scale float64, title string, g GraphicsContext) error { u := currentUI // GLContext must be created before setting the screen size, which requires diff --git a/internal/ui/ui_js.go b/internal/ui/ui_js.go index e583ef97c..633831be7 100644 --- a/internal/ui/ui_js.go +++ b/internal/ui/ui_js.go @@ -57,6 +57,14 @@ func ScreenScale() float64 { return currentUI.scale } +func SetCursorVisibility(visibility bool) { + if visibility { + canvas.Get("style").Set("cursor", "auto") + } else { + canvas.Get("style").Set("cursor", "none") + } +} + func (u *userInterface) actualScreenScale() float64 { return u.scale * u.deviceScale } diff --git a/internal/ui/ui_mobile.go b/internal/ui/ui_mobile.go index 7ad596c02..cfbce3eda 100644 --- a/internal/ui/ui_mobile.go +++ b/internal/ui/ui_mobile.go @@ -112,6 +112,10 @@ func ScreenScale() float64 { return currentUI.scale } +func SetCursorVisibility(visibility bool) { + // Do nothing +} + func (u *userInterface) actualScreenScale() float64 { return u.scale * deviceScale() } diff --git a/run.go b/run.go index fe5d3ab25..19ad428f1 100644 --- a/run.go +++ b/run.go @@ -153,3 +153,10 @@ func ScreenScale() float64 { } return ui.ScreenScale() } + +// SetCursorVisibility changes the state of cursor visiblity. +// +// This function is concurrent-safe. +func SetCursorVisibility(visible bool) { + ui.SetCursorVisibility(visible) +}