trueno/modules/Fontstash/module.jai
2026-10-02 20:07:49 +03:00

44 lines
2.1 KiB
Plaintext

// Fontstash with stb_truetype, as a plain C library: no rendering backend,
// glyphs reach the caller through FONSparams' render callbacks. Only the parts
// the engine uses are bound. Libraries are built with build.sh.
FONScontext :: struct {}
FONS_ZERO_TOPLEFT :: 1;
FONSparams :: struct {
width, height : s32;
flags : u8;
userPtr : *void;
renderCreate : (uptr: *void, width: s32, height: s32) -> s32 #c_call;
renderResize : (uptr: *void, width: s32, height: s32) -> s32 #c_call;
renderUpdate : (uptr: *void, rect: *s32, data: *u8) #c_call;
renderDraw : (uptr: *void, verts: *float, tcoords: *float, colors: *u32, nverts: s32) #c_call;
renderDelete : (uptr: *void) #c_call;
}
fonsCreateInternal :: (params: *FONSparams) -> *FONScontext #foreign fontstash;
fonsResetAtlas :: (s: *FONScontext, width: s32, height: s32) -> s32 #foreign fontstash;
fonsAddFontMem :: (s: *FONScontext, name: *u8, data: *u8, ndata: s32, free_data: s32) -> s32 #foreign fontstash;
fonsClearState :: (s: *FONScontext) #foreign fontstash;
fonsSetSize :: (s: *FONScontext, size: float) #foreign fontstash;
fonsSetColor :: (s: *FONScontext, color: u32) #foreign fontstash;
fonsSetFont :: (s: *FONScontext, font: s32) #foreign fontstash;
fonsDrawText :: (s: *FONScontext, x: float, y: float, str: *u8, end: *u8) -> float #foreign fontstash;
fonsTextBounds :: (s: *FONScontext, x: float, y: float, str: *u8, end: *u8, bounds: *float) -> float #foreign fontstash;
fonsVertMetrics :: (s: *FONScontext, ascender: *float, descender: *float, line_height: *float) #foreign fontstash;
fonsGetTextureData :: (s: *FONScontext, width: *s32, height: *s32) -> *u8 #foreign fontstash;
#scope_file
#if OS == .LINUX {
fontstash :: #library,no_dll "linux/fontstash";
#library,system,link_always "libm";
} else #if OS == .MACOS {
fontstash :: #library,no_dll "macos/fontstash";
} else #if OS == .WASM {
fontstash :: #library,no_dll "wasm/fontstash";
} else {
#assert false "Fontstash has no library for this OS; see build.sh.";
}