Skip to content

Commit 77cf7c5

Browse files
committed
expose fonts
1 parent b28411b commit 77cf7c5

File tree

2 files changed

+47
-51
lines changed

2 files changed

+47
-51
lines changed

build.zig

+3-6
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ pub fn build(b: *std.Build) !void {
1515
.target = b.host,
1616
.optimize = optimize,
1717
});
18+
const font_dep = b.dependency("fonts", .{});
1819

1920
//
2021

@@ -525,12 +526,14 @@ pub fn build(b: *std.Build) !void {
525526
\\ @cInclude("SDL3/SDL.h");
526527
\\ @cInclude("SDL3_ttf/SDL_ttf.h");
527528
\\});
529+
\\pub const fonts = @import("fonts");
528530
),
529531
.link_libc = true,
530532
});
531533
{
532534
module.linkLibrary(lib);
533535
module.linkLibrary(SDL_ttf);
536+
module.addImport("fonts", font_dep.module("fonts"));
534537

535538
// In case you need to build it the non-zig way, for comparison:
536539
//
@@ -570,12 +573,6 @@ pub fn build(b: *std.Build) !void {
570573

571574
if (b.args) |args| run.addArgs(args);
572575

573-
// TODO: provide general-purpose fonts?
574-
if (std.mem.eql(u8, name, "ttf")) {
575-
const font_dep = b.dependency("fonts", .{});
576-
exe.root_module.addImport("fonts", font_dep.module("fonts"));
577-
}
578-
579576
const install = b.addInstallBinFile(exe.getEmittedBin(), name);
580577

581578
const run_step = b.step(b.fmt("zig-{s}", .{name}), b.fmt("Run src/{s}.zig", .{name}));

src/ttf.zig

+44-45
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33
// SPDX-License-Identifier: Zlib
44

55
const std = @import("std");
6-
const c = @import("sdl").c;
7-
8-
const font_file = @import("fonts").intel_one_mono_regular;
6+
const sdl = @import("sdl").c;
7+
const font_file = @import("sdl").fonts.intel_one_mono_regular;
98

109
pub fn main() !void {
1110
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
@@ -14,75 +13,75 @@ pub fn main() !void {
1413

1514
//
1615

17-
if (!c.SDL_Init(c.SDL_INIT_VIDEO)) {
18-
std.log.err("Unable to initialize SDL: {s}", .{c.SDL_GetError()});
16+
if (!sdl.SDL_Init(sdl.SDL_INIT_VIDEO)) {
17+
std.log.err("Unable to initialize SDL: {s}", .{sdl.SDL_GetError()});
1918
return error.SDLInitializationFailed;
2019
}
21-
defer c.SDL_Quit();
20+
defer sdl.SDL_Quit();
2221

23-
if (!c.TTF_Init()) {
24-
std.log.err("TTF_Init: {s}", .{c.SDL_GetError()});
22+
if (!sdl.TTF_Init()) {
23+
std.log.err("TTF_Init: {s}", .{sdl.SDL_GetError()});
2524
return error.TTF_Init;
2625
}
27-
defer c.SDL_Quit();
26+
defer sdl.SDL_Quit();
2827

29-
const data_dir_cstr = c.SDL_GetBasePath() orelse {
30-
std.log.err("SDL_GetBasePath: {s}", .{c.SDL_GetError()});
28+
const data_dir_cstr = sdl.SDL_GetBasePath() orelse {
29+
std.log.err("SDL_GetBasePath: {s}", .{sdl.SDL_GetError()});
3130
return error.SDL_GetBasePath;
3231
};
3332

3433
const data_dir = std.mem.span(data_dir_cstr);
3534
std.log.debug("data_dir: {s}\n", .{data_dir});
3635

3736
std.log.debug("font_file.len: {d}", .{font_file.len});
38-
const font_buffer = c.SDL_IOFromConstMem(font_file, font_file.len) orelse {
39-
std.log.err("SDL_IOFromConstMem: {s}", .{c.SDL_GetError()});
37+
const font_buffer = sdl.SDL_IOFromConstMem(font_file, font_file.len) orelse {
38+
std.log.err("SDL_IOFromConstMem: {s}", .{sdl.SDL_GetError()});
4039
return error.SDL_IOFromConstMem;
4140
};
4241

43-
const font = c.TTF_OpenFontIO(font_buffer, false, 30) orelse {
44-
std.log.err("TTF_OpenFontIO: {s}", .{c.SDL_GetError()});
42+
const font = sdl.TTF_OpenFontIO(font_buffer, false, 30) orelse {
43+
std.log.err("TTF_OpenFontIO: {s}", .{sdl.SDL_GetError()});
4544
return error.TTF_OpenFontIO;
4645
};
47-
defer c.TTF_CloseFont(font);
46+
defer sdl.TTF_CloseFont(font);
4847

49-
const window = c.SDL_CreateWindow(
48+
const window = sdl.SDL_CreateWindow(
5049
"Example SDL2 window",
5150
400,
5251
400,
53-
c.SDL_WINDOW_OPENGL | c.SDL_WINDOW_RESIZABLE,
52+
sdl.SDL_WINDOW_OPENGL | sdl.SDL_WINDOW_RESIZABLE,
5453
) orelse {
55-
std.log.err("SDL_CreateWindow: {s}", .{c.SDL_GetError()});
54+
std.log.err("SDL_CreateWindow: {s}", .{sdl.SDL_GetError()});
5655
return error.SDL_CreateWindow;
5756
};
58-
defer c.SDL_DestroyWindow(window);
57+
defer sdl.SDL_DestroyWindow(window);
5958

60-
const renderer = c.SDL_CreateRenderer(
59+
const renderer = sdl.SDL_CreateRenderer(
6160
window,
6261
null,
6362
) orelse {
64-
std.log.err("SDL_CreateRenderer: {s}", .{c.SDL_GetError()});
63+
std.log.err("SDL_CreateRenderer: {s}", .{sdl.SDL_GetError()});
6564
return error.SDL_CreateRenderer;
6665
};
67-
defer c.SDL_DestroyRenderer(renderer);
66+
defer sdl.SDL_DestroyRenderer(renderer);
6867

6968
var quit = false;
7069
var text: []const u8 = "";
7170

7271
while (!quit) {
73-
const start_time = c.SDL_GetTicks();
72+
const start_time = sdl.SDL_GetTicks();
7473

75-
var event: c.SDL_Event = undefined;
74+
var event: sdl.SDL_Event = undefined;
7675

77-
while (c.SDL_PollEvent(&event)) {
76+
while (sdl.SDL_PollEvent(&event)) {
7877
switch (event.type) {
79-
c.SDL_EVENT_QUIT => {
78+
sdl.SDL_EVENT_QUIT => {
8079
std.log.debug("exit", .{});
8180
quit = true;
8281
},
83-
c.SDL_EVENT_KEY_DOWN => {
82+
sdl.SDL_EVENT_KEY_DOWN => {
8483
switch (event.key.key) {
85-
c.SDLK_A => {
84+
sdl.SDLK_A => {
8685
std.log.debug("a", .{});
8786
text = "a";
8887
},
@@ -92,55 +91,55 @@ pub fn main() !void {
9291
},
9392
}
9493
},
95-
c.SDL_EVENT_WINDOW_RESIZED => {
94+
sdl.SDL_EVENT_WINDOW_RESIZED => {
9695
std.log.debug("resized", .{});
9796
},
9897
else => {},
9998
}
10099
}
101100

102101
// clear screen
103-
if (!c.SDL_SetRenderDrawColor(renderer, 255, 255, 255, 0)) {
104-
std.log.err("SDL_SetRenderDrawColor: {s}", .{c.SDL_GetError()});
102+
if (!sdl.SDL_SetRenderDrawColor(renderer, 255, 255, 255, 0)) {
103+
std.log.err("SDL_SetRenderDrawColor: {s}", .{sdl.SDL_GetError()});
105104
return error.SDL_SetRenderDrawColor;
106105
}
107-
_ = c.SDL_RenderClear(renderer);
106+
_ = sdl.SDL_RenderClear(renderer);
108107

109108
// render text
110109
if (!std.mem.eql(u8, text, "")) {
111-
const color = c.SDL_Color{
110+
const color = sdl.SDL_Color{
112111
.r = 0,
113112
.g = 0,
114113
.b = 0,
115114
.a = @floor(0.87 * 255),
116115
};
117116

118117
const c_str = try allocator.dupeZ(u8, text);
119-
const text_surface = c.TTF_RenderText_Solid(font, c_str, color) orelse {
120-
std.log.err("TTF_RenderText_Solid: {s}", .{c.SDL_GetError()});
118+
const text_surface = sdl.TTF_RenderText_Solid(font, c_str, color) orelse {
119+
std.log.err("TTF_RenderText_Solid: {s}", .{sdl.SDL_GetError()});
121120
return error.TTF_RenderText_Solid;
122121
};
123-
defer c.SDL_DestroySurface(text_surface);
122+
defer sdl.SDL_DestroySurface(text_surface);
124123

125-
const texture = c.SDL_CreateTextureFromSurface(renderer, text_surface) orelse {
126-
std.log.err("SDL_CreateTextureFromSurface: {s}", .{c.SDL_GetError()});
124+
const texture = sdl.SDL_CreateTextureFromSurface(renderer, text_surface) orelse {
125+
std.log.err("SDL_CreateTextureFromSurface: {s}", .{sdl.SDL_GetError()});
127126
return error.SDL_CreateTextureFromSurface;
128127
};
129-
defer c.SDL_DestroyTexture(texture);
128+
defer sdl.SDL_DestroyTexture(texture);
130129

131-
const rect = c.SDL_FRect{
130+
const rect = sdl.SDL_FRect{
132131
.x = 42,
133132
.y = 42,
134133
.w = @floatFromInt(text_surface.*.w),
135134
.h = @floatFromInt(text_surface.*.h),
136135
};
137136

138-
_ = c.SDL_RenderTexture(renderer, texture, null, &rect);
137+
_ = sdl.SDL_RenderTexture(renderer, texture, null, &rect);
139138
}
140139

141-
_ = c.SDL_RenderPresent(renderer);
140+
_ = sdl.SDL_RenderPresent(renderer);
142141

143-
const end_time = c.SDL_GetTicks();
142+
const end_time = sdl.SDL_GetTicks();
144143
const elapsed = end_time - start_time;
145144

146145
const FRAMES_PER_SECOND = 60;
@@ -151,6 +150,6 @@ pub fn main() !void {
151150
else
152151
MS_PER_FRAME - elapsed;
153152

154-
c.SDL_DelayNS(delay * std.time.ns_per_ms);
153+
sdl.SDL_DelayNS(delay * std.time.ns_per_ms);
155154
}
156155
}

0 commit comments

Comments
 (0)