From 586a7e517ed97b0e4ba3dfd840cfcd8454983724 Mon Sep 17 00:00:00 2001 From: Qwerasd Date: Thu, 12 Dec 2024 21:30:01 -0500 Subject: [PATCH] font(freetype): actually take max ascii width instead of first --- src/font/face/freetype.zig | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/font/face/freetype.zig b/src/font/face/freetype.zig index d7fb2e4a3..2849e52de 100644 --- a/src/font/face/freetype.zig +++ b/src/font/face/freetype.zig @@ -676,18 +676,25 @@ pub const Face = struct { // If we fail to load any visible ASCII we just use max_advance from // the metrics provided by FreeType. const cell_width: f64 = cell_width: { + var max: f64 = 0.0; var c: u8 = ' '; while (c < 127) : (c += 1) { if (face.getCharIndex(c)) |glyph_index| { if (face.loadGlyph(glyph_index, .{ .render = true })) { - break :cell_width f26dot6ToF64(face.handle.*.glyph.*.advance.x); - } else |_| { - // Ignore the error since we just fall back to max_advance below - } + max = @max( + f26dot6ToF64(face.handle.*.glyph.*.advance.x), + max, + ); + } else |_| {} } } - break :cell_width f26dot6ToF64(size_metrics.max_advance); + // If we couldn't get any widths, just use FreeType's max_advance. + if (max == 0.0) { + break :cell_width f26dot6ToF64(size_metrics.max_advance); + } + + break :cell_width max; }; // The OS/2 table does not include sCapHeight or sxHeight in version 1.