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ő.
Semmi sem történt.
Paraméter | Leírás |
---|---|
evt->type |
UI_EVT_NONE (0) |
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.
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 |
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.
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 |
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 |
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.
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.