From a581acf3fd725adc83de3e035e0115c02682965e Mon Sep 17 00:00:00 2001 From: pierre Date: Sun, 7 Feb 2021 20:48:30 +0100 Subject: [PATCH] io/pointer: added the grab cursor Signed-off-by: pierre --- app/internal/window/os_darwin.go | 2 ++ app/internal/window/os_macos.m | 3 +++ app/internal/window/os_wayland.go | 2 ++ app/internal/window/os_windows.go | 2 ++ app/internal/window/os_x11.go | 5 ++++- app/internal/windows/windows.go | 13 +++++++------ io/pointer/pointer.go | 2 ++ 7 files changed, 22 insertions(+), 7 deletions(-) diff --git a/app/internal/window/os_darwin.go b/app/internal/window/os_darwin.go index 0c6b3555..a8472bbe 100644 --- a/app/internal/window/os_darwin.go +++ b/app/internal/window/os_darwin.go @@ -198,6 +198,8 @@ func windowSetCursor(from, to pointer.CursorName) pointer.CursorName { curID = 5 case pointer.CursorRowResize: curID = 6 + case pointer.CursorGrab: + curID = 7 case pointer.CursorNone: runOnMain(func() { C.gio_hideCursor() diff --git a/app/internal/window/os_macos.m b/app/internal/window/os_macos.m index 2fefb14d..fa5a98e0 100644 --- a/app/internal/window/os_macos.m +++ b/app/internal/window/os_macos.m @@ -119,6 +119,9 @@ void gio_setCursor(NSUInteger curID) { case 6: [NSCursor.resizeUpDownCursor set]; break; + case 7: + [NSCursor.openHandCursor set]; + break; default: [NSCursor.arrowCursor set]; break; diff --git a/app/internal/window/os_wayland.go b/app/internal/window/os_wayland.go index 535cf0cf..cee2128c 100644 --- a/app/internal/window/os_wayland.go +++ b/app/internal/window/os_wayland.go @@ -930,6 +930,8 @@ func (w *window) SetCursor(name pointer.CursorName) { name = "top_side" case pointer.CursorColResize: name = "left_side" + case pointer.CursorGrab: + name = "hand1" } cname := C.CString(string(name)) defer C.free(unsafe.Pointer(cname)) diff --git a/app/internal/window/os_windows.go b/app/internal/window/os_windows.go index 2d0a9dad..559134ad 100644 --- a/app/internal/window/os_windows.go +++ b/app/internal/window/os_windows.go @@ -606,6 +606,8 @@ func loadCursor(name pointer.CursorName) (syscall.Handle, error) { curID = windows.IDC_SIZEWE case pointer.CursorRowResize: curID = windows.IDC_SIZENS + case pointer.CursorGrab: + curID = windows.IDC_SIZEALL case pointer.CursorNone: return 0, nil } diff --git a/app/internal/window/os_x11.go b/app/internal/window/os_x11.go index ab44ca8d..367edd96 100644 --- a/app/internal/window/os_x11.go +++ b/app/internal/window/os_x11.go @@ -118,10 +118,13 @@ func (w *x11Window) WriteClipboard(s string) { } func (w *x11Window) SetCursor(name pointer.CursorName) { - if name == pointer.CursorNone { + switch name { + case pointer.CursorNone: w.cursor = name C.XFixesHideCursor(w.x, w.xw) return + case pointer.CursorGrab: + name = "hand1" } if w.cursor == pointer.CursorNone { C.XFixesShowCursor(w.x, w.xw) diff --git a/app/internal/windows/windows.go b/app/internal/windows/windows.go index c8846e54..17ce6bb1 100644 --- a/app/internal/windows/windows.go +++ b/app/internal/windows/windows.go @@ -65,12 +65,13 @@ const ( HTCLIENT = 1 - IDC_ARROW = 32512 - IDC_IBEAM = 32513 - IDC_HAND = 32649 - IDC_CROSS = 32515 - IDC_SIZENS = 32645 - IDC_SIZEWE = 32644 + IDC_ARROW = 32512 + IDC_IBEAM = 32513 + IDC_HAND = 32649 + IDC_CROSS = 32515 + IDC_SIZENS = 32645 + IDC_SIZEWE = 32644 + IDC_SIZEALL = 32646 INFINITE = 0xFFFFFFFF diff --git a/io/pointer/pointer.go b/io/pointer/pointer.go index b112bfde..3b4326f6 100644 --- a/io/pointer/pointer.go +++ b/io/pointer/pointer.go @@ -103,6 +103,8 @@ const ( CursorColResize CursorName = "col-resize" // CursorRowResize is the cursor for horizontal resize. CursorRowResize CursorName = "row-resize" + // CursorGrab is the cursor for moving object in any direction. + CursorGrab CursorName = "grab" // CursorNone hides the cursor. To show it again, use any other cursor. CursorNone CursorName = "none" )