From 17cc4a6f9caeb3f89c0d14b4608190d96ee1d5b7 Mon Sep 17 00:00:00 2001 From: Justin Brooks Date: Sun, 11 Aug 2024 20:44:54 -0400 Subject: [PATCH 1/4] Disable ConvertCurvesToArcs to avoid degenerate edge cases The edge case is described in https://github.com/jzbrooks/vgo/issues/60. Hopefully this can re-land sometime soon, but it usually isn't the most significant optimization in play (and it is one of the trickiest!). --- changelog.md | 1 + .../vgo/svg/SvgOptimizationRegistry.kt | 2 +- .../vd/VectorDrawableOptimizationRegistry.kt | 2 +- .../resources/baseline/android_optimized.svg | 2 +- .../baseline/charging_battery_optimized.xml | 4 +- .../baseline/dribbble_ball_mark_optimized.svg | 2 +- .../baseline/dribbble_ball_mark_optimized.xml | 2 +- .../eleven_below_single_optimized.svg | 148 +++++++++--------- .../eleven_below_single_optimized.xml | 34 ++-- .../baseline/guacamole_optimized.svg | 2 +- .../resources/baseline/nasa_optimized.svg | 6 +- .../resources/baseline/nasa_optimized.xml | 6 +- .../baseline/regression_31_optimized.xml | 2 +- .../baseline/regression_33_optimized.xml | 2 +- .../baseline/simple_heart_optimized.xml | 2 +- .../resources/baseline/tiger_optimized.svg | 34 ++-- .../resources/baseline/tiger_optimized.xml | 26 +-- 17 files changed, 139 insertions(+), 138 deletions(-) diff --git a/changelog.md b/changelog.md index 00085f1e..729fea96 100644 --- a/changelog.md +++ b/changelog.md @@ -9,6 +9,7 @@ ### 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/SvgOptimizationRegistry.kt b/vgo/src/main/kotlin/com/jzbrooks/vgo/svg/SvgOptimizationRegistry.kt index 46a78335..ea193eca 100644 --- a/vgo/src/main/kotlin/com/jzbrooks/vgo/svg/SvgOptimizationRegistry.kt +++ b/vgo/src/main/kotlin/com/jzbrooks/vgo/svg/SvgOptimizationRegistry.kt @@ -30,7 +30,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/VectorDrawableOptimizationRegistry.kt b/vgo/src/main/kotlin/com/jzbrooks/vgo/vd/VectorDrawableOptimizationRegistry.kt index f716e4c1..9317817f 100644 --- a/vgo/src/main/kotlin/com/jzbrooks/vgo/vd/VectorDrawableOptimizationRegistry.kt +++ b/vgo/src/main/kotlin/com/jzbrooks/vgo/vd/VectorDrawableOptimizationRegistry.kt @@ -30,7 +30,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/charging_battery_optimized.xml b/vgo/src/test/resources/baseline/charging_battery_optimized.xml index 3a02c4e1..253868b6 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..327c33f6 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..3ad3bbde 100644 --- a/vgo/src/test/resources/baseline/eleven_below_single_optimized.xml +++ b/vgo/src/test/resources/baseline/eleven_below_single_optimized.xml @@ -8,8 +8,8 @@ - - + + @@ -39,7 +39,7 @@ - + @@ -64,24 +64,24 @@ - + - - - + + + - - + + - - - + + + - + - + @@ -89,14 +89,14 @@ - + - + - + 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..ff41608f 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 index 84a56d57..bae2830b 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..9c72a746 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..587909cd 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..468fca30 100644 --- a/vgo/src/test/resources/baseline/tiger_optimized.xml +++ b/vgo/src/test/resources/baseline/tiger_optimized.xml @@ -60,7 +60,7 @@ - + @@ -81,34 +81,34 @@ - - + + - + - - + + - - - - - + + + + + - + @@ -136,7 +136,7 @@ - + From 68403665a9d8a855bcfb1a929fa0846fedc0c5ab Mon Sep 17 00:00:00 2001 From: Justin Brooks Date: Sun, 11 Aug 2024 20:54:46 -0400 Subject: [PATCH 2/4] Apply ktlint --- .../main/kotlin/com/jzbrooks/vgo/svg/SvgOptimizationRegistry.kt | 1 - .../com/jzbrooks/vgo/vd/VectorDrawableOptimizationRegistry.kt | 1 - 2 files changed, 2 deletions(-) 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 ea193eca..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 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 9317817f..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 From d35b4336e4f33c881c5452ffbc55ecb24d5eb4d0 Mon Sep 17 00:00:00 2001 From: Justin Brooks Date: Sun, 11 Aug 2024 21:44:39 -0400 Subject: [PATCH 3/4] Avoid printing a comma when y coordinates are negative --- .../ScalableVectorGraphicCommandPrinter.kt | 9 +- .../vgo/vd/VectorDrawableCommandPrinter.kt | 3 +- .../baseline/avocado_example_optimized.xml | 2 +- .../baseline/charging_battery_optimized.xml | 4 +- .../baseline/dribbble_ball_mark_optimized.xml | 2 +- .../eleven_below_single_optimized.xml | 240 +++++++-------- .../resources/baseline/nasa_optimized.xml | 6 +- .../baseline/regression-31_optimized.xml | 1 - .../baseline/regression_31_optimized.xml | 2 +- .../baseline/regression_33_optimized.xml | 2 +- .../baseline/simple_heart_optimized.xml | 2 +- .../resources/baseline/tiger_optimized.xml | 274 +++++++++--------- .../baseline/visibility_strike_optimized.xml | 4 +- .../avocado_example_optimized.xml | 2 +- 14 files changed, 274 insertions(+), 279 deletions(-) delete mode 100644 vgo/src/test/resources/baseline/regression-31_optimized.xml 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/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/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 253868b6..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.xml b/vgo/src/test/resources/baseline/dribbble_ball_mark_optimized.xml index 327c33f6..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.xml b/vgo/src/test/resources/baseline/eleven_below_single_optimized.xml index 3ad3bbde..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/nasa_optimized.xml b/vgo/src/test/resources/baseline/nasa_optimized.xml index ff41608f..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 bae2830b..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 9c72a746..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 587909cd..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.xml b/vgo/src/test/resources/baseline/tiger_optimized.xml index 468fca30..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 From 067212005f01c23e5b1f41d417115dc8edffc910 Mon Sep 17 00:00:00 2001 From: Justin Brooks Date: Sun, 11 Aug 2024 22:00:15 -0400 Subject: [PATCH 4/4] Add another changelog entry --- changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog.md b/changelog.md index 729fea96..18378758 100644 --- a/changelog.md +++ b/changelog.md @@ -5,6 +5,7 @@ ### Added - More robust SVG → vector conversions by Android Studio tools (#47) +- More compact printing of 2D coordinates when y < 0 for vector drawables ### Fixed