參考資訊:
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