fix: center progress thumb on pointer while seeking
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user