// 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 #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