pkg/macos: add more text APIs

This commit is contained in:
Mitchell Hashimoto
2024-05-08 09:49:16 -07:00
parent 18e5382909
commit eeb7f7aa02
4 changed files with 50 additions and 0 deletions

View File

@ -1,6 +1,7 @@
.{ .{
.name = "macos", .name = "macos",
.version = "0.1.0", .version = "0.1.0",
.paths = .{""},
.dependencies = .{ .dependencies = .{
.apple_sdk = .{ .path = "../apple-sdk" }, .apple_sdk = .{ .path = "../apple-sdk" },
}, },

View File

@ -6,6 +6,7 @@ pub usingnamespace @import("text/font_manager.zig");
pub usingnamespace @import("text/frame.zig"); pub usingnamespace @import("text/frame.zig");
pub usingnamespace @import("text/framesetter.zig"); pub usingnamespace @import("text/framesetter.zig");
pub usingnamespace @import("text/line.zig"); pub usingnamespace @import("text/line.zig");
pub usingnamespace @import("text/paragraph_style.zig");
pub usingnamespace @import("text/run.zig"); pub usingnamespace @import("text/run.zig");
pub usingnamespace @import("text/stylized_strings.zig"); pub usingnamespace @import("text/stylized_strings.zig");

View File

@ -0,0 +1,46 @@
const std = @import("std");
const assert = std.debug.assert;
const Allocator = std.mem.Allocator;
const foundation = @import("../foundation.zig");
const graphics = @import("../graphics.zig");
const text = @import("../text.zig");
const c = @import("c.zig");
// https://developer.apple.com/documentation/coretext/ctparagraphstyle?language=objc
pub const ParagraphStyle = opaque {
pub fn create(
settings: []const ParagraphStyleSetting,
) Allocator.Error!*ParagraphStyle {
return @ptrCast(@constCast(c.CTParagraphStyleCreate(
@ptrCast(settings.ptr),
settings.len,
)));
}
pub fn release(self: *ParagraphStyle) void {
foundation.CFRelease(self);
}
};
/// https://developer.apple.com/documentation/coretext/ctparagraphstylesetting?language=objc
pub const ParagraphStyleSetting = extern struct {
spec: ParagraphStyleSpecifier,
value_size: usize,
value: *const anyopaque,
};
/// https://developer.apple.com/documentation/coretext/ctparagraphstylespecifier?language=objc
pub const ParagraphStyleSpecifier = enum(c_uint) {
base_writing_direction = 13,
};
pub const WritingDirection = enum(i8) {
natural = -1,
left_to_right = 0,
right_to_left = 1,
};
test ParagraphStyle {
const p = try ParagraphStyle.create(&.{});
defer p.release();
}

View File

@ -3,10 +3,12 @@ const c = @import("c.zig");
pub const StringAttribute = enum { pub const StringAttribute = enum {
font, font,
paragraph_style,
pub fn key(self: StringAttribute) *foundation.String { pub fn key(self: StringAttribute) *foundation.String {
return @ptrFromInt(@intFromPtr(switch (self) { return @ptrFromInt(@intFromPtr(switch (self) {
.font => c.kCTFontAttributeName, .font => c.kCTFontAttributeName,
.paragraph_style => c.kCTParagraphStyleAttributeName,
})); }));
} }
}; };