window.md 2.9 KB

Ablak

Inicializálás

int ui_init(ui_t *ctx, int txtc, char **txtv, int w, int h, ui_image_t *icon);

Inicializálja az UI kontextust és ablakot nyit. A legelső sztringnek a txtv[] tömbben az ablak fejlécének kell lennie, a többi szabadon választható.

Paraméter Leírás
ctx Mutató az UI kontextusra
txtc Sztringek száma
txtv [Lokalizáció]hoz sztringtömb
w Ablak szélessége
h Ablak magassága
icon Ablak ikonja kép

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

Felszabadítás

int ui_free(ui_t *ctx);

Bezárja az ablakot és felszabadítja a lefoglalt erőforrásokat.

Paraméter Leírás
ctx Mutató az UI kontextusra

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

Teljesképernyő

int ui_fullscreen(ui_t *ctx);

Váltogatja a kontextust teljesképernyős és ablakos mód között (inicializálást követően ablakos).

Paraméter Leírás
ctx Mutató az UI kontextusra

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

Háttérablak

void *ui_getwindow(ui_t *ctx);

Amennyiben szükség lenne rá, ezzel a funkcióval lekérhető a motor által használt ablak objektum.

Paraméter Leírás
ctx Mutató az UI kontextusra

Egy implementációfüggő objektumot ad vissza.

Általános szerkezet

A program általános szerkezetének valami ilyesminek kell lennie:

/* UI kontextus, ablakonként egy */
ui_t ctx;

/* lokalizációhoz sztringtömb */
enum { WINDOW_TITLE, HELLO_WORLD };
char *english[] = { "Window title", "Hello World!" };

/* ablak megnyitása és kontextus inicializálása */
ui_init(&ctx, 2, english, 640, 480, NULL);

/* a fő ciklus */
do {
    /* tedd, amit tennél, rajzolj, amit akarsz */
    glClearColor(0.0, 0.0, 0.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    /* ... */

    /* események lekérése és UI réteg megjelenítése a kívánt űrlappal */
    /* ha ez NULL-t ad vissza, ki kell lépni a ciklusból */
    if(!(evt = ui_event(&ctx, form))) break;

    /* események feldolgozása */
    switch(evt->type) {
        case UI_EVT_KEY: /* billentyűleütés */ break;
        case UI_EVT_MOUSE: /* egérgomb esemény */ break;
        case UI_EVT_GAMEPAD: /* gamepad esemény */ break;
        /* ... */
    }
} while(1);

/* ablak bezárása */
ui_free(&ctx);