mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-15 00:06:09 +03:00
redoing some of the baseline calcs, remove from shader
This commit is contained in:
@ -24,6 +24,13 @@ pub const Face = struct {
|
|||||||
return c.FT_HAS_COLOR(self.handle);
|
return c.FT_HAS_COLOR(self.handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// A macro that returns true whenever a face object contains a scalable
|
||||||
|
/// font face (true for TrueType, Type 1, Type 42, CID, OpenType/CFF,
|
||||||
|
/// and PFR font formats).
|
||||||
|
pub fn isScalable(self: Face) bool {
|
||||||
|
return c.FT_IS_SCALABLE(self.handle);
|
||||||
|
}
|
||||||
|
|
||||||
/// Select a given charmap by its encoding tag (as listed in freetype.h).
|
/// Select a given charmap by its encoding tag (as listed in freetype.h).
|
||||||
pub fn selectCharmap(self: Face, encoding: Encoding) Error!void {
|
pub fn selectCharmap(self: Face, encoding: Encoding) Error!void {
|
||||||
return intToError(c.FT_Select_Charmap(self.handle, @enumToInt(encoding)));
|
return intToError(c.FT_Select_Charmap(self.handle, @enumToInt(encoding)));
|
||||||
|
@ -138,9 +138,8 @@ void main() {
|
|||||||
|
|
||||||
// The glyph_offset.y is the y bearing, a y value that when added
|
// The glyph_offset.y is the y bearing, a y value that when added
|
||||||
// to the baseline is the offset (+y is up). Our grid goes down.
|
// to the baseline is the offset (+y is up). Our grid goes down.
|
||||||
// So we flip it with `cell_size.y - glyph_offset.y`. The glyph_baseline
|
// So we flip it with `cell_size.y - glyph_offset.y`.
|
||||||
// uniform sets our line baseline where characters "sit".
|
glyph_offset_calc.y = cell_size_scaled.y - glyph_offset_calc.y;
|
||||||
glyph_offset_calc.y = cell_size_scaled.y - glyph_offset_calc.y - glyph_baseline;
|
|
||||||
|
|
||||||
// Calculate the final position of the cell.
|
// Calculate the final position of the cell.
|
||||||
cell_pos = cell_pos + glyph_size_downsampled * position + glyph_offset_calc;
|
cell_pos = cell_pos + glyph_size_downsampled * position + glyph_offset_calc;
|
||||||
|
@ -95,12 +95,6 @@ pub fn deinit(self: *Face) void {
|
|||||||
self.* = undefined;
|
self.* = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Change the size of the loaded font face. If you're using a texture
|
|
||||||
/// atlas, you should invalidate all the previous values if cached.
|
|
||||||
pub fn setSize(self: Face, size: DesiredSize) !void {
|
|
||||||
return try setSize_(self.face, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn setSize_(face: freetype.Face, size: DesiredSize) !void {
|
fn setSize_(face: freetype.Face, size: DesiredSize) !void {
|
||||||
// If we have fixed sizes, we just have to try to pick the one closest
|
// If we have fixed sizes, we just have to try to pick the one closest
|
||||||
// to what the user requested. Otherwise, we can choose an arbitrary
|
// to what the user requested. Otherwise, we can choose an arbitrary
|
||||||
@ -215,12 +209,18 @@ pub fn renderGlyph(self: Face, alloc: Allocator, atlas: *Atlas, glyph_index: u32
|
|||||||
atlas.set(region, buffer);
|
atlas.set(region, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The Y offset is the offset of the top of our bitmap PLUS our
|
||||||
|
// baseline calculation. The baseline calculation is so that everything
|
||||||
|
// is properly centered when we render it out into a monospace grid.
|
||||||
|
// Note: we add here because our X/Y is actually reversed, adding goes UP.
|
||||||
|
const offset_y = glyph.*.bitmap_top + @floatToInt(c_int, self.metrics.cell_baseline);
|
||||||
|
|
||||||
// Store glyph metadata
|
// Store glyph metadata
|
||||||
return Glyph{
|
return Glyph{
|
||||||
.width = tgt_w,
|
.width = tgt_w,
|
||||||
.height = tgt_h,
|
.height = tgt_h,
|
||||||
.offset_x = glyph.*.bitmap_left,
|
.offset_x = glyph.*.bitmap_left,
|
||||||
.offset_y = glyph.*.bitmap_top,
|
.offset_y = offset_y,
|
||||||
.atlas_x = region.x,
|
.atlas_x = region.x,
|
||||||
.atlas_y = region.y,
|
.atlas_y = region.y,
|
||||||
.advance_x = f26dot6ToFloat(glyph.*.advance.x),
|
.advance_x = f26dot6ToFloat(glyph.*.advance.x),
|
||||||
@ -247,7 +247,7 @@ pub const Metrics = struct {
|
|||||||
cell_width: f32,
|
cell_width: f32,
|
||||||
cell_height: f32,
|
cell_height: f32,
|
||||||
|
|
||||||
/// For monospace grids, the recommended y-value from the top to set
|
/// For monospace grids, the recommended y-value from the bottom to set
|
||||||
/// the baseline for font rendering. This is chosen so that things such
|
/// the baseline for font rendering. This is chosen so that things such
|
||||||
/// as the bottom of a "g" or "y" do not drop below the cell.
|
/// as the bottom of a "g" or "y" do not drop below the cell.
|
||||||
cell_baseline: f32,
|
cell_baseline: f32,
|
||||||
@ -314,10 +314,23 @@ fn calcMetrics(face: freetype.Face) Metrics {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// The baseline is the descender amount for the font. This is the maximum
|
||||||
|
// that a font may go down. We switch signs because our coordinate system
|
||||||
|
// is reversed.
|
||||||
|
const cell_baseline = -1 * f26dot6ToFloat(size_metrics.descender);
|
||||||
|
|
||||||
|
// log.warn("METRICS={} width={} height={} baseline={} baseline_desc={}", .{
|
||||||
|
// size_metrics,
|
||||||
|
// cell_width,
|
||||||
|
// cell_height,
|
||||||
|
// f26dot6ToFloat(size_metrics.ascender),
|
||||||
|
// -1 * f26dot6ToFloat(size_metrics.descender),
|
||||||
|
// });
|
||||||
|
|
||||||
return .{
|
return .{
|
||||||
.cell_width = cell_width,
|
.cell_width = cell_width,
|
||||||
.cell_height = cell_height,
|
.cell_height = cell_height,
|
||||||
.cell_baseline = cell_height - f26dot6ToFloat(size_metrics.ascender),
|
.cell_baseline = cell_baseline,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user