From d1c5c12bdd59e68c850958ffa8cb321189e99627 Mon Sep 17 00:00:00 2001 From: AntsyLich <59261191+AntsyLich@users.noreply.github.com> Date: Sun, 4 Oct 2026 12:59:13 +0600 Subject: [PATCH] Fix webtoon reader leaving a gap after zooming in a resized window The reader measured its height once, so zooming after a split screen or window resize pinned it to the old size until the reader was reopened. Closes #1721 --- .../viewer/webtoon/WebtoonRecyclerView.kt | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonRecyclerView.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonRecyclerView.kt index c2ed4aaf2..05b36d043 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonRecyclerView.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonRecyclerView.kt @@ -7,6 +7,7 @@ import android.util.AttributeSet import android.view.HapticFeedbackConstants import android.view.MotionEvent import android.view.ViewConfiguration +import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.animation.DecelerateInterpolator import androidx.core.animation.doOnEnd import androidx.recyclerview.widget.LinearLayoutManager @@ -30,7 +31,6 @@ class WebtoonRecyclerView @JvmOverloads constructor( private var halfHeight = 0 var originalHeight = 0 private set - private var heightSet = false private var firstVisibleItemPosition = 0 private var lastVisibleItemPosition = 0 private var currentScale = DEFAULT_RATE @@ -58,9 +58,9 @@ class WebtoonRecyclerView @JvmOverloads constructor( override fun onMeasure(widthSpec: Int, heightSpec: Int) { halfWidth = MeasureSpec.getSize(widthSpec) / 2 halfHeight = MeasureSpec.getSize(heightSpec) / 2 - if (!heightSet) { + // While zoomed out the height is set by zooming, not by the window + if (layoutParams?.height == MATCH_PARENT) { originalHeight = MeasureSpec.getSize(heightSpec) - heightSet = true } super.onMeasure(widthSpec, heightSpec) } @@ -193,12 +193,13 @@ class WebtoonRecyclerView @JvmOverloads constructor( setScaleRate(currentScale) - layoutParams.height = if (currentScale < 1) { - (originalHeight / currentScale).toInt() + if (currentScale < 1) { + layoutParams.height = (originalHeight / currentScale).toInt() + halfHeight = layoutParams.height / 2 } else { - originalHeight + layoutParams.height = MATCH_PARENT + halfHeight = originalHeight / 2 } - halfHeight = layoutParams.height / 2 if (currentScale != DEFAULT_RATE) { x = getPositionX(x) @@ -245,8 +246,8 @@ class WebtoonRecyclerView @JvmOverloads constructor( if (!isZooming && doubleTapZoom) { if (scaleX != DEFAULT_RATE) { zoom(currentScale, DEFAULT_RATE, x, 0f, y, 0f) - layoutParams.height = originalHeight - halfHeight = layoutParams.height / 2 + layoutParams.height = MATCH_PARENT + halfHeight = originalHeight / 2 requestLayout() } else { val toScale = 2f