程式語言 - LVGL - SDL v1.2 - Hello, world!



參考資訊:
https://docs.lvgl.io/master/
https://github.com/lvgl/lvgl
https://docs.lvgl.io/master/details/integration/driver/sdl.html

main.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#include <lvgl.h>
#include <SDL.h>

static lv_display_t *disp = NULL;
static SDL_Surface *screen = NULL;

static void refresh_cb(lv_timer_t *timer)
{
    lv_refr_now(disp);
}

static void flush_cb(lv_display_t *disp, const lv_area_t *area, uint8_t *px_map)
{
    SDL_Flip(screen);
    lv_display_flush_ready(disp);
}

int main(int argc, char *argv[])
{
    const int w = 320;
    const int h = 240;
    const int bpp = 16;

    SDL_Init(SDL_INIT_VIDEO);
    screen = SDL_SetVideoMode(w, h, bpp, SDL_HWSURFACE);

    lv_init();

    disp = lv_display_create(w, h);
    lv_display_set_flush_cb(disp, flush_cb);
    lv_display_set_buffers(disp, screen->pixels, NULL, w * h * (bpp >> 3), LV_DISPLAY_RENDER_MODE_FULL);

    lv_timer_t * refr_timer = lv_display_get_refr_timer(disp);
    lv_timer_set_cb(refr_timer, refresh_cb);

    lv_obj_t *label = lv_label_create(lv_screen_active());
    lv_label_set_text(label, "Hello, world!");

    lv_timer_handler();
    SDL_Delay(3000);

    SDL_Quit();
    return 0;
}

編譯、執行

$ gcc main.c -o main -I/usr/include/SDL -I/usr/local/include/lvgl/src -llvgl -lSDL
$ ./main