// // Swiftfin is subject to the terms of the Mozilla Public // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // // Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI protocol _PanHandlingAction { associatedtype Value: Comparable & AdditiveArithmetic typealias OnChangeAction = ( _ startState: _PanStartHandlingState, _ panState: _PanHandlingState, _ containerState: VideoPlayerContainerState ) -> Void var startState: _PanStartHandlingState { get set } var startValue: (VideoPlayerContainerState) -> Value { get set } var onChange: OnChangeAction { get } } struct _PanHandlingState { let translation: CGPoint let velocity: CGPoint let location: CGPoint let unitPoint: UnitPoint let gestureState: UIGestureRecognizer.State } struct _PanStartHandlingState { let direction: Direction let location: CGPoint let startedWithOverlay: Bool let value: Value } struct PanHandlingAction: _PanHandlingAction { typealias OnChangeAction = ( _ startState: _PanStartHandlingState, _ panState: _PanHandlingState, _ containerState: VideoPlayerContainerState ) -> Void var startState: _PanStartHandlingState = .init( direction: .all, location: .zero, startedWithOverlay: false, value: .zero ) var startValue: (VideoPlayerContainerState) -> Value let onChange: OnChangeAction init( startValue: Value, onChange: @escaping OnChangeAction ) { self.startValue = { _ in startValue } self.onChange = onChange } init( startValue: @escaping (VideoPlayerContainerState) -> Value, onChange: @escaping OnChangeAction ) { self.startValue = startValue self.onChange = onChange } }