diff --git a/pkg/macos/graphics/bitmap_context.zig b/pkg/macos/graphics/bitmap_context.zig index ac2412631..70d28b83a 100644 --- a/pkg/macos/graphics/bitmap_context.zig +++ b/pkg/macos/graphics/bitmap_context.zig @@ -2,11 +2,11 @@ const std = @import("std"); const assert = std.debug.assert; const Allocator = std.mem.Allocator; const graphics = @import("../graphics.zig"); -const context = @import("context.zig"); +const Context = @import("context.zig").Context; const c = @import("c.zig").c; pub const BitmapContext = opaque { - pub usingnamespace context.Context(BitmapContext); + pub const context = Context(BitmapContext); pub fn create( data: ?[]u8, diff --git a/pkg/macos/graphics/context.zig b/pkg/macos/graphics/context.zig index 6c3c243b7..d1c6c943f 100644 --- a/pkg/macos/graphics/context.zig +++ b/pkg/macos/graphics/context.zig @@ -8,6 +8,8 @@ const c = @import("c.zig").c; /// given type. pub fn Context(comptime T: type) type { return struct { + value: *T, + pub fn release(self: *T) void { c.CGContextRelease(@ptrCast(self)); } diff --git a/pkg/macos/text.zig b/pkg/macos/text.zig index 6a57c19b2..149cef66b 100644 --- a/pkg/macos/text.zig +++ b/pkg/macos/text.zig @@ -1,14 +1,34 @@ -pub const c = @import("text/c.zig"); -pub usingnamespace @import("text/font.zig"); -pub usingnamespace @import("text/font_collection.zig"); -pub usingnamespace @import("text/font_descriptor.zig"); -pub usingnamespace @import("text/font_manager.zig"); -pub usingnamespace @import("text/frame.zig"); -pub usingnamespace @import("text/framesetter.zig"); -pub usingnamespace @import("text/line.zig"); -pub usingnamespace @import("text/paragraph_style.zig"); -pub usingnamespace @import("text/run.zig"); -pub usingnamespace @import("text/stylized_strings.zig"); +const font = @import("text/font.zig"); +const font_collection = @import("text/font_collection.zig"); +const font_descriptor = @import("text/font_descriptor.zig"); +const font_manager = @import("text/font_manager.zig"); +const frame = @import("text/frame.zig"); +const framesetter = @import("text/framesetter.zig"); +const line = @import("text/line.zig"); +const paragraph_style = @import("text/paragraph_style.zig"); +const run = @import("text/run.zig"); +const stylized_strings = @import("text/stylized_strings.zig"); + +pub const c = @import("text/c.zig").c; +pub const Font = font.Font; +pub const FontTableTag = font.FontTableTag; +pub const FontCollection = font_collection.FontCollection; +pub const FontDescriptor = font_descriptor.FontDescriptor; +pub const FontAttribute = font_descriptor.FontAttribute; +pub const FontTraitKey = font_descriptor.FontTraitKey; +pub const FontVariationAxisKey = font_descriptor.FontVariationAxisKey; +pub const FontSymbolicTraits = font_descriptor.FontSymbolicTraits; +pub const createFontDescriptorsFromURL = font_manager.createFontDescriptorsFromURL; +pub const createFontDescriptorsFromData = font_manager.createFontDescriptorsFromData; +pub const Frame = frame.Frame; +pub const Framesetter = framesetter.Framesetter; +pub const Line = line.Line; +pub const ParagraphStyle = paragraph_style.ParagraphStyle; +pub const ParagraphStyleSetting = paragraph_style.ParagraphStyleSetting; +pub const ParagraphStyleSpecifier = paragraph_style.ParagraphStyleSpecifier; +pub const WritingDirection = paragraph_style.WritingDirection; +pub const Run = run.Run; +pub const StringAttribute = stylized_strings.StringAttribute; test { @import("std").testing.refAllDecls(@This()); diff --git a/pkg/macos/text/c.zig b/pkg/macos/text/c.zig index 1f9652583..e8608d6d0 100644 --- a/pkg/macos/text/c.zig +++ b/pkg/macos/text/c.zig @@ -1,3 +1,3 @@ -pub usingnamespace @cImport({ +pub const c = @cImport({ @cInclude("CoreText/CoreText.h"); }); diff --git a/pkg/macos/text/font.zig b/pkg/macos/text/font.zig index 10f8c23ca..7d8ca243c 100644 --- a/pkg/macos/text/font.zig +++ b/pkg/macos/text/font.zig @@ -4,7 +4,7 @@ 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"); +const c = @import("c.zig").c; pub const Font = opaque { pub fn createWithFontDescriptor(desc: *const text.FontDescriptor, size: f32) Allocator.Error!*Font { diff --git a/pkg/macos/text/font_collection.zig b/pkg/macos/text/font_collection.zig index 163d51189..8b4a86a6f 100644 --- a/pkg/macos/text/font_collection.zig +++ b/pkg/macos/text/font_collection.zig @@ -2,7 +2,7 @@ const std = @import("std"); const Allocator = std.mem.Allocator; const foundation = @import("../foundation.zig"); const text = @import("../text.zig"); -const c = @import("c.zig"); +const c = @import("c.zig").c; pub const FontCollection = opaque { pub fn createFromAvailableFonts() Allocator.Error!*FontCollection { diff --git a/pkg/macos/text/font_descriptor.zig b/pkg/macos/text/font_descriptor.zig index d7ba2c304..fa4fba1ea 100644 --- a/pkg/macos/text/font_descriptor.zig +++ b/pkg/macos/text/font_descriptor.zig @@ -1,7 +1,7 @@ const std = @import("std"); const Allocator = std.mem.Allocator; const foundation = @import("../foundation.zig"); -const c = @import("c.zig"); +const c = @import("c.zig").c; pub const FontDescriptor = opaque { pub fn createWithNameAndSize(name: *foundation.String, size: f64) Allocator.Error!*FontDescriptor { diff --git a/pkg/macos/text/font_manager.zig b/pkg/macos/text/font_manager.zig index 24a25660f..f918167a0 100644 --- a/pkg/macos/text/font_manager.zig +++ b/pkg/macos/text/font_manager.zig @@ -1,7 +1,7 @@ const std = @import("std"); const Allocator = std.mem.Allocator; const foundation = @import("../foundation.zig"); -const c = @import("c.zig"); +const c = @import("c.zig").c; pub fn createFontDescriptorsFromURL(url: *foundation.URL) ?*foundation.Array { return @ptrFromInt(@intFromPtr(c.CTFontManagerCreateFontDescriptorsFromURL( diff --git a/pkg/macos/text/frame.zig b/pkg/macos/text/frame.zig index f37ca3383..979134a12 100644 --- a/pkg/macos/text/frame.zig +++ b/pkg/macos/text/frame.zig @@ -4,7 +4,7 @@ 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"); +const c = @import("c.zig").c; pub const Frame = opaque { pub fn release(self: *Frame) void { diff --git a/pkg/macos/text/framesetter.zig b/pkg/macos/text/framesetter.zig index 5088057d6..dbd82762c 100644 --- a/pkg/macos/text/framesetter.zig +++ b/pkg/macos/text/framesetter.zig @@ -4,7 +4,7 @@ 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"); +const c = @import("c.zig").c; pub const Framesetter = opaque { pub fn createWithAttributedString(str: *foundation.AttributedString) Allocator.Error!*Framesetter { diff --git a/pkg/macos/text/line.zig b/pkg/macos/text/line.zig index c13220c8b..135fd8558 100644 --- a/pkg/macos/text/line.zig +++ b/pkg/macos/text/line.zig @@ -4,7 +4,7 @@ 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"); +const c = @import("c.zig").c; pub const Line = opaque { pub fn createWithAttributedString(str: *foundation.AttributedString) Allocator.Error!*Line { diff --git a/pkg/macos/text/paragraph_style.zig b/pkg/macos/text/paragraph_style.zig index beb2c36a8..f1d7fe957 100644 --- a/pkg/macos/text/paragraph_style.zig +++ b/pkg/macos/text/paragraph_style.zig @@ -4,7 +4,7 @@ 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"); +const c = @import("c.zig").c; // https://developer.apple.com/documentation/coretext/ctparagraphstyle?language=objc pub const ParagraphStyle = opaque { diff --git a/pkg/macos/text/run.zig b/pkg/macos/text/run.zig index a774ad6f3..9d40de81f 100644 --- a/pkg/macos/text/run.zig +++ b/pkg/macos/text/run.zig @@ -4,7 +4,7 @@ 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"); +const c = @import("c.zig").c; pub const Run = opaque { pub fn release(self: *Run) void { diff --git a/pkg/macos/text/stylized_strings.zig b/pkg/macos/text/stylized_strings.zig index 04350a273..8e262f9a8 100644 --- a/pkg/macos/text/stylized_strings.zig +++ b/pkg/macos/text/stylized_strings.zig @@ -1,5 +1,5 @@ const foundation = @import("../foundation.zig"); -const c = @import("c.zig"); +const c = @import("c.zig").c; pub const StringAttribute = enum { font, diff --git a/src/font/face/coretext.zig b/src/font/face/coretext.zig index 7b0e1e9bf..2bc550a9f 100644 --- a/src/font/face/coretext.zig +++ b/src/font/face/coretext.zig @@ -338,6 +338,7 @@ pub const Face = struct { defer alloc.free(buf); @memset(buf, 0); + const context = macos.graphics.BitmapContext.context; const ctx = try macos.graphics.BitmapContext.create( buf, width, @@ -347,15 +348,15 @@ pub const Face = struct { color.space, color.context_opts, ); - defer ctx.release(); + defer context.release(ctx); // Perform an initial fill. This ensures that we don't have any // uninitialized pixels in the bitmap. if (color.color) - ctx.setRGBFillColor(1, 1, 1, 0) + context.setRGBFillColor(ctx, 1, 1, 1, 0) else - ctx.setGrayFillColor(0, 0); - ctx.fillRect(.{ + context.setGrayFillColor(ctx, 0, 0); + context.fillRect(ctx, .{ .origin = .{ .x = 0, .y = 0 }, .size = .{ .width = @floatFromInt(width), @@ -363,22 +364,22 @@ pub const Face = struct { }, }); - ctx.setAllowsFontSmoothing(true); - ctx.setShouldSmoothFonts(opts.thicken); // The amadeus "enthicken" - ctx.setAllowsFontSubpixelQuantization(true); - ctx.setShouldSubpixelQuantizeFonts(true); - ctx.setAllowsFontSubpixelPositioning(true); - ctx.setShouldSubpixelPositionFonts(true); - ctx.setAllowsAntialiasing(true); - ctx.setShouldAntialias(true); + context.setAllowsFontSmoothing(ctx, true); + context.setShouldSmoothFonts(ctx, opts.thicken); // The amadeus "enthicken" + context.setAllowsFontSubpixelQuantization(ctx, true); + context.setShouldSubpixelQuantizeFonts(ctx, true); + context.setAllowsFontSubpixelPositioning(ctx, true); + context.setShouldSubpixelPositionFonts(ctx, true); + context.setAllowsAntialiasing(ctx, true); + context.setShouldAntialias(ctx, true); // Set our color for drawing if (color.color) { - ctx.setRGBFillColor(1, 1, 1, 1); - ctx.setRGBStrokeColor(1, 1, 1, 1); + context.setRGBFillColor(ctx, 1, 1, 1, 1); + context.setRGBStrokeColor(ctx, 1, 1, 1, 1); } else { - ctx.setGrayFillColor(1, 1); - ctx.setGrayStrokeColor(1, 1); + context.setGrayFillColor(ctx, 1, 1); + context.setGrayStrokeColor(ctx, 1, 1); } // We want to render the glyphs at (0,0), but the glyphs themselves