mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-16 16:56:09 +03:00
store requested size alongside deferred font for loading
This commit is contained in:
@ -23,10 +23,21 @@ fc: if (options.fontconfig) ?Fontconfig else void = if (options.fontconfig) null
|
|||||||
|
|
||||||
/// Fontconfig specific data. This is only present if building with fontconfig.
|
/// Fontconfig specific data. This is only present if building with fontconfig.
|
||||||
pub const Fontconfig = struct {
|
pub const Fontconfig = struct {
|
||||||
|
/// The pattern for this font. This must be the "render prepared" pattern.
|
||||||
|
/// (i.e. call FcFontRenderPrepare).
|
||||||
pattern: *fontconfig.Pattern,
|
pattern: *fontconfig.Pattern,
|
||||||
|
|
||||||
|
/// Charset and Langset are used for quick lookup if a codepoint and
|
||||||
|
/// presentation style are supported. They can be derived from pattern
|
||||||
|
/// but are cached since they're frequently used.
|
||||||
charset: *const fontconfig.CharSet,
|
charset: *const fontconfig.CharSet,
|
||||||
langset: *const fontconfig.LangSet,
|
langset: *const fontconfig.LangSet,
|
||||||
|
|
||||||
|
/// The requested size in points for this font. This is used for loading.
|
||||||
|
/// This can't be derived from pattern because the requested size may
|
||||||
|
/// differ from the size the font advertises supported.
|
||||||
|
req_size: u16,
|
||||||
|
|
||||||
pub fn deinit(self: *Fontconfig) void {
|
pub fn deinit(self: *Fontconfig) void {
|
||||||
self.pattern.destroy();
|
self.pattern.destroy();
|
||||||
self.* = undefined;
|
self.* = undefined;
|
||||||
|
@ -22,8 +22,10 @@ pub const Descriptor = struct {
|
|||||||
/// fontconfig pattern, such as "Fira Code-14:bold".
|
/// fontconfig pattern, such as "Fira Code-14:bold".
|
||||||
family: [:0]const u8,
|
family: [:0]const u8,
|
||||||
|
|
||||||
/// Font size in points that the font should support.
|
/// Font size in points that the font should support. For conversion
|
||||||
size: u16 = 0,
|
/// to pixels, we will use 72 DPI for Mac and 96 DPI for everything else.
|
||||||
|
/// (If pixel conversion is necessary, i.e. emoji fonts)
|
||||||
|
size: u16,
|
||||||
|
|
||||||
/// True if we want to search specifically for a font that supports
|
/// True if we want to search specifically for a font that supports
|
||||||
/// bold, italic, or both.
|
/// bold, italic, or both.
|
||||||
@ -81,6 +83,7 @@ pub const Fontconfig = struct {
|
|||||||
.set = res.fs,
|
.set = res.fs,
|
||||||
.fonts = res.fs.fonts(),
|
.fonts = res.fs.fonts(),
|
||||||
.i = 0,
|
.i = 0,
|
||||||
|
.req_size = @floatToInt(u16, (try pat.get(.size, 0)).double),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,6 +93,7 @@ pub const Fontconfig = struct {
|
|||||||
set: *fontconfig.FontSet,
|
set: *fontconfig.FontSet,
|
||||||
fonts: []*fontconfig.Pattern,
|
fonts: []*fontconfig.Pattern,
|
||||||
i: usize,
|
i: usize,
|
||||||
|
req_size: u16,
|
||||||
|
|
||||||
pub fn deinit(self: *DiscoverIterator) void {
|
pub fn deinit(self: *DiscoverIterator) void {
|
||||||
self.set.destroy();
|
self.set.destroy();
|
||||||
@ -117,6 +121,7 @@ pub const Fontconfig = struct {
|
|||||||
.pattern = font_pattern,
|
.pattern = font_pattern,
|
||||||
.charset = (try font_pattern.get(.charset, 0)).char_set,
|
.charset = (try font_pattern.get(.charset, 0)).char_set,
|
||||||
.langset = (try font_pattern.get(.lang, 0)).lang_set,
|
.langset = (try font_pattern.get(.lang, 0)).lang_set,
|
||||||
|
.req_size = self.req_size,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -127,7 +132,7 @@ test {
|
|||||||
const testing = std.testing;
|
const testing = std.testing;
|
||||||
|
|
||||||
var fc = Fontconfig.init();
|
var fc = Fontconfig.init();
|
||||||
var it = try fc.discover(.{ .family = "monospace" });
|
var it = try fc.discover(.{ .family = "monospace", .size = 12 });
|
||||||
defer it.deinit();
|
defer it.deinit();
|
||||||
while (try it.next()) |face| {
|
while (try it.next()) |face| {
|
||||||
try testing.expect(!face.loaded());
|
try testing.expect(!face.loaded());
|
||||||
|
Reference in New Issue
Block a user