Added snapping when only panning.

This commit is contained in:
Koen 2024-01-16 12:24:07 +01:00
commit dfc8c4b740

View file

@ -85,6 +85,7 @@ class GestureControlView : LinearLayout {
private val _layoutControlsZoom: FrameLayout private val _layoutControlsZoom: FrameLayout
private val _textZoom: TextView private val _textZoom: TextView
private var _isZooming = false private var _isZooming = false
private var _isPanning = false
private var _isZoomPanEnabled = false private var _isZoomPanEnabled = false
private var _surfaceView: View? = null private var _surfaceView: View? = null
private var _layoutIndicatorFill: FrameLayout; private var _layoutIndicatorFill: FrameLayout;
@ -150,23 +151,7 @@ class GestureControlView : LinearLayout {
_textZoom.text = "${String.format("%.1f", _scaleFactor)}x" _textZoom.text = "${String.format("%.1f", _scaleFactor)}x"
_isZooming = true _isZooming = true
if (willSnapFill()) { updateSnappingVisibility()
_layoutIndicatorFill.visibility = View.VISIBLE
_layoutIndicatorFit.visibility = View.GONE
} else if (willSnapFit()) {
_layoutIndicatorFill.visibility = View.GONE
_layoutIndicatorFit.visibility = View.VISIBLE
_surfaceView?.let {
val lp = _layoutIndicatorFit.layoutParams
lp.width = it.width
lp.height = it.height
_layoutIndicatorFit.layoutParams = lp
}
} else {
_layoutIndicatorFill.visibility = View.GONE
_layoutIndicatorFit.visibility = View.GONE
}
return true return true
} }
@ -183,7 +168,7 @@ class GestureControlView : LinearLayout {
Logger.i(TAG, "p0.pointerCount: " + p0.pointerCount) Logger.i(TAG, "p0.pointerCount: " + p0.pointerCount)
if (p1.pointerCount == 1) { if (!_isPanning && p1.pointerCount == 1) {
val minDistance = Math.min(width, height) val minDistance = Math.min(width, height)
if (_isFullScreen && _adjustingBrightness) { if (_isFullScreen && _adjustingBrightness) {
val adjustAmount = (distanceY * 2) / minDistance; val adjustAmount = (distanceY * 2) / minDistance;
@ -221,7 +206,9 @@ class GestureControlView : LinearLayout {
} }
} }
} else if (_isZoomPanEnabled && _isFullScreen && !_isZooming && Settings.instance.gestureControls.pan) { } else if (_isZoomPanEnabled && _isFullScreen && !_isZooming && Settings.instance.gestureControls.pan) {
_isPanning = true
stopAllGestures() stopAllGestures()
updateSnappingVisibility()
pan(_translationX - distanceX, _translationY - distanceY) pan(_translationX - distanceX, _translationY - distanceY)
} }
@ -263,6 +250,26 @@ class GestureControlView : LinearLayout {
isClickable = true isClickable = true
} }
fun updateSnappingVisibility() {
if (willSnapFill()) {
_layoutIndicatorFill.visibility = View.VISIBLE
_layoutIndicatorFit.visibility = View.GONE
} else if (willSnapFit()) {
_layoutIndicatorFill.visibility = View.GONE
_layoutIndicatorFit.visibility = View.VISIBLE
_surfaceView?.let {
val lp = _layoutIndicatorFit.layoutParams
lp.width = it.width
lp.height = it.height
_layoutIndicatorFit.layoutParams = lp
}
} else {
_layoutIndicatorFill.visibility = View.GONE
_layoutIndicatorFit.visibility = View.GONE
}
}
fun setZoomPanEnabled(view: View) { fun setZoomPanEnabled(view: View) {
_isZoomPanEnabled = true _isZoomPanEnabled = true
_surfaceView = view _surfaceView = view
@ -337,7 +344,7 @@ class GestureControlView : LinearLayout {
stopAdjustingFullscreenDown(); stopAdjustingFullscreenDown();
} }
if (_isZooming && ev.action == MotionEvent.ACTION_UP) { if ((_isPanning || _isZooming) && ev.action == MotionEvent.ACTION_UP) {
val surfaceView = _surfaceView val surfaceView = _surfaceView
if (surfaceView != null && willSnapFill()) { if (surfaceView != null && willSnapFill()) {
_scaleFactor = calculateZoomScaleFactor() _scaleFactor = calculateZoomScaleFactor()
@ -359,6 +366,7 @@ class GestureControlView : LinearLayout {
_layoutIndicatorFill.visibility = View.GONE _layoutIndicatorFill.visibility = View.GONE
_layoutIndicatorFit.visibility = View.GONE _layoutIndicatorFit.visibility = View.GONE
_isZooming = false _isZooming = false
_isPanning = false
} }
startHideJobIfNecessary(); startHideJobIfNecessary();