fix(mac): size highlighted session rows
This commit is contained in:
@@ -517,6 +517,7 @@ final class MenuSessionsInjector: NSObject, NSMenuDelegate {
|
|||||||
private final class HighlightedMenuItemHostView: NSView {
|
private final class HighlightedMenuItemHostView: NSView {
|
||||||
private let baseView: AnyView
|
private let baseView: AnyView
|
||||||
private let hosting: NSHostingView<AnyView>
|
private let hosting: NSHostingView<AnyView>
|
||||||
|
private var targetWidth: CGFloat
|
||||||
private var tracking: NSTrackingArea?
|
private var tracking: NSTrackingArea?
|
||||||
private var hovered = false {
|
private var hovered = false {
|
||||||
didSet { self.updateHighlight() }
|
didSet { self.updateHighlight() }
|
||||||
@@ -525,20 +526,21 @@ private final class HighlightedMenuItemHostView: NSView {
|
|||||||
init(rootView: AnyView, width: CGFloat) {
|
init(rootView: AnyView, width: CGFloat) {
|
||||||
self.baseView = rootView
|
self.baseView = rootView
|
||||||
self.hosting = NSHostingView(rootView: AnyView(rootView.environment(\.menuItemHighlighted, false)))
|
self.hosting = NSHostingView(rootView: AnyView(rootView.environment(\.menuItemHighlighted, false)))
|
||||||
|
self.targetWidth = max(1, width)
|
||||||
super.init(frame: .zero)
|
super.init(frame: .zero)
|
||||||
|
|
||||||
self.addSubview(self.hosting)
|
self.addSubview(self.hosting)
|
||||||
self.hosting.autoresizingMask = [.width, .height]
|
self.hosting.autoresizingMask = [.width, .height]
|
||||||
self.hosting.frame = self.bounds
|
self.updateSizing()
|
||||||
|
|
||||||
self.frame.size.width = max(1, width)
|
|
||||||
let size = self.fittingSize
|
|
||||||
self.frame.size.height = size.height
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@available(*, unavailable)
|
@available(*, unavailable)
|
||||||
required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") }
|
required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") }
|
||||||
|
|
||||||
|
override var intrinsicContentSize: NSSize {
|
||||||
|
self.hosting.fittingSize
|
||||||
|
}
|
||||||
|
|
||||||
override func updateTrackingAreas() {
|
override func updateTrackingAreas() {
|
||||||
super.updateTrackingAreas()
|
super.updateTrackingAreas()
|
||||||
if let tracking {
|
if let tracking {
|
||||||
@@ -579,6 +581,13 @@ private final class HighlightedMenuItemHostView: NSView {
|
|||||||
|
|
||||||
private func updateHighlight() {
|
private func updateHighlight() {
|
||||||
self.hosting.rootView = AnyView(self.baseView.environment(\.menuItemHighlighted, self.hovered))
|
self.hosting.rootView = AnyView(self.baseView.environment(\.menuItemHighlighted, self.hovered))
|
||||||
|
self.updateSizing()
|
||||||
self.needsDisplay = true
|
self.needsDisplay = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func updateSizing() {
|
||||||
|
self.hosting.frame.size.width = self.targetWidth
|
||||||
|
let size = self.hosting.fittingSize
|
||||||
|
self.frame = NSRect(origin: .zero, size: NSSize(width: self.targetWidth, height: size.height))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user