From c01bdc6d7c71746cecec8b0a04879e1569dfb41a Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Fri, 20 Sep 2024 21:46:39 -0700 Subject: [PATCH] macos: use pointerStyle for SplitView Divider --- macos/Sources/Helpers/Backport.swift | 4 ++-- .../Helpers/SplitView/SplitView.Divider.swift | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/macos/Sources/Helpers/Backport.swift b/macos/Sources/Helpers/Backport.swift index 2d4eef5ca..c8c6de309 100644 --- a/macos/Sources/Helpers/Backport.swift +++ b/macos/Sources/Helpers/Backport.swift @@ -33,9 +33,9 @@ extension Backport where Content: View { } } - func pointerStyle(_ style: BackportPointerStyle) -> some View { + func pointerStyle(_ style: BackportPointerStyle?) -> some View { if #available(macOS 15, *) { - return content.pointerStyle(style.official) + return content.pointerStyle(style?.official) } else { return content } diff --git a/macos/Sources/Helpers/SplitView/SplitView.Divider.swift b/macos/Sources/Helpers/SplitView/SplitView.Divider.swift index f1a7f666d..83847ff0c 100644 --- a/macos/Sources/Helpers/SplitView/SplitView.Divider.swift +++ b/macos/Sources/Helpers/SplitView/SplitView.Divider.swift @@ -44,15 +44,30 @@ extension SplitView { } } + private var pointerStyle: BackportPointerStyle { + return switch (direction) { + case .horizontal: .resizeLeftRight + case .vertical: .resizeUpDown + } + } + var body: some View { ZStack { Color.clear .frame(width: invisibleWidth, height: invisibleHeight) + .contentShape(Rectangle()) // Makes it hit testable for pointerStyle Rectangle() .fill(color) .frame(width: visibleWidth, height: visibleHeight) } + .backport.pointerStyle(pointerStyle) .onHover { isHovered in + // macOS 15+ we use the pointerStyle helper which is much less + // error-prone versus manual NSCursor push/pop + if #available(macOS 15, *) { + return + } + if (isHovered) { switch (direction) { case .horizontal: