From 36f4eccb5c8f00f745eb60a16a71742a0643ec12 Mon Sep 17 00:00:00 2001 From: hafiz Date: Thu, 12 Sep 2019 18:38:44 -0500 Subject: [PATCH] fix: distinguish grab and grabbing cursors (#1154) On macOS, there is a difference between a "grab" cursor and a "grabbing" cursor, where "grab" is an open-hand cursor used during a hover, and "grabbing" is a closed-hand cursor used on a click. These, and other native MacOS cursors, can be seen at the [NSCursor documentation](https://developer.apple.com/documentation/appkit/nscursor?language=objc). See https://github.com/hecrj/iced/issues/9 for the motivation for this PR. --- CHANGELOG.md | 1 + src/platform_impl/macos/util/cursor.rs | 4 +++- src/window.rs | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c897b9e..90cb469e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - On iOS, fix improper `msg_send` usage that was UB and/or would break if `!` is stabilized. - On Windows, unset `maximized` when manually changing the window's position or size. - On Windows, add touch pressure information for touch events. +- On macOS, differentiate between `CursorIcon::Grab` and `CursorIcon::Grabbing`. - On Wayland, fix event processing sometimes stalling when using OpenGL with vsync. # 0.20.0 Alpha 3 (2019-08-14) diff --git a/src/platform_impl/macos/util/cursor.rs b/src/platform_impl/macos/util/cursor.rs index e3e3bcf0..7f0b57fe 100644 --- a/src/platform_impl/macos/util/cursor.rs +++ b/src/platform_impl/macos/util/cursor.rs @@ -15,10 +15,12 @@ pub enum Cursor { impl From for Cursor { fn from(cursor: CursorIcon) -> Self { + // See native cursors at https://developer.apple.com/documentation/appkit/nscursor?language=objc. match cursor { CursorIcon::Arrow | CursorIcon::Default => Cursor::Native("arrowCursor"), CursorIcon::Hand => Cursor::Native("pointingHandCursor"), - CursorIcon::Grabbing | CursorIcon::Grab => Cursor::Native("closedHandCursor"), + CursorIcon::Grab => Cursor::Native("openHandCursor"), + CursorIcon::Grabbing => Cursor::Native("closedHandCursor"), CursorIcon::Text => Cursor::Native("IBeamCursor"), CursorIcon::VerticalText => Cursor::Native("IBeamCursorForVerticalLayout"), CursorIcon::Copy => Cursor::Native("dragCopyCursor"), diff --git a/src/window.rs b/src/window.rs index db86773d..481e9728 100644 --- a/src/window.rs +++ b/src/window.rs @@ -760,7 +760,9 @@ pub enum CursorIcon { Alias, Copy, NoDrop, + /// Indicates something can be grabbed. Grab, + /// Indicates something is grabbed. Grabbing, AllScroll, ZoomIn,