diff --git a/examples/SDL3-simple-demo/CMakeLists.txt b/examples/SDL3-simple-demo/CMakeLists.txt index 4a86f0e..23aef2c 100644 --- a/examples/SDL3-simple-demo/CMakeLists.txt +++ b/examples/SDL3-simple-demo/CMakeLists.txt @@ -34,11 +34,24 @@ message(STATUS "Using SDL_ttf via FetchContent") FetchContent_MakeAvailable(SDL_ttf) set_property(DIRECTORY "${sdl_ttf_SOURCE_DIR}" PROPERTY EXCLUDE_FROM_ALL TRUE) +# Download SDL_image +FetchContent_Declare( + SDL_image + GIT_REPOSITORY "https://github.com/libsdl-org/SDL_image.git" + GIT_TAG main # Slightly risky to use main branch, but it's the only one available + GIT_SHALLOW TRUE + GIT_PROGRESS TRUE +) +message(STATUS "Using SDL_image via FetchContent") +FetchContent_MakeAvailable(SDL_image) +set_property(DIRECTORY "${SDL_image_SOURCE_DIR}" PROPERTY EXCLUDE_FROM_ALL TRUE) + # Example executable add_executable(${PROJECT_NAME} main.c) target_link_libraries(${PROJECT_NAME} PRIVATE SDL3::SDL3 SDL3_ttf::SDL3_ttf + SDL3_image::SDL3_image ) add_custom_command( diff --git a/examples/SDL3-simple-demo/main.c b/examples/SDL3-simple-demo/main.c index 2b89dbb..4da87da 100644 --- a/examples/SDL3-simple-demo/main.c +++ b/examples/SDL3-simple-demo/main.c @@ -21,6 +21,8 @@ typedef struct app_state { SDL_Renderer *renderer; } AppState; +SDL_Surface *sample_image; + static inline Clay_Dimensions SDL_MeasureText(Clay_StringSlice text, Clay_TextElementConfig *config, uintptr_t userData) { TTF_Font *font = gFonts[config->fontId]; @@ -92,6 +94,11 @@ static Clay_RenderCommandArray Clay_CreateLayout() .color = COLOR_LIGHT, }) ) { + CLAY( + CLAY_LAYOUT({ .padding = {8, 8} }), + CLAY_IMAGE({ sample_image, { 23, 42 } }) + ) { } + Label(CLAY_STRING("Rounded - Button 1"), 10); Label(CLAY_STRING("Straight - Button 2") , 0); Label(CLAY_STRING("Rounded+ - Button 3") , 20); @@ -135,6 +142,8 @@ SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[]) gFonts[FONT_ID] = font; + sample_image = IMG_Load("resources/sample.png"); + /* Initialize Clay */ uint64_t totalMemorySize = Clay_MinMemorySize(); Clay_Arena clayMemory = (Clay_Arena) { diff --git a/examples/SDL3-simple-demo/resources/sample.png b/examples/SDL3-simple-demo/resources/sample.png new file mode 100644 index 0000000..2c00828 Binary files /dev/null and b/examples/SDL3-simple-demo/resources/sample.png differ diff --git a/renderers/SDL3/README b/renderers/SDL3/README index 618097f..c26de01 100644 --- a/renderers/SDL3/README +++ b/renderers/SDL3/README @@ -1,4 +1,3 @@ Please note, the SDL3 renderer is not 100% feature complete. It is currently missing: -- Images - Scroll / Scissor handling diff --git a/renderers/SDL3/clay_renderer_SDL3.c b/renderers/SDL3/clay_renderer_SDL3.c index 583c238..4565fcc 100644 --- a/renderers/SDL3/clay_renderer_SDL3.c +++ b/renderers/SDL3/clay_renderer_SDL3.c @@ -2,6 +2,7 @@ #include #include #include +#include /* This needs to be global because the "MeasureText" callback doesn't have a * user data parameter */ @@ -235,6 +236,14 @@ static void SDL_RenderClayCommands(SDL_Renderer *renderer, Clay_RenderCommandArr } } break; + case CLAY_RENDER_COMMAND_TYPE_IMAGE: { + const SDL_Surface *image = (SDL_Surface *)rcmd->config.imageElementConfig->imageData; + const SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, image); + const SDL_FRect dest = { rect.x, rect.y, rect.w, rect.h }; + + SDL_RenderTexture(renderer, texture, NULL, &dest); + break; + } default: SDL_Log("Unknown render command type: %d", rcmd->commandType); }