font/core-text: discovery supports style search

This commit is contained in:
Mitchell Hashimoto
2023-09-24 09:02:35 -07:00
parent 4b58b01555
commit 966166015f
2 changed files with 20 additions and 0 deletions

View File

@ -14,6 +14,9 @@ pub const Config = struct {
/// matching this family will be listed. /// matching this family will be listed.
family: ?[:0]const u8 = null, family: ?[:0]const u8 = null,
/// The style name to search for.
style: ?[:0]const u8 = null,
/// Font styles to search for. If this is set, then only fonts that /// Font styles to search for. If this is set, then only fonts that
/// match the given styles will be listed. /// match the given styles will be listed.
bold: bool = false, bold: bool = false,
@ -84,6 +87,7 @@ fn runArgs(alloc_gpa: Allocator, argsIter: anytype) !u8 {
defer disco.deinit(); defer disco.deinit();
var disco_it = try disco.discover(.{ var disco_it = try disco.discover(.{
.family = config.family, .family = config.family,
.style = config.style,
.bold = config.bold, .bold = config.bold,
.italic = config.italic, .italic = config.italic,
}); });

View File

@ -31,6 +31,12 @@ pub const Descriptor = struct {
/// fontconfig pattern, such as "Fira Code-14:bold". /// fontconfig pattern, such as "Fira Code-14:bold".
family: ?[:0]const u8 = null, family: ?[:0]const u8 = null,
/// Specific font style to search for. This will filter the style
/// string the font advertises. The "bold/italic" booleans later in this
/// struct filter by the style trait the font has, not the string, so
/// these can be used in conjunction or not.
style: ?[:0]const u8 = null,
/// A codepoint that this font must be able to render. /// A codepoint that this font must be able to render.
codepoint: u32 = 0, codepoint: u32 = 0,
@ -99,6 +105,16 @@ pub const Descriptor = struct {
); );
} }
// Style
if (self.style) |style_bytes| {
const style = try macos.foundation.String.createWithBytes(style_bytes, .utf8, false);
defer style.release();
attrs.setValue(
macos.text.FontAttribute.style_name.key(),
style,
);
}
// Codepoint support // Codepoint support
if (self.codepoint > 0) { if (self.codepoint > 0) {
const cs = try macos.foundation.CharacterSet.createWithCharactersInRange(.{ const cs = try macos.foundation.CharacterSet.createWithCharactersInRange(.{