Felhasználó által kreált egyedi mezők is használhatók, ehhez mindössze típusonként 4 visszacsatolásra van szükség.
Paraméter | Leírás |
---|---|
form->type |
UI_CUSTOM |
form->flags |
Figyelembe kell venni a UI_HIDDEN -t és UI_DISABLED -t |
form->ptr |
Mutató tetszőleges adat bufferre |
form->data |
Mutató tetszőleges adat kontextusra |
form->str |
Lokalizált sztringtömb indexe (vagy 0) |
form->bbox |
Méretfunkció |
form->view |
Kirajzolófunkció |
form->ctrl |
Eseménykezelőfunkció |
form->fini |
Opcionális felszabadításfunkció |
typedef int (*ui_bbox)(ui_t *ctx, int x, int y, int w, int h,
ui_form_t *form, int *dw, int *dh);
Ez a funkció a számolt területet kapja x
, y
, w
, h
változókban, ahol a mezőnek meg kell jelennie, az űrlapelemet pedig
a form
-ban, majd vissza kell adnia a tényleges szélességet a dw
és a tényleges magasságot a dh
változókban.
typedef int (*ui_view)(ui_t *ctx, int x, int y, int w, int h,
ui_form_t *form);
Ez a funkció a tényleges területet kapja x
, y
, w
, h
változókban, ahová a mezőt ki kell rajzolni, az űrlapelemet pedig
a form
-ban. Használhatja az alacsonyszintű _ui_line()
, _ui_cbez()
, _ui_rect()
, _ui_blit()
stb. hívásokat, vagy
direktben változtathatja a pixeleket a ctx->screen
[kép]ben. Nagyon fontos, hogy nem módosíthat a megadott területen
hívül.
typedef int (*ui_ctrl)(ui_t *ctx, int x, int y, int w, int h,
ui_form_t *form, ui_event_t *evt);
Ez a funkció a tényleges területet kapja x
, y
, w
, h
változókban, ahol a mező található, az űrlapelemet a form
-ban,
az aktuális eseményt pedig az evt
-ben az [eseménykezelés]hez. Ez csak akkor hívódik, ha a form
nem UI_HIDDEN
(rejtett)
és nem is UI_DISABLED
(inaktív), és az egér épp fölötte tartózkodik.
typedef int (*ui_fini)(ui_t *ctx, ui_form_t *form);
Erre az opcionális visszacsatolásra csak akkor van szükség, ha az egyedi mező memóriát allokált. Többször is meghívódhat, ezért fontos úgy megírni, hogy csak egyszer szabadítsa fel a buffer(eke)t.