From dc07b60e40d1df812b627db397ebf60e32eed3d5 Mon Sep 17 00:00:00 2001 From: Julia Date: Tue, 20 Jun 2023 09:31:30 -0400 Subject: [PATCH] Avoid assigning NSCursor style when it already is that style This avoids a high cost which appears to be the system rasterizing the cursor every time we call this, fixes a slowdown when scrolling rapidly while mouse motion continually attempted to assign the style Co-Authored-By: Antonio Scandurra --- crates/gpui/src/platform/mac/platform.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/crates/gpui/src/platform/mac/platform.rs b/crates/gpui/src/platform/mac/platform.rs index 8b5b801ada..ea415cc6a6 100644 --- a/crates/gpui/src/platform/mac/platform.rs +++ b/crates/gpui/src/platform/mac/platform.rs @@ -786,7 +786,7 @@ impl platform::Platform for MacPlatform { fn set_cursor_style(&self, style: CursorStyle) { unsafe { - let cursor: id = match style { + let new_cursor: id = match style { CursorStyle::Arrow => msg_send![class!(NSCursor), arrowCursor], CursorStyle::ResizeLeftRight => { msg_send![class!(NSCursor), resizeLeftRightCursor] @@ -795,7 +795,11 @@ impl platform::Platform for MacPlatform { CursorStyle::PointingHand => msg_send![class!(NSCursor), pointingHandCursor], CursorStyle::IBeam => msg_send![class!(NSCursor), IBeamCursor], }; - let _: () = msg_send![cursor, set]; + + let old_cursor: id = msg_send![class!(NSCursor), currentCursor]; + if new_cursor != old_cursor { + let _: () = msg_send![new_cursor, set]; + } } }