Add Gesture controls for media skip and forward

This commit is contained in:
Hariharan Mudaliar 2025-12-24 14:50:36 +05:30
commit d70569e32f
No known key found for this signature in database
GPG key ID: 025583EB0BE5640E
9 changed files with 267 additions and 21 deletions

View file

@ -9,16 +9,19 @@ import SwiftUI
struct HoverButton: View {
var icon: String
var iconColor: Color = .white;
var iconColor: Color = .white
var scale: Image.Scale = .medium
var pressEffect: PressEffect? = nil
var contentTransition: ContentTransition = .symbolEffect
var externalTriggerToken: Int? = nil
var externalTriggerEffect: PressEffect? = nil
var action: () -> Void
var contentTransition: ContentTransition = .symbolEffect;
@State private var isHovering = false
@State private var pressOffset: CGFloat = 0
@State private var wiggleAngle: Double = 0
@State private var wiggleToken: Int = 0
@State private var lastExternalTriggerToken: Int?
var body: some View {
let size = CGFloat(scale == .large ? 40 : 30)
@ -66,12 +69,17 @@ struct HoverButton: View {
isHovering = hovering
}
}
.onChange(of: externalTriggerToken) { _, newToken in
guard let newToken, newToken != lastExternalTriggerToken else { return }
lastExternalTriggerToken = newToken
triggerPressEffect(override: externalTriggerEffect)
}
}
private func triggerPressEffect() {
guard let pressEffect else { return }
private func triggerPressEffect(override: PressEffect? = nil) {
guard let effect = override ?? pressEffect else { return }
switch pressEffect {
switch effect {
case .nudge(let amount):
withAnimation(.spring(response: 0.2, dampingFraction: 0.55)) {
pressOffset = amount