fontconfig: font sets

This commit is contained in:
Mitchell Hashimoto
2022-09-14 10:05:09 -07:00
parent 382f569d65
commit ce899dca11
3 changed files with 49 additions and 4 deletions

View File

@ -0,0 +1,39 @@
const std = @import("std");
const assert = std.debug.assert;
const c = @import("c.zig");
const Pattern = @import("pattern.zig").Pattern;
pub const FontSet = opaque {
pub fn create() *FontSet {
return @ptrCast(*FontSet, c.FcFontSetCreate());
}
pub fn destroy(self: *FontSet) void {
c.FcFontSetDestroy(self.cval());
}
pub fn len(self: *FontSet) u32 {
return @intCast(u32, self.cval().nfont);
}
pub fn get(self: *FontSet, idx: usize) *Pattern {
assert(idx < self.len());
return @ptrCast(*Pattern, self.cval().fonts[idx]);
}
inline fn cval(self: *FontSet) *c.struct__FcFontSet {
return @ptrCast(
*c.struct__FcFontSet,
@alignCast(@alignOf(c.struct__FcFontSet), self),
);
}
};
test "create" {
const testing = std.testing;
var fs = FontSet.create();
defer fs.destroy();
try testing.expectEqual(@as(u32, 0), fs.len());
}

View File

@ -1,6 +1,7 @@
pub const c = @import("c.zig"); pub const c = @import("c.zig");
pub usingnamespace @import("init.zig"); pub usingnamespace @import("init.zig");
pub usingnamespace @import("config.zig"); pub usingnamespace @import("config.zig");
pub usingnamespace @import("font_set.zig");
pub usingnamespace @import("object_set.zig"); pub usingnamespace @import("object_set.zig");
pub usingnamespace @import("pattern.zig"); pub usingnamespace @import("pattern.zig");

View File

@ -11,10 +11,15 @@ pub const Pattern = opaque {
} }
pub fn destroy(self: *Pattern) void { pub fn destroy(self: *Pattern) void {
c.FcPatternDestroy(@ptrCast( c.FcPatternDestroy(self.cval());
*c.struct__FcPattern, }
self,
)); pub fn print(self: *Pattern) void {
c.FcPatternPrint(self.cval());
}
inline fn cval(self: *Pattern) *c.struct__FcPattern {
return @ptrCast(*c.struct__FcPattern, self);
} }
}; };