Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions Sources/OpenSwiftUICore/Event/Gesture/ResettableGestureRule.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
//
// ResettableGestureRule.swift
// OpenSwiftUICore
//
// Status: Complete

package import OpenGraphShims

// MARK: - ResettableGestureRule [6.5.4]

package protocol ResettableGestureRule: StatefulRule {
associatedtype PhaseValue = Void
var phaseValue: GesturePhase<PhaseValue> { get }
var resetSeed: UInt32 { get }
var lastResetSeed: UInt32 { get set }
mutating func resetPhase()
}

extension ResettableGestureRule {
package mutating func resetPhase() {}

package mutating func resetIfNeeded() -> Bool {
defer { lastResetSeed = resetSeed }
guard lastResetSeed == resetSeed else {
resetPhase()
return true
}
guard hasValue else {
return true
}
return !phaseValue.isTerminal
}
}

extension ResettableGestureRule where Value == GesturePhase<PhaseValue> {
package var phaseValue: GesturePhase<PhaseValue> { value }
}

extension ResettableGestureRule where PhaseValue == Value.PhaseValue, Value: DebuggableGesturePhase {
package var phaseValue: GesturePhase<PhaseValue> { value.phase }
}