LibGfx: Increase bezier splitting tolerance to 0.5
No noticeable difference a bit faster. This is still arbitrary and should be somehow derived from the curve.
Author: https://github.com/MacDue Commit: https://github.com/SerenityOS/serenity/commit/13a4fb0325 Pull-request: https://github.com/SerenityOS/serenity/pull/22634 Reviewed-by: https://github.com/nico
Before Width: | Height: | Size: 288 KiB After Width: | Height: | Size: 288 KiB |
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 135 KiB After Width: | Height: | Size: 88 KiB |
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 685 KiB After Width: | Height: | Size: 507 KiB |
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 83 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 410 B |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
|
@ -2086,7 +2086,8 @@ void Painter::draw_triangle_wave(IntPoint a_p1, IntPoint a_p2, Color color, int
|
|||
|
||||
static bool can_approximate_bezier_curve(FloatPoint p1, FloatPoint p2, FloatPoint control)
|
||||
{
|
||||
constexpr float tolerance = 0.015f;
|
||||
// TODO: Somehow calculate the required number of splits based on the curve (and its size).
|
||||
constexpr float tolerance = 0.5f;
|
||||
|
||||
auto p1x = 3 * control.x() - 2 * p1.x() - p2.x();
|
||||
auto p1y = 3 * control.y() - 2 * p1.y() - p2.y();
|
||||
|
@ -2163,7 +2164,8 @@ void Painter::for_each_line_segment_on_cubic_bezier_curve(FloatPoint control_poi
|
|||
|
||||
static bool can_approximate_cubic_bezier_curve(FloatPoint p1, FloatPoint p2, FloatPoint control_0, FloatPoint control_1)
|
||||
{
|
||||
constexpr float tolerance = 0.015f;
|
||||
// TODO: Somehow calculate the required number of splits based on the curve (and its size).
|
||||
constexpr float tolerance = 0.5f;
|
||||
|
||||
auto ax = 3 * control_0.x() - 2 * p1.x() - p2.x();
|
||||
auto ay = 3 * control_0.y() - 2 * p1.y() - p2.y();
|
||||
|
|
|
@ -514,9 +514,10 @@ Path Path::stroke_to_fill(float thickness) const
|
|||
}
|
||||
|
||||
// Note: This is the same as the tolerance from bezier curve splitting.
|
||||
constexpr auto flatness = 0.015f;
|
||||
auto pen_vertex_count = max(
|
||||
static_cast<int>(ceilf(AK::Pi<float> / acosf(1 - (2 * flatness) / thickness))), 4);
|
||||
constexpr auto flatness = 0.5f;
|
||||
auto pen_vertex_count = (thickness >= 2 * flatness) ? max(
|
||||
static_cast<int>(ceilf(AK::Pi<float> / acosf(1 - (2 * flatness) / thickness))), 4)
|
||||
: 4;
|
||||
if (pen_vertex_count % 2 == 1)
|
||||
pen_vertex_count += 1;
|
||||
|
||||
|
|