Until Lunch

This commit is contained in:
edwin
2025-02-20 12:50:43 +01:00
parent 0eb58742bd
commit 7e1ae6c9d3
5 changed files with 604 additions and 6 deletions

View File

@@ -1,13 +1,100 @@
#include <stdio.h>
#include <stdbool.h>
#include "testlib.h"
#include <SDL2/SDL.h>
#include "lvgl.h"
#ifndef MAIN_MESSAGE
#define MAIN_MESSAGE "Hello from main!"
#endif
int main() {
printf("%s\n", MAIN_MESSAGE);
print_message();
// Functie voor de scherminitialisatie
void lvgl_init(SDL_Window **window, SDL_Renderer **renderer, int width, int height) {
// SDL2 initialisatie
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
printf("SDL init failed: %s\n", SDL_GetError());
exit(1);
}
*window = SDL_CreateWindow("LVGL with SDL2", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_OPENGL);
if (*window == NULL) {
printf("Failed to create window: %s\n", SDL_GetError());
exit(1);
}
*renderer = SDL_CreateRenderer(*window, -1, SDL_RENDERER_ACCELERATED);
if (*renderer == NULL) {
printf("Failed to create renderer: %s\n", SDL_GetError());
exit(1);
}
// Initialisatie LVGL
lv_init();
// Koppelen van SDL2 als de display buffer
lv_disp_draw_buf_t draw_buf;
static lv_color_t buf1[LV_HOR_RES_MAX * 10];
lv_disp_draw_buf_init(&draw_buf, buf1, NULL, LV_HOR_RES_MAX * 10);
lv_disp_drv_t disp_drv;
lv_disp_drv_init(&disp_drv);
disp_drv.draw_buf = &draw_buf;
disp_drv.flush_cb = sdl_flush;
disp_drv.hor_res = width;
disp_drv.ver_res = height;
lv_disp_drv_register(&disp_drv);
}
// Functie voor het tekenen naar het SDL-scherm
void sdl_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p) {
SDL_Renderer *renderer = (SDL_Renderer*) disp->user_data;
// Zet het gebied waar we gaan tekenen
SDL_Rect rect = {area->x1, area->y1, area->x2 - area->x1 + 1, area->y2 - area->y1 + 1};
for (int y = 0; y <= rect.h; y++) {
for (int x = 0; x <= rect.w; x++) {
lv_color_t color = color_p[(y * rect.w) + x];
SDL_SetRenderDrawColor(renderer, color.ch.red, color.ch.green, color.ch.blue, 255);
SDL_RenderDrawPoint(renderer, rect.x + x, rect.y + y);
}
}
SDL_RenderPresent(renderer);
lv_disp_flush_ready(disp);
}
// Hoofdfunctie
int main(void) {
SDL_Window *window;
SDL_Renderer *renderer;
int width = 800;
int height = 480;
lvgl_init(&window, &renderer, width, height);
// Maak een eenvoudige knop aan
lv_obj_t *btn = lv_btn_create(lv_scr_act(), NULL);
lv_obj_align(btn, NULL, LV_ALIGN_CENTER, 0, 0);
lv_obj_t *label = lv_label_create(btn, NULL);
lv_label_set_text(label, "Klik hier!");
// Event loop
SDL_Event e;
int quit = 0;
while (!quit) {
while (SDL_PollEvent(&e)) {
if (e.type == SDL_QUIT) {
quit = 1;
}
}
// LVGL taakverwerking
lv_task_handler();
SDL_Delay(5);
}
// Opruimen en afsluiten
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
}