MacOS: check if cursor changed before applying (#3324)

This commit is contained in:
daxpedda 2023-12-26 19:26:50 +01:00 committed by GitHub
parent a87cfb62c3
commit f5c691467b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 11 deletions

View file

@ -841,6 +841,10 @@ impl WinitView {
.unwrap_or_default() .unwrap_or_default()
} }
pub(super) fn cursor_icon(&self) -> Id<NSCursor> {
self.ivars().cursor_state.borrow().cursor.clone()
}
pub(super) fn set_cursor_icon(&self, icon: Id<NSCursor>) { pub(super) fn set_cursor_icon(&self, icon: Id<NSCursor>) {
let mut cursor_state = self.ivars().cursor_state.borrow_mut(); let mut cursor_state = self.ivars().cursor_state.borrow_mut();
cursor_state.cursor = icon; cursor_state.cursor = icon;

View file

@ -798,18 +798,19 @@ impl WinitWindow {
} }
pub fn set_cursor(&self, cursor: Cursor) { pub fn set_cursor(&self, cursor: Cursor) {
match cursor { let view = self.view();
Cursor::Icon(icon) => {
let view = self.view(); let cursor = match cursor {
view.set_cursor_icon(cursor_from_icon(icon)); Cursor::Icon(icon) => cursor_from_icon(icon),
self.invalidateCursorRectsForView(&view); Cursor::Custom(cursor) => cursor.inner.0,
} };
Cursor::Custom(cursor) => {
let view = self.view(); if view.cursor_icon() == cursor {
view.set_cursor_icon(cursor.inner.0.clone()); return;
self.invalidateCursorRectsForView(&view);
}
} }
view.set_cursor_icon(cursor);
self.invalidateCursorRectsForView(&view);
} }
#[inline] #[inline]