1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 06:07:34 +00:00

LibGfx: Skip horizontal edges in path rasterizer

Only the vertical parts of edges are plotted (then accumulated
horizontally). Fully horizontal edges won't be plotted (and just result
in NaNs).
This commit is contained in:
MacDue 2024-01-02 20:33:34 +00:00 committed by Andreas Kling
parent 4380be9d01
commit 2fa488cfa9

View file

@ -70,16 +70,19 @@ static Vector<Detail::Edge> prepare_edges(ReadonlySpan<FloatLine> lines, unsigne
if (max_y < top_clip)
continue;
float start_x = p0.x();
float end_x = p1.x();
auto start_x = p0.x();
auto end_x = p1.x();
auto dx = end_x - start_x;
auto dy = max_y - min_y;
if (dy == 0)
continue;
auto dxdy = dx / dy;
// Trim off the non-visible portions of the edge.
if (min_y < top_clip) {
start_x += (top_clip - min_y) * dxdy;
start_x += dxdy * (top_clip - min_y);
min_y = top_clip;
}
if (max_y > bottom_clip) {