From 9750ac87fdffd34a7557dd02c4e9090c88996963 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 17 Sep 2022 09:04:40 -0700 Subject: [PATCH] pkg/fontconfig: pattern get --- pkg/fontconfig/common.zig | 11 +++++++++++ pkg/fontconfig/error.zig | 4 ++++ pkg/fontconfig/pattern.zig | 19 +++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/pkg/fontconfig/common.zig b/pkg/fontconfig/common.zig index 710f90f79..3f3b22388 100644 --- a/pkg/fontconfig/common.zig +++ b/pkg/fontconfig/common.zig @@ -1,5 +1,6 @@ const std = @import("std"); const c = @import("c.zig"); +const Error = @import("main.zig").Error; pub const Weight = enum(c_uint) { thin = c.FC_WEIGHT_THIN, @@ -111,6 +112,16 @@ pub const Result = enum(c_uint) { type_mismatch = c.FcResultTypeMismatch, no_id = c.FcResultNoId, out_of_memory = c.FcResultOutOfMemory, + + pub fn toError(self: Result) Error!void { + return switch (self) { + .match => {}, + .no_match => Error.FontconfigNoMatch, + .type_mismatch => Error.FontconfigTypeMismatch, + .no_id => Error.FontconfigNoId, + .out_of_memory => Error.OutOfMemory, + }; + } }; pub const MatchKind = enum(c_uint) { diff --git a/pkg/fontconfig/error.zig b/pkg/fontconfig/error.zig index 427a36844..dd88b4112 100644 --- a/pkg/fontconfig/error.zig +++ b/pkg/fontconfig/error.zig @@ -1,3 +1,7 @@ pub const Error = error{ + OutOfMemory, FontconfigFailed, + FontconfigNoMatch, + FontconfigTypeMismatch, + FontconfigNoId, }; diff --git a/pkg/fontconfig/pattern.zig b/pkg/fontconfig/pattern.zig index ec60121ff..dfa1ee69d 100644 --- a/pkg/fontconfig/pattern.zig +++ b/pkg/fontconfig/pattern.zig @@ -1,6 +1,7 @@ const std = @import("std"); const assert = std.debug.assert; const c = @import("c.zig"); +const Error = @import("main.zig").Error; const ObjectSet = @import("main.zig").ObjectSet; const Property = @import("main.zig").Property; const Result = @import("main.zig").Result; @@ -34,6 +35,18 @@ pub const Pattern = opaque { ) == c.FcTrue; } + pub fn get(self: *Pattern, prop: Property, id: u32) Error!Value { + var val: c.struct__FcValue = undefined; + try @intToEnum(Result, c.FcPatternGet( + self.cval(), + prop.cval(), + @intCast(c_int, id), + &val, + )).toError(); + + return Value.init(&val); + } + pub fn delete(self: *Pattern, prop: Property) bool { return c.FcPatternDel(self.cval(), prop.cval()) == c.FcTrue; } @@ -142,6 +155,12 @@ test "create" { try testing.expect(pat.add(.family, .{ .string = "monospace" }, false)); try testing.expect(pat.add(.weight, .{ .integer = @enumToInt(Weight.bold) }, false)); + + { + const val = try pat.get(.family, 0); + try testing.expect(val == .string); + try testing.expectEqualStrings("monospace", val.string); + } } test "name parse" {