Skip to content

Commit 4b95b57

Browse files
committed
Use new macOS 15 cursors for resize icons
These look slightly different from the old ones. Verified that we now use the same cursor icons as those used in Safari 26.
1 parent 7b1dd52 commit 4b95b57

File tree

2 files changed

+92
-9
lines changed

2 files changed

+92
-9
lines changed

winit-appkit/src/cursor.rs

Lines changed: 87 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ use std::sync::OnceLock;
55
use objc2::rc::Retained;
66
use objc2::runtime::Sel;
77
use objc2::{AllocAnyThread, ClassType, available, msg_send, sel};
8-
use objc2_app_kit::{NSBitmapImageRep, NSCursor, NSDeviceRGBColorSpace, NSImage};
8+
use objc2_app_kit::{
9+
NSBitmapImageRep, NSCursor, NSCursorFrameResizeDirections, NSCursorFrameResizePosition,
10+
NSDeviceRGBColorSpace, NSImage,
11+
};
912
use objc2_foundation::{
1013
NSData, NSDictionary, NSNumber, NSObject, NSPoint, NSSize, NSString, ns_string,
1114
};
@@ -204,23 +207,99 @@ pub(crate) fn cursor_from_icon(icon: CursorIcon) -> Retained<NSCursor> {
204207
CursorIcon::NotAllowed | CursorIcon::NoDrop => NSCursor::operationNotAllowedCursor(),
205208
CursorIcon::ContextMenu => NSCursor::contextualMenuCursor(),
206209
CursorIcon::Crosshair => NSCursor::crosshairCursor(),
210+
CursorIcon::EResize if available!(macos = 15.0) => {
211+
NSCursor::frameResizeCursorFromPosition_inDirections(
212+
NSCursorFrameResizePosition::Right,
213+
NSCursorFrameResizeDirections::Outward,
214+
)
215+
},
207216
CursorIcon::EResize => NSCursor::resizeRightCursor(),
217+
CursorIcon::NResize if available!(macos = 15.0) => {
218+
NSCursor::frameResizeCursorFromPosition_inDirections(
219+
NSCursorFrameResizePosition::Top,
220+
NSCursorFrameResizeDirections::Outward,
221+
)
222+
},
208223
CursorIcon::NResize => NSCursor::resizeUpCursor(),
224+
CursorIcon::WResize if available!(macos = 15.0) => {
225+
NSCursor::frameResizeCursorFromPosition_inDirections(
226+
NSCursorFrameResizePosition::Left,
227+
NSCursorFrameResizeDirections::Outward,
228+
)
229+
},
209230
CursorIcon::WResize => NSCursor::resizeLeftCursor(),
231+
CursorIcon::SResize if available!(macos = 15.0) => {
232+
NSCursor::frameResizeCursorFromPosition_inDirections(
233+
NSCursorFrameResizePosition::Bottom,
234+
NSCursorFrameResizeDirections::Outward,
235+
)
236+
},
210237
CursorIcon::SResize => NSCursor::resizeDownCursor(),
211-
CursorIcon::EwResize | CursorIcon::ColResize => NSCursor::resizeLeftRightCursor(),
212-
CursorIcon::NsResize | CursorIcon::RowResize => NSCursor::resizeUpDownCursor(),
213-
CursorIcon::Help => _helpCursor(),
214-
CursorIcon::ZoomIn if available!(macos = 15.0) => NSCursor::zoomInCursor(),
215-
CursorIcon::ZoomIn => _zoomInCursor(),
216-
CursorIcon::ZoomOut if available!(macos = 15.0) => NSCursor::zoomOutCursor(),
217-
CursorIcon::ZoomOut => _zoomOutCursor(),
238+
CursorIcon::EwResize if available!(macos = 15.0) => {
239+
NSCursor::frameResizeCursorFromPosition_inDirections(
240+
NSCursorFrameResizePosition::Right,
241+
NSCursorFrameResizeDirections::All,
242+
)
243+
},
244+
CursorIcon::EwResize => NSCursor::resizeLeftRightCursor(),
245+
CursorIcon::NsResize if available!(macos = 15.0) => {
246+
NSCursor::frameResizeCursorFromPosition_inDirections(
247+
NSCursorFrameResizePosition::Top,
248+
NSCursorFrameResizeDirections::All,
249+
)
250+
},
251+
CursorIcon::NsResize => NSCursor::resizeUpDownCursor(),
252+
CursorIcon::NeResize if available!(macos = 15.0) => {
253+
NSCursor::frameResizeCursorFromPosition_inDirections(
254+
NSCursorFrameResizePosition::TopRight,
255+
NSCursorFrameResizeDirections::Outward,
256+
)
257+
},
218258
CursorIcon::NeResize => _windowResizeNorthEastCursor(),
259+
CursorIcon::NwResize if available!(macos = 15.0) => {
260+
NSCursor::frameResizeCursorFromPosition_inDirections(
261+
NSCursorFrameResizePosition::TopLeft,
262+
NSCursorFrameResizeDirections::Outward,
263+
)
264+
},
219265
CursorIcon::NwResize => _windowResizeNorthWestCursor(),
266+
CursorIcon::SeResize if available!(macos = 15.0) => {
267+
NSCursor::frameResizeCursorFromPosition_inDirections(
268+
NSCursorFrameResizePosition::BottomRight,
269+
NSCursorFrameResizeDirections::Outward,
270+
)
271+
},
220272
CursorIcon::SeResize => _windowResizeSouthEastCursor(),
273+
CursorIcon::SwResize if available!(macos = 15.0) => {
274+
NSCursor::frameResizeCursorFromPosition_inDirections(
275+
NSCursorFrameResizePosition::BottomLeft,
276+
NSCursorFrameResizeDirections::Outward,
277+
)
278+
},
221279
CursorIcon::SwResize => _windowResizeSouthWestCursor(),
280+
CursorIcon::NeswResize if available!(macos = 15.0) => {
281+
NSCursor::frameResizeCursorFromPosition_inDirections(
282+
NSCursorFrameResizePosition::TopRight,
283+
NSCursorFrameResizeDirections::All,
284+
)
285+
},
222286
CursorIcon::NeswResize => _windowResizeNorthEastSouthWestCursor(),
287+
CursorIcon::NwseResize if available!(macos = 15.0) => {
288+
NSCursor::frameResizeCursorFromPosition_inDirections(
289+
NSCursorFrameResizePosition::TopLeft,
290+
NSCursorFrameResizeDirections::All,
291+
)
292+
},
223293
CursorIcon::NwseResize => _windowResizeNorthWestSouthEastCursor(),
294+
CursorIcon::ColResize if available!(macos = 15.0) => NSCursor::columnResizeCursor(),
295+
CursorIcon::ColResize => NSCursor::resizeLeftRightCursor(),
296+
CursorIcon::RowResize if available!(macos = 15.0) => NSCursor::rowResizeCursor(),
297+
CursorIcon::RowResize => NSCursor::resizeUpDownCursor(),
298+
CursorIcon::ZoomIn if available!(macos = 15.0) => NSCursor::zoomInCursor(),
299+
CursorIcon::ZoomIn => _zoomInCursor(),
300+
CursorIcon::ZoomOut if available!(macos = 15.0) => NSCursor::zoomOutCursor(),
301+
CursorIcon::ZoomOut => _zoomOutCursor(),
302+
CursorIcon::Help => _helpCursor(),
224303
// This is the wrong semantics for `Wait`, but it's the same as
225304
// what's used in Safari and Chrome.
226305
CursorIcon::Wait | CursorIcon::Progress => busyButClickableCursor(),

winit/src/changelog/unreleased.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,8 @@ changelog entry.
4242

4343
### Added
4444

45-
- Add `keyboard` support for OpenHarmony.
45+
- Add `keyboard` support for OpenHarmony.
46+
47+
### Fixed
48+
49+
- Use new macOS 15 cursors for resize icons.

0 commit comments

Comments
 (0)