From eb2ce495b373e79310c6b8fd4525bdc79b22f653 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Wed, 14 Sep 2022 10:14:09 -0700 Subject: [PATCH] fontconfig: font list --- pkg/fontconfig/config.zig | 11 +++++++++++ pkg/fontconfig/font_set.zig | 2 +- pkg/fontconfig/main.zig | 4 ++++ pkg/fontconfig/object_set.zig | 2 +- pkg/fontconfig/pattern.zig | 2 +- pkg/fontconfig/test.zig | 22 ++++++++++++++++++++++ 6 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 pkg/fontconfig/test.zig diff --git a/pkg/fontconfig/config.zig b/pkg/fontconfig/config.zig index 5c60bb4fd..ae20762f0 100644 --- a/pkg/fontconfig/config.zig +++ b/pkg/fontconfig/config.zig @@ -1,8 +1,19 @@ const std = @import("std"); 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 fn destroy(self: *Config) void { 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); + } }; diff --git a/pkg/fontconfig/font_set.zig b/pkg/fontconfig/font_set.zig index 6f6b919a7..68a66d2e8 100644 --- a/pkg/fontconfig/font_set.zig +++ b/pkg/fontconfig/font_set.zig @@ -21,7 +21,7 @@ pub const FontSet = opaque { 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( *c.struct__FcFontSet, @alignCast(@alignOf(c.struct__FcFontSet), self), diff --git a/pkg/fontconfig/main.zig b/pkg/fontconfig/main.zig index 85826438c..1b1777b04 100644 --- a/pkg/fontconfig/main.zig +++ b/pkg/fontconfig/main.zig @@ -8,3 +8,7 @@ pub usingnamespace @import("pattern.zig"); test { @import("std").testing.refAllDecls(@This()); } + +test { + _ = @import("test.zig"); +} diff --git a/pkg/fontconfig/object_set.zig b/pkg/fontconfig/object_set.zig index 7d79f95e2..7d13121a8 100644 --- a/pkg/fontconfig/object_set.zig +++ b/pkg/fontconfig/object_set.zig @@ -14,7 +14,7 @@ pub const ObjectSet = opaque { 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( *c.struct__FcObjectSet, @alignCast(@alignOf(c.struct__FcObjectSet), self), diff --git a/pkg/fontconfig/pattern.zig b/pkg/fontconfig/pattern.zig index ecefe29e8..ddb031bce 100644 --- a/pkg/fontconfig/pattern.zig +++ b/pkg/fontconfig/pattern.zig @@ -18,7 +18,7 @@ pub const Pattern = opaque { 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); } }; diff --git a/pkg/fontconfig/test.zig b/pkg/fontconfig/test.zig new file mode 100644 index 000000000..fb7b36993 --- /dev/null +++ b/pkg/fontconfig/test.zig @@ -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); +}