mirror of
				https://github.com/nicbarker/clay.git
				synced 2025-11-04 00:26:17 +00:00 
			
		
		
		
	Split into renderer and example
This commit is contained in:
		
							parent
							
								
									713fd67fe8
								
							
						
					
					
						commit
						ecf00251bf
					
				| 
						 | 
				
			
			@ -13,7 +13,7 @@ add_subdirectory("examples/raylib-sidebar-scrolling-container")
 | 
			
		|||
#  add_subdirectory("examples/cairo-pdf-rendering") Some issue with github actions populating cairo, disable for now
 | 
			
		||||
if(NOT MSVC)
 | 
			
		||||
  add_subdirectory("examples/clay-official-website")
 | 
			
		||||
  add_subdirectory("examples/sdl3_renderer")
 | 
			
		||||
  add_subdirectory("examples/SDL3-simple-demo")
 | 
			
		||||
endif()
 | 
			
		||||
add_subdirectory("examples/introducing-clay-video-demo")
 | 
			
		||||
add_subdirectory("examples/SDL2-video-demo")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
cmake_minimum_required(VERSION 3.27)
 | 
			
		||||
 | 
			
		||||
# Project setup
 | 
			
		||||
project(clay_sdl3_renderer C)
 | 
			
		||||
project(clay_examples_sdl3_simple_demo C)
 | 
			
		||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g -Wall -Werror")
 | 
			
		||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3")
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -6,6 +6,8 @@
 | 
			
		|||
#define CLAY_IMPLEMENTATION
 | 
			
		||||
#include "../../clay.h"
 | 
			
		||||
 | 
			
		||||
#include "../../renderers/SDL3/clay_renderer_SDL3.c"
 | 
			
		||||
 | 
			
		||||
static const Uint32 FONT_ID = 0;
 | 
			
		||||
 | 
			
		||||
static const Clay_Color COLOR_ORANGE    = (Clay_Color) {225, 138, 50, 255};
 | 
			
		||||
| 
						 | 
				
			
			@ -17,10 +19,6 @@ typedef struct app_state {
 | 
			
		|||
    SDL_Renderer *renderer;
 | 
			
		||||
} AppState;
 | 
			
		||||
 | 
			
		||||
/* This needs to be global because the "MeasureText" callback doesn't have a
 | 
			
		||||
 * user data parameter */
 | 
			
		||||
static TTF_Font *gFonts[1];
 | 
			
		||||
 | 
			
		||||
static inline Clay_Dimensions SDL_MeasureText(Clay_String *text, Clay_TextElementConfig *config)
 | 
			
		||||
{
 | 
			
		||||
    TTF_Font *font = gFonts[config->fontId];
 | 
			
		||||
| 
						 | 
				
			
			@ -72,39 +70,6 @@ static Clay_RenderCommandArray Clay_CreateLayout()
 | 
			
		|||
    return Clay_EndLayout();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void SDL_RenderClayCommands(SDL_Renderer *renderer, Clay_RenderCommandArray *rcommands)
 | 
			
		||||
{
 | 
			
		||||
    for (size_t i = 0; i < rcommands->length; i++) {
 | 
			
		||||
        Clay_RenderCommand *rcmd = Clay_RenderCommandArray_Get(rcommands, i);
 | 
			
		||||
        Clay_BoundingBox bounding_box = rcmd->boundingBox;
 | 
			
		||||
        SDL_FRect rect = { bounding_box.x, bounding_box.y, bounding_box.width, bounding_box.height };
 | 
			
		||||
 | 
			
		||||
        switch (rcmd->commandType) {
 | 
			
		||||
            case CLAY_RENDER_COMMAND_TYPE_RECTANGLE: {
 | 
			
		||||
                Clay_RectangleElementConfig *config = rcmd->config.rectangleElementConfig;
 | 
			
		||||
                Clay_Color color = config->color;
 | 
			
		||||
                SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, color.a);
 | 
			
		||||
                SDL_RenderFillRect(renderer, &rect);
 | 
			
		||||
            } break;
 | 
			
		||||
            case CLAY_RENDER_COMMAND_TYPE_TEXT: {
 | 
			
		||||
                Clay_TextElementConfig *config = rcmd->config.textElementConfig;
 | 
			
		||||
                Clay_String *text = &rcmd->text;
 | 
			
		||||
                SDL_Color color = { config->textColor.r, config->textColor.g, config->textColor.b, config->textColor.a };
 | 
			
		||||
 | 
			
		||||
                TTF_Font *font = gFonts[config->fontId];
 | 
			
		||||
                SDL_Surface *surface = TTF_RenderText_Blended(font, text->chars, text->length, color);
 | 
			
		||||
                SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, surface);
 | 
			
		||||
                SDL_RenderTexture(renderer, texture, NULL, &rect);
 | 
			
		||||
 | 
			
		||||
                SDL_DestroySurface(surface);
 | 
			
		||||
                SDL_DestroyTexture(texture);
 | 
			
		||||
            } break;
 | 
			
		||||
            default:
 | 
			
		||||
                SDL_Log("Unknown render command type: %d", rcmd->commandType);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void HandleClayErrors(Clay_ErrorData errorData) {
 | 
			
		||||
    printf("%s", errorData.errorText.chars);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -4,6 +4,39 @@
 | 
			
		|||
#include <SDL_image.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
static void SDL_RenderClayCommands(SDL_Renderer *renderer, Clay_RenderCommandArray *rcommands)
 | 
			
		||||
{
 | 
			
		||||
    for (size_t i = 0; i < rcommands->length; i++) {
 | 
			
		||||
        Clay_RenderCommand *rcmd = Clay_RenderCommandArray_Get(rcommands, i);
 | 
			
		||||
        Clay_BoundingBox bounding_box = rcmd->boundingBox;
 | 
			
		||||
        SDL_FRect rect = { bounding_box.x, bounding_box.y, bounding_box.width, bounding_box.height };
 | 
			
		||||
 | 
			
		||||
        switch (rcmd->commandType) {
 | 
			
		||||
            case CLAY_RENDER_COMMAND_TYPE_RECTANGLE: {
 | 
			
		||||
                Clay_RectangleElementConfig *config = rcmd->config.rectangleElementConfig;
 | 
			
		||||
                Clay_Color color = config->color;
 | 
			
		||||
                SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, color.a);
 | 
			
		||||
                SDL_RenderFillRect(renderer, &rect);
 | 
			
		||||
            } break;
 | 
			
		||||
            case CLAY_RENDER_COMMAND_TYPE_TEXT: {
 | 
			
		||||
                Clay_TextElementConfig *config = rcmd->config.textElementConfig;
 | 
			
		||||
                Clay_String *text = &rcmd->text;
 | 
			
		||||
                SDL_Color color = { config->textColor.r, config->textColor.g, config->textColor.b, config->textColor.a };
 | 
			
		||||
 | 
			
		||||
                TTF_Font *font = gFonts[config->fontId];
 | 
			
		||||
                SDL_Surface *surface = TTF_RenderText_Blended(font, text->chars, text->length, color);
 | 
			
		||||
                SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, surface);
 | 
			
		||||
                SDL_RenderTexture(renderer, texture, NULL, &rect);
 | 
			
		||||
 | 
			
		||||
                SDL_DestroySurface(surface);
 | 
			
		||||
                SDL_DestroyTexture(texture);
 | 
			
		||||
            } break;
 | 
			
		||||
            default:
 | 
			
		||||
                SDL_Log("Unknown render command type: %d", rcmd->commandType);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define CLAY_COLOR_TO_SDL_COLOR_ARGS(color) color.r, color.g, color.b, color.a
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										6
									
								
								renderers/SDL3/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								renderers/SDL3/README
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
Please note, the SDL3 renderer is not 100% feature complete. It is currently missing:
 | 
			
		||||
 | 
			
		||||
- Rounded rectangle corners
 | 
			
		||||
- Borders
 | 
			
		||||
- Images
 | 
			
		||||
- Scroll / Scissor handling
 | 
			
		||||
							
								
								
									
										41
									
								
								renderers/SDL3/clay_renderer_SDL3.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								renderers/SDL3/clay_renderer_SDL3.c
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
#include "../../clay.h"
 | 
			
		||||
#include <SDL3/SDL_main.h>
 | 
			
		||||
#include <SDL3/SDL.h>
 | 
			
		||||
#include <SDL3_ttf/SDL_ttf.h>
 | 
			
		||||
 | 
			
		||||
/* This needs to be global because the "MeasureText" callback doesn't have a
 | 
			
		||||
 * user data parameter */
 | 
			
		||||
static TTF_Font *gFonts[1];
 | 
			
		||||
 | 
			
		||||
static void SDL_RenderClayCommands(SDL_Renderer *renderer, Clay_RenderCommandArray *rcommands)
 | 
			
		||||
{
 | 
			
		||||
    for (size_t i = 0; i < rcommands->length; i++) {
 | 
			
		||||
        Clay_RenderCommand *rcmd = Clay_RenderCommandArray_Get(rcommands, i);
 | 
			
		||||
        Clay_BoundingBox bounding_box = rcmd->boundingBox;
 | 
			
		||||
        SDL_FRect rect = { bounding_box.x, bounding_box.y, bounding_box.width, bounding_box.height };
 | 
			
		||||
 | 
			
		||||
        switch (rcmd->commandType) {
 | 
			
		||||
            case CLAY_RENDER_COMMAND_TYPE_RECTANGLE: {
 | 
			
		||||
                Clay_RectangleElementConfig *config = rcmd->config.rectangleElementConfig;
 | 
			
		||||
                Clay_Color color = config->color;
 | 
			
		||||
                SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, color.a);
 | 
			
		||||
                SDL_RenderFillRect(renderer, &rect);
 | 
			
		||||
            } break;
 | 
			
		||||
            case CLAY_RENDER_COMMAND_TYPE_TEXT: {
 | 
			
		||||
                Clay_TextElementConfig *config = rcmd->config.textElementConfig;
 | 
			
		||||
                Clay_String *text = &rcmd->text;
 | 
			
		||||
                SDL_Color color = { config->textColor.r, config->textColor.g, config->textColor.b, config->textColor.a };
 | 
			
		||||
 | 
			
		||||
                TTF_Font *font = gFonts[config->fontId];
 | 
			
		||||
                SDL_Surface *surface = TTF_RenderText_Blended(font, text->chars, text->length, color);
 | 
			
		||||
                SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, surface);
 | 
			
		||||
                SDL_RenderTexture(renderer, texture, NULL, &rect);
 | 
			
		||||
 | 
			
		||||
                SDL_DestroySurface(surface);
 | 
			
		||||
                SDL_DestroyTexture(texture);
 | 
			
		||||
            } break;
 | 
			
		||||
            default:
 | 
			
		||||
                SDL_Log("Unknown render command type: %d", rcmd->commandType);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in a new issue