1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
// Tiny C shim over stb_truetype, so ui_sdl.zig can @cInclude a small header
// instead of feeding the whole single-header lib to translate-c. The
// implementation (font.c) pulls in stb_truetype.h (declarations only —
// stb_truetype_impl.c defines STB_TRUETYPE_IMPLEMENTATION once elsewhere).
//
// A "font" is an opaque handle owning a stbtt_fontinfo; all rasterization goes
// through these functions so the Zig side never touches stb internals.
#ifndef UI_FONT_H
#define UI_FONT_H
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct UIFont UIFont;
// Parse the embedded TTF. `data` must stay alive for the lifetime of the font.
// Returns NULL on failure.
UIFont *ui_font_new(const uint8_t *data, int32_t len);
// Font metrics at a given pixel height. cell_w is the monospace advance (rounded
// up); ascent is the baseline offset from the top of a cell.
float ui_font_scale_for_height(UIFont *f, float px);
void ui_font_cell_metrics(UIFont *f, float scale, int32_t *cell_w, int32_t *cell_h, int32_t *ascent);
// Rasterize `cp` into `out` (a cell_w*cell_h single-channel mask, row-major,
// `stride` bytes per row). The glyph is positioned for a monospace cell: origin
// at the baseline `ascent` pixels from the top. Pixels outside the glyph are 0.
// Returns 1 if the glyph produced any coverage (0 for an empty/missing glyph,
// but `out` is still zeroed).
int ui_font_raster(UIFont *f, float scale, int32_t cp,
uint8_t *out, int32_t stride, int32_t cell_w, int32_t cell_h,
int32_t ascent);
void ui_font_free(UIFont *f);
#ifdef __cplusplus
}
#endif
#endif
|