Skip to content

Commit

Permalink
Support setting custom CSS rules for SVG. (#1210)
Browse files Browse the repository at this point in the history
* Support setting custom CSS rules for SVG.

* Update API.

* Remove.
  • Loading branch information
colinrtwhite committed May 11, 2022
1 parent a9a19a2 commit 46f9793
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 2 deletions.
10 changes: 10 additions & 0 deletions coil-svg/api/coil-svg.api
Expand Up @@ -3,13 +3,18 @@ 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 <init> (Lcoil/decode/ImageSource;Lcoil/request/Options;)V
public fun <init> (Lcoil/decode/ImageSource;Lcoil/request/Options;Z)V
public synthetic fun <init> (Lcoil/decode/ImageSource;Lcoil/request/Options;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun decode (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
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 <init> ()V
public fun <init> (Z)V
Expand All @@ -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;
}

8 changes: 6 additions & 2 deletions coil-svg/src/main/java/coil/decode/SvgDecoder.kt
Expand Up @@ -7,10 +7,12 @@ import androidx.core.graphics.drawable.toDrawable
import coil.ImageLoader
import coil.fetch.SourceResult
import coil.request.Options
import coil.request.css
import coil.size.Scale
import coil.size.isOriginal
import coil.util.toPx
import coil.util.toSoftware
import com.caverock.androidsvg.RenderOptions
import com.caverock.androidsvg.SVG
import kotlinx.coroutines.runInterruptible
import kotlin.math.roundToInt
Expand Down Expand Up @@ -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),
Expand Down Expand Up @@ -110,8 +113,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"
}
}
19 changes: 19 additions & 0 deletions coil-svg/src/main/java/coil/request/Svgs.kt
@@ -0,0 +1,19 @@
@file:Suppress("UNCHECKED_CAST")
@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)

0 comments on commit 46f9793

Please sign in to comment.