fix: center progress thumb on pointer while seeking

This commit is contained in:
2026-10-22 12:37:01 +02:00
parent 19a1de625b
commit 40e2ea45a0
3 changed files with 6 additions and 12 deletions
+3 -9
View File
@@ -2008,17 +2008,14 @@ private struct PlaybackSlider: NSViewRepresentable {
let width = bar.width - cell.knobThickness
guard width > 0, maxValue > minValue else { return }
let point = convert(event.locationInWindow, from: nil)
let knob = cell.visibleKnobRect(cell.knobRect(flipped: isFlipped))
let grabbed = NSBezierPath(roundedRect: knob, xRadius: 1, yRadius: 1).contains(point)
let offset = grabbed ? point.x - knob.midX : 0
func seek(_ x: CGFloat) {
let fraction = min(1, max(0, (x - offset - start) / width))
let fraction = min(1, max(0, (x - start) / width))
let value = minValue + fraction * (maxValue - minValue)
guard value != doubleValue else { return }
doubleValue = value
if let action { sendAction(action, to: target) }
}
if !grabbed { seek(point.x) }
seek(point.x)
while let next = window?.nextEvent(matching: [.leftMouseDragged, .leftMouseUp]) {
let nextPoint = convert(next.locationInWindow, from: nil)
if next.type == .leftMouseDragged || nextPoint.x != point.x { seek(nextPoint.x) }
@@ -2130,12 +2127,9 @@ func playbackSliderHitCheck() -> Bool {
}
slider.mouseDown(with: down)
let movedKnob = cell.knobRect(flipped: slider.isFlipped)
let expectedMovement = movement + (abs(offset) <= 1 ? 0 : offset)
let expectedMovement = movement + offset
let expectedX = min(right, max(left, knob.midX + expectedMovement))
guard abs(movedKnob.midX - expectedX) < 0.5 else { return false }
if abs(offset) <= 1 && movement == 0 {
guard slider.doubleValue == initial else { return false }
}
}
return true
}