events.md 7.1 KB

Eseménykezelés

ui_event_t *ui_event(ui_t *ctx, ui_form_t *form);

Ez az SMGUI lelke, ez a függvény lekéri az eseményeket és hozzáad a megjelenítéshez egy UI réteget a megadott [elrendezés] szerint.

Paraméter Leírás
ctx Mutató az UI kontextusra
form Űrlap [elrendezés]

Ha ki kell lépni a fő ciklusból, NULL-al tér vissza, egyébként egy esemény objektummal.

Ha az UI-tól függetlenül megváltozott az egyik változó, amire az átadott form hivatkozik, akkor meg kell hívni az ui_refresh() függvényt az ui_event() hívása előtt, hogy kikényszerítsünk egy [újrarajzolás]t.

A visszaadott eseményt az evt->type alapján kell értelmezni, mivel a legtöbb eseménymező típusfüggő.

Nincs esemény

Semmi sem történt.

Paraméter Leírás
evt->type UI_EVT_NONE (0)

Egér

Ez akkor generálódik, ha egy egérgombot lenyomnak vagy felengednek.

Paraméter Leírás
evt->type UI_EVT_MOUSE
evt->btn Aktuális gombstátusz
evt->x Aktuális egér X pozíció
evt->y Aktuális egér Y pozíció

A btn mező egy bitmaszkot tartalmaz, a következő értékekkel:

Define Leírás
UI_BTN_L Bal egérgomb
UI_BTN_M Középső egérgomb
UI_BTN_R Jobb egérgomb
UI_BTN_U Felfelegörgetés
UI_BTN_D Lefelegörgetés
UI_BTN_A Balragörgetés
UI_BTN_B Jobbragörgetés
UI_BTN_RELEASE Ha felengedés esemény

Ha esemény nélkül van szükség az egér pozíciójára, akkor használható az

int ui_getmouse(ui_t *ctx, int *x, int *y);
Paraméter Leírás
ctx Mutató az UI kontextusra
x Mutató az X pozíció tárolásához
y Mutató az Y pozíció tárolásához

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

Gamepad

Ez akkor generálódik, ha valamelyik gamepad státusza megváltozik.

Paraméter Leírás
evt->type UI_EVT_GAMEPAD
evt->btn Aktuális gombstátusz
evt->x Bal botkar X pozíció
evt->y Bal botkar Y pozíció
evt->rx Jobb botkar X pozíció
evt->ry Jobb botkar Y pozíció
evt->key[0] Gamepad indexe ha több is lenne

A botkarok koordinátái előjelesek, és a -32768 .. +32768 tartományba esnek. A btn mező egy bitmaszkot tartalmaz, a következő értékekkel:

Define Leírás
UI_BTN_A Az 'A'/kereszt gomb státusza
UI_BTN_B Az 'B'/kör gomb státusza
UI_BTN_X Az 'X'/négyzet gomb státusza
UI_BTN_Y Az 'Y'/háromszög gomb státusza
UI_BTN_L DPad balra státusza
UI_BTN_R DPad jobbra státusza
UI_BTN_U DPad fel státusza
UI_BTN_D DPad le státusza
UI_BTN_BA Vissza gomb státusza
UI_BTN_ST Start gomb státusza
UI_BTN_GU Útmutató gomb státusza
UI_BTN_LT Balhüvelyk gomb státusza
UI_BTN_RT Jobbhüvelyk gomb státusza
UI_BTN_LS Balra shoulder gomb státusza
UI_BTN_RS Jobbra shoulder gomb státusza

Billentyűzet

Ez akkor generálódik, ha egy billentyűt leütnek.

Paraméter Leírás
evt->type UI_EVT_KEY
evt->btn Módosítók státusza
evt->key Leütött gomb

A visszaadott gomb egy UTF-8 karakter, vagy (speciális gombok esetén) egy érvénytelen UTF-8 szekvencia a gomb nevével. A megkülönböztetéshez meg kell nézni, hogy key[1] üres-e, és hogy a legmagasabb bit a key[0]-ban be van-e állítva (érvényes UTF-8) vagy sem (gombnév).

HINT: Nincs gombleképezés, hogy megtudjuk, milyen kódot gerenál egy gomb, csak ki kell iratni a evt->key tartalmát.

A btn mező egy bitmaszkot tartalmaz, a következő értékekkel:

Define Leírás
UI_BTN_SHIFT Az egyik Shift le van nyomva
UI_BTN_CONTROL Az egyik Control le van nyomva
UI_BTN_ALT Az egyik Alt le van nyomva (jobboldalit hívják AltGr-nek)
UI_BTN_GUI Az egyik GUI le van nyomva

A módosító gombok (LShift, RShift, LCtrl, RCtrl, LAlt, RAlt, LGui és RGui) esetén billentyűfelengedés esemény is generálódik, ahol a UI_BTN_RELEASE be van állítva. A többi gomb nem generál ilyen eseményt.

Ráhúzott fájl

Ez akkor keletkezik, ha a felhasználó egy fájlt húz az ablakra.

Paraméter Leírás
evt->type UI_EVT_DROP
evt->x Aktuális egér X pozíció
evt->y Aktuális egér Y pozíció
evt->fn A fájl elérési útja

Ablakátméretezés

Ez akkor generálódik, ha az ablakot átméretezik.

Paraméter Leírás
evt->type UI_EVT_RESIZE
evt->x Az új ablak szélesség
evt->y Az új ablak magasság

Vágólap

Beillesztés

A vágólap lekéréséhez (amikor olyan [billentyűzet] esemény érkezett, amiben a gomb Paste), a következő függvény hívható:

char *ui_getclipboard(ui_t *ctx);
Paraméter Leírás
ctx Mutató az UI kontextusra

NULL-t ad vissza, ha a vágólap üres, egyébként a vágólap tartalmát egy újonnan allokált bufferben. A hívó felelőssége a buffer felszabadítása, ha már nincs rá szükség.

Kivágás

A vágólap beállítására (amikor olyan billentyűzet esemény érkezett, amiben a gomb Cut vagy Copy), a következő függvény való:

char *ui_setclipboard(ui_t *ctx, char *str);
Paraméter Leírás
ctx Mutató az UI kontextusra
str Vágólapra helyezendő sztring

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