font.md 2.6 KB

Fontok

Az SMGUI tetszőleges fontokat képes támogatni, és mindjárt kétféle referencia implementációval érkezik, ui_psf2.h (alapértelmezett, egyszerű bitmap font) és ui_ssfn.h (vektor, átméretezett bitmap és pixelmap fontok), de saját is egyszerűen hozzáadható.

Tetszőleges implementáció megadása

int ui_fonthook(ui_t *ctx, ui_font_bbox bbox, ui_font_draw draw);

Egy bármilyen font formátum támogatásához két visszacsatolás megadására van szükség a kontextusban.

Paraméter Leírás
ctx Mutató az UI kontextusra
bbox Méretfunkció
draw Kirajzolófunkció

Siker esetén 0-val tér vissza, egyébként hibakóddal.

A visszacsatolások:

typedef int (*ui_font_bbox)(void *fnt, char *str, char *end,
    int *w, int *h, int *l, int *t);

Megméri a sztringet, és a szélességét a w, a magasságát a h változóban adja vissza pixelben. Ha van baloldali átfedés, akkor az az l-be kerül. Az alapvonal felülről számítva a t-be kerül (mind az l és a t lehet NULL, ha nincs ezekre szükség). A sztring egy nullával lezárt UTF-8 sztring str-ben, de ha az end nem NULL, akkor ott véget ér.

typedef int (*ui_font_draw)(void *fnt, char *str, char *end,
    uint8_t *dst, uint32_t color, int x, int y, int l, int t, int p,
    int cx0, int cy0, int cx1, int cy1);

Kirajzolja a sztringet x, y koordinátákra (l baloldali átfedéssel és t alapvonalra) a dst pixelbufferre, aminek egy rasztersora p bájtnyi. Nagyon fontos, hogy a megadott cx0, cy0 és cx1, cy1 koordináták közötti crop régión kívül nem szabad semmit módosítania. Az implementációspecifikus fnt hivatkozik a fontra, a szöveg színe color, a nullával lezárt UTF-8 sztring str-ben, de ha az end nem NULL, akkor ott véget ér.

Font betöltése

WARNING: Ez a funkció nem inicializálja a fontot, csak letárolja a mutatót, hogy átadja a visszacsatolásoknak. A font inicializálás és felszabadítás platform-specifikus és a hívó dolga (a PSF2 meghajtónak nincs ezekre szüksége).

int ui_font(ui_t *ctx, void *fnt);

Beállítja a használandó fontot.

Paraméter Leírás
ctx Mutató az UI kontextusra
fnt Használandó font

Siker esetén 0-val tér vissza, egyébként hibakóddal.