mirror of
https://github.com/yattee/yattee.git
synced 2026-05-13 02:45:03 +00:00
Persist subscriptions sidebar width on macOS
This commit is contained in:
@@ -6,6 +6,9 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
#if os(macOS)
|
||||||
|
import AppKit
|
||||||
|
#endif
|
||||||
|
|
||||||
struct SubscriptionsView: View {
|
struct SubscriptionsView: View {
|
||||||
@Environment(\.appEnvironment) private var appEnvironment
|
@Environment(\.appEnvironment) private var appEnvironment
|
||||||
@@ -31,6 +34,10 @@ struct SubscriptionsView: View {
|
|||||||
@AppStorage("subscriptionsHideWatched") private var hideWatched = false
|
@AppStorage("subscriptionsHideWatched") private var hideWatched = false
|
||||||
@AppStorage("subscriptionsChannelStripSize") private var channelStripSize: ChannelStripSize = .normal
|
@AppStorage("subscriptionsChannelStripSize") private var channelStripSize: ChannelStripSize = .normal
|
||||||
@AppStorage("subscriptionsShowSidebar") private var showSidebar = true
|
@AppStorage("subscriptionsShowSidebar") private var showSidebar = true
|
||||||
|
#if os(macOS)
|
||||||
|
@AppStorage("subscriptionsMacOSSidebarWidth") private var macOSSidebarWidth = 240.0
|
||||||
|
@State private var macOSSidebarDragStartWidth: Double?
|
||||||
|
#endif
|
||||||
|
|
||||||
/// List style from centralized settings.
|
/// List style from centralized settings.
|
||||||
private var listStyle: VideoListStyle {
|
private var listStyle: VideoListStyle {
|
||||||
@@ -226,10 +233,12 @@ struct SubscriptionsView: View {
|
|||||||
.padding(.horizontal, 16)
|
.padding(.horizontal, 16)
|
||||||
.padding(.top, 20)
|
.padding(.top, 20)
|
||||||
#elseif os(macOS)
|
#elseif os(macOS)
|
||||||
HSplitView {
|
HStack(spacing: 0) {
|
||||||
if showSidebar && subscriptionsLoaded && subscriptions.count > 1 {
|
if showSidebar && subscriptionsLoaded && subscriptions.count > 1 {
|
||||||
macOSChannelsSidebar
|
macOSChannelsSidebar
|
||||||
.frame(minWidth: 180, idealWidth: 240, maxWidth: 400)
|
.frame(width: clampedMacOSSidebarWidth)
|
||||||
|
|
||||||
|
macOSSidebarResizeHandle
|
||||||
}
|
}
|
||||||
|
|
||||||
Group {
|
Group {
|
||||||
@@ -827,6 +836,13 @@ struct SubscriptionsView: View {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if os(macOS)
|
#if os(macOS)
|
||||||
|
private static let macOSSidebarMinWidth = 180.0
|
||||||
|
private static let macOSSidebarMaxWidth = 400.0
|
||||||
|
|
||||||
|
private var clampedMacOSSidebarWidth: CGFloat {
|
||||||
|
CGFloat(min(max(macOSSidebarWidth, Self.macOSSidebarMinWidth), Self.macOSSidebarMaxWidth))
|
||||||
|
}
|
||||||
|
|
||||||
private var macOSChannelsSidebar: some View {
|
private var macOSChannelsSidebar: some View {
|
||||||
List(selection: sidebarSelection) {
|
List(selection: sidebarSelection) {
|
||||||
channelsSidebarContent
|
channelsSidebarContent
|
||||||
@@ -834,6 +850,47 @@ struct SubscriptionsView: View {
|
|||||||
.listStyle(.sidebar)
|
.listStyle(.sidebar)
|
||||||
.scrollContentBackground(.hidden)
|
.scrollContentBackground(.hidden)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private var macOSSidebarResizeHandle: some View {
|
||||||
|
ZStack {
|
||||||
|
Rectangle()
|
||||||
|
.fill(.separator.opacity(0.6))
|
||||||
|
.frame(width: 1)
|
||||||
|
|
||||||
|
Rectangle()
|
||||||
|
.fill(.clear)
|
||||||
|
.frame(width: 8)
|
||||||
|
.contentShape(Rectangle())
|
||||||
|
}
|
||||||
|
.frame(width: 8)
|
||||||
|
.frame(maxHeight: .infinity)
|
||||||
|
.background(.clear)
|
||||||
|
.contentShape(Rectangle())
|
||||||
|
.highPriorityGesture(macOSSidebarResizeGesture)
|
||||||
|
.onHover { isHovering in
|
||||||
|
if isHovering {
|
||||||
|
NSCursor.resizeLeftRight.push()
|
||||||
|
} else {
|
||||||
|
NSCursor.pop()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private var macOSSidebarResizeGesture: some Gesture {
|
||||||
|
DragGesture(minimumDistance: 0, coordinateSpace: .global)
|
||||||
|
.onChanged { value in
|
||||||
|
if macOSSidebarDragStartWidth == nil {
|
||||||
|
macOSSidebarDragStartWidth = macOSSidebarWidth
|
||||||
|
}
|
||||||
|
|
||||||
|
let baseWidth = macOSSidebarDragStartWidth ?? macOSSidebarWidth
|
||||||
|
let newWidth = baseWidth + value.translation.width
|
||||||
|
macOSSidebarWidth = min(max(newWidth, Self.macOSSidebarMinWidth), Self.macOSSidebarMaxWidth)
|
||||||
|
}
|
||||||
|
.onEnded { _ in
|
||||||
|
macOSSidebarDragStartWidth = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
private var isSidebarVisible: Bool {
|
private var isSidebarVisible: Bool {
|
||||||
|
|||||||
Reference in New Issue
Block a user