From e9e1ee11d4d212749a1987985706f100904622ba Mon Sep 17 00:00:00 2001 From: MacDue Date: Sun, 21 Jan 2024 15:17:52 +0000 Subject: [PATCH] LibGfx: Decrease flatness a little in Path::stroke_to_fill() Noticed larger stroke widths were looking a little 'low poly', this looks a little nicer. (Minor LibWeb test changes) --- .../svg-background-no-natural-size-ref.png | Bin 410 -> 400 bytes .../Ref/reference/images/svg-textPath-ref.png | Bin 18359 -> 18524 bytes Userland/Libraries/LibGfx/Path.cpp | 14 +++++++++----- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Tests/LibWeb/Ref/reference/images/svg-background-no-natural-size-ref.png b/Tests/LibWeb/Ref/reference/images/svg-background-no-natural-size-ref.png index 1cca4813f478c6ea6d870b53ab706ac787e50238..a56a3670244f83f37ea95c022069b12f534260ef 100644 GIT binary patch literal 400 zcmeAS@N?(olHy`uVBq!ia0vp^Ees5dE*#82)d^o-23^-XjQ&CZ`cf9={eRdr3bwxe1G zX1jLn(lfJH)6lZ=PyX@ahyRo>M}Wrt^>lFzskrs_oF`wCgNVbyGN(DBM<4zZFU_n< z?XEevB< z;wj~L`>x%#!yj!QU73@-dy8s^);4XHfdVe?J8s)%< z-Rm2co$;D*EoSy0K1XAi@1zcjY&hruKcQVg2qm$z-ct Y>xOR5^&2N!0YjL<)78&qol`;+0JV*elK=n! diff --git a/Tests/LibWeb/Ref/reference/images/svg-textPath-ref.png b/Tests/LibWeb/Ref/reference/images/svg-textPath-ref.png index b75ea07b43c145a903410087dd5fd95f7b35618d..3152ef8dfed58f2d696be07ec270061359d1f023 100644 GIT binary patch literal 18524 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 diff --git a/Userland/Libraries/LibGfx/Path.cpp b/Userland/Libraries/LibGfx/Path.cpp index a4fdac6319..b2e20c82ae 100644 --- a/Userland/Libraries/LibGfx/Path.cpp +++ b/Userland/Libraries/LibGfx/Path.cpp @@ -513,11 +513,15 @@ Path Path::stroke_to_fill(float thickness) const } } - // Note: This is the same as the tolerance from bezier curve splitting. - constexpr auto flatness = 0.5f; - auto pen_vertex_count = (thickness >= 2 * flatness) ? max( - static_cast(ceilf(AK::Pi / acosf(1 - (2 * flatness) / thickness))), 4) - : 4; + constexpr auto flatness = 0.15f; + auto pen_vertex_count = 4; + if (thickness > flatness) { + pen_vertex_count = max( + static_cast(ceilf(AK::Pi + / acosf(1 - (2 * flatness) / thickness))), + pen_vertex_count); + } + if (pen_vertex_count % 2 == 1) pen_vertex_count += 1;