mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-15 00:06:09 +03:00
Merge pull request #2609 from ghostty-org/push-uuprylpzkqsn
coretext: variable font fixes
This commit is contained in:
@ -235,21 +235,7 @@ pub const Descriptor = struct {
|
||||
);
|
||||
}
|
||||
|
||||
// Build our descriptor from attrs
|
||||
var desc = try macos.text.FontDescriptor.createWithAttributes(@ptrCast(attrs));
|
||||
errdefer desc.release();
|
||||
|
||||
// Variations are built by copying the descriptor. I don't know a way
|
||||
// to set it on attrs directly.
|
||||
for (self.variations) |v| {
|
||||
const id = try macos.foundation.Number.create(.int, @ptrCast(&v.id));
|
||||
defer id.release();
|
||||
const next = try desc.createCopyWithVariation(id, v.value);
|
||||
desc.release();
|
||||
desc = next;
|
||||
}
|
||||
|
||||
return desc;
|
||||
return try macos.text.FontDescriptor.createWithAttributes(@ptrCast(attrs));
|
||||
}
|
||||
};
|
||||
|
||||
@ -685,30 +671,29 @@ pub const CoreText = struct {
|
||||
break :style .unmatched;
|
||||
defer style.release();
|
||||
|
||||
// If we have a specific desired style, attempt to search for that.
|
||||
if (desc.style) |desired_style| {
|
||||
// Get our style string
|
||||
var buf: [128]u8 = undefined;
|
||||
const style_str = style.cstring(&buf, .utf8) orelse break :style .unmatched;
|
||||
|
||||
// If we have a specific desired style, attempt to search for that.
|
||||
if (desc.style) |desired_style| {
|
||||
// Matching style string gets highest score
|
||||
if (std.mem.eql(u8, desired_style, style_str)) break :style .match;
|
||||
|
||||
// Otherwise the score is based on the length of the style string.
|
||||
// Shorter styles are scored higher.
|
||||
break :style @enumFromInt(100 -| style_str.len);
|
||||
}
|
||||
|
||||
} else if (!desc.bold and !desc.italic) {
|
||||
// If we do not, and we have no symbolic traits, then we try
|
||||
// to find "regular" (or no style). If we have symbolic traits
|
||||
// we do nothing but we can improve scoring by taking that into
|
||||
// account, too.
|
||||
if (!desc.bold and !desc.italic) {
|
||||
var buf: [128]u8 = undefined;
|
||||
const style_str = style.cstring(&buf, .utf8) orelse break :style .unmatched;
|
||||
if (std.mem.eql(u8, "Regular", style_str)) break :style .match;
|
||||
if (std.mem.eql(u8, "Regular", style_str)) {
|
||||
break :style .match;
|
||||
}
|
||||
}
|
||||
|
||||
break :style .unmatched;
|
||||
// Otherwise the score is based on the length of the style string.
|
||||
// Shorter styles are scored higher. This is a heuristic that
|
||||
// if we don't have a desired style then shorter tends to be
|
||||
// more often the "regular" style.
|
||||
break :style @enumFromInt(100 -| style_str.len);
|
||||
};
|
||||
|
||||
score_acc.traits = traits: {
|
||||
|
Reference in New Issue
Block a user