mirror of
https://github.com/nicbarker/clay.git
synced 2025-04-19 04:38:01 +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
|
# add_subdirectory("examples/cairo-pdf-rendering") Some issue with github actions populating cairo, disable for now
|
||||||
if(NOT MSVC)
|
if(NOT MSVC)
|
||||||
add_subdirectory("examples/clay-official-website")
|
add_subdirectory("examples/clay-official-website")
|
||||||
add_subdirectory("examples/sdl3_renderer")
|
add_subdirectory("examples/SDL3-simple-demo")
|
||||||
endif()
|
endif()
|
||||||
add_subdirectory("examples/introducing-clay-video-demo")
|
add_subdirectory("examples/introducing-clay-video-demo")
|
||||||
add_subdirectory("examples/SDL2-video-demo")
|
add_subdirectory("examples/SDL2-video-demo")
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
cmake_minimum_required(VERSION 3.27)
|
cmake_minimum_required(VERSION 3.27)
|
||||||
|
|
||||||
# Project setup
|
# 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_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g -Wall -Werror")
|
||||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3")
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3")
|
||||||
|
|
@ -6,6 +6,8 @@
|
|||||||
#define CLAY_IMPLEMENTATION
|
#define CLAY_IMPLEMENTATION
|
||||||
#include "../../clay.h"
|
#include "../../clay.h"
|
||||||
|
|
||||||
|
#include "../../renderers/SDL3/clay_renderer_SDL3.c"
|
||||||
|
|
||||||
static const Uint32 FONT_ID = 0;
|
static const Uint32 FONT_ID = 0;
|
||||||
|
|
||||||
static const Clay_Color COLOR_ORANGE = (Clay_Color) {225, 138, 50, 255};
|
static const Clay_Color COLOR_ORANGE = (Clay_Color) {225, 138, 50, 255};
|
||||||
@ -17,10 +19,6 @@ typedef struct app_state {
|
|||||||
SDL_Renderer *renderer;
|
SDL_Renderer *renderer;
|
||||||
} AppState;
|
} 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)
|
static inline Clay_Dimensions SDL_MeasureText(Clay_String *text, Clay_TextElementConfig *config)
|
||||||
{
|
{
|
||||||
TTF_Font *font = gFonts[config->fontId];
|
TTF_Font *font = gFonts[config->fontId];
|
||||||
@ -72,39 +70,6 @@ static Clay_RenderCommandArray Clay_CreateLayout()
|
|||||||
return Clay_EndLayout();
|
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) {
|
void HandleClayErrors(Clay_ErrorData errorData) {
|
||||||
printf("%s", errorData.errorText.chars);
|
printf("%s", errorData.errorText.chars);
|
||||||
}
|
}
|
@ -4,6 +4,39 @@
|
|||||||
#include <SDL_image.h>
|
#include <SDL_image.h>
|
||||||
#include <stdio.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
|
#define CLAY_COLOR_TO_SDL_COLOR_ARGS(color) color.r, color.g, color.b, color.a
|
||||||
|
|
||||||
typedef struct
|
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 New Issue
Block a user