Skip to content

Commit

Permalink
Add necessary named arguments "isMoreThanHalf" and "isPositiveArc"
Browse files Browse the repository at this point in the history
  • Loading branch information
egorikftp committed Jul 31, 2024
1 parent ac62edd commit ffe2084
Show file tree
Hide file tree
Showing 8 changed files with 164 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ sealed class PathNode(val isCurve: Boolean = false, val isQuad: Boolean = false)
val arcStartDx: Float,
val arcStartDy: Float,
) : PathNode() {
override fun asFunctionCall() = "arcToRelative(${horizontalEllipseRadius.formatFloat()}, ${verticalEllipseRadius.formatFloat()}, ${theta.formatFloat()}, $isMoreThanHalf, $isPositiveArc, ${arcStartDx.formatFloat()}, ${arcStartDy.formatFloat()})"
override fun asFunctionCall() = "arcToRelative(${horizontalEllipseRadius.formatFloat()}, ${verticalEllipseRadius.formatFloat()}, ${theta.formatFloat()}, isMoreThanHalf = $isMoreThanHalf, isPositiveArc = $isPositiveArc, ${arcStartDx.formatFloat()}, ${arcStartDy.formatFloat()})"
}

data class ArcTo(
Expand All @@ -158,7 +158,7 @@ sealed class PathNode(val isCurve: Boolean = false, val isQuad: Boolean = false)
val arcStartX: Float,
val arcStartY: Float,
) : PathNode() {
override fun asFunctionCall() = "arcTo(${horizontalEllipseRadius.formatFloat()}, ${verticalEllipseRadius.formatFloat()}, ${theta.formatFloat()}, $isMoreThanHalf, $isPositiveArc, ${arcStartX.formatFloat()}, ${arcStartY.formatFloat()})"
override fun asFunctionCall() = "arcTo(${horizontalEllipseRadius.formatFloat()}, ${verticalEllipseRadius.formatFloat()}, ${theta.formatFloat()}, isMoreThanHalf = $isMoreThanHalf, isPositiveArc = $isPositiveArc, ${arcStartX.formatFloat()}, ${arcStartY.formatFloat()})"
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ private fun CodeBlock.Builder.addVectorNode(vectorNode: VectorNode) {
is VectorNode.Path -> {
addPath(vectorNode) {
vectorNode.nodes.forEach { pathNode ->
addStatement(pathNode.asFunctionCall())
// based on https://github.com/square/kotlinpoet/pull/1860#issuecomment-1986825382
addStatement("%L", pathNode.asFunctionCall().replace(' ', '·'))
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@ class XmlToImageVectorTest {
).content

val expected = outputFormat.toResourceText(
pathToBackingProperty = "kt/backing/Colored.WithoutPath.kt",
pathToLazyProperty = "kt/lazy/Colored.WithoutPath.kt",
pathToBackingProperty = "kt/backing/WithoutPath.pack.nested.kt",
pathToLazyProperty = "kt/lazy/WithoutPath.pack.nested.kt",
)
assertThat(output).isEqualTo(expected)
}
Expand Down Expand Up @@ -201,4 +201,28 @@ class XmlToImageVectorTest {
)
assertThat(output).isEqualTo(expected)
}

@ParameterizedTest
@EnumSource(value = OutputFormat::class)
fun `icon with named arguments`(outputFormat: OutputFormat) {
val icon = getResourcePath("xml/icon_with_named_args.xml")
val parserOutput = IconParser.toVector(icon)
val output = ImageVectorGenerator.convert(
vector = parserOutput.vector,
kotlinName = parserOutput.kotlinName,
config = ImageVectorGeneratorConfig(
packageName = "io.github.composegears.valkyrie.icons",
packName = "ValkyrieIcons",
nestedPackName = "",
outputFormat = outputFormat,
generatePreview = false,
),
).content

val expected = outputFormat.toResourceText(
pathToBackingProperty = "kt/backing/IconWithNamedArgs.kt",
pathToLazyProperty = "kt/lazy/IconWithNamedArgs.kt",
)
assertThat(output).isEqualTo(expected)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package io.github.composegears.valkyrie.icons

import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.graphics.vector.path
import androidx.compose.ui.unit.dp
import kotlin.Suppress

val ValkyrieIcons.IconWithNamedArgs: ImageVector
get() {
if (_IconWithNamedArgs != null) {
return _IconWithNamedArgs!!
}
_IconWithNamedArgs = ImageVector.Builder(
name = "IconWithNamedArgs",
defaultWidth = 24.dp,
defaultHeight = 24.dp,
viewportWidth = 24f,
viewportHeight = 24f
).apply {
path(fill = SolidColor(Color(0xFF232F34))) {
moveTo(21f, 6.376f)
curveToRelative(0f, -0.964f, -0.894f, -1.672f, -1.833f, -1.454f)
curveToRelative(-1.37f, 0.317f, -3.152f, 0.734f, -4.03f, 0.958f)
arcToRelative(0.763f, 0.763f, 0f, isMoreThanHalf = false, isPositiveArc = true, -0.55f, -0.066f)
lineToRelative(-4.991f, -2.68f)
arcToRelative(0.75f, 0.75f, 0f, isMoreThanHalf = false, isPositiveArc = false, -0.528f, -0.07f)
lineToRelative(-5.49f, 1.3f)
arcTo(0.75f, 0.75f, 0f, isMoreThanHalf = false, isPositiveArc = false, 3f, 5.092f)
verticalLineToRelative(13.466f)
curveToRelative(0f, 0.482f, 0.446f, 0.839f, 0.915f, 0.73f)
curveToRelative(1.355f, -0.311f, 3.852f, -0.89f, 4.946f, -1.169f)
arcToRelative(0.737f, 0.737f, 0f, isMoreThanHalf = false, isPositiveArc = true, 0.55f, 0.07f)
curveToRelative(1.54f, 0.88f, 4.378f, 2.81f, 5.358f, 2.81f)
curveToRelative(1.175f, 0f, 4.994f, -1.024f, 6.027f, -1.705f)
curveToRelative(0.145f, -0.096f, 0.204f, -0.259f, 0.204f, -0.433f)
lineTo(21f, 6.377f)
close()
moveTo(9.23f, 15.923f)
arcToRelative(0.75f, 0.75f, 0f, isMoreThanHalf = false, isPositiveArc = true, -0.556f, 0.725f)
lineToRelative(-3.346f, 0.89f)
arcToRelative(0.75f, 0.75f, 0f, isMoreThanHalf = false, isPositiveArc = true, -0.943f, -0.725f)
lineTo(4.385f, 6.407f)
arcToRelative(0.75f, 0.75f, 0f, isMoreThanHalf = false, isPositiveArc = true, 0.55f, -0.723f)
lineToRelative(3.347f, -0.923f)
arcToRelative(0.75f, 0.75f, 0f, isMoreThanHalf = false, isPositiveArc = true, 0.949f, 0.723f)
verticalLineToRelative(10.44f)
close()
moveTo(19.615f, 17.593f)
arcToRelative(0.75f, 0.75f, 0f, isMoreThanHalf = false, isPositiveArc = true, -0.55f, 0.723f)
lineToRelative(-3.346f, 0.922f)
arcToRelative(0.75f, 0.75f, 0f, isMoreThanHalf = false, isPositiveArc = true, -0.95f, -0.723f)
lineTo(14.769f, 8.026f)
curveToRelative(0f, -0.316f, 0.198f, -0.598f, 0.5f, -0.69f)
curveToRelative(0.903f, -0.271f, 2.246f, -0.59f, 3.398f, -0.88f)
curveToRelative(0.479f, -0.12f, 0.948f, 0.24f, 0.948f, 0.735f)
verticalLineToRelative(10.402f)
close()
}
}.build()

return _IconWithNamedArgs!!
}

@Suppress("ObjectPropertyName")
private var _IconWithNamedArgs: ImageVector? = null
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package io.github.composegears.valkyrie.icons

import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.graphics.vector.path
import androidx.compose.ui.unit.dp
import kotlin.LazyThreadSafetyMode

val ValkyrieIcons.IconWithNamedArgs: ImageVector by lazy(LazyThreadSafetyMode.NONE) {
ImageVector.Builder(
name = "IconWithNamedArgs",
defaultWidth = 24.dp,
defaultHeight = 24.dp,
viewportWidth = 24f,
viewportHeight = 24f
).apply {
path(fill = SolidColor(Color(0xFF232F34))) {
moveTo(21f, 6.376f)
curveToRelative(0f, -0.964f, -0.894f, -1.672f, -1.833f, -1.454f)
curveToRelative(-1.37f, 0.317f, -3.152f, 0.734f, -4.03f, 0.958f)
arcToRelative(0.763f, 0.763f, 0f, isMoreThanHalf = false, isPositiveArc = true, -0.55f, -0.066f)
lineToRelative(-4.991f, -2.68f)
arcToRelative(0.75f, 0.75f, 0f, isMoreThanHalf = false, isPositiveArc = false, -0.528f, -0.07f)
lineToRelative(-5.49f, 1.3f)
arcTo(0.75f, 0.75f, 0f, isMoreThanHalf = false, isPositiveArc = false, 3f, 5.092f)
verticalLineToRelative(13.466f)
curveToRelative(0f, 0.482f, 0.446f, 0.839f, 0.915f, 0.73f)
curveToRelative(1.355f, -0.311f, 3.852f, -0.89f, 4.946f, -1.169f)
arcToRelative(0.737f, 0.737f, 0f, isMoreThanHalf = false, isPositiveArc = true, 0.55f, 0.07f)
curveToRelative(1.54f, 0.88f, 4.378f, 2.81f, 5.358f, 2.81f)
curveToRelative(1.175f, 0f, 4.994f, -1.024f, 6.027f, -1.705f)
curveToRelative(0.145f, -0.096f, 0.204f, -0.259f, 0.204f, -0.433f)
lineTo(21f, 6.377f)
close()
moveTo(9.23f, 15.923f)
arcToRelative(0.75f, 0.75f, 0f, isMoreThanHalf = false, isPositiveArc = true, -0.556f, 0.725f)
lineToRelative(-3.346f, 0.89f)
arcToRelative(0.75f, 0.75f, 0f, isMoreThanHalf = false, isPositiveArc = true, -0.943f, -0.725f)
lineTo(4.385f, 6.407f)
arcToRelative(0.75f, 0.75f, 0f, isMoreThanHalf = false, isPositiveArc = true, 0.55f, -0.723f)
lineToRelative(3.347f, -0.923f)
arcToRelative(0.75f, 0.75f, 0f, isMoreThanHalf = false, isPositiveArc = true, 0.949f, 0.723f)
verticalLineToRelative(10.44f)
close()
moveTo(19.615f, 17.593f)
arcToRelative(0.75f, 0.75f, 0f, isMoreThanHalf = false, isPositiveArc = true, -0.55f, 0.723f)
lineToRelative(-3.346f, 0.922f)
arcToRelative(0.75f, 0.75f, 0f, isMoreThanHalf = false, isPositiveArc = true, -0.95f, -0.723f)
lineTo(14.769f, 8.026f)
curveToRelative(0f, -0.316f, 0.198f, -0.598f, 0.5f, -0.69f)
curveToRelative(0.903f, -0.271f, 2.246f, -0.59f, 3.398f, -0.88f)
curveToRelative(0.479f, -0.12f, 0.948f, 0.24f, 0.948f, 0.735f)
verticalLineToRelative(10.402f)
close()
}
}.build()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M21,6.376c0,-0.964 -0.894,-1.672 -1.833,-1.454 -1.37,0.317 -3.152,0.734 -4.03,0.958a0.763,0.763 0,0 1,-0.55 -0.066l-4.991,-2.68a0.75,0.75 0,0 0,-0.528 -0.07l-5.49,1.3A0.75,0.75 0,0 0,3 5.092v13.466c0,0.482 0.446,0.839 0.915,0.73 1.355,-0.311 3.852,-0.89 4.946,-1.169a0.737,0.737 0,0 1,0.55 0.07c1.54,0.88 4.378,2.81 5.358,2.81 1.175,0 4.994,-1.024 6.027,-1.705 0.145,-0.096 0.204,-0.259 0.204,-0.433L21,6.377ZM9.23,15.923a0.75,0.75 0,0 1,-0.556 0.725l-3.346,0.89a0.75,0.75 0,0 1,-0.943 -0.725L4.385,6.407a0.75,0.75 0,0 1,0.55 -0.723l3.347,-0.923a0.75,0.75 0,0 1,0.949 0.723v10.44ZM19.615,17.593a0.75,0.75 0,0 1,-0.55 0.723l-3.346,0.922a0.75,0.75 0,0 1,-0.95 -0.723L14.769,8.026c0,-0.316 0.198,-0.598 0.5,-0.69 0.903,-0.271 2.246,-0.59 3.398,-0.88 0.479,-0.12 0.948,0.24 0.948,0.735v10.402Z"
android:fillColor="#232F34"/>
</vector>

0 comments on commit ffe2084

Please sign in to comment.