Something went wrong. Try again.
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293const Library = @This();
const std = @import("std");const c = @import("c.zig").c;const Face = @import("face.zig").Face;const errors = @import("errors.zig");const Error = errors.Error;const intToError = errors.intToError;
handle: c.FT_Library,
/// Initialize a new FreeType library object. The set of modules that are/// registered by this function is determined at build time.pub fn init() Error!Library { var res = Library{ .handle = undefined }; try intToError(c.FT_Init_FreeType(&res.handle)); return res;}
/// Destroy a given FreeType library object and all of its children,/// including resources, drivers, faces, sizes, etc.pub fn deinit(self: Library) void { _ = c.FT_Done_FreeType(self.handle);}
/// Return the version of the FreeType library being used. This is useful when/// dynamically linking to the library, since one cannot use the macros/// FREETYPE_MAJOR, FREETYPE_MINOR, and FREETYPE_PATCH.pub fn version(self: Library) Version { var v: Version = undefined; c.FT_Library_Version(self.handle, &v.major, &v.minor, &v.patch); return v;}
/// Call FT_New_Face to open a font from a file.pub fn initFace(self: Library, path: [:0]const u8, index: i32) Error!Face { var face: Face = undefined; try intToError(c.FT_New_Face( self.handle, path.ptr, index, &face.handle, )); return face;}
/// Call FT_Open_Face to open a font that has been loaded into memory.pub fn initMemoryFace(self: Library, data: []const u8, index: i32) Error!Face { var face: Face = undefined; try intToError(c.FT_New_Memory_Face( self.handle, data.ptr, @intCast(data.len), index, &face.handle, )); return face;}
/// Call when you're done with a loaded MM var.pub fn doneMMVar(self: Library, mm: *c.FT_MM_Var) void { _ = c.FT_Done_MM_Var(self.handle, mm);}
pub const Version = struct { major: i32, minor: i32, patch: i32,
/// Convert the version to a string. The buffer should be able to /// accommodate the size, recommended to be at least 8 chars wide. /// The returned slice will be a slice of buf that contains the full /// version string. pub fn toString(self: Version, buf: []u8) ![]const u8 { return try std.fmt.bufPrint(buf, "{d}.{d}.{d}", .{ self.major, self.minor, self.patch, }); }};
test "basics" { const testing = std.testing;
var lib = try init(); defer lib.deinit();
const vsn = lib.version(); try testing.expect(vsn.major > 1);
var buf: [32]u8 = undefined; _ = try vsn.toString(&buf);}