Compare commits

..

2 Commits

Author SHA1 Message Date
Junior Rantila
7b17d2b5c5
Merge b5b47b2486 into 6a9b723dcc 2024-12-24 10:28:35 +01:00
Junior Rantila
b5b47b2486 Add minimal SDL2 example 2024-12-21 05:27:00 +01:00
3 changed files with 26 additions and 29 deletions

View File

@ -8,5 +8,4 @@ if(NOT MSVC)
add_subdirectory("examples/raylib-sidebar-scrolling-container") add_subdirectory("examples/raylib-sidebar-scrolling-container")
add_subdirectory("examples/cairo-pdf-rendering") add_subdirectory("examples/cairo-pdf-rendering")
add_subdirectory("examples/clay-official-website") add_subdirectory("examples/clay-official-website")
add_subdirectory("examples/minimal-sdl2")
endif() endif()

View File

@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 3.27)
project(minimal_sdl2 C) project(minimal_sdl2 C)
set(CMAKE_C_STANDARD 99) set(CMAKE_C_STANDARD 99)
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)
include(FetchContent) include(FetchContent)
set(FETCHCONTENT_QUIET FALSE) set(FETCHCONTENT_QUIET FALSE)
@ -28,11 +30,7 @@ add_executable(minimal_sdl2 main.c)
target_compile_options(minimal_sdl2 PUBLIC) target_compile_options(minimal_sdl2 PUBLIC)
target_include_directories(minimal_sdl2 PUBLIC .) target_include_directories(minimal_sdl2 PUBLIC .)
target_link_libraries(minimal_sdl2 PUBLIC target_link_libraries(minimal_sdl2 PUBLIC SDL2 SDL2_ttf)
SDL2::SDL2main
SDL2::SDL2-static
SDL2_ttf::SDL2_ttf-static
)
set(CMAKE_CXX_FLAGS_DEBUG "-Wall -Werror -DCLAY_DEBUG") set(CMAKE_CXX_FLAGS_DEBUG "-Wall -Werror -DCLAY_DEBUG")
set(CMAKE_CXX_FLAGS_RELEASE "-O3") set(CMAKE_CXX_FLAGS_RELEASE "-O3")

View File

@ -21,9 +21,9 @@ static void Label(Clay_String text) {
CLAY_RECTANGLE({ .color = Clay_Hovered() ? COLOR_BLUE : COLOR_ORANGE }) CLAY_RECTANGLE({ .color = Clay_Hovered() ? COLOR_BLUE : COLOR_ORANGE })
) { ) {
CLAY_TEXT(text, CLAY_TEXT_CONFIG({ CLAY_TEXT(text, CLAY_TEXT_CONFIG({
.textColor = { 255, 255, 255, 255 },
.fontId = FONT_ID_BODY_24, .fontId = FONT_ID_BODY_24,
.fontSize = 24, .fontSize = 24,
.textColor = { 255, 255, 255, 255 },
})); }));
} }
} }
@ -60,8 +60,8 @@ typedef struct
static Font fonts[1]; static Font fonts[1];
static Clay_Dimensions MeasureText(Clay_String *text, Clay_TextElementConfig *config); static Clay_Dimensions measureText(Clay_String *text, Clay_TextElementConfig *config);
static void Render(SDL_Renderer *renderer, Clay_RenderCommandArray renderCommands); static void render(SDL_Renderer *renderer, Clay_RenderCommandArray renderCommands);
int main(void) { int main(void) {
@ -80,8 +80,8 @@ int main(void) {
return 1; return 1;
} }
fonts[FONT_ID_BODY_24] = (Font) { fonts[FONT_ID_BODY_24] = (Font) {
.fontId = FONT_ID_BODY_24,
.font = font, .font = font,
.fontId = FONT_ID_BODY_24,
}; };
SDL_Window *window = NULL; SDL_Window *window = NULL;
@ -93,16 +93,16 @@ int main(void) {
uint64_t totalMemorySize = Clay_MinMemorySize(); uint64_t totalMemorySize = Clay_MinMemorySize();
Clay_Arena clayMemory = (Clay_Arena) { Clay_Arena clayMemory = (Clay_Arena) {
.label = CLAY_STRING("Clay Memory Arena"), .label = CLAY_STRING("Clay Memory Arena"),
.memory = malloc(totalMemorySize),
.capacity = totalMemorySize, .capacity = totalMemorySize,
.memory = (char *)malloc(totalMemorySize),
}; };
Clay_SetMeasureTextFunction(MeasureText); Clay_SetMeasureTextFunction(measureText);
int windowWidth = 0; int windowWidth = 0;
int windowHeight = 0; int windowHeight = 0;
SDL_GetWindowSize(window, &windowWidth, &windowHeight); SDL_GetWindowSize(window, &windowWidth, &windowHeight);
Clay_Initialize(clayMemory, (Clay_Dimensions) { (float)windowWidth, (float)windowHeight }); Clay_Initialize(clayMemory, (Clay_Dimensions) { windowWidth, windowHeight });
while (true) { while (true) {
SDL_Event event; SDL_Event event;
@ -114,17 +114,17 @@ int main(void) {
int mouseX = 0; int mouseX = 0;
int mouseY = 0; int mouseY = 0;
Uint32 mouseState = SDL_GetMouseState(&mouseX, &mouseY); Uint32 mouseState = SDL_GetMouseState(&mouseX, &mouseY);
Clay_Vector2 mousePosition = (Clay_Vector2){ (float)mouseX, (float)mouseY }; Clay_Vector2 mousePosition = (Clay_Vector2){ mouseX, mouseY };
Clay_SetPointerState(mousePosition, mouseState & SDL_BUTTON(1)); Clay_SetPointerState((Clay_Vector2){ mouseX, mouseY }, mouseState & SDL_BUTTON(1));
SDL_GetWindowSize(window, &windowWidth, &windowHeight); SDL_GetWindowSize(window, &windowWidth, &windowHeight);
Clay_SetLayoutDimensions((Clay_Dimensions) { (float)windowWidth, (float)windowHeight }); Clay_SetLayoutDimensions((Clay_Dimensions) { windowWidth, windowHeight });
Clay_RenderCommandArray renderCommands = CreateLayout(); Clay_RenderCommandArray renderCommands = CreateLayout();
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer); SDL_RenderClear(renderer);
Render(renderer, renderCommands); render(renderer, renderCommands);
SDL_RenderPresent(renderer); SDL_RenderPresent(renderer);
} }
@ -138,7 +138,7 @@ quit:
} }
static Clay_Dimensions MeasureText(Clay_String *text, Clay_TextElementConfig *config) static Clay_Dimensions measureText(Clay_String *text, Clay_TextElementConfig *config)
{ {
TTF_Font *font = fonts[config->fontId].font; TTF_Font *font = fonts[config->fontId].font;
char *chars = (char *)calloc(text->length + 1, 1); char *chars = (char *)calloc(text->length + 1, 1);
@ -154,13 +154,13 @@ static Clay_Dimensions MeasureText(Clay_String *text, Clay_TextElementConfig *co
} }
free(chars); free(chars);
return (Clay_Dimensions) { return (Clay_Dimensions) {
.width = (float)width, .width = width,
.height = (float)height, .height = height,
}; };
} }
static void Render(SDL_Renderer *renderer, Clay_RenderCommandArray renderCommands) static void render(SDL_Renderer *renderer, Clay_RenderCommandArray renderCommands)
{ {
for (uint32_t i = 0; i < renderCommands.length; i++) for (uint32_t i = 0; i < renderCommands.length; i++)
{ {
@ -188,18 +188,18 @@ static void Render(SDL_Renderer *renderer, Clay_RenderCommandArray renderCommand
memcpy(cloned, text.chars, text.length); memcpy(cloned, text.chars, text.length);
TTF_Font* font = fonts[config->fontId].font; TTF_Font* font = fonts[config->fontId].font;
SDL_Surface *surface = TTF_RenderUTF8_Blended(font, cloned, (SDL_Color) { SDL_Surface *surface = TTF_RenderUTF8_Blended(font, cloned, (SDL_Color) {
.r = (Uint8)config->textColor.r, .r = config->textColor.r,
.g = (Uint8)config->textColor.g, .g = config->textColor.g,
.b = (Uint8)config->textColor.b, .b = config->textColor.b,
.a = (Uint8)config->textColor.a, .a = config->textColor.a,
}); });
SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, surface); SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, surface);
SDL_Rect destination = (SDL_Rect){ SDL_Rect destination = (SDL_Rect){
.x = (Uint8)boundingBox.x, .x = boundingBox.x,
.y = (Uint8)boundingBox.y, .y = boundingBox.y,
.w = (Uint8)boundingBox.width, .w = boundingBox.width,
.h = (Uint8)boundingBox.height, .h = boundingBox.height,
}; };
SDL_RenderCopy(renderer, texture, NULL, &destination); SDL_RenderCopy(renderer, texture, NULL, &destination);