custom.md 2.6 KB

Egyedi

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ó

Méretezés

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.

Megjelenítés

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.

Kontroller

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.

Destruktor

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.