From c1ff70b548c72c17185fc991f5fcaf6104c1118d Mon Sep 17 00:00:00 2001 From: Sam Doward Date: Sat, 13 Aug 2022 13:39:46 +0200 Subject: [PATCH] Add configuration for image size --- .../main/java/app/cash/paparazzi/ImageSize.kt | 8 +++++ .../main/java/app/cash/paparazzi/Paparazzi.kt | 14 +++++--- .../app/cash/paparazzi/internal/ImageUtils.kt | 6 ++-- paparazzi/src/main/resources/index.html | 1 + .../cash/paparazzi/sample/ScrollingTest.kt | 34 +++++++++++++++++++ 5 files changed, 56 insertions(+), 7 deletions(-) create mode 100644 paparazzi/src/main/java/app/cash/paparazzi/ImageSize.kt create mode 100644 sample/src/test/java/app/cash/paparazzi/sample/ScrollingTest.kt diff --git a/paparazzi/src/main/java/app/cash/paparazzi/ImageSize.kt b/paparazzi/src/main/java/app/cash/paparazzi/ImageSize.kt new file mode 100644 index 0000000000..69b028cd94 --- /dev/null +++ b/paparazzi/src/main/java/app/cash/paparazzi/ImageSize.kt @@ -0,0 +1,8 @@ +package app.cash.paparazzi + +import app.cash.paparazzi.internal.ImageUtils + +public sealed class ImageSize { + public object FullBleed : ImageSize() + public data class Limit(val height: Int = ImageUtils.THUMBNAIL_SIZE) : ImageSize() +} diff --git a/paparazzi/src/main/java/app/cash/paparazzi/Paparazzi.kt b/paparazzi/src/main/java/app/cash/paparazzi/Paparazzi.kt index 464145281e..0ae84bedbf 100644 --- a/paparazzi/src/main/java/app/cash/paparazzi/Paparazzi.kt +++ b/paparazzi/src/main/java/app/cash/paparazzi/Paparazzi.kt @@ -99,7 +99,8 @@ public class Paparazzi @JvmOverloads constructor( private val renderExtensions: Set = setOf(), private val supportsRtl: Boolean = false, private val showSystemUi: Boolean = false, - private val validateAccessibility: Boolean = false + private val validateAccessibility: Boolean = false, + private val imageSize: ImageSize = ImageSize.Limit() ) : TestRule { private val logger = PaparazziLogger() private lateinit var renderSession: RenderSessionImpl @@ -415,9 +416,14 @@ public class Paparazzi @JvmOverloads constructor( } private fun scaleImage(image: BufferedImage): BufferedImage { - val scale = ImageUtils.getThumbnailScale(image) - // Only scale images down so we don't waste storage space enlarging smaller layouts. - return if (scale < 1f) ImageUtils.scale(image, scale, scale) else image + return when (imageSize) { + ImageSize.FullBleed -> image + is ImageSize.Limit -> { + val scale = ImageUtils.getThumbnailScale(image) + // Only scale images down so we don't waste storage space enlarging smaller layouts. + return if (scale < 1f) ImageUtils.scale(image, scale, scale) else image + } + } } private fun validateLayoutAccessibility(view: View, image: BufferedImage? = null) { diff --git a/paparazzi/src/main/java/app/cash/paparazzi/internal/ImageUtils.kt b/paparazzi/src/main/java/app/cash/paparazzi/internal/ImageUtils.kt index 34f359e860..eccef45a12 100644 --- a/paparazzi/src/main/java/app/cash/paparazzi/internal/ImageUtils.kt +++ b/paparazzi/src/main/java/app/cash/paparazzi/internal/ImageUtils.kt @@ -49,7 +49,7 @@ internal object ImageUtils { */ private val FAIL_ON_MISSING_THUMBNAIL = true - private const val THUMBNAIL_SIZE = 1000 + const val THUMBNAIL_SIZE = 1000 /** Directory where to write the thumbnails and deltas. */ private val failureDir: File @@ -368,9 +368,9 @@ internal object ImageUtils { } } - fun getThumbnailScale(image: BufferedImage): Double { + fun getThumbnailScale(image: BufferedImage, limit: Int = THUMBNAIL_SIZE): Double { val maxDimension = max(image.width, image.height) - return THUMBNAIL_SIZE / maxDimension.toDouble() + return limit / maxDimension.toDouble() } private fun setRenderingHints(g2: Graphics2D) { diff --git a/paparazzi/src/main/resources/index.html b/paparazzi/src/main/resources/index.html index 327f8b04ae..71f46f7c8a 100644 --- a/paparazzi/src/main/resources/index.html +++ b/paparazzi/src/main/resources/index.html @@ -16,6 +16,7 @@ .screen img, .screen video { width: 300px; + max-height:1000px; } div.overlay__hovered { diff --git a/sample/src/test/java/app/cash/paparazzi/sample/ScrollingTest.kt b/sample/src/test/java/app/cash/paparazzi/sample/ScrollingTest.kt new file mode 100644 index 0000000000..4a6394f241 --- /dev/null +++ b/sample/src/test/java/app/cash/paparazzi/sample/ScrollingTest.kt @@ -0,0 +1,34 @@ +package app.cash.paparazzi.sample + +import android.widget.LinearLayout +import android.widget.ScrollView +import android.widget.TextView +import app.cash.paparazzi.ImageSize +import app.cash.paparazzi.Paparazzi +import com.android.ide.common.rendering.api.SessionParams +import org.junit.Rule +import org.junit.Test + +class ScrollingTest { + + @get:Rule + val paparazzi = Paparazzi( + renderingMode = SessionParams.RenderingMode.V_SCROLL, + imageSize = ImageSize.FullBleed + ) + + @Test + fun verticalScrolling() { + val scrollView = ScrollView(paparazzi.context) + val linearLayout = LinearLayout(paparazzi.context) + linearLayout.orientation = LinearLayout.VERTICAL + repeat(1000) { + val textView = TextView(paparazzi.context) + textView.setText("Hello world $it") + linearLayout.addView(textView) + } + scrollView.addView(linearLayout) + + paparazzi.snapshot(scrollView) + } +}