Adopt the modules/ui UIPipeline framework (as the chess reference app does) and replace the P0 placeholder quad with a BoardView (View protocol, modeled on chess/board_view.sx): - background.png fills the screen; an 8x8 cell.png grid is centered in the safe area; each cell's gem is sampled from gems.png by UV column = gem index (0=red .. 5=purple). - Drive it from board.sx seeded with 1337 (the board_init golden's seed), so the on-screen layout matches that snapshot gem-for-gem. main.sx now hosts the view via UIPipeline (Metal on iOS, GL on desktop) and heap-allocates the board/asset state behind pointers (UFCS method calls on a value-typed global mutate a copy, so mutable state must live behind a pointer as the reference app does). Vendor the C deps the UI module's image/font path needs (stb_image, stb_truetype, kb_text_shape, file_utils); their #include "vendors/..." paths resolve relative to the project root. Evidence: ios-sim build links clean; tools/run_tests.sh 11/11 pass; running app captured at goldens/p4_board.png.
16 lines
911 B
C
16 lines
911 B
C
// Minimal API declarations for SX import.
|
|
// Only the functions/types we actually use — avoids parsing the full 30k-line header.
|
|
|
|
typedef struct kbts_shape_context kbts_shape_context;
|
|
typedef struct kbts_font kbts_font;
|
|
|
|
kbts_shape_context *kbts_CreateShapeContext(void *Allocator, void *AllocatorData);
|
|
void kbts_DestroyShapeContext(kbts_shape_context *Context);
|
|
kbts_font *kbts_ShapePushFontFromMemory(kbts_shape_context *Context, void *Memory, int Size, int FontIndex);
|
|
void kbts_GetFontInfo2(kbts_font *Font, void *Info);
|
|
void kbts_ShapeBegin(kbts_shape_context *Context, unsigned int ParagraphDirection, unsigned int Language);
|
|
void kbts_ShapeUtf8(kbts_shape_context *Context, const char *Utf8, int Length, unsigned int UserIdGenerationMode);
|
|
void kbts_ShapeEnd(kbts_shape_context *Context);
|
|
int kbts_ShapeRun(kbts_shape_context *Context, void *Run);
|
|
int kbts_GlyphIteratorNext(void *It, void **Glyph);
|