diff --git a/changelog.md b/changelog.md index 00085f1e..18378758 100644 --- a/changelog.md +++ b/changelog.md @@ -5,10 +5,12 @@ ### Added - More robust SVG → vector conversions by Android Studio tools (#47) +- More compact printing of 2D coordinates when y < 0 for vector drawables ### Fixed - In rare cases, subpath start points were tracked incorrectly which resulted in a crash (#57) +- Disabled `ConvertCurvesToArcs` until some edge cases can be worked out (#65) ## 2.1.0 - 09-14-2021 diff --git a/vgo/src/main/kotlin/com/jzbrooks/vgo/svg/ScalableVectorGraphicCommandPrinter.kt b/vgo/src/main/kotlin/com/jzbrooks/vgo/svg/ScalableVectorGraphicCommandPrinter.kt index 1822cfe3..85328062 100644 --- a/vgo/src/main/kotlin/com/jzbrooks/vgo/svg/ScalableVectorGraphicCommandPrinter.kt +++ b/vgo/src/main/kotlin/com/jzbrooks/vgo/svg/ScalableVectorGraphicCommandPrinter.kt @@ -219,13 +219,8 @@ class ScalableVectorGraphicCommandPrinter(private val decimalDigits: Int) : Comm private fun print(point: Point) = buildString { append(print(point.x)) - - if (point.y.sign < 0f) { - append(print(point.y)) - } else { - append(',') - append(print(point.y)) - } + if (point.y.sign >= 0f) append(',') + append(print(point.y)) } private fun print(parameter: CubicBezierCurve.Parameter): String { diff --git a/vgo/src/main/kotlin/com/jzbrooks/vgo/svg/SvgOptimizationRegistry.kt b/vgo/src/main/kotlin/com/jzbrooks/vgo/svg/SvgOptimizationRegistry.kt index 46a78335..2d0ed591 100644 --- a/vgo/src/main/kotlin/com/jzbrooks/vgo/svg/SvgOptimizationRegistry.kt +++ b/vgo/src/main/kotlin/com/jzbrooks/vgo/svg/SvgOptimizationRegistry.kt @@ -4,7 +4,6 @@ import com.jzbrooks.vgo.core.optimization.BakeTransformations import com.jzbrooks.vgo.core.optimization.BreakoutImplicitCommands import com.jzbrooks.vgo.core.optimization.CollapseGroups import com.jzbrooks.vgo.core.optimization.CommandVariant -import com.jzbrooks.vgo.core.optimization.ConvertCurvesToArcs import com.jzbrooks.vgo.core.optimization.MergePaths import com.jzbrooks.vgo.core.optimization.OptimizationRegistry import com.jzbrooks.vgo.core.optimization.Polycommands @@ -30,7 +29,7 @@ class SvgOptimizationRegistry : OptimizationRegistry(BOTTOM_UP, TOP_DOWN) { BreakoutImplicitCommands(), CommandVariant(CommandVariant.Mode.Relative), SimplifyLineCommands(1e-3f), - ConvertCurvesToArcs(ScalableVectorGraphicCommandPrinter(3)), +// ConvertCurvesToArcs(ScalableVectorGraphicCommandPrinter(3)), SimplifyBezierCurveCommands(1e-3f), RemoveRedundantCommands(), CommandVariant(CommandVariant.Mode.Compact(ScalableVectorGraphicCommandPrinter(3))), diff --git a/vgo/src/main/kotlin/com/jzbrooks/vgo/vd/VectorDrawableCommandPrinter.kt b/vgo/src/main/kotlin/com/jzbrooks/vgo/vd/VectorDrawableCommandPrinter.kt index fbb48512..61642a39 100644 --- a/vgo/src/main/kotlin/com/jzbrooks/vgo/vd/VectorDrawableCommandPrinter.kt +++ b/vgo/src/main/kotlin/com/jzbrooks/vgo/vd/VectorDrawableCommandPrinter.kt @@ -16,6 +16,7 @@ import com.jzbrooks.vgo.core.graphic.command.VerticalLineTo import com.jzbrooks.vgo.core.util.math.Point import java.math.RoundingMode import java.text.DecimalFormat +import kotlin.math.sign class VectorDrawableCommandPrinter(private val decimalDigits: Int) : CommandPrinter { private val formatter = @@ -235,7 +236,7 @@ class VectorDrawableCommandPrinter(private val decimalDigits: Int) : CommandPrin private fun print(point: Point) = buildString { append(print(point.x)) - append(',') + if (point.y.sign >= 0f) append(',') append(print(point.y)) } diff --git a/vgo/src/main/kotlin/com/jzbrooks/vgo/vd/VectorDrawableOptimizationRegistry.kt b/vgo/src/main/kotlin/com/jzbrooks/vgo/vd/VectorDrawableOptimizationRegistry.kt index f716e4c1..a05320ba 100644 --- a/vgo/src/main/kotlin/com/jzbrooks/vgo/vd/VectorDrawableOptimizationRegistry.kt +++ b/vgo/src/main/kotlin/com/jzbrooks/vgo/vd/VectorDrawableOptimizationRegistry.kt @@ -4,7 +4,6 @@ import com.jzbrooks.vgo.core.optimization.BakeTransformations import com.jzbrooks.vgo.core.optimization.BreakoutImplicitCommands import com.jzbrooks.vgo.core.optimization.CollapseGroups import com.jzbrooks.vgo.core.optimization.CommandVariant -import com.jzbrooks.vgo.core.optimization.ConvertCurvesToArcs import com.jzbrooks.vgo.core.optimization.MergePaths import com.jzbrooks.vgo.core.optimization.OptimizationRegistry import com.jzbrooks.vgo.core.optimization.Polycommands @@ -30,7 +29,7 @@ class VectorDrawableOptimizationRegistry : OptimizationRegistry(BOTTOM_UP, TOP_D BreakoutImplicitCommands(), CommandVariant(CommandVariant.Mode.Relative), SimplifyLineCommands(1e-3f), - ConvertCurvesToArcs(VectorDrawableCommandPrinter(3)), +// ConvertCurvesToArcs(VectorDrawableCommandPrinter(3)), SimplifyBezierCurveCommands(1e-3f), RemoveRedundantCommands(), CommandVariant(CommandVariant.Mode.Compact(VectorDrawableCommandPrinter(3))), diff --git a/vgo/src/test/resources/baseline/android_optimized.svg b/vgo/src/test/resources/baseline/android_optimized.svg index c4d109e2..c34a33e9 100644 --- a/vgo/src/test/resources/baseline/android_optimized.svg +++ b/vgo/src/test/resources/baseline/android_optimized.svg @@ -1,3 +1,3 @@ - + diff --git a/vgo/src/test/resources/baseline/avocado_example_optimized.xml b/vgo/src/test/resources/baseline/avocado_example_optimized.xml index 6e1fe4a7..06ee381a 100644 --- a/vgo/src/test/resources/baseline/avocado_example_optimized.xml +++ b/vgo/src/test/resources/baseline/avocado_example_optimized.xml @@ -1,4 +1,4 @@ - + diff --git a/vgo/src/test/resources/baseline/charging_battery_optimized.xml b/vgo/src/test/resources/baseline/charging_battery_optimized.xml index 3a02c4e1..d7c44cea 100644 --- a/vgo/src/test/resources/baseline/charging_battery_optimized.xml +++ b/vgo/src/test/resources/baseline/charging_battery_optimized.xml @@ -1,6 +1,6 @@ - - + + diff --git a/vgo/src/test/resources/baseline/dribbble_ball_mark_optimized.svg b/vgo/src/test/resources/baseline/dribbble_ball_mark_optimized.svg index 794012e3..8e54a4ea 100644 --- a/vgo/src/test/resources/baseline/dribbble_ball_mark_optimized.svg +++ b/vgo/src/test/resources/baseline/dribbble_ball_mark_optimized.svg @@ -1,3 +1,3 @@ - + diff --git a/vgo/src/test/resources/baseline/dribbble_ball_mark_optimized.xml b/vgo/src/test/resources/baseline/dribbble_ball_mark_optimized.xml index fbaaa488..a7b31116 100644 --- a/vgo/src/test/resources/baseline/dribbble_ball_mark_optimized.xml +++ b/vgo/src/test/resources/baseline/dribbble_ball_mark_optimized.xml @@ -1,3 +1,3 @@ - + diff --git a/vgo/src/test/resources/baseline/eleven_below_single_optimized.svg b/vgo/src/test/resources/baseline/eleven_below_single_optimized.svg index e2f0f409..fcfd4b95 100644 --- a/vgo/src/test/resources/baseline/eleven_below_single_optimized.svg +++ b/vgo/src/test/resources/baseline/eleven_below_single_optimized.svg @@ -28,35 +28,35 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -66,38 +66,38 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -140,7 +140,7 @@ - + @@ -169,28 +169,28 @@ - + - - + + - + - - + + - - - + + + - + - + @@ -206,14 +206,14 @@ - + - + - + diff --git a/vgo/src/test/resources/baseline/eleven_below_single_optimized.xml b/vgo/src/test/resources/baseline/eleven_below_single_optimized.xml index 223c9066..2b8ba72c 100644 --- a/vgo/src/test/resources/baseline/eleven_below_single_optimized.xml +++ b/vgo/src/test/resources/baseline/eleven_below_single_optimized.xml @@ -1,124 +1,124 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + diff --git a/vgo/src/test/resources/baseline/guacamole_optimized.svg b/vgo/src/test/resources/baseline/guacamole_optimized.svg index d27fac0a..bedcbf82 100644 --- a/vgo/src/test/resources/baseline/guacamole_optimized.svg +++ b/vgo/src/test/resources/baseline/guacamole_optimized.svg @@ -1 +1 @@ - + diff --git a/vgo/src/test/resources/baseline/nasa_optimized.svg b/vgo/src/test/resources/baseline/nasa_optimized.svg index 2749f95a..4a750193 100644 --- a/vgo/src/test/resources/baseline/nasa_optimized.svg +++ b/vgo/src/test/resources/baseline/nasa_optimized.svg @@ -36,8 +36,8 @@ - - - + + + diff --git a/vgo/src/test/resources/baseline/nasa_optimized.xml b/vgo/src/test/resources/baseline/nasa_optimized.xml index 9b60b691..49e2a7fe 100644 --- a/vgo/src/test/resources/baseline/nasa_optimized.xml +++ b/vgo/src/test/resources/baseline/nasa_optimized.xml @@ -1,6 +1,6 @@ - - - + + + diff --git a/vgo/src/test/resources/baseline/regression-31_optimized.xml b/vgo/src/test/resources/baseline/regression-31_optimized.xml deleted file mode 100644 index 3f86c8e5..00000000 --- a/vgo/src/test/resources/baseline/regression-31_optimized.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/vgo/src/test/resources/baseline/regression_31_optimized.xml b/vgo/src/test/resources/baseline/regression_31_optimized.xml index 84a56d57..442d4188 100644 --- a/vgo/src/test/resources/baseline/regression_31_optimized.xml +++ b/vgo/src/test/resources/baseline/regression_31_optimized.xml @@ -1,3 +1,3 @@ - + diff --git a/vgo/src/test/resources/baseline/regression_33_optimized.xml b/vgo/src/test/resources/baseline/regression_33_optimized.xml index c27141b8..c3eec54e 100644 --- a/vgo/src/test/resources/baseline/regression_33_optimized.xml +++ b/vgo/src/test/resources/baseline/regression_33_optimized.xml @@ -1,3 +1,3 @@ - + diff --git a/vgo/src/test/resources/baseline/simple_heart_optimized.xml b/vgo/src/test/resources/baseline/simple_heart_optimized.xml index 4b565b9a..c1ca9b04 100644 --- a/vgo/src/test/resources/baseline/simple_heart_optimized.xml +++ b/vgo/src/test/resources/baseline/simple_heart_optimized.xml @@ -1,3 +1,3 @@ - + diff --git a/vgo/src/test/resources/baseline/tiger_optimized.svg b/vgo/src/test/resources/baseline/tiger_optimized.svg index 7a8aec76..a6b04053 100644 --- a/vgo/src/test/resources/baseline/tiger_optimized.svg +++ b/vgo/src/test/resources/baseline/tiger_optimized.svg @@ -40,7 +40,7 @@ - + @@ -226,13 +226,13 @@ - + - + @@ -313,16 +313,16 @@ - + - + - + - + @@ -349,10 +349,10 @@ - + - + @@ -379,16 +379,16 @@ - + - + - + - + @@ -481,7 +481,7 @@ - + @@ -652,19 +652,19 @@ - + - + - + diff --git a/vgo/src/test/resources/baseline/tiger_optimized.xml b/vgo/src/test/resources/baseline/tiger_optimized.xml index f13ec90d..8931d88e 100644 --- a/vgo/src/test/resources/baseline/tiger_optimized.xml +++ b/vgo/src/test/resources/baseline/tiger_optimized.xml @@ -1,142 +1,142 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vgo/src/test/resources/baseline/visibility_strike_optimized.xml b/vgo/src/test/resources/baseline/visibility_strike_optimized.xml index 4a30656c..f7ce630a 100644 --- a/vgo/src/test/resources/baseline/visibility_strike_optimized.xml +++ b/vgo/src/test/resources/baseline/visibility_strike_optimized.xml @@ -1,5 +1,5 @@ - - + + diff --git a/vgo/src/test/resources/in-place-modify/avocado_example_optimized.xml b/vgo/src/test/resources/in-place-modify/avocado_example_optimized.xml index f43034b3..01f4a1ac 100644 --- a/vgo/src/test/resources/in-place-modify/avocado_example_optimized.xml +++ b/vgo/src/test/resources/in-place-modify/avocado_example_optimized.xml @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file