From b807d51598bdd3522da30c4487d77b10c907c5f5 Mon Sep 17 00:00:00 2001 From: Stephan Unverwerth Date: Sat, 27 Feb 2021 22:52:49 +0100 Subject: [PATCH] LibTTF: Fix glyph rasterizer coverage calculation --- Userland/Libraries/LibTTF/Glyf.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Userland/Libraries/LibTTF/Glyf.cpp b/Userland/Libraries/LibTTF/Glyf.cpp index bf3c01177e..76dd9bcfbd 100644 --- a/Userland/Libraries/LibTTF/Glyf.cpp +++ b/Userland/Libraries/LibTTF/Glyf.cpp @@ -320,17 +320,19 @@ void Rasterizer::draw_line(Gfx::FloatPoint p0, Gfx::FloatPoint p1) m_data[line_offset + x0i + 1] += directed_dy * area; } else { float dydx = 1.0 / dxdy; + if (dydx < 0) + dydx = -dydx; + float x0_right = 1.0 - (x0 - x0_floor); u32 x1_floor_i = floor(x1); float area_upto_here = 0.5 * x0_right * x0_right * dydx; m_data[line_offset + x0i] += direction * area_upto_here; for (u32 x = x0i + 1; x < x1_floor_i; x++) { - x0_right += 1.0; - float total_area_here = 0.5 * x0_right * x0_right * dydx; - m_data[line_offset + x] += direction * (total_area_here - area_upto_here); - area_upto_here = total_area_here; + m_data[line_offset + x] += direction * dydx; + area_upto_here += dydx; } - m_data[line_offset + x1_floor_i] += direction * (dy - area_upto_here); + float remaining_area = (dy - area_upto_here); + m_data[line_offset + x1_floor_i] += direction * remaining_area; } x_cur = x_next;