From 94e5f80e9f81880703093e61aefad42b2101a2ed Mon Sep 17 00:00:00 2001 From: Colin White Date: Tue, 22 Mar 2022 21:41:17 -0500 Subject: [PATCH 1/3] Support setting custom CSS rules for SVG. --- .../src/main/java/coil/decode/SvgDecoder.kt | 8 ++++++-- coil-svg/src/main/java/coil/request/Svgs.kt | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 coil-svg/src/main/java/coil/request/Svgs.kt diff --git a/coil-svg/src/main/java/coil/decode/SvgDecoder.kt b/coil-svg/src/main/java/coil/decode/SvgDecoder.kt index c7da15eb4c..1736a4a18e 100644 --- a/coil-svg/src/main/java/coil/decode/SvgDecoder.kt +++ b/coil-svg/src/main/java/coil/decode/SvgDecoder.kt @@ -7,8 +7,10 @@ import androidx.core.graphics.drawable.toDrawable import coil.ImageLoader import coil.fetch.SourceResult import coil.request.Options +import coil.request.css import coil.size.Dimension import coil.util.toSoftware +import com.caverock.androidsvg.RenderOptions import com.caverock.androidsvg.SVG import kotlinx.coroutines.runInterruptible import kotlin.math.roundToInt @@ -69,7 +71,8 @@ class SvgDecoder @JvmOverloads constructor( svg.setDocumentHeight("100%") val bitmap = createBitmap(bitmapWidth, bitmapHeight, options.config.toSoftware()) - svg.renderToCanvas(Canvas(bitmap)) + val renderOptions = options.parameters.css()?.let { RenderOptions().css(it) } + svg.renderToCanvas(Canvas(bitmap), renderOptions) DecodeResult( drawable = bitmap.toDrawable(options.context.resources), @@ -107,8 +110,9 @@ class SvgDecoder @JvmOverloads constructor( override fun hashCode() = useViewBoundsAsIntrinsicSize.hashCode() } - private companion object { + companion object { private const val MIME_TYPE_SVG = "image/svg+xml" private const val DEFAULT_SIZE = 512f + const val CSS_KEY = "coil#css" } } diff --git a/coil-svg/src/main/java/coil/request/Svgs.kt b/coil-svg/src/main/java/coil/request/Svgs.kt new file mode 100644 index 0000000000..aecc7e5bd5 --- /dev/null +++ b/coil-svg/src/main/java/coil/request/Svgs.kt @@ -0,0 +1,19 @@ +@file:Suppress("UNCHECKED_CAST", "unused") +@file:JvmName("Svgs") + +package coil.request + +import coil.decode.SvgDecoder.Companion.CSS_KEY + +/** + * Specifies additional CSS rules that will be applied when rendering an SVG in addition to any + * rules specified in the SVG itself. + */ +fun ImageRequest.Builder.css(css: String): ImageRequest.Builder { + return setParameter(CSS_KEY, css) +} + +/** + * Get the additional CSS rules. + */ +fun Parameters.css(): String? = value(CSS_KEY) From 41132a101fd0fa61619f3c0150015c035d425bbb Mon Sep 17 00:00:00 2001 From: Colin White Date: Tue, 22 Mar 2022 21:43:51 -0500 Subject: [PATCH 2/3] Update API. --- coil-svg/api/coil-svg.api | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/coil-svg/api/coil-svg.api b/coil-svg/api/coil-svg.api index 6cfa7ce0f6..9fa9346c2e 100644 --- a/coil-svg/api/coil-svg.api +++ b/coil-svg/api/coil-svg.api @@ -3,6 +3,8 @@ public final class coil/decode/SvgDecodeUtils { } public final class coil/decode/SvgDecoder : coil/decode/Decoder { + public static final field CSS_KEY Ljava/lang/String; + public static final field Companion Lcoil/decode/SvgDecoder$Companion; public fun (Lcoil/decode/ImageSource;Lcoil/request/Options;)V public fun (Lcoil/decode/ImageSource;Lcoil/request/Options;Z)V public synthetic fun (Lcoil/decode/ImageSource;Lcoil/request/Options;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -10,6 +12,9 @@ public final class coil/decode/SvgDecoder : coil/decode/Decoder { public final fun getUseViewBoundsAsIntrinsicSize ()Z } +public final class coil/decode/SvgDecoder$Companion { +} + public final class coil/decode/SvgDecoder$Factory : coil/decode/Decoder$Factory { public fun ()V public fun (Z)V @@ -20,3 +25,8 @@ public final class coil/decode/SvgDecoder$Factory : coil/decode/Decoder$Factory public fun hashCode ()I } +public final class coil/request/Svgs { + public static final fun css (Lcoil/request/ImageRequest$Builder;Ljava/lang/String;)Lcoil/request/ImageRequest$Builder; + public static final fun css (Lcoil/request/Parameters;)Ljava/lang/String; +} + From 9af3fe9f333a81c64904473519519c265a387fa5 Mon Sep 17 00:00:00 2001 From: Colin White Date: Wed, 11 May 2022 16:02:41 -0400 Subject: [PATCH 3/3] Remove. --- coil-svg/src/main/java/coil/request/Svgs.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coil-svg/src/main/java/coil/request/Svgs.kt b/coil-svg/src/main/java/coil/request/Svgs.kt index aecc7e5bd5..3572e7053e 100644 --- a/coil-svg/src/main/java/coil/request/Svgs.kt +++ b/coil-svg/src/main/java/coil/request/Svgs.kt @@ -1,4 +1,4 @@ -@file:Suppress("UNCHECKED_CAST", "unused") +@file:Suppress("UNCHECKED_CAST") @file:JvmName("Svgs") package coil.request