font/coretext: fix bitmap size calculation, prevent clipping

Previously, many glyphs were having their top and right row/column of
pixels clipped off due to not accounting for the slight bearing in the
width and height calculation here.
This commit is contained in:
Qwerasd
2025-07-05 20:36:35 -06:00
parent b799462745
commit fff16bff69

View File

@ -356,8 +356,14 @@ pub const Face = struct {
const x = glyph_size.x; const x = glyph_size.x;
const y = glyph_size.y; const y = glyph_size.y;
const px_width: u32 = @intFromFloat(@ceil(width)); // We have to include the fractional pixels that we won't be offsetting
const px_height: u32 = @intFromFloat(@ceil(height)); // in our width and height calculations, that is, we offset by the floor
// of the bearings when we render the glyph, meaning there's still a bit
// of extra width to the area that's drawn in beyond just the width of
// the glyph itself, so we include that extra fraction of a pixel when
// calculating the width and height here.
const px_width: u32 = @intFromFloat(@ceil(width + rect.origin.x - @floor(rect.origin.x)));
const px_height: u32 = @intFromFloat(@ceil(height + rect.origin.y - @floor(rect.origin.y)));
// Settings that are specific to if we are rendering text or emoji. // Settings that are specific to if we are rendering text or emoji.
const color: struct { const color: struct {