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ó.
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.
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.