diff --git a/src/font/face/coretext.zig b/src/font/face/coretext.zig index 756d1ae6a..09fdd7ad0 100644 --- a/src/font/face/coretext.zig +++ b/src/font/face/coretext.zig @@ -647,7 +647,9 @@ pub const Face = struct { const win_descent: f64 = @floatFromInt(os2.usWinDescent); break :vertical_metrics .{ win_ascent * px_per_unit, - win_descent * px_per_unit, + // usWinDescent is *positive* -> down unlike sTypoDescender + // and hhea.Descender, so we flip its sign to fix this. + -win_descent * px_per_unit, 0.0, }; }; diff --git a/src/font/face/freetype.zig b/src/font/face/freetype.zig index e9f8d3207..7d34c70f8 100644 --- a/src/font/face/freetype.zig +++ b/src/font/face/freetype.zig @@ -689,7 +689,9 @@ pub const Face = struct { const win_descent: f64 = @floatFromInt(os2.usWinDescent); break :vertical_metrics .{ win_ascent * px_per_unit, - win_descent * px_per_unit, + // usWinDescent is *positive* -> down unlike sTypoDescender + // and hhea.Descender, so we flip its sign to fix this. + -win_descent * px_per_unit, 0.0, }; };