mirror of
https://github.com/ghostty-org/ghostty.git
synced 2026-09-14 18:01:58 +00:00
This commit represents the majority of the work necessary to upgrade Ghostty to use Zig 0.16.0. Key parts: * In addition to its previous responsibilities, the global state now houses state for global I/O implementations and the process environment. It is now also utilized in the main application along with the C library. Where necessary, global state is isolated from key parts of the implementation (e.g., in libghostty subsystems), and it's expected that this list will grow. * We currently manage our own C translation layer where necessary. In these cases, cImport has been removed in favor of the new external translate-c package. Due to fixes that have needed be made to properly translate the dependencies that were swapped out, as mentioned, we have had to backport fixes from the current translate-c package (and the upstream Arocc dependency). We will host this ourselves until Zig 0.17.0 is released with these fixes. * Where necessary (only a small number of cases), some stdlib code from 0.15.2 (and even from 0.17.0) has been taken, adopted, and vendored in lib/compat. Co-authored-by: Leah Amelia Chen <hi@pluie.me>
65 lines
1.6 KiB
Zig
65 lines
1.6 KiB
Zig
//! A library represents the shared state that the underlying font
|
|
//! library implementation(s) require per-process.
|
|
const std = @import("std");
|
|
const Allocator = std.mem.Allocator;
|
|
const options = @import("main.zig").options;
|
|
const freetype = @import("freetype");
|
|
const font = @import("main.zig");
|
|
|
|
/// Library implementation for the compile options.
|
|
pub const Library = switch (options.backend) {
|
|
// Freetype requires a state library
|
|
.freetype,
|
|
.freetype_windows,
|
|
.fontconfig_freetype,
|
|
.coretext_freetype,
|
|
=> FreetypeLibrary,
|
|
|
|
// Some backends such as CT and Canvas don't have a "library"
|
|
.coretext,
|
|
.coretext_harfbuzz,
|
|
.coretext_noshape,
|
|
.web_canvas,
|
|
=> NoopLibrary,
|
|
};
|
|
|
|
pub const FreetypeLibrary = struct {
|
|
lib: freetype.Library,
|
|
|
|
alloc: Allocator,
|
|
|
|
/// Mutex to be held any time the library is
|
|
/// being used to create or destroy a face.
|
|
mutex: *std.Io.Mutex,
|
|
|
|
pub const InitError = freetype.Error || Allocator.Error;
|
|
|
|
pub fn init(alloc: Allocator) InitError!Library {
|
|
const lib = try freetype.Library.init();
|
|
errdefer lib.deinit();
|
|
|
|
const mutex = try alloc.create(std.Io.Mutex);
|
|
mutex.* = .init;
|
|
|
|
return Library{ .lib = lib, .alloc = alloc, .mutex = mutex };
|
|
}
|
|
|
|
pub fn deinit(self: *Library) void {
|
|
self.alloc.destroy(self.mutex);
|
|
self.lib.deinit();
|
|
}
|
|
};
|
|
|
|
pub const NoopLibrary = struct {
|
|
pub const InitError = error{};
|
|
|
|
pub fn init(alloc: Allocator) InitError!Library {
|
|
_ = alloc;
|
|
return Library{};
|
|
}
|
|
|
|
pub fn deinit(self: *Library) void {
|
|
_ = self;
|
|
}
|
|
};
|