test: measure rendered progress thumb alignment

This commit is contained in:
2026-10-22 12:41:21 +02:00
parent 40e2ea45a0
commit fe34ce88f9
+10 -3
View File
@@ -2028,6 +2028,9 @@ private struct PlaybackSlider: NSViewRepresentable {
var volume = false var volume = false
var bufferedRange: ClosedRange<Double>? var bufferedRange: ClosedRange<Double>?
var intervals: [MiruroInterval] = [] var intervals: [MiruroInterval] = []
#if PLAYER_CHECK
var renderedKnob = NSRect.zero
#endif
func visibleKnobRect(_ rect: NSRect) -> NSRect { func visibleKnobRect(_ rect: NSRect) -> NSRect {
let width: CGFloat = volume ? 16 : 3 let width: CGFloat = volume ? 16 : 3
let height: CGFloat = volume ? 12 : 15 let height: CGFloat = volume ? 12 : 15
@@ -2076,6 +2079,9 @@ private struct PlaybackSlider: NSViewRepresentable {
} }
override func drawKnob(_ rect: NSRect) { override func drawKnob(_ rect: NSRect) {
let knob = visibleKnobRect(rect) let knob = visibleKnobRect(rect)
#if PLAYER_CHECK
renderedKnob = knob
#endif
let color = isEnabled ? (volume ? SunsetPalette.text : SunsetPalette.secondaryText) let color = isEnabled ? (volume ? SunsetPalette.text : SunsetPalette.secondaryText)
: SunsetPalette.disabledThumb : SunsetPalette.disabledThumb
color.setFill() color.setFill()
@@ -2091,14 +2097,14 @@ func castVolumeSliderFeedbackCheck() -> Bool { PlaybackSlider.Slider.feedbackChe
func playbackSliderHitCheck() -> Bool { func playbackSliderHitCheck() -> Bool {
let window = NSWindow(contentRect: NSRect(x: 0, y: 0, width: 320, height: 80), let window = NSWindow(contentRect: NSRect(x: 0, y: 0, width: 320, height: 80),
styleMask: [.borderless], backing: .buffered, defer: false) styleMask: [.borderless], backing: .buffered, defer: false)
let slider = PlaybackSlider.Slider(frame: NSRect(x: 20, y: 20, width: 280, height: 24)) let slider = PlaybackSlider.Slider(frame: NSRect(x: 20, y: 20, width: 280, height: 14))
slider.cell = PlaybackSlider.Cell() slider.cell = PlaybackSlider.Cell()
slider.minValue = 0 slider.minValue = 0
slider.maxValue = 100 slider.maxValue = 100
slider.isContinuous = true slider.isContinuous = true
window.contentView!.addSubview(slider) window.contentView!.addSubview(slider)
window.display() window.display()
let cell = slider.cell as! NSSliderCell let cell = slider.cell as! PlaybackSlider.Cell
slider.doubleValue = slider.minValue slider.doubleValue = slider.minValue
let left = cell.knobRect(flipped: slider.isFlipped).midX let left = cell.knobRect(flipped: slider.isFlipped).midX
slider.doubleValue = slider.maxValue slider.doubleValue = slider.maxValue
@@ -2126,7 +2132,8 @@ func playbackSliderHitCheck() -> Bool {
NSApp.postEvent(drag, atStart: true) NSApp.postEvent(drag, atStart: true)
} }
slider.mouseDown(with: down) slider.mouseDown(with: down)
let movedKnob = cell.knobRect(flipped: slider.isFlipped) slider.display()
let movedKnob = cell.renderedKnob
let expectedMovement = movement + offset let expectedMovement = movement + offset
let expectedX = min(right, max(left, knob.midX + expectedMovement)) let expectedX = min(right, max(left, knob.midX + expectedMovement))
guard abs(movedKnob.midX - expectedX) < 0.5 else { return false } guard abs(movedKnob.midX - expectedX) < 0.5 else { return false }