fontconfig: font list

This commit is contained in:
Mitchell Hashimoto
2022-09-14 10:14:09 -07:00
parent ce899dca11
commit eb2ce495b3
6 changed files with 40 additions and 3 deletions

View File

@ -1,8 +1,19 @@
const std = @import("std"); const std = @import("std");
const c = @import("c.zig"); const c = @import("c.zig");
const FontSet = @import("font_set.zig").FontSet;
const ObjectSet = @import("object_set.zig").ObjectSet;
const Pattern = @import("pattern.zig").Pattern;
pub const Config = opaque { pub const Config = opaque {
pub fn destroy(self: *Config) void { pub fn destroy(self: *Config) void {
c.FcConfigDestroy(@ptrCast(*c.struct__FcConfig, self)); c.FcConfigDestroy(@ptrCast(*c.struct__FcConfig, self));
} }
pub fn list(self: *Config, pat: *Pattern, os: *ObjectSet) *FontSet {
return @ptrCast(*FontSet, c.FcFontList(self.cval(), pat.cval(), os.cval()));
}
pub inline fn cval(self: *Config) *c.struct__FcConfig {
return @ptrCast(*c.struct__FcConfig, self);
}
}; };

View File

@ -21,7 +21,7 @@ pub const FontSet = opaque {
return @ptrCast(*Pattern, self.cval().fonts[idx]); return @ptrCast(*Pattern, self.cval().fonts[idx]);
} }
inline fn cval(self: *FontSet) *c.struct__FcFontSet { pub inline fn cval(self: *FontSet) *c.struct__FcFontSet {
return @ptrCast( return @ptrCast(
*c.struct__FcFontSet, *c.struct__FcFontSet,
@alignCast(@alignOf(c.struct__FcFontSet), self), @alignCast(@alignOf(c.struct__FcFontSet), self),

View File

@ -8,3 +8,7 @@ pub usingnamespace @import("pattern.zig");
test { test {
@import("std").testing.refAllDecls(@This()); @import("std").testing.refAllDecls(@This());
} }
test {
_ = @import("test.zig");
}

View File

@ -14,7 +14,7 @@ pub const ObjectSet = opaque {
return c.FcObjectSetAdd(self.cval(), p.cval().ptr) == c.FcTrue; return c.FcObjectSetAdd(self.cval(), p.cval().ptr) == c.FcTrue;
} }
fn cval(self: *ObjectSet) *c.struct__FcObjectSet { pub inline fn cval(self: *ObjectSet) *c.struct__FcObjectSet {
return @ptrCast( return @ptrCast(
*c.struct__FcObjectSet, *c.struct__FcObjectSet,
@alignCast(@alignOf(c.struct__FcObjectSet), self), @alignCast(@alignOf(c.struct__FcObjectSet), self),

View File

@ -18,7 +18,7 @@ pub const Pattern = opaque {
c.FcPatternPrint(self.cval()); c.FcPatternPrint(self.cval());
} }
inline fn cval(self: *Pattern) *c.struct__FcPattern { pub inline fn cval(self: *Pattern) *c.struct__FcPattern {
return @ptrCast(*c.struct__FcPattern, self); return @ptrCast(*c.struct__FcPattern, self);
} }
}; };

22
pkg/fontconfig/test.zig Normal file
View File

@ -0,0 +1,22 @@
const std = @import("std");
const fontconfig = @import("main.zig");
test "fc-list" {
const testing = std.testing;
var cfg = fontconfig.initLoadConfigAndFonts();
defer cfg.destroy();
var pat = fontconfig.Pattern.create();
defer pat.destroy();
var os = fontconfig.ObjectSet.create();
defer os.destroy();
var fs = cfg.list(pat, os);
defer fs.destroy();
// Note: this is environmental, but in general we expect all our
// testing environments to have at least one font.
try testing.expect(fs.len() > 0);
}