[go: nahoru, domu]

blob: cd47daf037a8c7d1ab47ce1e7cfa11bc5654c7be [file] [log] [blame]
/*
* Copyright 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package androidx.ui.gestures.monodrag
import androidx.ui.engine.geometry.Offset
import androidx.ui.gestures.kMinFlingVelocity
import androidx.ui.gestures.kTouchSlop
import androidx.ui.gestures.velocity_tracker.VelocityEstimate
import kotlin.math.absoluteValue
/**
* Recognizes movement in the horizontal direction.
*
* Used for horizontal scrolling.
*
* See also:
*
* * [VerticalDragGestureRecognizer], for a similar recognizer but for
* vertical movement.
* * [MultiDragGestureRecognizer], for a family of gesture recognizers that
* track each touch point independently.
*/
// TODO(Migration/shepshapard): Needs tests, which rely on some Mixin stuff.
class HorizontalDragGestureRecognizer(debugOwner: Any? = null) : DragGestureRecognizer(debugOwner) {
override fun _isFlingGesture(estimate: VelocityEstimate): Boolean {
val minVelocity = minFlingVelocity ?: kMinFlingVelocity
val minDistance = minFlingDistance ?: kTouchSlop
return estimate.pixelsPerSecond.dx.absoluteValue > minVelocity &&
estimate.offset.dx.absoluteValue > minDistance
}
override fun _hasSufficientPendingDragDeltaToAccept() =
(_pendingDragOffset!!.dx.absoluteValue) > kTouchSlop
override fun _getDeltaForDetails(delta: Offset) = Offset(0.0f, delta.dx)
override fun _getPrimaryValueFromOffset(value: Offset) = value.dx
override val debugDescription = "horizontal drag"
}