diff --git a/.gitmodules b/.gitmodules index 78c830d..25b5baa 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ [submodule "lib/lvgl"] path = lib/lvgl - url = https://github.com/lvgl/lvgl.git -[submodule "lib/sdl-cmake"] - path = lib/sdl-cmake - url = https://gitlab.com/aminosbh/sdl2-cmake-modules.git + url = https://github.com/lvgl/lvgl.git \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index a1e2666..9bb88cf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,14 +12,10 @@ add_compile_definitions(MAIN_MESSAGE="Hello for main.c from cmake.") # For LVGL add_compile_definitions(DLV_CONF_PATH="${CMAKE_CURRENT_SOURCE_DIR}/include/lv_conf.h") -add_compile_definitions(DLV_CONF_PATH="${CMAKE_CURRENT_SOURCE_DIR}/include/lv_drv_conf.h") include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/) -list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib/sdl-cmake) - - # set 1 to compile static (Standalone) -set(BIN_STATIC 1) +set(BIN_STATIC 0) # Set binary suffix based on the operating system if(CMAKE_SYSTEM_NAME STREQUAL "Windows") @@ -64,12 +60,21 @@ foreach(Project IN LISTS SubProjects) # Link the subproject to the main project executable if(BIN_STATIC) - target_link_libraries(${PROJECT_NAME} PUBLIC ${Project} -static) + target_link_libraries(${PROJECT_NAME} ${Project} -static) else() - target_link_libraries(${PROJECT_NAME} PUBLIC ${Project}) + target_link_libraries(${PROJECT_NAME} ${Project}) endif() endforeach() +# For SDL +find_package(SDL2 REQUIRED) +include_directories(${SDL2_INCLUDE_DIRS}) +if(BIN_STATIC) + target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES} -static) +else() + target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES}) +endif() + # Add all core's for compiling include(ProcessorCount) ProcessorCount(N) diff --git a/include/lv_drv_conf.h b/include/lv_drv_conf.h deleted file mode 100644 index 3c45cce..0000000 --- a/include/lv_drv_conf.h +++ /dev/null @@ -1,504 +0,0 @@ -/** - * @file lv_drv_conf.h - * Configuration file for v9.0.0-dev - */ - -/* - * COPY THIS FILE AS lv_drv_conf.h - */ - -/* clang-format off */ -#if 1 /*Set it to "1" to enable the content*/ - -#ifndef LV_DRV_CONF_H -#define LV_DRV_CONF_H - -#include "lv_conf.h" - -/********************* - * DELAY INTERFACE - *********************/ -#define LV_DRV_DELAY_INCLUDE /*Dummy include by default*/ -#define LV_DRV_DELAY_US(us) /*delay_us(us)*/ /*Delay the given number of microseconds*/ -#define LV_DRV_DELAY_MS(ms) /*delay_ms(ms)*/ /*Delay the given number of milliseconds*/ - -/********************* - * DISPLAY INTERFACE - *********************/ - -/*------------ - * Common - *------------*/ -#define LV_DRV_DISP_INCLUDE /*Dummy include by default*/ -#define LV_DRV_DISP_CMD_DATA(val) /*pin_x_set(val)*/ /*Set the command/data pin to 'val'*/ -#define LV_DRV_DISP_RST(val) /*pin_x_set(val)*/ /*Set the reset pin to 'val'*/ - -/*--------- - * SPI - *---------*/ -#define LV_DRV_DISP_SPI_CS(val) /*spi_cs_set(val)*/ /*Set the SPI's Chip select to 'val'*/ -#define LV_DRV_DISP_SPI_WR_BYTE(data) /*spi_wr(data)*/ /*Write a byte the SPI bus*/ -#define LV_DRV_DISP_SPI_WR_ARRAY(adr, n) /*spi_wr_mem(adr, n)*/ /*Write 'n' bytes to SPI bus from 'adr'*/ - -/*------------------ - * Parallel port - *-----------------*/ -#define LV_DRV_DISP_PAR_CS(val) /*par_cs_set(val)*/ /*Set the Parallel port's Chip select to 'val'*/ -#define LV_DRV_DISP_PAR_SLOW /*par_slow()*/ /*Set low speed on the parallel port*/ -#define LV_DRV_DISP_PAR_FAST /*par_fast()*/ /*Set high speed on the parallel port*/ -#define LV_DRV_DISP_PAR_WR_WORD(data) /*par_wr(data)*/ /*Write a word to the parallel port*/ -#define LV_DRV_DISP_PAR_WR_ARRAY(adr, n) /*par_wr_mem(adr,n)*/ /*Write 'n' bytes to Parallel ports from 'adr'*/ - -/*************************** - * INPUT DEVICE INTERFACE - ***************************/ - -/*---------- - * Common - *----------*/ -#define LV_DRV_INDEV_INCLUDE /*Dummy include by default*/ -#define LV_DRV_INDEV_RST(val) /*pin_x_set(val)*/ /*Set the reset pin to 'val'*/ -#define LV_DRV_INDEV_IRQ_READ 0 /*pn_x_read()*/ /*Read the IRQ pin*/ - -/*--------- - * SPI - *---------*/ -#define LV_DRV_INDEV_SPI_CS(val) /*spi_cs_set(val)*/ /*Set the SPI's Chip select to 'val'*/ -#define LV_DRV_INDEV_SPI_XCHG_BYTE(data) 0 /*spi_xchg(val)*/ /*Write 'val' to SPI and give the read value*/ - -/*--------- - * I2C - *---------*/ -#define LV_DRV_INDEV_I2C_START /*i2c_start()*/ /*Make an I2C start*/ -#define LV_DRV_INDEV_I2C_STOP /*i2c_stop()*/ /*Make an I2C stop*/ -#define LV_DRV_INDEV_I2C_RESTART /*i2c_restart()*/ /*Make an I2C restart*/ -#define LV_DRV_INDEV_I2C_WR(data) /*i2c_wr(data)*/ /*Write a byte to the I1C bus*/ -#define LV_DRV_INDEV_I2C_READ(last_read) 0 /*i2c_rd()*/ /*Read a byte from the I2C bud*/ - - -/********************* - * DISPLAY DRIVERS - *********************/ - -/*------------------- - * SDL - *-------------------*/ - -/* SDL based drivers for display, mouse, mousewheel and keyboard*/ -#ifndef USE_SDL -# define USE_SDL 0 -#endif - -/* Hardware accelerated SDL driver */ -#ifndef USE_SDL_GPU -# define USE_SDL_GPU 0 -#endif - -#if USE_SDL || USE_SDL_GPU -# define SDL_HOR_RES 480 -# define SDL_VER_RES 320 - -/* Scale window by this factor (useful when simulating small screens) */ -# define SDL_ZOOM 1 - -/* Used to test true double buffering with only address changing. - * Use 2 draw buffers, bith with SDL_HOR_RES x SDL_VER_RES size*/ -# define SDL_DOUBLE_BUFFERED 0 - -/*Eclipse: Visual Studio: */ -# define SDL_INCLUDE_PATH - -/*Open two windows to test multi display support*/ -# define SDL_DUAL_DISPLAY 0 - -/* Window Title */ -# define SDL_WINDOW_TITLE "TFT Simulator" -#endif - -/*------------------- - * Monitor of PC - *-------------------*/ - -/*DEPRECATED: Use the SDL driver instead. */ -#ifndef USE_MONITOR -# define USE_MONITOR 0 -#endif - -#if USE_MONITOR -# define MONITOR_HOR_RES 480 -# define MONITOR_VER_RES 320 - -/* Scale window by this factor (useful when simulating small screens) */ -# define MONITOR_ZOOM 1 - -/* Used to test true double buffering with only address changing. - * Use 2 draw buffers, bith with MONITOR_HOR_RES x MONITOR_VER_RES size*/ -# define MONITOR_DOUBLE_BUFFERED 0 - -/*Eclipse: Visual Studio: */ -# define MONITOR_SDL_INCLUDE_PATH - -/*Open two windows to test multi display support*/ -# define MONITOR_DUAL 0 -#endif - -/*----------------------------------- - * Native Windows (including mouse) - *----------------------------------*/ -#ifndef USE_WINDOWS -# define USE_WINDOWS 0 -#endif - -#if USE_WINDOWS -# define WINDOW_HOR_RES 480 -# define WINDOW_VER_RES 320 -#endif - -/*---------------------------- - * Native Windows (win32drv) - *---------------------------*/ -#ifndef USE_WIN32DRV -# define USE_WIN32DRV 0 -#endif - -#if USE_WIN32DRV -/* Scale window by this factor (useful when simulating small screens) */ -# define WIN32DRV_MONITOR_ZOOM 1 -#endif - -/*---------------------------------------- - * GTK drivers (monitor, mouse, keyboard - *---------------------------------------*/ -#ifndef USE_GTK -# define USE_GTK 0 -#endif - -/*---------------------------------------- - * Wayland drivers (monitor, mouse, keyboard, touchscreen) - *---------------------------------------*/ -#ifndef USE_WAYLAND -# define USE_WAYLAND 0 -#endif - -#if USE_WAYLAND -/* Support for client-side decorations */ -# ifndef LV_WAYLAND_CLIENT_SIDE_DECORATIONS -# define LV_WAYLAND_CLIENT_SIDE_DECORATIONS 1 -# endif -/* Support for (deprecated) wl-shell protocol */ -# ifndef LV_WAYLAND_WL_SHELL -# define LV_WAYLAND_WL_SHELL 1 -# endif -/* Support for xdg-shell protocol */ -# ifndef LV_WAYLAND_XDG_SHELL -# define LV_WAYLAND_XDG_SHELL 0 -# endif -#endif - -/*---------------------------------------- - * X11 drivers (monitor, mouse, keyboard) - *---------------------------------------*/ -#ifndef USE_X11 -# define USE_X11 0 -#endif - -/*---------------- - * SSD1963 - *--------------*/ -#ifndef USE_SSD1963 -# define USE_SSD1963 0 -#endif - -#if USE_SSD1963 -# define SSD1963_HOR_RES LV_HOR_RES -# define SSD1963_VER_RES LV_VER_RES -# define SSD1963_HT 531 -# define SSD1963_HPS 43 -# define SSD1963_LPS 8 -# define SSD1963_HPW 10 -# define SSD1963_VT 288 -# define SSD1963_VPS 12 -# define SSD1963_FPS 4 -# define SSD1963_VPW 10 -# define SSD1963_HS_NEG 0 /*Negative hsync*/ -# define SSD1963_VS_NEG 0 /*Negative vsync*/ -# define SSD1963_ORI 0 /*0, 90, 180, 270*/ -# define SSD1963_COLOR_DEPTH 16 -#endif - -/*---------------- - * R61581 - *--------------*/ -#ifndef USE_R61581 -# define USE_R61581 0 -#endif - -#if USE_R61581 -# define R61581_HOR_RES LV_HOR_RES -# define R61581_VER_RES LV_VER_RES -# define R61581_HSPL 0 /*HSYNC signal polarity*/ -# define R61581_HSL 10 /*HSYNC length (Not Implemented)*/ -# define R61581_HFP 10 /*Horitontal Front poarch (Not Implemented)*/ -# define R61581_HBP 10 /*Horitontal Back poarch (Not Implemented */ -# define R61581_VSPL 0 /*VSYNC signal polarity*/ -# define R61581_VSL 10 /*VSYNC length (Not Implemented)*/ -# define R61581_VFP 8 /*Vertical Front poarch*/ -# define R61581_VBP 8 /*Vertical Back poarch */ -# define R61581_DPL 0 /*DCLK signal polarity*/ -# define R61581_EPL 1 /*ENABLE signal polarity*/ -# define R61581_ORI 0 /*0, 180*/ -# define R61581_LV_COLOR_DEPTH 16 /*Fix 16 bit*/ -#endif - -/*------------------------------ - * ST7565 (Monochrome, low res.) - *-----------------------------*/ -#ifndef USE_ST7565 -# define USE_ST7565 0 -#endif - -#if USE_ST7565 -/*No settings*/ -#endif /*USE_ST7565*/ - -/*------------------------------ - * GC9A01 (color, low res.) - *-----------------------------*/ -#ifndef USE_GC9A01 -# define USE_GC9A01 0 -#endif - -#if USE_GC9A01 -/*No settings*/ -#endif /*USE_GC9A01*/ - -/*------------------------------------------ - * UC1610 (4 gray 160*[104|128]) - * (EA DOGXL160 160x104 tested) - *-----------------------------------------*/ -#ifndef USE_UC1610 -# define USE_UC1610 0 -#endif - -#if USE_UC1610 -# define UC1610_HOR_RES LV_HOR_RES -# define UC1610_VER_RES LV_VER_RES -# define UC1610_INIT_CONTRAST 33 /* init contrast, values in [%] */ -# define UC1610_INIT_HARD_RST 0 /* 1 : hardware reset at init, 0 : software reset */ -# define UC1610_TOP_VIEW 0 /* 0 : Bottom View, 1 : Top View */ -#endif /*USE_UC1610*/ - -/*------------------------------------------------- - * SHARP memory in pixel monochrome display series - * LS012B7DD01 (184x38 pixels.) - * LS013B7DH03 (128x128 pixels.) - * LS013B7DH05 (144x168 pixels.) - * LS027B7DH01 (400x240 pixels.) (tested) - * LS032B7DD02 (336x536 pixels.) - * LS044Q7DH01 (320x240 pixels.) - *------------------------------------------------*/ -#ifndef USE_SHARP_MIP -# define USE_SHARP_MIP 0 -#endif - -#if USE_SHARP_MIP -# define SHARP_MIP_HOR_RES LV_HOR_RES -# define SHARP_MIP_VER_RES LV_VER_RES -# define SHARP_MIP_SOFT_COM_INVERSION 0 -# define SHARP_MIP_REV_BYTE(b) /*((uint8_t) __REV(__RBIT(b)))*/ /*Architecture / compiler dependent byte bits order reverse*/ -#endif /*USE_SHARP_MIP*/ - -/*------------------------------------------------- - * ILI9341 240X320 TFT LCD - *------------------------------------------------*/ -#ifndef USE_ILI9341 -# define USE_ILI9341 0 -#endif - -#if USE_ILI9341 -# define ILI9341_HOR_RES LV_HOR_RES -# define ILI9341_VER_RES LV_VER_RES -# define ILI9341_GAMMA 1 -# define ILI9341_TEARING 0 -#endif /*USE_ILI9341*/ - -/*----------------------------------------- - * Linux frame buffer device (/dev/fbx) - *-----------------------------------------*/ -#ifndef USE_FBDEV -# define USE_FBDEV 0 -#endif - -#if USE_FBDEV -# define FBDEV_PATH "/dev/fb0" -#endif - -/*----------------------------------------- - * FreeBSD frame buffer device (/dev/fbx) - *.........................................*/ -#ifndef USE_BSD_FBDEV -# define USE_BSD_FBDEV 0 -#endif - -#if USE_BSD_FBDEV -# define FBDEV_PATH "/dev/fb0" -#endif - -/*----------------------------------------- - * DRM/KMS device (/dev/dri/cardX) - *-----------------------------------------*/ -#ifndef USE_DRM -# define USE_DRM 0 -#endif - -#if USE_DRM -# define DRM_CARD "/dev/dri/card0" -# define DRM_CONNECTOR_ID -1 /* -1 for the first connected one */ -#endif - -/********************* - * INPUT DEVICES - *********************/ - -/*-------------- - * XPT2046 - *--------------*/ -#ifndef USE_XPT2046 -# define USE_XPT2046 0 -#endif - -#if USE_XPT2046 -# define XPT2046_HOR_RES 480 -# define XPT2046_VER_RES 320 -# define XPT2046_X_MIN 200 -# define XPT2046_Y_MIN 200 -# define XPT2046_X_MAX 3800 -# define XPT2046_Y_MAX 3800 -# define XPT2046_AVG 4 -# define XPT2046_X_INV 0 -# define XPT2046_Y_INV 0 -# define XPT2046_XY_SWAP 0 -#endif - -/*----------------- - * FT5406EE8 - *-----------------*/ -#ifndef USE_FT5406EE8 -# define USE_FT5406EE8 0 -#endif - -#if USE_FT5406EE8 -# define FT5406EE8_I2C_ADR 0x38 /*7 bit address*/ -#endif - -/*--------------- - * AD TOUCH - *--------------*/ -#ifndef USE_AD_TOUCH -# define USE_AD_TOUCH 0 -#endif - -#if USE_AD_TOUCH -/*No settings*/ -#endif - - -/*--------------------------------------- - * Mouse or touchpad on PC (using SDL) - *-------------------------------------*/ -/*DEPRECATED: Use the SDL driver instead. */ -#ifndef USE_MOUSE -# define USE_MOUSE 0 -#endif - -#if USE_MOUSE -/*No settings*/ -#endif - -/*------------------------------------------- - * Mousewheel as encoder on PC (using SDL) - *------------------------------------------*/ -/*DEPRECATED: Use the SDL driver instead. */ -#ifndef USE_MOUSEWHEEL -# define USE_MOUSEWHEEL 0 -#endif - -#if USE_MOUSEWHEEL -/*No settings*/ -#endif - -/*------------------------------------------------- - * Touchscreen, mouse/touchpad or keyboard as libinput interface (for Linux based systems) - *------------------------------------------------*/ -#ifndef USE_LIBINPUT -# define USE_LIBINPUT 0 -#endif - -#ifndef USE_BSD_LIBINPUT -# define USE_BSD_LIBINPUT 0 -#endif - -#if USE_LIBINPUT || USE_BSD_LIBINPUT -/*If only a single device of the same type is connected, you can also auto detect it, e.g.: - *#define LIBINPUT_NAME libinput_find_dev(LIBINPUT_CAPABILITY_TOUCH, false)*/ -# define LIBINPUT_NAME "/dev/input/event0" /*You can use the "evtest" Linux tool to get the list of devices and test them*/ - -#endif /*USE_LIBINPUT || USE_BSD_LIBINPUT*/ - -/*------------------------------------------------- - * Mouse or touchpad as evdev interface (for Linux based systems) - *------------------------------------------------*/ -#ifndef USE_EVDEV -# define USE_EVDEV 0 -#endif - -#ifndef USE_BSD_EVDEV -# define USE_BSD_EVDEV 0 -#endif - -#if USE_EVDEV || USE_BSD_EVDEV -# define EVDEV_NAME "/dev/input/event0" /*You can use the "evtest" Linux tool to get the list of devices and test them*/ -# define EVDEV_SWAP_AXES 0 /*Swap the x and y axes of the touchscreen*/ - -# define EVDEV_CALIBRATE 0 /*Scale and offset the touchscreen coordinates by using maximum and minimum values for each axis*/ - -# if EVDEV_CALIBRATE -# define EVDEV_HOR_MIN 0 /*to invert axis swap EVDEV_XXX_MIN by EVDEV_XXX_MAX*/ -# define EVDEV_HOR_MAX 4096 /*"evtest" Linux tool can help to get the correct calibraion values>*/ -# define EVDEV_VER_MIN 0 -# define EVDEV_VER_MAX 4096 -# endif /*EVDEV_CALIBRATE*/ -#endif /*USE_EVDEV*/ - -/*------------------------------------------------- - * Full keyboard support for evdev and libinput interface - *------------------------------------------------*/ -# ifndef USE_XKB -# define USE_XKB 0 -# endif - -#if USE_LIBINPUT || USE_BSD_LIBINPUT || USE_EVDEV || USE_BSD_EVDEV -# if USE_XKB -# define XKB_KEY_MAP { .rules = NULL, \ - .model = "pc101", \ - .layout = "us", \ - .variant = NULL, \ - .options = NULL } /*"setxkbmap -query" can help find the right values for your keyboard*/ -# endif /*USE_XKB*/ -#endif /*USE_LIBINPUT || USE_BSD_LIBINPUT || USE_EVDEV || USE_BSD_EVDEV*/ - -/*------------------------------- - * Keyboard of a PC (using SDL) - *------------------------------*/ -/*DEPRECATED: Use the SDL driver instead. */ -#ifndef USE_KEYBOARD -# define USE_KEYBOARD 0 -#endif - -#if USE_KEYBOARD -/*No settings*/ -#endif - -#endif /*LV_DRV_CONF_H*/ - -#endif /*End of "Content enable"*/ diff --git a/src/main.c b/src/main.c index 61bc420..3970690 100644 --- a/src/main.c +++ b/src/main.c @@ -7,93 +7,118 @@ #ifndef MAIN_MESSAGE #define MAIN_MESSAGE "Hello from main!" #endif +#include +#include -// 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); +#include + +// Define MAX and MIN macros +#define MAX(X, Y) (((X) > (Y)) ? (X) : (Y)) +#define MIN(X, Y) (((X) < (Y)) ? (X) : (Y)) + +// Define screen dimensions +#define SCREEN_WIDTH 800 +#define SCREEN_HEIGHT 600 + +int main(int argc, char* argv[]) +{ + // Unused argc, argv + (void) argc; + (void) argv; + + // Initialize SDL + if(SDL_Init(SDL_INIT_VIDEO) < 0) + { + printf("SDL could not be initialized!\n" + "SDL_Error: %s\n", SDL_GetError()); + return 0; } - // Initialisatie LVGL - lv_init(); +#if defined linux && SDL_VERSION_ATLEAST(2, 0, 8) + // Disable compositor bypass + if(!SDL_SetHint(SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR, "0")) + { + printf("SDL can not disable compositor bypass!\n"); + return 0; + } +#endif - // 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); + // Create window + SDL_Window *window = SDL_CreateWindow("Basic C SDL project", + SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, + SCREEN_WIDTH, SCREEN_HEIGHT, + SDL_WINDOW_SHOWN); + if(!window) + { + printf("Window could not be created!\n" + "SDL_Error: %s\n", SDL_GetError()); + } + else + { + // Create renderer + SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); + if(!renderer) + { + printf("Renderer could not be created!\n" + "SDL_Error: %s\n", SDL_GetError()); } - } - SDL_RenderPresent(renderer); + else + { + // Declare rect of square + SDL_Rect squareRect; - lv_disp_flush_ready(disp); -} + // Square dimensions: Half of the min(SCREEN_WIDTH, SCREEN_HEIGHT) + squareRect.w = MIN(SCREEN_WIDTH, SCREEN_HEIGHT) / 2; + squareRect.h = MIN(SCREEN_WIDTH, SCREEN_HEIGHT) / 2; -// Hoofdfunctie -int main(void) { - SDL_Window *window; - SDL_Renderer *renderer; - int width = 800; - int height = 480; + // Square position: In the middle of the screen + squareRect.x = SCREEN_WIDTH / 2 - squareRect.w / 2; + squareRect.y = SCREEN_HEIGHT / 2 - squareRect.h / 2; - 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 exit flag + bool quit = false; - // Event loop - SDL_Event e; - int quit = 0; - while (!quit) { - while (SDL_PollEvent(&e)) { - if (e.type == SDL_QUIT) { - quit = 1; + // Event loop + while(!quit) + { + SDL_Event e; + + // Wait indefinitely for the next available event + SDL_WaitEvent(&e); + + // User requests quit + if(e.type == SDL_QUIT) + { + quit = true; + } + + // Initialize renderer color white for the background + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); + + // Clear screen + SDL_RenderClear(renderer); + + // Set renderer color red to draw the square + SDL_SetRenderDrawColor(renderer, 0xFF, 0x00, 0x00, 0xFF); + + // Draw filled square + SDL_RenderFillRect(renderer, &squareRect); + + // Update screen + SDL_RenderPresent(renderer); } + + // Destroy renderer + SDL_DestroyRenderer(renderer); } - // LVGL taakverwerking - lv_task_handler(); - SDL_Delay(5); + // Destroy window + SDL_DestroyWindow(window); } - // Opruimen en afsluiten - SDL_DestroyRenderer(renderer); - SDL_DestroyWindow(window); + // Quit SDL SDL_Quit(); return 0;