From 9d940c1f8e4a3d38d6f3ecdf51da2990f8b2f5e2 Mon Sep 17 00:00:00 2001 From: Nic Barker Date: Tue, 4 Feb 2025 17:00:19 +1300 Subject: [PATCH] [Core] Replace config macros with a single unified configuration struct (#240) --- .github/workflows/cmake-multi-platform.yml | 3 +- README.md | 1143 ++++++++--------- bindings/odin/build-clay-lib.sh | 6 +- bindings/odin/clay-odin/clay.odin | 213 ++- bindings/odin/clay-odin/linux/clay.a | Bin 196148 -> 167596 bytes bindings/odin/clay-odin/macos-arm64/clay.a | Bin 251976 -> 252160 bytes bindings/odin/clay-odin/macos/clay.a | Bin 166144 -> 139744 bytes bindings/odin/clay-odin/wasm/clay.o | Bin 278900 -> 253760 bytes bindings/odin/clay-odin/windows/clay.lib | Bin 189024 -> 168437 bytes .../clay-official-website.odin | 397 +++--- .../clay_renderer_raylib.odin | 68 +- clay.h | 1075 +++++++++------- examples/SDL2-video-demo/CMakeLists.txt | 6 +- examples/SDL2-video-demo/main.c | 271 +--- examples/SDL3-simple-demo/CMakeLists.txt | 4 +- examples/SDL3-simple-demo/main.c | 77 +- examples/cairo-pdf-rendering/CMakeLists.txt | 5 +- examples/cairo-pdf-rendering/main.c | 102 +- examples/clay-official-website/CMakeLists.txt | 4 +- .../build/clay/index.html | 50 +- .../build/clay/index.wasm | Bin 169799 -> 111977 bytes examples/clay-official-website/index.html | 50 +- examples/clay-official-website/main.c | 269 ++-- examples/cpp-project-example/CMakeLists.txt | 4 +- examples/cpp-project-example/main.cpp | 2 +- .../CMakeLists.txt | 4 +- examples/introducing-clay-video-demo/main.c | 271 +--- examples/raylib-multi-context/CMakeLists.txt | 2 +- examples/raylib-multi-context/main.c | 236 +--- .../CMakeLists.txt | 4 +- .../raylib-sidebar-scrolling-container/main.c | 130 +- .../multi-compilation-unit.c | 6 +- examples/shared-layouts/clay-video-demo.c | 266 ++++ renderers/SDL2/clay_renderer_SDL2.c | 51 +- renderers/SDL3/clay_renderer_SDL3.c | 47 +- renderers/cairo/clay_renderer_cairo.c | 72 +- renderers/raylib/clay_renderer_raylib.c | 77 +- 37 files changed, 2261 insertions(+), 2654 deletions(-) create mode 100644 examples/shared-layouts/clay-video-demo.c diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index 9d13830..59b252b 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -62,7 +62,8 @@ jobs: - name: Install Dependencies if: runner.os == 'Linux' - run: | + run: | + DEBIAN_FRONTEND=noninteractive sudo apt-get update -y DEBIAN_FRONTEND=noninteractive sudo apt-get install -y git DEBIAN_FRONTEND=noninteractive sudo apt-get install -y libwayland-dev DEBIAN_FRONTEND=noninteractive sudo apt-get install -y pkg-config diff --git a/README.md b/README.md index abecac9..8e1c334 100644 --- a/README.md +++ b/README.md @@ -50,13 +50,18 @@ static inline Clay_Dimensions MeasureText(Clay_StringSlice text, Clay_TextElemen } // Layout config is just a struct that can be declared statically, or inline -Clay_LayoutConfig sidebarItemLayout = (Clay_LayoutConfig) { - .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(50) }, +Clay_ElementDeclaration sidebarItemConfig = (Clay_ElementDeclaration) { + .layout = { + .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(50) } + }, + .backgroundColor = COLOR_ORANGE }; // Re-useable components are just normal functions void SidebarItemComponent() { - CLAY(CLAY_LAYOUT(sidebarItemLayout), CLAY_RECTANGLE({ .color = COLOR_ORANGE })) {} + CLAY(sidebarItemConfig) { + // children go here... + } } int main() { @@ -65,6 +70,7 @@ int main() { uint64_t totalMemorySize = Clay_MinMemorySize(); Clay_Arena arena = Clay_CreateArenaWithCapacityAndMemory(totalMemorySize, malloc(totalMemorySize)); + // Note: screenWidth and screenHeight will need to come from your environment, Clay doesn't handle window related tasks Clay_Initialize(arena, (Clay_Dimensions) { screenWidth, screenHeight }, (Clay_ErrorHandler) { HandleClayErrors }); while(renderLoop()) { // Will be different for each renderer / environment @@ -79,13 +85,14 @@ int main() { Clay_BeginLayout(); // An example of laying out a UI with a fixed width sidebar and flexible width main content - CLAY(CLAY_ID("OuterContainer"), CLAY_LAYOUT({ .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0)}, .padding = CLAY_PADDING_ALL(16), .childGap = 16 }), CLAY_RECTANGLE({ .color = {250,250,255,255} })) { - CLAY(CLAY_ID("SideBar"), - CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { .width = CLAY_SIZING_FIXED(300), .height = CLAY_SIZING_GROW(0) }, .padding = CLAY_PADDING_ALL(16), .childGap = 16 }), - CLAY_RECTANGLE({ .color = COLOR_LIGHT }) + CLAY({ .id = CLAY_ID("OuterContainer"), .layout = { .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0)}, .padding = CLAY_PADDING_ALL(16), .childGap = 16 }, .backgroundColor = {250,250,255,255} }) { + CLAY({ + .id = CLAY_ID("SideBar"), + .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { .width = CLAY_SIZING_FIXED(300), .height = CLAY_SIZING_GROW(0) }, .padding = CLAY_PADDING_ALL(16), .childGap = 16 }, + .backgroundColor = COLOR_LIGHT } ) { - CLAY(CLAY_ID("ProfilePictureOuter"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_GROW(0) }, .padding = CLAY_PADDING_ALL(16), .childGap = 16, .childAlignment = { .y = CLAY_ALIGN_Y_CENTER } }), CLAY_RECTANGLE({ .color = COLOR_RED })) { - CLAY(CLAY_ID("ProfilePicture"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_FIXED(60), .height = CLAY_SIZING_FIXED(60) }}), CLAY_IMAGE({ .imageData = &profilePicture, .sourceDimensions = {60, 60} })) {} + CLAY({ .id = CLAY_ID("ProfilePictureOuter"), .layout = { .sizing = { .width = CLAY_SIZING_GROW(0) }, .padding = CLAY_PADDING_ALL(16), .childGap = 16, .childAlignment = { .y = CLAY_ALIGN_Y_CENTER } }, .backgroundColor = COLOR_RED }) { + CLAY({ .id = CLAY_ID("ProfilePicture"), .layout = { .sizing = { .width = CLAY_SIZING_FIXED(60), .height = CLAY_SIZING_FIXED(60) }}, .image = { .imageData = &profilePicture, .sourceDimensions = {60, 60} } }) {} CLAY_TEXT(CLAY_STRING("Clay - UI Library"), CLAY_TEXT_CONFIG({ .fontSize = 24, .textColor = {255, 255, 255, 255} })); } @@ -94,7 +101,7 @@ int main() { SidebarItemComponent(); } - CLAY(CLAY_ID("MainContent"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_GROW(0) }}), CLAY_RECTANGLE({ .color = COLOR_LIGHT })) {} + CLAY({ .id = CLAY_ID("MainContent"), .layout = { .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_GROW(0) } }, .backgroundColor = COLOR_LIGHT }) {} } // All clay layouts are declared between Clay_BeginLayout and Clay_EndLayout @@ -108,7 +115,7 @@ int main() { case CLAY_RENDER_COMMAND_TYPE_RECTANGLE: { DrawRectangle( renderCommand->boundingBox, - renderCommand->config.rectangleElementConfig->color); + renderCommand->renderData.rectangle.backgroundColor); } // ... Implement handling of other command types } @@ -196,33 +203,33 @@ For help starting out or to discuss clay, considering joining [the discord serve ## High Level Documentation ### Building UI Hierarchies -Clay UIs are built using the C macro `CLAY()`. This macro creates a new empty element in the UI hierarchy, and supports modular customisation of layout, styling and functionality. The `CLAY()` macro can also be _nested_, similar to other declarative UI systems like HTML. +Clay UIs are built using the C macro `CLAY({ configuration })`. This macro creates a new empty element in the UI hierarchy, and supports modular customisation of layout, styling and functionality. The `CLAY()` macro can also be _nested_, similar to other declarative UI systems like HTML. Child elements are added by opening a block: `{}` after calling the `CLAY()` macro (exactly like you would with an `if` statement or `for` loop), and declaring child components inside the braces. ```C // Parent element with 8px of padding -CLAY(CLAY_LAYOUT({ .padding = CLAY_PADDING_ALL(8) })) { +CLAY({ .layout = { .padding = CLAY_PADDING_ALL(8) } }) { // Child element 1 CLAY_TEXT(CLAY_STRING("Hello World"), CLAY_TEXT_CONFIG({ .fontSize = 16 })); // Child element 2 with red background - CLAY(CLAY_RECTANGLE({ .color = COLOR_RED })) { + CLAY({ .backgroundColor = COLOR_RED }) { // etc } } ``` -However, unlike HTML and other declarative DSLs, these macros are just C. As a result, you can use arbitrary C code such as loops, functions and conditions inside your layout declaration code: +However, unlike HTML and other declarative DSLs, this macro is just C. As a result, you can use arbitrary C code such as loops, functions and conditions inside your layout declaration code: ```C // Re-usable "components" are just functions that declare more UI void ButtonComponent(Clay_String buttonText) { // Red box button with 8px of padding - CLAY(CLAY_LAYOUT({ .padding = CLAY_PADDING_ALL(8)}), CLAY_RECTANGLE({ .color = COLOR_RED })) { + CLAY({ .layout = { .padding = CLAY_PADDING_ALL(8) }, .backgroundColor = COLOR_RED }) { CLAY_TEXT(buttonText, textConfig); } } // Parent element -CLAY(CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM })) { +CLAY({ .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM } }) { // Render a bunch of text elements for (int i = 0; i < textArray.length; i++) { CLAY_TEXT(textArray.elements[i], textConfig); @@ -240,33 +247,37 @@ CLAY(CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM })) { ``` ### Configuring Layout and Styling UI Elements -The layout of clay elements is configured with the `CLAY_LAYOUT()` macro. +The layout and style of clay elements is configured with the [Clay_ElementDeclaration](#clay_elementdeclaration) struct passed to the `CLAY()` macro. ```C -CLAY(CLAY_LAYOUT({ .padding = { 8, 8, 8, 8 }, .layoutDirection = CLAY_TOP_TO_BOTTOM })) { +CLAY({ .layout = { .padding = { 8, 8, 8, 8 }, .layoutDirection = CLAY_TOP_TO_BOTTOM } }) { // Children are 8px inset into parent, and laid out top to bottom } ``` -This macro isn't magic - all it's doing is wrapping the standard designated initializer syntax and adding the result to an internal array. e.g. `(Clay_LayoutConfig) { .padding = { .left = 8, .right = 8 } ...`. +This macro isn't magic - all it's doing is wrapping the standard designated initializer syntax. e.g. `(Clay_ElementDeclaration) { .layout = { .padding = { .left = 8, .right = 8 } ...`. -See the [Clay_LayoutConfig](#clay_layout) API for the full list of options. +See the [Clay_ElementDeclaration](#clay_elementdeclaration) API for the full list of options. -A `Clay_LayoutConfig` struct can be defined in file scope or elsewhere, and reused. +A `Clay_ElementDeclaration` struct can be defined in file scope or elsewhere, and reused. ```C // Define a style in the global / file scope -Clay_LayoutConfig reusableStyle = (Clay_LayoutConfig) { .backgroundColor = {120, 120, 120, 255} }; +Clay_ElementDeclaration reuseableStyle = (Clay_ElementDeclaration) { + .layout = { .padding = { .left = 12 } }, + .backgroundColor = { 120, 120, 120, 255 }, + .cornerRadius = { 12, 12, 12, 12 } +}; -CLAY(CLAY_LAYOUT(reusableStyle)) { +CLAY(reuseableStyle) { // ... } ``` ### Element IDs -Clay elements can optionally be tagged with a unique identifier using [CLAY_ID()](#clay_id). +Clay elements can optionally be tagged with a unique identifier using the `.id` field of an element declaration, and with the [CLAY_ID()](#clay_id) convenience macro. ```C // Will always produce the same ID from the same input string -CLAY(CLAY_ID("OuterContainer"), style) {} +CLAY({ .id = CLAY_ID("OuterContainer") }) {} ``` Element IDs have two main use cases. Firstly, tagging an element with an ID allows you to query information about the element later, such as its [mouseover state](#clay_pointerover) or dimensions. @@ -277,7 +288,7 @@ To avoid having to construct dynamic strings at runtime to differentiate ids in ```C // This is the equivalent of calling CLAY_ID("Item0"), CLAY_ID("Item1") etc for (int index = 0; index < items.length; index++) { - CLAY(CLAY_IDI("Item", index)) {} + CLAY({ .id = CLAY_IDI("Item", index) }) {} } ``` @@ -295,7 +306,7 @@ The function `bool Clay_Hovered()` can be called during element construction or ```C // An orange button that turns blue when hovered -CLAY(CLAY_RECTANGLE(.color = Clay_Hovered() ? COLOR_BLUE : COLOR_ORANGE)) { +CLAY({ .backgroundColor = Clay_Hovered() ? COLOR_BLUE : COLOR_ORANGE }) { bool buttonHovered = Clay_Hovered(); CLAY_TEXT(buttonHovered ? CLAY_STRING("Hovered") : CLAY_STRING("Hover me!"), headerTextConfig); } @@ -316,7 +327,8 @@ void HandleButtonInteraction(Clay_ElementId elementId, Clay_PointerData pointerI ButtonData linkButton = (ButtonData) { .link = "https://github.com/nicbarker/clay" }; // HandleButtonInteraction will be called for each frame the mouse / pointer / touch is inside the button boundaries -CLAY(CLAY_LAYOUT({ .padding = CLAY_PADDING_ALL(8)}), Clay_OnHover(HandleButtonInteraction, &linkButton)) { +CLAY({ .layout = { .padding = CLAY_PADDING_ALL(8) } }) { + Clay_OnHover(HandleButtonInteraction, &linkButton); CLAY_TEXT(CLAY_STRING("Button"), &headerTextConfig); } ``` @@ -368,31 +380,28 @@ A classic example use case for floating elements is tooltips and modals. ```C // The two text elements will be laid out top to bottom, and the floating container // will be attached to "Outer" -CLAY(CLAY_ID("Outer"), CLAY_LAYOUT({ .layoutDirection = TOP_TO_BOTTOM })) { +CLAY({ .id = CLAY_ID("Outer"), .layout = { .layoutDirection = TOP_TO_BOTTOM } }) { CLAY_TEXT(CLAY_ID("Button"), text, &headerTextConfig); - CLAY(CLAY_ID("Tooltip"), CLAY_FLOATING()) {} + CLAY({ .id = CLAY_ID("Tooltip"), .floating = { .attachTo = CLAY_ATTACH_TO_PARENT } }) {} CLAY_TEXT(CLAY_ID("Button"), text, &headerTextConfig); } ``` -More specific details can be found in the full [Floating API](#clay_floating). +More specific details can be found in the full [Floating API](#clay_floatingelementconfig). ### Laying Out Your Own Custom Elements Clay only supports a simple set of UI element primitives, such as rectangles, text and images. Clay provides a singular API for layout out custom elements: ```C -// Extend CLAY_CUSTOM_ELEMENT_CONFIG with your custom data -#define CLAY_EXTEND_CONFIG_CUSTOM struct t_CustomElementData customData; -// Extensions need to happen _before_ the clay include #include "clay.h" -enum CustomElementType { +typedef enum { CUSTOM_ELEMENT_TYPE_MODEL, CUSTOM_ELEMENT_TYPE_VIDEO -}; +} CustomElementType; // A rough example of how you could handle laying out 3d models in your UI -typedef struct t_CustomElementData { +typedef struct { CustomElementType type; union { Model model; @@ -403,10 +412,22 @@ typedef struct t_CustomElementData { Model myModel = Load3DModel(filePath); CustomElement modelElement = (CustomElement) { .type = CUSTOM_ELEMENT_TYPE_MODEL, .model = myModel } + +typedef struct { + void* memory; + uintptr_t offset; +} Arena; + +// During init +Arena frameArena = (Arena) { .memory = malloc(1024) }; + // ... CLAY(0) { - // This config is type safe and contains the CustomElementData struct - CLAY(CLAY_CUSTOM_ELEMENT({ .customData = { .type = CUSTOM_ELEMENT_TYPE_MODEL, .model = myModel } })) {} + // Custom elements only take a single pointer, so we need to store the data somewhere + CustomElementData *modelData = (CustomElementData *)(frameArena.memory + frameArena.offset); + *modelData = (CustomElementData) { .type = CUSTOM_ELEMENT_TYPE_MODEL, .model = myModel }; + frameArena.offset += sizeof(CustomElementData); + CLAY({ .custom = { .customData = modelData } }) {} } // Later during your rendering @@ -455,11 +476,6 @@ Clay supports C preprocessor directives to modulate functionality at compile tim The supported directives are: - `CLAY_WASM` - Required when targeting Web Assembly. -- `CLAY_DEBUG` - Used for debugging clay's internal implementation. Useful if you want to modify or debug clay, or learn how things work. It enables a number of debug features such as preserving source strings for hash IDs to make debugging easier. -- `CLAY_EXTEND_CONFIG_RECTANGLE` - Provide additional struct members to `CLAY_RECTANGLE` that will be passed through with output render commands. -- `CLAY_EXTEND_CONFIG_TEXT` - Provide additional struct members to `CLAY_TEXT_CONFIG` that will be passed through with output render commands. -- `CLAY_EXTEND_CONFIG_IMAGE` - Provide additional struct members to `CLAY_IMAGE_CONFIG` that will be passed through with output render commands. -- `CLAY_EXTEND_CONFIG_CUSTOM` - Provide additional struct members to `CLAY_CUSTOM_CONFIG` that will be passed through with output render commands. ### Bindings for non C @@ -526,7 +542,7 @@ render(renderCommands2); ### Lifecycle for public functions **At startup / initialization time, run once** -`Clay_MinMemorySize` -> `Clay_CreateArenaWithCapacityAndMemory` -> `Clay_SetMeasureTextFunction` -> `Clay_Initialize` +`Clay_MinMemorySize` -> `Clay_CreateArenaWithCapacityAndMemory` -> `Clay_Initialize` -> `Clay_SetMeasureTextFunction` **Each Frame** `Clay_SetLayoutDimensions` -> `Clay_SetPointerState` -> `Clay_UpdateScrollContainers` -> `Clay_BeginLayout` -> `CLAY() etc...` -> `Clay_EndLayout` @@ -537,7 +553,7 @@ render(renderCommands2); `uint32_t Clay_MinMemorySize()` -Returns the minimum amount of memory **in bytes** that clay needs to accomodate the current [CLAY_MAX_ELEMENT_COUNT](#preprocessor-directives). +Returns the minimum amount of memory **in bytes** that clay needs to accommodate the current [CLAY_MAX_ELEMENT_COUNT](#preprocessor-directives). --- @@ -551,7 +567,7 @@ Creates a `Clay_Arena` struct with the given capacity and base memory pointer, w ### Clay_SetMeasureTextFunction -`void Clay_SetMeasureTextFunction(Clay_Dimensions (*measureTextFunction)(Clay_String *text, Clay_TextElementConfig *config))` +`void Clay_SetMeasureTextFunction(Clay_Dimensions (*measureTextFunction)(Clay_StringSlice text, Clay_TextElementConfig *config, uintptr_t userData), uintptr_t userData)` Takes a pointer to a function that can be used to measure the `width, height` dimensions of a string. Used by clay during layout to determine [CLAY_TEXT](#clay_text) element sizing and wrapping. @@ -686,7 +702,8 @@ void HandleButtonInteraction(Clay_ElementId elementId, Clay_PointerData pointerD ButtonData linkButton = (ButtonData) { .link = "https://github.com/nicbarker/clay" }; // HandleButtonInteraction will be called for each frame the mouse / pointer / touch is inside the button boundaries -CLAY(CLAY_LAYOUT({ .padding = CLAY_PADDING_ALL(8)}), Clay_OnHover(HandleButtonInteraction, &buttonData)) { +CLAY({ .layout = { .padding = CLAY_PADDING_ALL(8) } }) { + Clay_OnHover(HandleButtonInteraction, &buttonData); CLAY_TEXT(CLAY_STRING("Button"), &headerTextConfig); } ``` @@ -727,22 +744,23 @@ Returns a [Clay_ElementId](#clay_elementid) for the provided id string, used for **Notes** **CLAY** opens a generic empty container, that is configurable and supports nested children. -**CLAY** requires at least 1 parameter, so if you want to create an element without any configuration, use `CLAY(0)`. +**CLAY** requires a parameter, so if you want to create an element without any configuration, use `CLAY(0)`. **Examples** ```C // Define an element with 16px of x and y padding -CLAY(CLAY_ID("Outer"), CLAY_LAYOUT({ .padding = CLAY_PADDING_ALL(16) })) { +CLAY({ .id = CLAY_ID("Outer"), .layout = { .padding = CLAY_PADDING_ALL(16) } }) { // A nested child element - CLAY(CLAY_ID("SideBar"), CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 16 })) { + CLAY({ .id = CLAY_ID("SideBar"), .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 16 } }) { // Children laid out top to bottom with a 16 px gap between them } // A vertical scrolling container with a colored background - CLAY( - CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 16 }) - CLAY_RECTANGLE({ .color = { 200, 200, 100, 255 }, .cornerRadius = CLAY_CORNER_RADIUS(10) }) - CLAY_SCROLL({ .vertical = true }) - ) { + CLAY({ + .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 16 }, + .backgroundColor = { 200, 200, 100, 255 }, + .cornerRadius = CLAY_CORNER_RADIUS(10), + .scroll = { .vertical = true } + }) { // child elements } } @@ -750,301 +768,14 @@ CLAY(CLAY_ID("Outer"), CLAY_LAYOUT({ .padding = CLAY_PADDING_ALL(16) })) { --- -### CLAY_ID - -**Usage** - -`CLAY(CLAY_ID(char* idString)) {}` - -**Lifecycle** - -`Clay_BeginLayout()` -> `CLAY(` -> `CLAY_ID()` -> `)` -> `Clay_EndLayout()` - -**Notes** - -**CLAY_ID()** is used to generate and attach a [Clay_ElementId](#clay_elementid) to a layout element during declaration. - -To regenerate the same ID outside of layout declaration when using utility functions such as [Clay_PointerOver](#clay_pointerover), use the [Clay_GetElementId](#clay_getelementid) function. - -**Examples** - -```C -// Tag a button with the Id "Button" -CLAY( - CLAY_ID("Button"), - CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { .width = CLAY_SIZING_GROW(0) }, .padding = CLAY_PADDING_ALL(16), .childGap = 16) }) -) { - // ...children -} - -// Later on outside of layout code -bool buttonIsHovered = Clay_IsPointerOver(Clay_GetElementId("Button")); -if (buttonIsHovered && leftMouseButtonPressed) { - // ... do some click handling -} -``` - ---- - -### CLAY_IDI() - -`Clay_ElementId CLAY_IDI(char *label, int32_t index)` - -An offset version of [CLAY_ID](#clay_id). Generates a [Clay_ElementId](#clay_elementid) string id from the provided `char *label`, combined with the `int index`. Used for generating ids for sequential elements (such as in a `for` loop) without having to construct dynamic strings at runtime. - ---- - -### CLAY_ID_LOCAL() - -**Usage** - -`CLAY(CLAY_ID_LOCAL(char* idString)) {}` - -**Lifecycle** - -`Clay_BeginLayout()` -> `CLAY(` -> `CLAY_ID_LOCAL()` -> `)` -> `Clay_EndLayout()` - -**Notes** - -**CLAY_ID_LOCAL()** is used to generate and attach a [Clay_ElementId](#clay_elementid) to a layout element during declaration. - -Unlike [CLAY_ID](#clay_id) which needs to be globally unique, a local ID is based on the ID of it's parent and only needs to be unique among its siblings. - -As a result, local id is suitable for use in reusable components and loops. - -**Examples** - -```C -void RenderHeaderButton(ButtonData button) { - CLAY( - CLAY_ID_LOCAL("HeaderButton"), - CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { .width = CLAY_SIZING_GROW(0) }, .padding = CLAY_PADDING_ALL(16), .childGap = 16) }) - ) { - // ...children - } -} - -for (int i = 0; i < headerButtons.length; i++) { - RenderHeaderButton(headerButtons.items[i]); -} -``` - ---- - ---- - -### CLAY_IDI_LOCAL() - -`Clay_ElementId CLAY_IDI_LOCAL(char *label, int32_t index)` - -An offset version of [CLAY_ID_LOCAL](#clay_local_id). Generates a [Clay_ElementId](#clay_elementid) string id from the provided `char *label`, combined with the `int index`. Used for generating ids for sequential elements (such as in a `for` loop) without having to construct dynamic strings at runtime. - ---- - -### CLAY_LAYOUT - -**Usage** - -`CLAY(CLAY_LAYOUT(...layout config)) {}` - -**Lifecycle** - -`Clay_BeginLayout()` -> `CLAY(` -> `CLAY_LAYOUT()` -> `)` -> `Clay_EndLayout()` - -**Notes** - -**CLAY_LAYOUT()** is used for configuring _layout_ options (i.e. options that affect the final position and size of an element, its parents, siblings, and children) - -**Struct API (Pseudocode)** - -```C -// CLAY_LAYOUT({ .member = value }) supports these options -Clay_LayoutConfig { - Clay_LayoutDirection layoutDirection = CLAY_LEFT_TO_RIGHT (default) | CLAY_TOP_TO_BOTTOM; - Clay_Padding padding { - u16 left; u16 right; u16 top; u16 bottom; - }; - uint16_t childGap; - Clay_ChildAlignment childAlignment { - .x = CLAY_ALIGN_X_LEFT (default) | CLAY_ALIGN_X_CENTER | CLAY_ALIGN_X_RIGHT; - .y = CLAY_ALIGN_Y_TOP (default) | CLAY_ALIGN_Y_CENTER | CLAY_ALIGN_Y_BOTTOM; - }; - Clay_Sizing sizing { // Recommended to use the provided macros here - see #sizing for more in depth explanation - .width = CLAY_SIZING_FIT(float min, float max) (default) | CLAY_SIZING_GROW(float min, float max) | CLAY_SIZING_FIXED(float width) | CLAY_SIZING_PERCENT(float percent) - .height = CLAY_SIZING_FIT(float min, float max) (default) | CLAY_SIZING_GROW(float min, float max) | CLAY_SIZING_FIXED(float height) | CLAY_SIZING_PERCENT(float percent) - }; // See CLAY_SIZING_GROW() etc for more details -}; -``` -As with all config macros, `CLAY_LAYOUT()` accepts designated initializer syntax and provides default values for any unspecified struct members. - -**Fields** - -**`.layoutDirection`** - `Clay_LayoutDirection` - -`CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM })` - -Controls the axis / direction in which child elements are laid out. Available options are `CLAY_LEFT_TO_RIGHT` (default) and `CLAY_TOP_TO_BOTTOM`. - -_Did you know that "left to right" and "top to bottom" both have 13 letters?_ - -Screenshot 2024-08-22 at 11 10 27 AM - ---- - -**`.padding`** - `Clay_Padding` - -`CLAY_LAYOUT({ .padding = { .left = 16, .right = 16, .top = 8, .bottom = 8 } })` - -Controls white-space "padding" around the **outside** of child elements. - -Screenshot 2024-08-22 at 10 50 49 AM - ---- - -**`.childGap`** - `uint16_t` - -`CLAY_LAYOUT({ .childGap = 16 })` - -Controls the white-space **between** child elements as they are laid out. When `.layoutDirection` is `CLAY_LEFT_TO_RIGHT` (default), this will be horizontal space, whereas for `CLAY_TOP_TO_BOTTOM` it will be vertical space. - -Screenshot 2024-08-22 at 11 05 15 AM - ---- - -**`.childAlignment`** - `Clay_ChildAlignment` - -`CLAY_LAYOUT({ .childAlignment = { .x = CLAY_ALIGN_X_LEFT, .y = CLAY_ALIGN_Y_CENTER } })` - -Controls the alignment of children relative to the height and width of the parent container. Available options are: -```C -.x = CLAY_ALIGN_X_LEFT (default) | CLAY_ALIGN_X_CENTER | CLAY_ALIGN_X_RIGHT; -.y = CLAY_ALIGN_Y_TOP (default) | CLAY_ALIGN_Y_CENTER | CLAY_ALIGN_Y_BOTTOM; -``` - -Screenshot 2024-08-22 at 11 25 16 AM - ---- - -**`.sizing`** - `Clay_Sizing` - -`CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_FIXED(300), .height = CLAY_SIZING_PERCENT(0.5) } })` - -Controls how final width and height of element are calculated. The same configurations are available for both the `.width` and `.height` axis. There are several options: - -- `CLAY_SIZING_FIT(float min, float max) (default)` - The element will be sized to fit its children (plus padding and gaps), up to `max`. If `max` is left unspecified, it will default to `FLOAT_MAX`. When elements are compressed to fit into a smaller parent, this element will not shrink below `min`. - -- `CLAY_SIZING_GROW(float min, float max)` - The element will grow to fill available space in its parent, up to `max`. If `max` is left unspecified, it will default to `FLOAT_MAX`. When elements are compressed to fit into a smaller parent, this element will not shrink below `min`. - -- `CLAY_SIZING_FIXED(float fixed)` - The final size will always be exactly the provided `fixed` value. Shorthand for `CLAY_SIZING_FIT(fixed, fixed)` - -- `CLAY_SIZING_PERCENT(float percent)` - Final size will be a percentage of parent size, minus padding and child gaps. `percent` is assumed to be a float between `0` and `1`. - -Screenshot 2024-08-22 at 2 10 33 PM - -Screenshot 2024-08-22 at 2 19 04 PM - - -**Example Usage** - -```C -CLAY(CLAY_ID("Button"), CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { .width = CLAY_SIZING_GROW(0) }, .padding = CLAY_PADDING_ALL(16, .childGap = 16) }) { - // Children will be laid out vertically with 16px of padding around and between -} -``` - ---- - -### CLAY_RECTANGLE -**Usage** - -`CLAY(CLAY_RECTANGLE(...rectangle config)) {}` - -**Lifecycle** - -`Clay_BeginLayout()` -> `CLAY(` -> `CLAY_RECTANGLE()` -> `)` -> `Clay_EndLayout()` - -**Notes** - -**RECTANGLE** configures a clay element to background-fill its bounding box with a color. It uses `Clay_RectangleElementConfig` for rectangle specific options. - -**Struct API (Pseudocode)** - -```C -// CLAY_RECTANGLE({ .member = value }) supports these options -Clay_RectangleElementConfig { - Clay_Color color { - float r; float g; float b; float a; - }; - float cornerRadius; - - #ifdef CLAY_EXTEND_CONFIG_RECTANGLE - // Contents of CLAY_EXTEND_CONFIG_RECTANGLE will be pasted here - #endif -} -``` - -As with all config macros, `CLAY_RECTANGLE()` accepts designated initializer syntax and provides default values for any unspecified struct members. - -**Extension** - -The underlying `Clay_RectangleElementConfig` can be extended with new members by using: -```C -#define CLAY_EXTEND_CONFIG_RECTANGLE float newField; -#include "clay.h" // Define your extension before including clay.h -``` - -**Fields** - -**`.color`** - `Clay_Color` - -`CLAY_RECTANGLE({ .color = {120, 120, 120, 255} })` - -Conventionally accepts `rgba` float values between 0 and 255, but interpretation is left up to the renderer and does not affect layout. - ---- - -**`.cornerRadius`** - `float` - -`CLAY_RECTANGLE({ .cornerRadius = { .topLeft = 16, .topRight = 16, .bottomLeft = 16, .bottomRight = 16 })` - -Defines the radius in pixels for the arc of rectangle corners (`0` is square, `rectangle.width / 2` is circular). - -Note that the `CLAY_CORNER_RADIUS(radius)` function-like macro is available to provide short hand for setting all four corner radii to the same value. e.g. `CLAY_BORDER({ .cornerRadius = CLAY_CORNER_RADIUS(10) })` - -**Rendering** - -Element is subject to [culling](#visibility-culling). Otherwise, a single `Clay_RenderCommand`s with `commandType = CLAY_RENDER_COMMAND_TYPE_RECTANGLE` will be created, with `renderCommand->elementConfig.rectangleElementConfig` containing a pointer to the element's Clay_RectangleElementConfig. - -**Examples** - -```C -// Declare a reusable rectangle config, with a purple color and 10px rounded corners -Clay_RectangleElementConfig rectangleConfig = (Clay_RectangleElementConfig) { .color = { 200, 200, 100, 255 }, .cornerRadius = CLAY_CORNER_RADIUS(10) }; -// Declare a rectangle element using a reusable config -CLAY(CLAY_RECTANGLE(rectangleConfig)) {} -// Declare a retangle element using an inline config -CLAY(CLAY_RECTANGLE({ .color = { 200, 200, 100, 255 }, .cornerRadius = CLAY_CORNER_RADIUS(10) })) { - // child elements -} -// Declare a scrolling container with a colored background -CLAY( - CLAY_RECTANGLE({ .color = { 200, 200, 100, 255 }, .cornerRadius = CLAY_CORNER_RADIUS(10) }) - CLAY_SCROLL({ .vertical = true }) -) { - // child elements -} -``` - ---- - -### CLAY_TEXT +### CLAY_TEXT() **Usage** `CLAY_TEXT(Clay_String textContents, Clay_TextElementConfig *textConfig);` **Lifecycle** -`Clay_BeginLayout()` -> `CLAY_TEXT()` -> `Clay_EndLayout()` +`Clay_BeginLayout()` -> `CLAY_TEXT()` -> `Clay_EndLayout()` **Notes** @@ -1066,24 +797,12 @@ Clay_TextElementConfig { uint16_t lineHeight; Clay_TextElementConfigWrapMode wrapMode { CLAY_TEXT_WRAP_WORDS (default), - CLAY_TEXT_WRAP_NEWLINES, - CLAY_TEXT_WRAP_NONE, + CLAY_TEXT_WRAP_NEWLINES, + CLAY_TEXT_WRAP_NONE, }; - - #ifdef CLAY_EXTEND_CONFIG_TEXT - // Contents of CLAY_EXTEND_CONFIG_TEXT will be pasted here - #endif + bool hashStringContents }; ``` -As with all config macros, `CLAY_TEXT_CONFIG()` accepts designated initializer syntax and provides default values for any unspecified struct members. - -**Extension** - -The underlying `Clay_TextElementConfig` can be extended with new members by using: -```C -#define CLAY_EXTEND_CONFIG_TEXT float newField; -#include "clay.h" // Define your extension before including clay.h -``` **Fields** @@ -1098,7 +817,7 @@ Conventionally accepts `rgba` float values between 0 and 255, but interpretation **`.fontId`** `CLAY_TEXT_CONFIG(.fontId = FONT_ID_LATO)` - + It's up to the user to load fonts and create a mapping from `fontId` to a font that can be measured and rendered. --- @@ -1141,6 +860,14 @@ Available options are: --- +**`.hashStringContents`** + +`CLAY_TEXT_CONFIG(.hashStringContents = true)` + +By default, clay will cache the dimensions of text measured by [the provided MeasureText function](#clay_setmeasuretextfunction) based on the string's pointer and length. Setting `.hashStringContents = true` will cause Clay to hash the entire string contents. Used to fix incorrect measurements caused by re-use of string memory, disabled by default as it will incur significant performance overhead for very large bodies of text. + +--- + **Examples** ```C @@ -1149,7 +876,7 @@ const uint32_t FONT_ID_LATO = 3; // .. CLAY_TEXT(CLAY_STRING("John Smith"), CLAY_TEXT_CONFIG({ .fontId = FONT_ID_LATO, .fontSize = 24, .textColor = {255, 0, 0, 255} })); // Rendering example -Font fontToUse = LoadedFonts[renderCommand->elementConfig.textElementConfig->fontId]; +Font fontToUse = LoadedFonts[renderCommand->renderData.text->fontId]; ``` **Rendering** @@ -1160,18 +887,264 @@ Element is subject to [culling](#visibility-culling). Otherwise, multiple `Clay_ --- -### CLAY_IMAGE +### CLAY_ID + **Usage** -`CLAY(CLAY_IMAGE(...image config)) {}` +`CLAY(CLAY_ID(char* idString)) {}` **Lifecycle** -`Clay_BeginLayout()` -> `CLAY(` -> `CLAY_IMAGE()` -> `)` -> `Clay_EndLayout()` +`Clay_BeginLayout()` -> `CLAY(` -> `CLAY_ID()` -> `)` -> `Clay_EndLayout()` **Notes** -**IMAGE** configures a clay element to render an image as its background. It uses Clay_ImageElementConfig for image specific options. +**CLAY_ID()** is used to generate and attach a [Clay_ElementId](#clay_elementid) to a layout element during declaration. + +To regenerate the same ID outside of layout declaration when using utility functions such as [Clay_PointerOver](#clay_pointerover), use the [Clay_GetElementId](#clay_getelementid) function. + +**Examples** + +```C +// Tag a button with the Id "Button" +CLAY({ + .id = CLAY_ID("Button"), + .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { .width = CLAY_SIZING_GROW(0) }, .padding = CLAY_PADDING_ALL(16), .childGap = 16 } +}) { + // ...children +} + +// Later on outside of layout code +bool buttonIsHovered = Clay_IsPointerOver(Clay_GetElementId("Button")); +if (buttonIsHovered && leftMouseButtonPressed) { + // ... do some click handling +} +``` + +--- + +### CLAY_IDI() + +`Clay_ElementId CLAY_IDI(char *label, int32_t index)` + +An offset version of [CLAY_ID](#clay_id). Generates a [Clay_ElementId](#clay_elementid) string id from the provided `char *label`, combined with the `int index`. Used for generating ids for sequential elements (such as in a `for` loop) without having to construct dynamic strings at runtime. + +--- + +### CLAY_ID_LOCAL() + +**Usage** + +`CLAY(CLAY_ID_LOCAL(char* idString)) {}` + +**Lifecycle** + +`Clay_BeginLayout()` -> `CLAY(` -> `CLAY_ID_LOCAL()` -> `)` -> `Clay_EndLayout()` + +**Notes** + +**CLAY_ID_LOCAL()** is used to generate and attach a [Clay_ElementId](#clay_elementid) to a layout element during declaration. + +Unlike [CLAY_ID](#clay_id) which needs to be globally unique, a local ID is based on the ID of it's parent and only needs to be unique among its siblings. + +As a result, local id is suitable for use in reusable components and loops. + +**Examples** + +```C +void RenderHeaderButton(ButtonData button) { + CLAY({ + .id = CLAY_ID_LOCAL("HeaderButton"), + .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { .width = CLAY_SIZING_GROW(0) }, .padding = CLAY_PADDING_ALL(16), .childGap = 16 } + }) { + // ...children + } +} + +for (int i = 0; i < headerButtons.length; i++) { + RenderHeaderButton(headerButtons.items[i]); +} +``` + +--- + +### CLAY_IDI_LOCAL() + +`Clay_ElementId CLAY_IDI_LOCAL(char *label, int32_t index)` + +An offset version of [CLAY_ID_LOCAL](#clay_local_id). Generates a [Clay_ElementId](#clay_elementid) string id from the provided `char *label`, combined with the `int index`. Used for generating ids for sequential elements (such as in a `for` loop) without having to construct dynamic strings at runtime. + +--- + +## Data Structures & Definitions + +### Clay_ElementDeclaration +The **Clay_ElementDeclaration** struct is the only argument to the `CLAY()` macro and provides configuration options for layout elements. + +```C +typedef struct { + Clay_ElementId id; + Clay_LayoutConfig layout; + Clay_Color backgroundColor; + Clay_CornerRadius cornerRadius; + Clay_ImageElementConfig image; + Clay_FloatingElementConfig floating; + Clay_CustomElementConfig custom; + Clay_ScrollElementConfig scroll; + Clay_BorderElementConfig border; + uintptr_t userData; +} Clay_ElementDeclaration; +``` + +**Fields** + +**`.color`** - `Clay_Color` + +`.backgroundColor = {120, 120, 120, 255} })` + +Conventionally accepts `rgba` float values between 0 and 255, but interpretation is left up to the renderer and does not affect layout. + +--- + +**`.cornerRadius`** - `float` + +`CLAY_RECTANGLE({ .cornerRadius = { .topLeft = 16, .topRight = 16, .bottomLeft = 16, .bottomRight = 16 })` + +Defines the radius in pixels for the arc of rectangle corners (`0` is square, `rectangle.width / 2` is circular). + +Note that the `CLAY_CORNER_RADIUS(radius)` function-like macro is available to provide short hand for setting all four corner radii to the same value. e.g. `CLAY_BORDER({ .cornerRadius = CLAY_CORNER_RADIUS(10) })` + +**Examples** + +```C +// Declare a reusable rectangle config, with a purple color and 10px rounded corners +Clay_RectangleElementConfig rectangleConfig = (Clay_RectangleElementConfig) { .color = { 200, 200, 100, 255 }, .cornerRadius = CLAY_CORNER_RADIUS(10) }; +// Declare a rectangle element using a reusable config +CLAY(rectangleConfig)) {} +// Declare a retangle element using an inline config +CLAY({ .color = { 200, 200, 100, 255 }, .cornerRadius = CLAY_CORNER_RADIUS(10) })) { + // child elements +} +// Declare a scrolling container with a colored background +CLAY({ + .backgroundColor = { 200, 200, 100, 255 }, + .cornerRadius = CLAY_CORNER_RADIUS(10) + CLAY_SCROLL({ .vertical = true }) +) { + // child elements +} +``` + +Element is subject to [culling](#visibility-culling). Otherwise, a single `Clay_RenderCommand`s with `commandType = CLAY_RENDER_COMMAND_TYPE_RECTANGLE` will be created, with `renderCommand->elementConfig.rectangleElementConfig` containing a pointer to the element's Clay_RectangleElementConfig. + +### Clay_LayoutConfig + +**Clay_LayoutConfig** is used for configuring _layout_ options (i.e. options that affect the final position and size of an element, its parents, siblings, and children) + +**Struct API (Pseudocode)** + +```C +// CLAY({ .layout = { ...fields } }) supports these options +Clay_LayoutConfig { + Clay_LayoutDirection layoutDirection = CLAY_LEFT_TO_RIGHT (default) | CLAY_TOP_TO_BOTTOM; + Clay_Padding padding { + u16 left; u16 right; u16 top; u16 bottom; + }; + uint16_t childGap; + Clay_ChildAlignment childAlignment { + .x = CLAY_ALIGN_X_LEFT (default) | CLAY_ALIGN_X_CENTER | CLAY_ALIGN_X_RIGHT; + .y = CLAY_ALIGN_Y_TOP (default) | CLAY_ALIGN_Y_CENTER | CLAY_ALIGN_Y_BOTTOM; + }; + Clay_Sizing sizing { // Recommended to use the provided macros here - see #sizing for more in depth explanation + .width = CLAY_SIZING_FIT(float min, float max) (default) | CLAY_SIZING_GROW(float min, float max) | CLAY_SIZING_FIXED(float width) | CLAY_SIZING_PERCENT(float percent) + .height = CLAY_SIZING_FIT(float min, float max) (default) | CLAY_SIZING_GROW(float min, float max) | CLAY_SIZING_FIXED(float height) | CLAY_SIZING_PERCENT(float percent) + }; // See CLAY_SIZING_GROW() etc for more details +}; +``` + +**Fields** + +**`.layoutDirection`** - `Clay_LayoutDirection` + +`CLAY({ .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM } })` + +Controls the axis / direction in which child elements are laid out. Available options are `CLAY_LEFT_TO_RIGHT` (default) and `CLAY_TOP_TO_BOTTOM`. + +_Did you know that "left to right" and "top to bottom" both have 13 letters?_ + +Screenshot 2024-08-22 at 11 10 27 AM + +--- + +**`.padding`** - `Clay_Padding` + +`CLAY({ .layout = { .padding = { .left = 16, .right = 16, .top = 8, .bottom = 8 } } })` + +Controls white-space "padding" around the **outside** of child elements. + +Screenshot 2024-08-22 at 10 50 49 AM + +--- + +**`.childGap`** - `uint16_t` + +`CLAY({ .layout = { .childGap = 16 } })` + +Controls the white-space **between** child elements as they are laid out. When `.layoutDirection` is `CLAY_LEFT_TO_RIGHT` (default), this will be horizontal space, whereas for `CLAY_TOP_TO_BOTTOM` it will be vertical space. + +Screenshot 2024-08-22 at 11 05 15 AM + +--- + +**`.childAlignment`** - `Clay_ChildAlignment` + +`CLAY({ .layout = { .childAlignment = { .x = CLAY_ALIGN_X_LEFT, .y = CLAY_ALIGN_Y_CENTER } } })` + +Controls the alignment of children relative to the height and width of the parent container. Available options are: +```C +.x = CLAY_ALIGN_X_LEFT (default) | CLAY_ALIGN_X_CENTER | CLAY_ALIGN_X_RIGHT; +.y = CLAY_ALIGN_Y_TOP (default) | CLAY_ALIGN_Y_CENTER | CLAY_ALIGN_Y_BOTTOM; +``` + +Screenshot 2024-08-22 at 11 25 16 AM + +--- + +**`.sizing`** - `Clay_Sizing` + +`CLAY({ .layout = { .sizing = { .width = CLAY_SIZING_FIXED(300), .height = CLAY_SIZING_PERCENT(0.5) } } })` + +Controls how final width and height of element are calculated. The same configurations are available for both the `.width` and `.height` axis. There are several options: + +- `CLAY_SIZING_FIT(float min, float max) (default)` - The element will be sized to fit its children (plus padding and gaps), up to `max`. If `max` is left unspecified, it will default to `FLOAT_MAX`. When elements are compressed to fit into a smaller parent, this element will not shrink below `min`. + +- `CLAY_SIZING_GROW(float min, float max)` - The element will grow to fill available space in its parent, up to `max`. If `max` is left unspecified, it will default to `FLOAT_MAX`. When elements are compressed to fit into a smaller parent, this element will not shrink below `min`. + +- `CLAY_SIZING_FIXED(float fixed)` - The final size will always be exactly the provided `fixed` value. Shorthand for `CLAY_SIZING_FIT(fixed, fixed)` + +- `CLAY_SIZING_PERCENT(float percent)` - Final size will be a percentage of parent size, minus padding and child gaps. `percent` is assumed to be a float between `0` and `1`. + +Screenshot 2024-08-22 at 2 10 33 PM + +Screenshot 2024-08-22 at 2 19 04 PM + + +**Example Usage** + +```C +CLAY({ .id = CLAY_ID("Button"), .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { .width = CLAY_SIZING_GROW(0) }, .padding = CLAY_PADDING_ALL(16, .childGap = 16) } }) { + // Children will be laid out vertically with 16px of padding around and between +} +``` + +--- + +### Clay_ImageElementConfig +**Usage** + +`CLAY({ .image = { ...image config } }) {}` + +**Clay_ImageElementConfig** configures a clay element to render an image as its background. **Struct API (Pseudocode)** @@ -1180,30 +1153,15 @@ Clay_ImageElementConfig { Clay_Dimensions sourceDimensions { float width; float height; }; - // -- - #ifndef CLAY_EXTEND_CONFIG_IMAGE - void * imageData; // Note: This field will be replaced if #define CLAY_EXTEND_CONFIG_IMAGE is specified - #else CLAY_EXTEND_CONFIG_IMAGE - // Contents of CLAY_EXTEND_CONFIG_IMAGE will be pasted here - #endif + void * imageData; }; ``` -As with all config macros, `CLAY_IMAGE_CONFIG()` accepts designated initializer syntax and provides default values for any unspecified struct members. - -**Extension** - -The underlying `Clay_ImageElementConfig` can be extended with new members by using: -```C -#define CLAY_EXTEND_CONFIG_IMAGE float newField; -#include "clay.h" // Define your extension before including clay.h -``` - **Fields** **`.sourceDimensions`** - `Clay_Dimensions` -`CLAY_IMAGE_CONFIG(.sourceDimensions = { 1024, 768 })` +`CLAY({ .image = { .sourceDimensions = { 1024, 768 } } }) {}` Used to perform **aspect ratio scaling** on the image element. As of this version of clay, aspect ratio scaling only applies to the `height` of an image (i.e. image height will scale with width growth and limitations, but width will not scale with height growth and limitations) @@ -1211,31 +1169,15 @@ Used to perform **aspect ratio scaling** on the image element. As of this versio **`.imageData`** - `void *` -`CLAY_IMAGE_CONFIG(.imageData = &myImage)` +`CLAY({ .image = { .imageData = &myImage } }) {}` -`.imageData` is a generic void pointer that can be used to pass through image data to the renderer. **Note:** this field is generally not recommended for usage due to the lack of type safety, see `#define CLAY_EXTEND_CONFIG_IMAGE` in [Preprocessor Directives](#preprocessor-directives) for an alternative. +`.imageData` is a generic void pointer that can be used to pass through image data to the renderer. ```C // Load an image somewhere in your code Image profilePicture = LoadImage("profilePicture.png"); // Note that when rendering, .imageData will be void* type. -CLAY(CLAY_IMAGE({ .imageData = &profilePicture, .sourceDimensions = { 60, 60 } })) {} - -// OR ---------------- - -// Extend CLAY_CUSTOM_IMAGE_CONFIG with your custom image format -#define CLAY_EXTEND_CONFIG_IMAGE struct t_Image image; -// Extensions need to happen _before_ the clay include -#include "clay.h" - -typedef struct t_Image { - ImageFormat format; - u8int_t *internalData; - // ... etc -} Image; - -// You can now use CLAY_IMAGE with your custom type and still have type safety & code completion -CLAY(CLAY_IMAGE({ .image = { .format = IMAGE_FORMAT_RGBA, .internalData = &imageData }, .sourceDimensions = { 60, 60 } })) {} +CLAY({ .image = { .imageData = &profilePicture, .sourceDimensions = { 60, 60 } } }) {} ``` **Examples** @@ -1246,31 +1188,28 @@ Image profilePicture = LoadImage("profilePicture.png"); // Declare a reusable image config Clay_ImageElementConfig imageConfig = (Clay_ImageElementConfig) { .imageData = &profilePicture, .sourceDimensions = {60, 60} }; // Declare an image element using a reusable config -CLAY(CLAY_IMAGE(imageConfig)) {} +CLAY({ .image = imageConfig }) {} // Declare an image element using an inline config -CLAY(CLAY_IMAGE({ .imageData = &profilePicture, .sourceDimensions = {60, 60} })) {} +CLAY({ .image = { .imageData = &profilePicture, .sourceDimensions = {60, 60} } }) {} // Rendering example Image *imageToRender = renderCommand->elementConfig.imageElementConfig->imageData; ``` **Rendering** -Element is subject to [culling](#visibility-culling). Otherwise, a single `Clay_RenderCommand`s with `commandType = CLAY_RENDER_COMMAND_TYPE_IMAGE` will be created. The user will need to access `renderCommand->elementConfig.imageElementConfig->imageData` to retrieve image data referenced during layout creation. It's also up to the user to decide how / if they wish to blend `rectangleElementConfig->color` with the image. +Element is subject to [culling](#visibility-culling). Otherwise, a single `Clay_RenderCommand`s with `commandType = CLAY_RENDER_COMMAND_TYPE_IMAGE` will be created. The user will need to access `renderCommand->renderData.image->imageData` to retrieve image data referenced during layout creation. It's also up to the user to decide how / if they wish to blend `renderCommand->renderData.image->backgroundColor` with the image. --- -### CLAY_SCROLL +### Clay_ScrollElementConfig + **Usage** -`CLAY(CLAY_SCROLL(...scroll config)) {}` - -**Lifecycle** - -`Clay_SetPointerState()` -> `Clay_UpdateScrollContainers()` -> `Clay_BeginLayout()` -> `CLAY(` -> `CLAY_SCROLL()` -> `)` -> `Clay_EndLayout()` +`CLAY({ .scroll = { ...scroll config } }) {}` **Notes** -**SCROLL** configures the element as a scrolling container, enabling masking of children that extend beyond its boundaries. It uses `Clay_ScrollElementConfig` to configure scroll specific options. +`Clay_ScrollElementConfig` configures the element as a scrolling container, enabling masking of children that extend beyond its boundaries. Note: In order to process scrolling based on pointer position and mouse wheel or touch interactions, you must call `Clay_SetPointerState()` and `Clay_UpdateScrollContainers()` _before_ calling `BeginLayout`. @@ -1283,13 +1222,11 @@ Clay_ScrollElementConfig { }; ``` -As with all config macros, `CLAY_SCROLL()` accepts designated initializer syntax and provides default values for any unspecified struct members. - **Fields** **`.horizontal`** - `bool` -`CLAY_SCROLL(.horizontal = true)` +`CLAY({ .scroll = { .horizontal = true } })` Enables or disables horizontal scrolling for this container element. @@ -1297,7 +1234,7 @@ Enables or disables horizontal scrolling for this container element. **`.vertical`** - `bool` -`CLAY_SCROLL(.vertical = true)` +`CLAY({ .scroll = { .vertical = true } })` Enables or disables vertical scrolling for this container element. @@ -1312,118 +1249,94 @@ Enabling scroll for an element will result in two additional render commands: **Examples** ```C -CLAY(CLAY_SCROLL(.vertical = true)) { +CLAY({ .scroll = { .vertical = true } }) { // Create child content with a fixed height of 5000 - CLAY(CLAY_ID("ScrollInner"), CLAY_LAYOUT({ .sizing = { .height = CLAY_SIZING_FIXED(5000) } })) {} + CLAY({ .id = CLAY_ID("ScrollInner"), .layout = { .sizing = { .height = CLAY_SIZING_FIXED(5000) } } }) {} } ``` --- -### CLAY_BORDER +### Clay_BorderElementConfig + **Usage** -`CLAY(CLAY_BORDER(...border config)) {}` - -**Lifecycle** - -`Clay_BeginLayout()` -> `CLAY(` -> `CLAY_BORDER()` -> `)` -> `Clay_EndLayout()` +`CLAY({ .border = { ...border config } }) {}` **Notes** -**BORDER** adds borders to the edges or between the children of elements. It uses Clay_BorderElementConfig to configure border specific options. +`Clay_BorderElementConfig` adds borders to the edges or between the children of elements. It uses Clay_BorderElementConfig to configure border specific options. **Struct Definition (Pseudocode)** ```C typedef struct Clay_BorderElementConfig { - Clay_Border left { - float width; - Clay_Color color { - float r; float g; float b; float a; - }; + Clay_Color color { + float r; float g; float b; float a; }; - Clay_Border right // Exactly the same as left - Clay_Border top // Exactly the same as left - Clay_Border bottom // Exactly the same as left - Clay_Border betweenChildren // Exactly the same as left - Clay_CornerRadius cornerRadius { - float topLeft; - float topRight; - float bottomLeft; - float bottomRight; + Clay_BorderWidth width { + uint16_t left; + uint16_t right; + uint16_t top; + uint16_t bottom; + uint16_t betweenChildren; }; } Clay_BorderElementConfig; ``` -**Usage** - -As with all config macros, `CLAY_BORDER()` accepts designated initializer syntax and provides default values for any unspecified struct members. - **Fields** -**`.left, .right, .top, .bottom`** - `Clay_Border` +**`.width`** - `Clay_BorderWidth` -`CLAY_BORDER({ .left = { 2, COLOR_RED }, .right = { 4, COLOR_YELLOW } /* etc */ })` +`CLAY({ .border = { .width = { .left = 2, .right = 10 } } })` -Indicates to the renderer that a border of `.color` should be draw at the specified edges of the bounding box, **overlapping the box contents by `.width`**. +Indicates to the renderer that a border of `.color` should be draw at the specified edges of the bounding box, **inset and overlapping the box contents by `.width`**. This means that border configuration does not affect layout, as the width of the border doesn't contribute to the total container width or layout position. Border containers with zero padding will be drawn over the top of child elements. ---- +Note: -**`.betweenChildren`** - `Clay_Border` +**`.width.betweenChildren`** -`CLAY_BORDER({ .betweenChildren = { 2, COLOR_RED } })` +`CLAY({ .border = { .width = { .betweenChildren = 2 } }, .color = COLOR_RED })` Configures the width and color of borders to be drawn between children. These borders will be vertical lines if the parent uses `.layoutDirection = CLAY_LEFT_TO_RIGHT` and horizontal lines if the parent uses `CLAY_TOP_TO_BOTTOM`. Unlike `.left, .top` etc, this option **will generate additional rectangle render commands representing the borders between children.** As a result, the renderer does not need to specifically implement rendering for these border elements. --- -**`.cornerRadius`** - `float` +**`.color`** - `Clay_Color` -`CLAY_BORDER({ .cornerRadius = 16 })` +`CLAY({ .border = { .color = { 255, 0, 0, 255 } } })` Defines the radius in pixels for the arc of border corners (`0` is square, `rectangle.width / 2` is circular). It is up to the renderer to decide how to interpolate between differing border widths and colors across shared corners. -Note that the `CLAY_CORNER_RADIUS(radius)` function-like macro is available to provide short hand for setting all four corner radii to the same value. e.g. `CLAY_BORDER(.cornerRadius = CLAY_CORNER_RADIUS(10))` - -**Convenience Macros** - -There are some common cases for border configuration that are repetitive, i.e. specifying the same border around all four edges. Some convenience macros are provided for these cases: - -- `CLAY_BORDER_CONFIG_OUTSIDE({ .width = 2, .color = COLOR_RED })` - Shorthand for configuring all 4 outside borders at once.` -- `CLAY_BORDER_CONFIG_OUTSIDE_RADIUS(width, color, radius)` - Shorthand for configuring all 4 outside borders at once, with the provided `.cornerRadius`. Note this is a function-like macro and does not take `.member = value` syntax. -- `CLAY_BORDER_CONFIG_ALL({ .width = 2, .color = COLOR_RED })` - Shorthand for configuring all 4 outside borders and `.betweenChildren` at once. -- `CLAY_BORDER_CONFIG_ALL_RADIUS(width, color, radius)` - Shorthand for configuring all 4 outside borders and `.betweenChildren` at once, with the provided `cornerRadius`. Note this is a function-like macro and does not take `.member = value` syntax. - **Examples** ```C // 300x300 container with a 1px red border around all the edges -CLAY( - CLAY_ID("OuterBorder"), - CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_FIXED(300), .height = CLAY_SIZING_FIXED(300)}), - CLAY_BORDER_CONFIG_OUTSIDE({ .color = COLOR_RED, .width = 1 }) -) { +CLAY({ + .id = CLAY_ID("OuterBorder"), + .layout = { .sizing = { .width = CLAY_SIZING_FIXED(300), .height = CLAY_SIZING_FIXED(300) } }, + .border = { .width = { 1, 1, 1, 1, 0 }, .color = COLOR_RED } +}) { // ... } // Container with a 3px yellow bottom border -CLAY( - CLAY_ID("OuterBorder"), - CLAY_BORDER({ .bottom = { .color = COLOR_YELLOW, .width = 3 } }) -) { +CLAY({ + .id = CLAY_ID("OuterBorder"), + .border = { .width = { .bottom = 3 }, .color = COLOR_YELLOW } +}) { // ... } // Container with a 5px curved border around the edges, and a 5px blue border between all children laid out top to bottom -CLAY( - CLAY_ID("OuterBorder"), - CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM }), - CLAY_BORDER_CONFIG_ALL_RADIUS(5, COLOR_BLUE, 5) -) { +CLAY({ + .id = CLAY_ID("OuterBorder"), + .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM }, + .border = { .width = { 5, 5, 5, 5, 5 }, .color = COLOR_BLUE } +}) { // Child // -- 5px blue border will be here -- // Child @@ -1439,18 +1352,15 @@ Rendering of borders and rounded corners is left up to the user. See the provide --- -### CLAY_FLOATING +### Clay_FloatingElementConfig + **Usage** -`CLAY(CLAY_FLOATING(...floating config)) {}` - -**Lifecycle** - -`Clay_BeginLayout()` -> `CLAY(` -> `CLAY_FLOATING()` -> `)` -> `Clay_EndLayout()` +`CLAY({ .floating = { ...floating config } }) {}` **Notes** -**FLOATING** defines an element that "floats" above other content. Typical use-cases include tooltips and modals. +**Floating Elements** defines an element that "floats" above other content. Typical use-cases include tooltips and modals. Floating containers: @@ -1458,13 +1368,13 @@ Floating containers: - Don't affect the width and height of their parent - Don't affect the positioning of sibling elements - Depending on their z-index can appear above or below other elements, partially or completely occluding them -- Apart from positioning, function just like standard `CLAY` elements - including expanding to fit their children, etc. +- Apart from positioning, function just like standard elements - including expanding to fit their children, etc. The easiest mental model to use when thinking about floating containers is that they are a completely separate UI hierarchy, attached to a specific x,y point on their "parent". Floating elements uses `Clay_FloatingElementConfig` to configure specific options. -**Struct Definition (Pseudocode)** +**Struct Definition (Pseudocode)** ```C Clay_FloatingElementConfig { @@ -1474,26 +1384,30 @@ Clay_FloatingElementConfig { Clay_Dimensions expand { float width, float height }; - uint16_t zIndex; uint32_t parentId; - Clay_FloatingAttachPoints attachment { + int16_t zIndex; + Clay_FloatingAttachPoints attachPoint { .element = CLAY_ATTACH_POINT_LEFT_TOP (default) | CLAY_ATTACH_POINT_LEFT_CENTER | CLAY_ATTACH_POINT_LEFT_BOTTOM | CLAY_ATTACH_POINT_CENTER_TOP | CLAY_ATTACH_POINT_CENTER_CENTER | CLAY_ATTACH_POINT_CENTER_BOTTOM | CLAY_ATTACH_POINT_RIGHT_TOP | CLAY_ATTACH_POINT_RIGHT_CENTER | CLAY_ATTACH_POINT_RIGHT_BOTTOM .parent = CLAY_ATTACH_POINT_LEFT_TOP (default) | CLAY_ATTACH_POINT_LEFT_CENTER | CLAY_ATTACH_POINT_LEFT_BOTTOM | CLAY_ATTACH_POINT_CENTER_TOP | CLAY_ATTACH_POINT_CENTER_CENTER | CLAY_ATTACH_POINT_CENTER_BOTTOM | CLAY_ATTACH_POINT_RIGHT_TOP | CLAY_ATTACH_POINT_RIGHT_CENTER | CLAY_ATTACH_POINT_RIGHT_BOTTOM }; - Clay_PointerCaptureMode captureMode { + Clay_FloatingAttachToElement attachTo { CLAY_POINTER_CAPTURE_MODE_CAPTURE (default), CLAY_POINTER_CAPTURE_MODE_PASSTHROUGH }; + Clay_FloatingAttachToElement attachTo { + CLAY_ATTACH_TO_NONE (default), + CLAY_ATTACH_TO_PARENT, + CLAY_ATTACH_TO_ELEMENT_WITH_ID, + CLAY_ATTACH_TO_ROOT, + }; }; ``` -As with all config macros, `CLAY_FLOATING()` accepts designated initializer syntax and provides default values for any unspecified struct members. - **Fields** **`.offset`** - `Clay_Vector2` -`CLAY_FLOATING({ .offset = { -24, -24 } })` +`CLAY({ .floating = { .offset = { -24, -24 } } })` Used to apply a position offset to the floating container _after_ all other layout has been calculated. @@ -1501,7 +1415,7 @@ Used to apply a position offset to the floating container _after_ all other layo **`.expand`** - `Clay_Dimensions` -`CLAY_FLOATING({ .expand = { 16, 16 } })` +`CLAY({ .floating = { .expand = { 16, 16 } } })` Used to expand the width and height of the floating container _before_ laying out child elements. @@ -1509,7 +1423,7 @@ Used to expand the width and height of the floating container _before_ laying ou **`.zIndex`** - `float` -`CLAY_FLOATING({ .zIndex = 1 })` +`CLAY({ .floating = { .zIndex = 1 } })` All floating elements (as well as their entire child hierarchies) will be sorted by `.zIndex` order before being converted to render commands. If render commands are drawn in order, elements with higher `.zIndex` values will be drawn on top. @@ -1517,41 +1431,41 @@ All floating elements (as well as their entire child hierarchies) will be sorted **`.parentId`** - `uint32_t` -`CLAY_FLOATING({ .parentId = Clay_GetElementId("HeaderButton").id })` +`CLAY({ .floating = { .parentId = Clay_GetElementId("HeaderButton").id } })` By default, floating containers will "attach" to the parent element that they are declared inside. However, there are cases where this limitation could cause significant performance or ergonomics problems. `.parentId` allows you to specify a `CLAY_ID().id` to attach the floating container to. The parent element with the matching id can be declared anywhere in the hierarchy, it doesn't need to be declared before or after the floating container in particular. Consider the following case: ```C // Load an image somewhere in your code -CLAY(CLAY_IDI("SidebarButton", 1), &CLAY_LAYOUT_DEFAULT) { +CLAY({ .id = CLAY_IDI("SidebarButton", 1) }) { // .. some button contents if (tooltip.attachedButtonIndex == 1) { - CLAY_FLOATING(/* floating config... */) + CLAY({ /* floating config... */ }) } } -CLAY(CLAY_IDI("SidebarButton", 2), &CLAY_LAYOUT_DEFAULT) { +CLAY({ .id = CLAY_IDI("SidebarButton", 2) }) { // .. some button contents if (tooltip.attachedButtonIndex == 2) { - CLAY_FLOATING(/* floating config... */) + CLAY({ /* floating config... */ }) } } -CLAY(CLAY_IDI("SidebarButton", 3), &CLAY_LAYOUT_DEFAULT) { +CLAY({ .id = CLAY_IDI("SidebarButton", 3) }) { // .. some button contents if (tooltip.attachedButtonIndex == 3) { - CLAY_FLOATING(/* floating config... */) + CLAY({ /* floating config... */ }) } } -CLAY(CLAY_IDI("SidebarButton", 4), &CLAY_LAYOUT_DEFAULT) { +CLAY({ .id = CLAY_IDI("SidebarButton", 4) }) { // .. some button contents if (tooltip.attachedButtonIndex == 4) { - CLAY_FLOATING(/* floating config... */) + CLAY({ /* floating config... */ }) } } -CLAY(CLAY_IDI("SidebarButton", 5), &CLAY_LAYOUT_DEFAULT) { +CLAY({ .id = CLAY_IDI("SidebarButton", 5) }) { // .. some button contents if (tooltip.attachedButtonIndex == 5) { - CLAY_FLOATING(/* floating config... */) + CLAY({ /* floating config... */ }) } } ``` @@ -1560,24 +1474,24 @@ The definition of the above UI is significantly polluted by the need to conditio ```C // Load an image somewhere in your code -CLAY(CLAY_IDI("SidebarButton", 1), &CLAY_LAYOUT_DEFAULT) { +CLAY({ .id = CLAY_IDI("SidebarButton", 1) }) { // .. some button contents } -CLAY(CLAY_IDI("SidebarButton", 2), &CLAY_LAYOUT_DEFAULT) { +CLAY({ .id = CLAY_IDI("SidebarButton", 2) }) { // .. some button contents } -CLAY(CLAY_IDI("SidebarButton", 3), &CLAY_LAYOUT_DEFAULT) { +CLAY({ .id = CLAY_IDI("SidebarButton", 3) }) { // .. some button contents } -CLAY(CLAY_IDI("SidebarButton", 4), &CLAY_LAYOUT_DEFAULT) { +CLAY({ .id = CLAY_IDI("SidebarButton", 4) }) { // .. some button contents } -CLAY(CLAY_IDI("SidebarButton", 5), &CLAY_LAYOUT_DEFAULT) { +CLAY({ .id = CLAY_IDI("SidebarButton", 5) }) { // .. some button contents } // Any other point in the hierarchy -CLAY_FLOATING(CLAY_ID("OptionTooltip"), &CLAY_LAYOUT_DEFAULT, CLAY_FLOATING(.parentId = CLAY_IDI("SidebarButton", tooltip.attachedButtonIndex).id)) { +CLAY({ .id = CLAY_ID("OptionTooltip"), .floating = { .attachTo = CLAY_ATTACH_TO_ELEMENT_ID, .parentId = CLAY_IDI("SidebarButton", tooltip.attachedButtonIndex).id }) { // Tooltip contents... } ``` @@ -1586,7 +1500,7 @@ CLAY_FLOATING(CLAY_ID("OptionTooltip"), &CLAY_LAYOUT_DEFAULT, CLAY_FLOATING(.par **`.attachment`** - `Clay_FloatingAttachPoints` -`CLAY_FLOATING(.attachment = { .element = CLAY_ATTACH_POINT_LEFT_CENTER, .parent = CLAY_ATTACH_POINT_RIGHT_TOP });` +`CLAY({ .floating = { .attachment = { .element = CLAY_ATTACH_POINT_LEFT_CENTER, .parent = CLAY_ATTACH_POINT_RIGHT_TOP } } }) {}` In terms of positioning the floating container, `.attachment` specifies @@ -1601,13 +1515,13 @@ For example: "Attach the LEFT_CENTER of the floating container to the RIGHT_TOP of the parent" -`CLAY_FLOATING({ .attachment = { .element = CLAY_ATTACH_POINT_LEFT_CENTER, .parent = CLAY_ATTACH_POINT_RIGHT_TOP } });` +`CLAY({ .floating = { .attachment = { .element = CLAY_ATTACH_POINT_LEFT_CENTER, .parent = CLAY_ATTACH_POINT_RIGHT_TOP } } });` ![Screenshot 2024-08-23 at 11 53 24 AM](https://github.com/user-attachments/assets/ebe75e0d-1904-46b0-982d-418f929d1516) **`.pointerCaptureMode`** - `Clay_PointerCaptureMode` -`CLAY_FLOATING({ .pointerCaptureMode = CLAY_POINTER_CAPTURE_MODE_CAPTURE })` +`CLAY({ .floating = { .pointerCaptureMode = CLAY_POINTER_CAPTURE_MODE_CAPTURE } })` Controls whether pointer events like hover and click should pass through to content underneath this floating element, or whether the pointer should be "captured" by this floating element. Defaults to `CLAY_POINTER_CAPTURE_MODE_CAPTURE`. @@ -1615,101 +1529,81 @@ Controls whether pointer events like hover and click should pass through to cont ```C // Horizontal container with three option buttons -CLAY(CLAY_ID("OptionsList"), CLAY_LAYOUT(.childGap = 16)) { - CLAY_RECTANGLE(CLAY_IDI("Option", 1), CLAY_LAYOUT(.padding = CLAY_PADDING_ALL(16)), CLAY_RECTANGLE(.color = COLOR_BLUE)) { - CLAY_TEXT(CLAY_IDI("OptionText", 1), CLAY_STRING("Option 1"), CLAY_TEXT_CONFIG()); +CLAY({ .id = CLAY_ID("OptionsList"), .layout = { childGap = 16 } }) { + CLAY({ .id = CLAY_IDI("Option", 1), .layout = { padding = CLAY_PADDING_ALL(16)), .backgroundColor = COLOR_BLUE } }) { + CLAY_TEXT(CLAY_STRING("Option 1"), CLAY_TEXT_CONFIG()); } - CLAY_RECTANGLE(CLAY_IDI("Option", 2), CLAY_LAYOUT(.padding = CLAY_PADDING_ALL(16)), CLAY_RECTANGLE(.color = COLOR_BLUE)) { - CLAY_TEXT(CLAY_IDI("OptionText", 2), CLAY_STRING("Option 2"), CLAY_TEXT_CONFIG()); + CLAY({ .id = CLAY_IDI("Option", 2), .layout = { padding = CLAY_PADDING_ALL(16)), .backgroundColor = COLOR_BLUE } }) { + CLAY_TEXT(CLAY_STRING("Option 2"), CLAY_TEXT_CONFIG()); // Floating tooltip will attach above the "Option 2" container and not affect widths or positions of other elements - CLAY_FLOATING(CLAY_ID("OptionTooltip"), &CLAY_LAYOUT_DEFAULT, CLAY_FLOATING({ .zIndex = 1, .attachment = { .element = CLAY_ATTACH_POINT_CENTER_BOTTOM, .parent = CLAY_ATTACH_POINT_CENTER_TOP } })) { - CLAY_TEXT(CLAY_IDI("OptionTooltipText", 1), CLAY_STRING("Most popular!"), CLAY_TEXT_CONFIG()); + CLAY({ .id = CLAY_ID("OptionTooltip"), .floating = { .zIndex = 1, .attachment = { .element = CLAY_ATTACH_POINT_CENTER_BOTTOM, .parent = CLAY_ATTACH_POINT_CENTER_TOP } } }) { + CLAY_TEXT(CLAY_STRING("Most popular!"), CLAY_TEXT_CONFIG()); } } - CLAY_RECTANGLE(CLAY_IDI("Option", 3), CLAY_LAYOUT(.padding = CLAY_PADDING_ALL(16)), CLAY_RECTANGLE(.color = COLOR_BLUE)) { - CLAY_TEXT(CLAY_IDI("OptionText", 3), CLAY_STRING("Option 3"), CLAY_TEXT_CONFIG()); + CLAY({ .id = CLAY_IDI("Option", 3), .layout = { padding = CLAY_PADDING_ALL(16)), .backgroundColor = COLOR_BLUE } }) { + CLAY_TEXT(CLAY_STRING("Option 3"), CLAY_TEXT_CONFIG()); } } // Floating containers can also be declared elsewhere in a layout, to avoid branching or polluting other UI for (int i = 0; i < 1000; i++) { - CLAY(CLAY_IDI("Option", i + 1), &CLAY_LAYOUT_DEFAULT) { + CLAY({ .id = CLAY_IDI("Option", i + 1) }) { // ... } } // Note the use of "parentId". // Floating tooltip will attach above the "Option 2" container and not affect widths or positions of other elements -CLAY_FLOATING(CLAY_ID("OptionTooltip"), &CLAY_LAYOUT_DEFAULT, CLAY_FLOATING({ .parentId = CLAY_IDI("Option", 2).id, .zIndex = 1, .attachment = { .element = CLAY_ATTACH_POINT_CENTER_BOTTOM, .parent = CLAY_ATTACH_POINT_TOP_CENTER } })) { - CLAY_TEXT(CLAY_IDI("OptionTooltipText", 1), CLAY_STRING("Most popular!"), CLAY_TEXT_CONFIG()); +CLAY({ .id = CLAY_ID("OptionTooltip"), .floating = { .parentId = CLAY_IDI("Option", 2).id, .zIndex = 1, .attachment = { .element = CLAY_ATTACH_POINT_CENTER_BOTTOM, .parent = CLAY_ATTACH_POINT_TOP_CENTER } } }) { + CLAY_TEXT(CLAY_STRING("Most popular!"), CLAY_TEXT_CONFIG()); } ``` -When using `.parentId`, the floating container can be declared anywhere after `BeginLayout` and before `EndLayout`. The target element matching the `.parentId` doesn't need to exist when `CLAY_FLOATING` is called. +When using `.parentId`, the floating container can be declared anywhere after `BeginLayout` and before `EndLayout`. The target element matching the `.parentId` doesn't need to exist when `Clay_FloatingElementConfig` is used. **Rendering** -`CLAY_FLOATING` elements will not generate any render commands. +`Clay_FloatingElementConfig` will not generate any specific render commands. --- -### CLAY_CUSTOM_ELEMENT +### Clay_CustomElementConfig + **Usage** -`CLAY_CUSTOM_ELEMENT(Clay_ElementId id, Clay_LayoutConfig *layoutConfig, Clay_CustomElementConfig *customConfig);` - -**Lifecycle** - -`Clay_BeginLayout()` -> `CLAY_CUSTOM_ELEMENT()` -> `Clay_EndLayout()` +`CLAY({ .custom = { .customData = &something } }) {}` **Notes** -**CUSTOM_ELEMENT** allows the user to pass custom data to the renderer. +**Clay_CustomElementConfig** allows the user to pass custom data to the renderer. **Struct Definition (Pseudocode)** ```C typedef struct { - #ifndef CLAY_EXTEND_CONFIG_CUSTOM - void * customData; // Note: This field will be replaced if #define CLAY_EXTEND_CONFIG_CUSTOM is specified - #else CLAY_EXTEND_CONFIG_CUSTOM - // Contents of CLAY_EXTEND_CONFIG_CUSTOM will be pasted here - #endif + void * customData; } Clay_CustomElementConfig; ``` -As with all config macros, `CLAY_CUSTOM_ELEMENT_CONFIG()` accepts designated initializer syntax and provides default values for any unspecified struct members. - -**Extension** - -The underlying `Clay_ImageCustomConfig` can be extended with new members by using: -```C -#define CLAY_EXTEND_CONFIG_CUSTOM float newField; -#include "clay.h" // Define your extension before including clay.h -``` - **Fields** `.customData` - `void *` -`CLAY_CUSTOM_CONFIG(.customData = &myCustomData)` +`CLAY({ .custom = { .customData = &myCustomData } })` -`.customData` is a generic void pointer that can be used to pass through custom data to the renderer. **Note:** this field is generally not recommended for usage due to the lack of type safety, see `#define CLAY_EXTEND_CONFIG_CUSTOM` in [Preprocessor Directives]() for an alternative. +`.customData` is a generic void pointer that can be used to pass through custom data to the renderer. **Examples** ```C -// Extend CLAY_CUSTOM_ELEMENT_CONFIG with your custom data -#define CLAY_EXTEND_CONFIG_CUSTOM struct t_CustomElementData customData; -// Extensions need to happen _before_ the clay include #include "clay.h" -enum CustomElementType { +typedef enum { CUSTOM_ELEMENT_TYPE_MODEL, CUSTOM_ELEMENT_TYPE_VIDEO -}; +} CustomElementType; // A rough example of how you could handle laying out 3d models in your UI -typedef struct t_CustomElementData { +typedef struct { CustomElementType type; union { Model model; @@ -1720,10 +1614,22 @@ typedef struct t_CustomElementData { Model myModel = Load3DModel(filePath); CustomElement modelElement = (CustomElement) { .type = CUSTOM_ELEMENT_TYPE_MODEL, .model = myModel } + +typedef struct { + void* memory; + uintptr_t offset; +} Arena; + +// During init +Arena frameArena = (Arena) { .memory = malloc(1024) }; + // ... -CLAY(id, style) { - // This config is type safe and contains the CustomElementData struct - CLAY_CUSTOM_ELEMENT(id, layout, CLAY_CUSTOM_ELEMENT_CONFIG(.customData = { .type = CUSTOM_ELEMENT_TYPE_MODEL, .model = myModel })) {} +CLAY(0) { + // Custom elements only take a single pointer, so we need to store the data somewhere + CustomElementData *modelData = (CustomElementData *)(frameArena.memory + frameArena.offset); + *modelData = (CustomElementData) { .type = CUSTOM_ELEMENT_TYPE_MODEL, .model = myModel }; + frameArena.offset += sizeof(CustomElementData); + CLAY({ .custom = { .customData = modelData } }) {} } // Later during your rendering @@ -1731,7 +1637,7 @@ switch (renderCommand->commandType) { // ... case CLAY_RENDER_COMMAND_TYPE_CUSTOM: { // Your extended struct is passed through - CustomElementData *data = renderCommand->elementConfig.customElementConfig->customData; + CustomElementData *customElement = renderCommand->config.customElementConfig->customData; if (!customElement) continue; switch (customElement->type) { case CUSTOM_ELEMENT_TYPE_MODEL: { @@ -1753,8 +1659,6 @@ switch (renderCommand->commandType) { Element is subject to [culling](#visibility-culling). Otherwise, a single `Clay_RenderCommand` with `commandType = CLAY_RENDER_COMMAND_TYPE_CUSTOM` will be created. -## Data Structures & Definitions - ### Clay_String ```C @@ -1844,7 +1748,6 @@ Represents the total capacity of the allocated memory in `.internalArray`. Represents the total number of `Clay_RenderCommand` elements stored consecutively at the address `.internalArray`. - --- **`.internalArray`** - `Clay_RenderCommand` @@ -1856,12 +1759,12 @@ An array of [Clay_RenderCommand](#clay_rendercommand)s representing the calculat ### Clay_RenderCommand ```C -typedef struct -{ +typedef struct { Clay_BoundingBox boundingBox; - Clay_ElementConfigUnion config; - Clay_String text; + Clay_RenderData renderData; + uintptr_t userData; uint32_t id; + int16_t zIndex; Clay_RenderCommandType commandType; } Clay_RenderCommand; ``` @@ -1895,32 +1798,94 @@ A rectangle representing the bounding box of this render command, with `.x` and --- -**`.config`** - `Clay_ElementConfigUnion` - -A C union containing various pointers to config data, with the type dependent on `.commandType`. Possible values include: - -- `config.rectangleElementConfig` - Used when `.commandType == CLAY_RENDER_COMMAND_TYPE_RECTANGLE`. See [CLAY_RECTANGLE](#clay_rectangle) for details. -- `config.textElementConfig` - Used when `.commandType == CLAY_RENDER_COMMAND_TYPE_TEXT`. See [CLAY_TEXT](#clay_text) for details. -- `config.imageElementConfig` - Used when `.commandType == CLAY_RENDER_COMMAND_TYPE_IMAGE`. See [CLAY_IMAGE](#clay_image) for details. -- `config.borderElementConfig` - Used when `.commandType == CLAY_RENDER_COMMAND_TYPE_BORDER`. See [CLAY_BORDER](#clay_border) for details. -- `config.customElementConfig` - Used when `.commandType == CLAY_RENDER_COMMAND_TYPE_CUSTOM`. See [CLAY_CUSTOM](#clay_custom_element) for details. -- `config.floatingElementConfig` - Not used and will always be NULL. -- `config.scrollElementConfig` - Not used and will always be NULL. - ---- - -**`.text`** - `Clay_String` - -Only used if `.commandType == CLAY_RENDER_COMMAND_TYPE_TEXT`. A `Clay_String` containing a string slice (char *chars, int length) representing text to be rendered. **Note: This string is not guaranteed to be null terminated.** Clay saves significant performance overhead by using slices when wrapping text instead of having to clone new null terminated strings. If your renderer does not support **ptr, length** style strings (e.g. Raylib), you will need to clone this to a new C string before rendering. - ---- - **`.id`** - `uint32_t` The id that was originally used with the element macro that created this render command. See [CLAY_ID](#clay_id) for details. --- +**`.zIndex`** - `int16_t` + +The z index of the element, based on what was passed to the root floating configuration that this element is a child of. +Higher z indexes should be rendered _on top_ of lower z indexes. + +--- + +**`.renderData`** - `Clay_RenderData` + +```C +typedef union { + Clay_RectangleRenderData rectangle; + Clay_TextRenderData text; + Clay_ImageRenderData image; + Clay_CustomRenderData custom; + Clay_BorderRenderData border; +} Clay_RenderData; +``` + +A C union containing various structs, with the type dependent on `.commandType`. Possible values include: + +- `config.rectangle` - Used when `.commandType == CLAY_RENDER_COMMAND_TYPE_RECTANGLE`. +- `config.text` - Used when `.commandType == CLAY_RENDER_COMMAND_TYPE_TEXT`. See [Clay_Text](#clay_text) for details. +- `config.image` - Used when `.commandType == CLAY_RENDER_COMMAND_TYPE_IMAGE`. See [Clay_Image](#clay_imageelementconfig) for details. +- `config.border` - Used when `.commandType == CLAY_RENDER_COMMAND_TYPE_BORDER`. See [Clay_Border](#clay_borderelementconfig) for details. +- `config.custom` - Used when `.commandType == CLAY_RENDER_COMMAND_TYPE_CUSTOM`. See [Clay_Custom](#clay_customelementconfig) for details. + +**Union Structs** + +```C +typedef struct { + Clay_StringSlice stringContents; + Clay_Color textColor; + uint16_t fontId; + uint16_t fontSize; + uint16_t letterSpacing; + uint16_t lineHeight; +} Clay_TextRenderData; +``` + +```C +typedef struct { + Clay_Color backgroundColor; + Clay_CornerRadius cornerRadius; +} Clay_RectangleRenderData; +``` + +```C +typedef struct { + Clay_Color backgroundColor; + Clay_CornerRadius cornerRadius; + Clay_Dimensions sourceDimensions; + void* imageData; +} Clay_ImageRenderData; +``` + +```C +typedef struct { + Clay_Color backgroundColor; + Clay_CornerRadius cornerRadius; + void* customData; +} Clay_CustomRenderData; +``` + +```C +typedef struct { + Clay_Color color; + Clay_CornerRadius cornerRadius; + Clay_BorderWidth width; +} Clay_BorderRenderData; +``` + +```C +typedef union { + Clay_RectangleRenderData rectangle; + Clay_TextRenderData text; + Clay_ImageRenderData image; + Clay_CustomRenderData custom; + Clay_BorderRenderData border; +} Clay_RenderData; +``` + ### Clay_ScrollContainerData ```C diff --git a/bindings/odin/build-clay-lib.sh b/bindings/odin/build-clay-lib.sh index 770943f..d05badf 100755 --- a/bindings/odin/build-clay-lib.sh +++ b/bindings/odin/build-clay-lib.sh @@ -1,12 +1,12 @@ cp ../../clay.h clay.c; # Intel Mac -clang -c -DCLAY_IMPLEMENTATION -o clay.o -static -target x86_64-apple-darwin clay.c -fPIC && ar r clay-odin/macos/clay.a clay.o; +clang -c -DCLAY_IMPLEMENTATION -o clay.o -ffreestanding -static -target x86_64-apple-darwin clay.c -fPIC && ar r clay-odin/macos/clay.a clay.o; # ARM Mac clang -c -DCLAY_IMPLEMENTATION -g -o clay.o -static clay.c -fPIC && ar r clay-odin/macos-arm64/clay.a clay.o; # x64 Windows -clang -c -DCLAY_IMPLEMENTATION -o clay-odin/windows/clay.lib -target x86_64-pc-windows-msvc -fuse-ld=llvm-lib -static clay.c; +clang -c -DCLAY_IMPLEMENTATION -o clay-odin/windows/clay.lib -ffreestanding -target x86_64-pc-windows-msvc -fuse-ld=llvm-lib -static clay.c; # Linux -clang -c -DCLAY_IMPLEMENTATION -o clay.o -static -target x86_64-unknown-linux-gnu clay.c -fPIC && ar r clay-odin/linux/clay.a clay.o; +clang -c -DCLAY_IMPLEMENTATION -o clay.o -ffreestanding -static -target x86_64-unknown-linux-gnu clay.c -fPIC && ar r clay-odin/linux/clay.a clay.o; # WASM clang -c -DCLAY_IMPLEMENTATION -o clay-odin/wasm/clay.o -target wasm32 -nostdlib -static clay.c; rm clay.o; diff --git a/bindings/odin/clay-odin/clay.odin b/bindings/odin/clay-odin/clay.odin index b84ebe8..08a3543 100644 --- a/bindings/odin/clay-odin/clay.odin +++ b/bindings/odin/clay-odin/clay.odin @@ -101,7 +101,6 @@ RenderCommandType :: enum EnumBackingType { RectangleElementConfig :: struct { color: Color, - cornerRadius: CornerRadius, } TextWrapMode :: enum EnumBackingType { @@ -129,13 +128,17 @@ CustomElementConfig :: struct { customData: rawptr, } +BorderWidth :: struct { + left: u16, + right: u16, + top: u16, + bottom: u16, + betweenChildren: u16, +} + BorderElementConfig :: struct { - left: BorderData, - right: BorderData, - top: BorderData, - bottom: BorderData, - betweenChildren: BorderData, - cornerRadius: CornerRadius, + color: Color, + width: BorderWidth, } ScrollElementConfig :: struct { @@ -144,15 +147,15 @@ ScrollElementConfig :: struct { } FloatingAttachPointType :: enum EnumBackingType { - LEFT_TOP, - LEFT_CENTER, - LEFT_BOTTOM, - CENTER_TOP, - CENTER_CENTER, - CENTER_BOTTOM, - RIGHT_TOP, - RIGHT_CENTER, - RIGHT_BOTTOM, + LeftTop, + LeftCenter, + LeftBottom, + CenterTop, + CenterCenter, + CenterBottom, + RightTop, + RightCenter, + RightBottom, } FloatingAttachPoints :: struct { @@ -161,34 +164,74 @@ FloatingAttachPoints :: struct { } PointerCaptureMode :: enum EnumBackingType { - CAPTURE, - PASSTHROUGH, + Capture, + Passthrough, +} + +FloatingAttachToElement :: enum EnumBackingType { + None, + Parent, + ElementWithId, + Root, } FloatingElementConfig :: struct { offset: Vector2, expand: Dimensions, - zIndex: u16, parentId: u32, + zIndex: i32, attachment: FloatingAttachPoints, pointerCaptureMode: PointerCaptureMode, + attachTo: FloatingAttachToElement } -ElementConfigUnion :: struct #raw_union { - rectangleElementConfig: ^RectangleElementConfig, - textElementConfig: ^TextElementConfig, - imageElementConfig: ^ImageElementConfig, - customElementConfig: ^CustomElementConfig, - borderElementConfig: ^BorderElementConfig, +TextRenderData :: struct { + stringContents: StringSlice, + textColor: Color, + fontId: u16, + fontSize: u16, + letterSpacing: u16, + lineHeight: u16, +} + +RectangleRenderData :: struct { + backgroundColor: Color, + cornerRadius: CornerRadius, +} + +ImageRenderData :: struct { + backgroundColor: Color, + cornerRadius: CornerRadius, + sourceDimensions: Dimensions, + imageData: rawptr, +} + +CustomRenderData :: struct { + backgroundColor: Color, + cornerRadius: CornerRadius, + customData: rawptr, +} + +BorderRenderData :: struct { + color: Color, + cornerRadius: CornerRadius, + width: BorderWidth, +} + +RenderCommandData :: struct #raw_union { + rectangle: RectangleRenderData, + text: TextRenderData, + image: ImageRenderData, + custom: CustomRenderData, + border: BorderRenderData, } RenderCommand :: struct { - boundingBox: BoundingBox, - config: ElementConfigUnion, - text: StringSlice, - zIndex: i32, - id: u32, - commandType: RenderCommandType, + boundingBox: BoundingBox, + renderData: RenderCommandData, + zIndex: i32, + id: u32, + commandType: RenderCommandType, } ScrollContainerData :: struct { @@ -273,10 +316,16 @@ ClayArray :: struct($type: typeid) { internalArray: [^]type, } -TypedConfig :: struct { - type: ElementConfigType, - config: rawptr, - id: ElementId, +ElementDeclaration :: struct { + id: ElementId, + layout: LayoutConfig, + backgroundColor: Color, + cornerRadius: CornerRadius, + image: ImageElementConfig, + floating: FloatingElementConfig, + custom: CustomElementConfig, + scroll: ScrollElementConfig, + border: BorderElementConfig, } ErrorType :: enum { @@ -321,51 +370,27 @@ foreign Clay { @(link_prefix = "Clay_", default_calling_convention = "c", private) foreign Clay { _OpenElement :: proc() --- + _ConfigureOpenElement :: proc(config: ElementDeclaration) --- _CloseElement :: proc() --- - _ElementPostConfiguration :: proc() --- _OpenTextElement :: proc(text: String, textConfig: ^TextElementConfig) --- - _AttachId :: proc(id: ElementId) --- - _AttachLayoutConfig :: proc(layoutConfig: ^LayoutConfig) --- - _AttachElementConfig :: proc(config: rawptr, type: ElementConfigType) --- - _StoreLayoutConfig :: proc(config: LayoutConfig) -> ^LayoutConfig --- - _StoreRectangleElementConfig :: proc(config: RectangleElementConfig) -> ^RectangleElementConfig --- _StoreTextElementConfig :: proc(config: TextElementConfig) -> ^TextElementConfig --- - _StoreImageElementConfig :: proc(config: ImageElementConfig) -> ^ImageElementConfig --- - _StoreFloatingElementConfig :: proc(config: FloatingElementConfig) -> ^FloatingElementConfig --- - _StoreCustomElementConfig :: proc(config: CustomElementConfig) -> ^CustomElementConfig --- - _StoreScrollElementConfig :: proc(config: ScrollElementConfig) -> ^ScrollElementConfig --- - _StoreBorderElementConfig :: proc(config: BorderElementConfig) -> ^BorderElementConfig --- _HashString :: proc(toHash: String, index: u32, seed: u32) -> ElementId --- _GetOpenLayoutElementId :: proc() -> u32 --- } -@(require_results, deferred_none = _CloseElement) -UI :: proc(configs: ..TypedConfig) -> bool { +ClayOpenElement :: struct { + configure: proc (config: ElementDeclaration) -> bool +} + +ConfigureOpenElement :: proc(config: ElementDeclaration) -> bool { + _ConfigureOpenElement(config) + return true; +} + +@(deferred_none = _CloseElement) +UI :: proc() -> ClayOpenElement { _OpenElement() - for config in configs { - #partial switch (config.type) { - case ElementConfigType.Id: - _AttachId(config.id) - case ElementConfigType.Layout: - _AttachLayoutConfig(cast(^LayoutConfig)config.config) - case: - _AttachElementConfig(config.config, config.type) - } - } - _ElementPostConfiguration() - return true -} - -Layout :: proc(config: LayoutConfig) -> TypedConfig { - return {type = ElementConfigType.Layout, config = _StoreLayoutConfig(config) } -} - -PaddingAll :: proc (padding: u16) -> Padding { - return { padding, padding, padding, padding } -} - -Rectangle :: proc(config: RectangleElementConfig) -> TypedConfig { - return {type = ElementConfigType.Rectangle, config = _StoreRectangleElementConfig(config)} + return { configure = ConfigureOpenElement } } Text :: proc(text: string, config: ^TextElementConfig) { @@ -376,44 +401,8 @@ TextConfig :: proc(config: TextElementConfig) -> ^TextElementConfig { return _StoreTextElementConfig(config) } -Image :: proc(config: ImageElementConfig) -> TypedConfig { - return {type = ElementConfigType.Image, config = _StoreImageElementConfig(config)} -} - -Floating :: proc(config: FloatingElementConfig) -> TypedConfig { - return {type = ElementConfigType.Floating, config = _StoreFloatingElementConfig(config)} -} - -Custom :: proc(config: CustomElementConfig) -> TypedConfig { - return {type = ElementConfigType.Custom, config = _StoreCustomElementConfig(config)} -} - -Scroll :: proc(config: ScrollElementConfig) -> TypedConfig { - return {type = ElementConfigType.Scroll, config = _StoreScrollElementConfig(config)} -} - -Border :: proc(config: BorderElementConfig) -> TypedConfig { - return {type = ElementConfigType.Border, config = _StoreBorderElementConfig(config)} -} - -BorderOutside :: proc(outsideBorders: BorderData) -> TypedConfig { - return { type = ElementConfigType.Border, config = _StoreBorderElementConfig((BorderElementConfig){left = outsideBorders, right = outsideBorders, top = outsideBorders, bottom = outsideBorders}) } -} - -BorderOutsideRadius :: proc(outsideBorders: BorderData, radius: f32) -> TypedConfig { - return { type = ElementConfigType.Border, config = _StoreBorderElementConfig( - (BorderElementConfig){left = outsideBorders, right = outsideBorders, top = outsideBorders, bottom = outsideBorders, cornerRadius = {radius, radius, radius, radius}}, - ) } -} - -BorderAll :: proc(allBorders: BorderData) -> TypedConfig { - return { type = ElementConfigType.Border, config = _StoreBorderElementConfig((BorderElementConfig){left = allBorders, right = allBorders, top = allBorders, bottom = allBorders, betweenChildren = allBorders}) } -} - -BorderAllRadius :: proc(allBorders: BorderData, radius: f32) -> TypedConfig { - return { type = ElementConfigType.Border, config = _StoreBorderElementConfig( - (BorderElementConfig){left = allBorders, right = allBorders, top = allBorders, bottom = allBorders, cornerRadius = {radius, radius, radius, radius}}, - ) } +PaddingAll :: proc(allPadding: u16) -> Padding { + return { left = allPadding, right = allPadding, top = allPadding, bottom = allPadding } } CornerRadiusAll :: proc(radius: f32) -> CornerRadius { @@ -440,6 +429,6 @@ MakeString :: proc(label: string) -> String { return String{chars = raw_data(label), length = cast(c.int)len(label)} } -ID :: proc(label: string, index: u32 = 0) -> TypedConfig { - return { type = ElementConfigType.Id, id = _HashString(MakeString(label), index, 0) } +ID :: proc(label: string, index: u32 = 0) -> ElementId { + return _HashString(MakeString(label), index, 0) } diff --git a/bindings/odin/clay-odin/linux/clay.a b/bindings/odin/clay-odin/linux/clay.a index 02437d899937e81975486a48dac7bdcb84341a00..5c7230166b3ceb0768b457d743ce170707422e46 100644 GIT binary patch literal 167596 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 G|NjH0%} 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

?&=K?nEHFr8mwu+AH!%HbE_{5q7&fpu8zpmS2= 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⪼oav=xMyKT-?PE#vgYonwMO0>3!mTo<+A^P<4I3& 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

j6hV5a%So5wIF#9|z=aD4g`;s0ftMHtDRn zhYS6-6G)q2nuEEaZ4wUj=P15H$Ni;LUWr-T-WDL8w)@42-rv`=|7?8!&C9 zpitaqLef%-yBRGONj}fHck)a!QrRx2zb`0HU#YJVY>H>{I{K=w}! zXg_eJipEUH25`C^MmLUrlLR~fD;$U?ItJs3kBr0@cechCV}m%fGi+|EsAnAN8O?nV z^#{0tApZHojG8?jK^5BBxOemz&;6${$-k-1b2qg(b)qlG|UfpNZc`vkF0}@}oupdpsFpdQuE=qOWJ-Yz7-5 zftrO^=Cr%i>FkBbd>rDPDPPKvh9Ej_vKgTj3C) zlSLPDcO&cv%e?d3+4d)KY!lv}^!Fw8m%bJU_ajGxzlzpeWB*_f7VYX!)GQmd4O4Hy za@obBV~PXX3}sA?roJB=O??l;(gd=iH%zeWa`$wTU%RkAQOmxWh1qMVMf$P##rRuU z-}j=)I>x_8xjOm%v_`Jv7$`4dgC^(!r6$V1MT)c|W-P(Yz1*oxADO@}RiQhel7&Wq z$@rtmrF158Y48xl=b;LWRq@ZSd0pMubMd#r7E+i`7AF(_!5G^Cf<`RlihroXBu`kT zSp=&#$llL<*h6c)a&%$#m4xGOdq3d&00j86*dOv2?wi5g2Jmson5 z0aPt{IVv`e8S2Xxe}fyxgmtH%4NOu4Wgg)P_h4=yIw=TpV{VBHJ!iiGq)4NeoJoDZ zF3Vme93UFvJCm3w7bly}q`rqy-SFQ$EH3Y!>%d>LmpIquZW2X;t-hXFQ30`gaB65ZwAmD|MMfX09NiO z3**j>G(W-S<4*vk5}CT$wIeYsNN1IcfYyxf8^VUQ1V7)1N~2)d+Bq85h#A)7A;Wsy zHLO8Yc#wLb>ZRsOSaXZ1y)hmBg{lj!2pQJv+<3^a(DKEp2Sr`NJ(xSFF6Qp_a^ zL9GXbN81s@5)KfJ){mBuyqs1SHY{46)RX}l*8FNpt)ve4H4WyjSfN<$PzFt z6)jXHhBY#`VcoBWbw3U3{s_Z*n1wy;Heb~fLa9XPUC?~_`T++&jxbp12n2=$StGY8 z_unDo5fHb)$xYUGFJ>wjHWYryg)tm+G6F(|m&y3mF@L~FP+EDsdZ<}Qp2~x?EpM1) zJ?&t{931wCIqYY1@Mm$Vx6DH^)+Sjmai;Vtx4>|xN26iJw*{4oTUFJ@3zvL?|-lS@Ps zJmr<*MH2~M6K8Q|gfhb8J8GG{*smrHLAF@^N?h!s*ko~9O_m8Zd5u;{yLuEeuC6MW z5yciM#4bUIgw`M^lBmy2!wC!@?6nm|(OPBqwxXylT2zscxxh0Su6HeF8$*>6ArQq% zDO@bO$9{QI?^}(8P$h$5C8R72f<4nuV02dRg^tCaT30u}ui|bA_U_$rb^1)|PwTR+ zU_8?|bPO!&?!~7_sp+k_Sg{qWm96s24Ki%dDew*f_8sNSuMSpd{R&@n5C=1d3LQLI zNW|~o2Rd*Bl73@q3>F{1QU)a+Qj7pKqNv_@OWT2XOR6`1CFYJRaRS`}du(Z&*c#6q z*&6@#6t+Tl@y|C$`ex2%;Qf6uR^BPB`$iJrHHh$`w1y8kIN6v?prun;iXCItLxm%B zvf3WPoSAt$^TnS)&DsvdpSa*%W5$o`gF*193-Dw3Q27azS9f3Pi@JL5MXS_*-FIpL zL06tL$Uo!sJ^~b2&o~8&Nw!uq^zCQtHVs0fxK}gv4bl~RhOl%_BB)$^&kBRe5C$#C ztm8OVP?K0-MJ}Q=hp%iF?;aVj)V?8lma%((g%KRnus@?seqF_Lc*KmRS0{QHjX0+M zg``7H_L0JqQpxfgjaYbrt21bYF8i9cV&BmL6iEvS+sD3ByHUIz-{IuBBXEQVx7QOL z4jICt!TuBX33hCI$92gtA=GCTwsLY5yHt0lvN*yMyOs#_o& zo@j}vWH+7&t)473>!m-+K9C6vXEkAg4bQ+?a}JX-C^k9GBVRJC6q_DxO{3zWWU~x> zmxQY%ZnHU=9k&(Raapkqb99qr$2JF22Xx(bAYHVfZ@x=6R&yNH#2&3QwWHT6Av38= zTO78)S3uuLJx(8{)jg$Oa|wM@zE>_0b3b$3fs+xA)3HuRwkgM~919u6*vt0AbtwvS z`4vV++n8-7=Uh2+BfSpDI(C9yc0cqK6#C;01yt*}Rtt+IIhO)!n4X+XAqX*&X1TO7 zq~oNtZ@7h^uhbmg;2I`Vl+RSmW6T~;988mz-L!I_gKLxnx>y5{^O=(DKB9(bs~A!{ z!lSuHuxJ1^y1Q)t-zOMsx+YkJd;O;XhIYy$MD; z?fZ_hHwN#6>^s%U6C&LYZ2xy}?!hyvGSlY5dIsh5H!Lird>5}^Ozzg|6ml_UafS(= zz`>;HQU|)iL5}cHGdE2VVt#>{Fxa5@qrLwPnYlx=zmfgREiJtldO9Xt^1Yxy?1aYh z8as)Y(|Z7sf((ripLd5imzJ(2#gCI*CStmAeLr-!_=ZX2?egWu$h>cu09E-lnd+tC zrQA{C@XxDjT{eY!k`z~j3pv(=CAd>0zgcI)qy2?~@SA#zNJUEU_%4X&9z{9MFgdz% z9wPU?VS-q8v$WFTJ%WB98cI2CH{XIx7|hmU2Ml65#0>22a(71#c+*8Y$X$%z2wAFo z@#}dxm_PfwerZBU*Dh^3J6^`UKB;}HR#1v}lC8?IFvOy8wfo4-c_uq;Pr1`H=QUL6oacGOs(3~O+sp` zmnMu>yGP&1-fBXg>Qvpm&ZULvFoC~1$;(+H`XEmu1ATC)AGL~QmU|sT5Lz^5YGp<6 z1TK5Hov@kc!oe0vm9g@^eFI2dS{HwGa!cSc=COz-DfH8i4h?H&tO390gYNfLQ;dqKJDyYu6awj7*df1_e7qD(in0iL{nO^?;+^3=U2_x1`u%$lgur6 zTJ(%Jg>ebrDKfTV<=QOnEafBxpgDwfN&?0#Y3k5E;!) z;%^;lPpI<>&VX{q5yKigi6D7mygnr0AUVbppB4bzfIlIB5y~)f>zT!c(FggS6K7ktkNp=)IfxDmW zXtSPg?K^cqtQR~vyWzg^X$H~_95CQzp*S{NCr_z4ItVauc_2Zj2h`p*QM$~;qID1; zzwjZg=ND0#3vV9plIYm><;a;|LD<*;TvQ$uDjJ&NRgG1<$kZ zLdOUg0McP^8v$&!iqmqdOICZvA$p->5E%gTNg2=D1`$k4P%7RZnVnd)yC2yHkR343 zaMH zSrH3Xy6_Wk7_2mwA5d0wkXqUa;;TTYo)RLpt2Gq49#aX9?6PWuxe3O z^psI6jpav_l^_fGF`w1(NLIvxRgcMKD=q~#kq z6zS+P6UmBLusW`+CX|)N@)I&R6a|R}`a=b0x9a|GbKaP;8dp{t%d4}mmn|W7pA{XJ zYF5OeRzu2aL|JJpA5&QgvXF1|Wksi_nia8Nbx2taDl3iU6Us`Eg?y9Gswt8cv0&A& ztOk^o#%!Ue_b_3iegm5$SrH3Xd1ZA#S!pakC_2-tpXfNILC5g8*N}h2*J?{7dt$+U zud?q|_8QCgDtkd<;PF|tMzSInthOnu-O5U1`DT@$APe~xUw+FYSrH3XoyuyXveH<- zRaptLkYDbzN=C9G7Oc|Bs$E%WEI*-+A8`l0;wmjJ|?_2^JR(__Z%7@L}*> zS7;V2Oco+VZql`Zf?wr=RiTl~Gr30zuLPfa4AzxWLq)PIF1i;VbzuSWl~}OqR8||6 zmB#W1l$9Xio%pPhk*tUXtF*FeS5_L!k1H!dVir+W@TbjzR+oC;QQEiveVLwjCG#`( zh1m?x8-Iii`BeBMhb}oe7GQo(Z(f3_<5*ep$n?V_*kfCC^sBMhR_w#ZKXnaOId&^a zPoPsz8yqX8j-mtO{O%|&$i<77=}?BPeQ~=Bsa_|0H0>RVI6b}IURP@9OzKB<86KDq zao1OlQ|0WP$KisK!)c9^W3z{f;B0O zqEh4H_m?{*6YlUnedo0dg6(3thQv}9r=E82V+9%#%zmkxeeBK)t$1YTjuDSFkIMax zqf_6;pxxJVES7DU`YvQd!ZG}5Lt$_I$T5UEaHII%@#`SV-mUSSeT`2P!W2}q`gbhFbnj1dLBS+Yc#!R5UoJ0V3YuMYg#dZw!g$*O)DDqb z8%a5dfXDzHiC7$WU!8g|`@T=Srcpe?wJ7o30=iPT|8p1~ZWWRK`nK*axe_iSp_}NjfEOmAL%oK4c zwX=#piAlSZdRi;|G$!Eb75nPZiQ~o7*j2FarDbDaUnvH>lYQFNA*NWlbSfPb$NTo% z*-+FFYJn)4J)y)-&yc@0h+lkbn0gQ;B7Xple20(^>s>kFA9VKGj%0x*(K8UsY)aeb znD0srWY&Xr0Mmaf4Fh46nQYceMRnO%13{g@fsheEudcWxxa|@kS>lo`vCY{bFQc%u zyEuxadF+Q;%94xe)VzyDxX4tuI%FglkZ#a2tUl3fdn4Hr3pVlv5R18oR6He<#z+A! znq*9N+hc9l3pUzz_r{JiW(hOyt>SmFiv~Y+g#(4j4VW9<)_6kjt^)atGtrERWZlt{u{9FxWh}B6TueTy+u6@j=hZ1-$io(0{}jH%QN$0{kGM$j97G`)1NuJ2!C`P^+NGIRB^ z5hmtyTM^4rKOo_a;kx*PBZ|FG(vG<;8C0L>a!UVSugvit5Mv5P;_pqW$VyQ}ni|x!&KJ$Hos|l$bMklvSxoeBd4RJ^6 z?ipJAQK=j5%w@7(cp*QEt>(3$+){;3yO$8;E&}v}@3mvux3Vc&XjPfi2P))OKs}8! zqOQ95{yztiSAzxFMP@TR3(_yG=oZpyh+)$ec8Y-!&k5FJP?voRX*5r#cgcKcEwhCFmM2T=sv;|?$L>ZA0L`?K@ z#Kc6GA|NK}r;CXy0Zfzx!i2^sL~?IU4&ur*TMwrWkF367wrDl1B!S$}4w=B%vTG;^ z^~G+LaR5G=d@Bb&B!#?UW*Qm16<|0{PhsVVmmx9|2~r$WV<^!xt7GWV!Ll;K{8mrH z7b6Z+g9;_|sRD$K$vp2LsiE>SY=dK~T|HjMkri^rGFOR6a1m9|XJU2P*NE|B+Ez@m zt}fFswH}?ajMs6*09XD_&BBqUn> zflgn(R$Gz9IeZjm$0wfZn(qSZ$b5Uu*@qE#h;R!QLLL5Ng~EzC$Q zdN|bs@xTfw$W006&cd~j>lFUA75Po&hNSQwP|@r?!*-8;*llzNxoZw%QcrU0n;Mmv|ss>-z}jD$TEJx+~qZE8B0hE z&ov>!WvRq4t}y&*xyKY1+v&BkF8g0t8LebOzV`Pj<<>mml`|;(@kWG|Lm1>MeStS>8TJ@v2u1Sb2Aa%Cx-pZhriy5H|5vESR*b1Ig- zw3H$Rc3T^k90A}PG?xP5`r8xm2JwIInDi_xLN^zVGFUeTQvbO|>=ciaUr*z*k+;d~ zPURTm_g;ftKg5a;dLpJl2CgqoiNv zdsrPL9j$NtMQ?q3OzuCAp}i|oV?FODHD3IBny*fzN){V)-;G29o{GG$!%L8dBTZ7c z+txR77FXTNe}SqY>%_u5+gOml@=VsWFobOU9pxmq*OKmi@?H^PDgmL`+#ws?$k5BJ zF!(RHS3ZJ}+$-;S9}t-DcGl4OCve(5Dy^H{#aZhw$-j^=*stR#XR<2CmTe zl5j2kiaKI2Zeauc_yTrIaGK-sj#uFZ0Zx7kqeTaCQ8R zA^XAd%fHhM_9=XooUP-9{Ijt#u4u|fK5X{nU|sy`m8?Z=u2t)bf`0Zu_ngh@C&cAs++7&1{uhiM;ngxx9Q70~mi1RjR!eMc z@Hr$Y?+hQ+$o+;0Le|{r1j=Fk!9+f{>4r}sa@1pEYa(x~1+H~-*|=QloJ3I9bwx`D z;$mD8OasdMq0H)Ec1z`*bTc0wNH(PB4=B`zi$bhWQtd3+z!Zq2K8h1wn02 zfmM>ed2hqiO_DA(-H4!bnE71MHVdb<_=}lr0z`T52VENr=g*DgRkBa-+X}#z*2gkGKWAgV5^k(Z&xTIh?B+J~G~$lfle@sMMsC)l z4^A<<)+p-LT{_zH(|_NvC6{V={B(Mw3h^+6NQ!mXT|7 zWQkEA-Ha6|FFR?E#fNs-n={wq2S4E|>KKYa&Eb|aq(dYZFY)5PNQ1C-YX>~Jv} zW39JW-22VFa(hJ|vnq*~OR<%54}qQ`M?yBoV1S7ij{xh=F*4$i)E#m9y<&QYkcdqW zy0vhI+$=hK$gOK{-(EJE(?xwYs^S@2AI+~N8d0_uRUAIVqKcY#*50N~5K*wIQ&+O9 zU}?^pVQGE~=1k`>Blx5Z#gVVuoV^G`stPa_yZgcrqqNVF=3y*`$9JZ_5p&AhWE7&D zs|X+kxIV+X!PB25u>z8*2T0rY%R+Zj8~Aw=n7R=a#sh&MQH?N!;g5{mz0f}wrFg~G zlsoh2W)zt?*UB{^Hmscq-Zk#fOTs?7h6*I_94cUOq5=k{IB8COf;9*?6|&YEa?ji@ zcni?YWXxh;g?vl7)yS%{V5mYCe2+uV;J9I0%IE!P|q-Yn5h@?ul*F`MCVss%oxo*wmEeN?c1WUK)AVgBgT#~0w)eNpeJY)tvooV&os!V{S0TXDJobHl5 zi4FTs`5eG4MITg^YBMKaOcA9?Z`B7fIDk`+hQb4-6wHNqCPPCQM2SKD)VOe5 zE{kGo)%pmfr)wfvq07nGwNg;4u8BpYNN9p%ny>3wc{WAzB$m}th;4;RD$zBuq#`sS zpqfdXXij|w^YAiv9>tTcy*%BOFI&0m(KpP$7=7O%{ke$|{Bz_5ycP0hVZ3;r-;w1A z_%O+IXy$06xAw)uE;b^COG=Cy2?`0OLYa1F(!4JEhBdl*-SAw2Bs$Q#}SEe z;vD`)E_(WgNr3OfR>=~mf)2VIL^AA30NgB%N$IMxLy936ZUtYd-)7)@DIh2Tb)j-!bqQkSdC>GJ!*QNC>fY&iYLQsx*- zVR?2NL~Dsj%cHDH^~;AW8c}|3B(synF^rCx+2cp>JPPlU_=ts>Req#CllCJGnJzza zUgmN?a(?CtKhl^nu|8;Gz26h7Vz2>eVqL6F^u#KZB37mB%qivK98>&eL9F%KtY2lh z46|7q{K$gLJ$}TRq-6COe8=PFX~=Z=5o?l?ouA=zV8*&J<7ww%t$M@FhkWg@a;|oy z38EdNl&S|)tr<`tOsdnA7cv|q@q6}8%j&hBR)DTDrm|p1?c3XkKBd>vtw%PxJ(7z% z^g9C3d`(7JTyVmNQ1SijGN^};ID1<|r)s;Ey#W361s*Ax;2)l@lvM6RJ%mv{UX+iF zbpROv!Z}O=w+b7Tl>!u4lmb_*Y~_2vQeWUSbvaIz|i zF0dq>Vv@JuQjW9DVOXWR>mR%{=`FPW?B{APw8pJ;0bGxaDMEp)21c|NLjd7P$1ALQ zHP#)cQX&a-HI`$+G$vViAJRfyoH)`CD~=T*owz-NVVqp@ctmi+q^p?f)B~+ZK@MHUU_SUY#f&@d(`qhXC; zbI=G9V9;2cdt3-~e9SDhJ-CfPT5yXpAO>wGI~`is3>jJ&n5uV&mNCSfz4l=*h5$q{ z78Ar|z!HRGt>6Z#HKMVUTTdeVb0mZ$^5PSbZ*q!EOK+Bh!rI(`l1TAPDdTpfh|Wp2 zRQuo500uCRJ43Gj&5!88mndg-ZU7gb7?L=+r~4I|1`^vEtPehYZE+5hN_2Q1ZijuK zGL__B>iZGFIV1s|v&>wKFf;I;2quL=uAhbBu^zM@&K7Zh0XKOS%~VXm@{keFx!kxr@1BJG^l+aUn2{K8F}OI_D|p<} z6?m&KM*5(%oE%K%xG>a{w{>9$jA2tDM2^| zY&o8TV$1N>0UHtJ3D(jJeIg!$XSpT`DT684*i7HKz-BUV)|m`}sjr}p<$H7(I3EMf zIFRz*f!q7&HjklICirm)27BglO=QoU&_u8E;Ep7IUWCZvVe+WzgXINfw+m+88*h>E z(iKdL3`6mj;siy}a&TI}XJssnaFNf*&{&rNN6sJ|lckjmOuYkz+qf0quZM(Uz^L9{ zt@9wr5bM>L>YPo_3qrlOU>epi_z+bS+4O;6q8Q7NVraJxAHx~Zc)%!*0yCN$#a~>y z$O*l-JYcn86f7P_!Gd5EhX^9t4r?4|{hj5(V~BVz$w{C%yc^lV4t8z?M3k?u9_j7kJ|ZWWo!_%yQTF5BNk za+sLlAW6r~Wg#Ohu{3Rkc%>B7Sn=VnsF{JOmEshrSE;WXU`DU(c0{k7<`6M0pi44s2M zNgmK=yVgN;hq4%j&JucLp{-n;J4TUGXGX27Dq>kpg{uAl4fNV6dZgA>pDbJS$-sQ| zInKgGpAv#h2|ewE^r=Rs`eYc@p(Uf1JS#E_Sb4d3HsR@0GwKc0wVKiN`Q}3IX_V*c zli{#FNv`^2i298Ewy#e~HGLXmc4q36hL39X4d;P~Wx7#WhA2`B-mCALCOjFX#=Guy zbk8U)#3J8n<)yuo);f69#Ni*tX3663EqxwX8(ehFNCMY0X%^y~0(Z@r{WwIyLfl0l zlc_`OAbE>GNp}~4Es|9MUu`L?+8Y zP2^-b6wD}zBf!8_YJ%G}#>7%?9DwG63bTXi4je=B5I80^q?^;lAjVYu-CD|>kbI-L zzXx1^jzT`JOM%@L#4tFsqL@|(1$>r;*O*q>HtwnM=I{gW&@~ltv^CrW)b9e`pm^wJ!U3Y&6C@FBMwYxEwC=%^X4O>Dawn2AmPD${MRv_8^y@um5yl+Gb<%4NbXk`1q zovsH#Qfs;MxWym14*58`P~Ct<)=o!~M3LRV9aS0ypUBl49d}jSw2P63 zM!S-8Wsy)cHAvyfoW6v(;xM_H&&gcs&^Jj)Y^mAO;lm`*VjUT90}yCRAkso`ZFk{8 zkxX%Ta>g?i2C*JMPMFGiVKADz8IT?r8TzKeT0sP?2TY|!z-N~eM0;QqBwNPKZPygg zcuXK1i92&DOS}*cI#rqsC9LDrJ9#X~lk-yUBx=Z3;hjE&DyHq(^h)x8UXLT%H!R$$ z^%~S=9)#4ntIKWD4%RtQ4C?iMsg5^W%C_kN#Z4khaOe3!qKm`iT&353$s&3ku=EPO zjsZQpUPUr^9T9{!1TcutQScXfJthoBbKd}@UdhncYaTH)jrD+D4+;3}5J9wFDM+!{ z8hTZEX;)RHiC$Sp(JR*@{O^p+p*WPu(`JjqO&~za+YwWX4i0qO&)1`di$FSqgD-0+ zgIHi9FP4+|dmh@?3Fx#R4#xn!vc!x5o1H||m9jh99Rpu07)wwdaL6DD zlzK^YkmlpVfr#v($u!0u_2W*4%7Y*GxcYH&N<2&&s4PuhoStr9j{FsMBJegVb?FMSZ4&(_In3Zk%m{Zjz_V#2#+hirU&9x*dNl|k2g5OoqfiFC99M{^pggB28bySZw zCqSsDKWbF}GR{w(k7@QnUZ5ySqu;w;IsV%5d#rx%?m3!b|Ns9_&Zity;p1` z@f(tNjo~qGykLRPDL(QgsYm>cv1L=JKK_3X{$E4*gR^H>|D)nM(uMEx-AnzwF#I4Q zHa${jb+5c_S~kkBmYq>Nbx~Zjl|grx9NL^H#o)&COP0;}qK(_yFxQ69Ky1<*7;!8D z(I*-{VG$TqqTx!5Tt3yPC4d|JL~^@4!0oL;Zr265Ee&$}Hok0Np_flRCaxXpM$v%V z*D(UQbvtEb=zECfq%a$T_D|*~^c-$J5n-k#nn?Y{-EV4w`Nc3hC4XZsyZ}u3O z$bKcjXl0O5tILQC-e?iwcIH!VBmb6_2`ZpI!0r1+CXM`tMWm5`Wf9?a$m51G!rX>2 zz_}tT2D#l6qnq#U(@5nP9e3>R}R7Q}*R7&9~HR?cq%}_4hWe-VFXvzR& zG9XX999I-XWOuDcao3>d5LRA)fG(toMfnj06gvinK~za@%DfkOWAb8wnFCIQls>1iba2c39m;M7KYd|XYG9IP2@ftgR z4?7;Hj9mXK3=d871ZEoAYtjmQN-Hn}j8uS0r~u<`1>j~e8-(ASE({MMXuA)*ziPpy z2;zs)@wbke`}zH%M!6-+_-ifB+n}Rz|94@fE>Q|uqnSw%K`MQvH$i%6f=N$nF{&4^ zk(x%TzsmCJ*cpx97LDEu^yL*r;0v~Xppep7oid;)foh4op~HtzZA=5qgV@7}p)HR{ zTM&5E4GbYr7X#)o7xTCTu#+$%0oui3Ro5IE?zt3C1xWGrb$Nke3FW_wL{B|S9pjCA zeg`|l?@mv^V1I!DYxOgoJhSzr0h$b6p%X60jV=LrOtt< z|JQY3Y6l79d5iP5%Bb9mSxEH94SlPTZL;`AA>-AXsPT&hp=0kxGPjev0T+zs_9(~@ z8=+ukVv#?&S8J9B9pgW+`280Dmc@?NgC*3uc!H8g2G?VRe zXXo5jNVhvV-}d=FosQ z(=2X2s(~Nv)^H<_1Pa6bFlAJ<*{vwLJW=d>NIhVN{(7rJuWrdUEVB51#7A>^{FSPo z`893f{YLgZiysiO2T2CTO(?H1P#z0`)&`IaEmyk`tj}ofAtw8#a0pS~6b2Eata4W1 zkj1kWf863-79X*AhsBQ~9?>C95|tfN(2*U|QU=hvaEDZ(Mh?xqxB_|(&8m|*hURnh zAfCrKjYWlZ$oT%(>+r3UDmrBhn}(kb*hN3KTZ5Jh&5Q%p$d2_jH*gGr1;l(q0u=p% zPpIzSZKD0*-5O6?{96`ZZShfyrx6FEwE!|Geb5cGyMc8QfOuH7d06=uAxzvy1u>T? z7-a@A>|*pd!0g^w!kty$fOaE>TI>bDBe131ClHXa^Uh32P$#FlsDW27ihhx^!`%o7)4r;huJdZjJ*by7`tHIDvrZ=I#>7sJyu06I;DECy4$h{vJzZSbS#sL62*^3y; z>;(|He-Z(a`+gVmDG6YZAso#W2q1T5Ghey0Qjj}qGKbt{{Y}S|2VwXwR@`d&>9(=7 z+y&$AxLsG;h9FM2@E1<`7tkP2X_(dmV^vbJxPs?yIhx$gY?Svp1fU0&u+eMpnm%ixJlhMfrRlvraGS z2s3Yn5RH|fPAGG*li*tjK^mP{h4B`><1{(l$<-8&2$a%w32GBILFyPX=GUNs`s%24+X4LR7oirlNe{iP&Dm%-ZFy zF5~H_ANVQr%bJ?0mbSH&#I6ATzM35&xkSR)+8IqY;s486ize2&>Z9>!pAB4DTLPdyJeFM28d4?kuNs#nSlQ{RNbyhS<+=hBErQ2GsFjX^2}3t6c?OoX!Q%bwaczW8spD>T;uJCkLK3nFFe!D0CY*oU>-*H+kxq=^Pj8B{4FbE zFVa|MpT+M%9FsBrVwdqSbIw^BSxmIKW}34%<3+$M)4uwwj*gNBME45WJO6@QpHD%me9OqCy%vP@&RU(C(3kO5)=2}G8j^}zQ0(ULT4K2@Y#?`NEm-Tho2ARZ9-aQW1 zeZ%}4y9dv}@bB5^p2P8V&zF759_2Y0_P{R$6$xy?ZNb2wT%{}hKLYwtfKYv$#L{$a*-v4`Kk5Z+-S7 zwQrbzWB2^J?Wpq?9-PC(sRA+hBaGG&;9C8P+yDYuev=^>|8wr$N~a*%eqXw-_n(;2 zMc~H}@k3#H`%Ow_vl*D$D`RtC&%?Oq_iY%zYdVMc@LyqgBgU&zt{;(RZEzVQ6YP8d z7GG@Oez<#WC$Cb zL^4gLY9E|c9?hL%GEyt|!I=tlCoDI(J#OgAeIi5eMLRl?5t$kx29*(h7gu>TMxdS4 z!*JOkVAS+lfV01jLN5Vfz~c}pjpmjkxo$M~E`SBmo9j}GeWd{u9l-&49@3P{y}Ffh z+rSP{*yv$Zc=6j9$z1J^vt@R?P`E+M#+aCK*|7;a7W)@)R=q zeZz578NVNapVCa7%;P7VoYcuQesxiP!s&VZ>dSF&+ThPEn?scv$65UIJcd|`-(0fk z^R>HZC#eyz7y<+}!g$rP{EJGwAp0hqFP^VPb!w*&4}$2B5f2J6rm2qOP7iWt^*v0@ zT$fp7MaFYmV6>%FKmKww{uAXip!xcdZ$K;>?hJlHMy`2g&;LZj)TcpSO39%Ra^0!9 z4rs1CaviW-SM{8h5C&p&Vf+GOuh0xj%*pn8%x6%-qC2ZUEsSp8=$VOKX73f5jdFNH|x6%Qx?!ob2sJa$y>{Y;?Ii7r&}! zM)>KobNGS7b|E2gT8W7e5_nSxn&3XEtdkx!)4-Ytp@!YiI>NsfKLTy%$MJ?IY-0w$ z1%x?wEdFTrN1B6gsp>C(OaNkxPc(GiCT?u%s8ZnLdl)7<$rxA*YE&L05?D;2GR}O@JA(}<}bhfpgq8SRjOg#R(0t2f{v28-s1OI z{OuO+wfLJXz8`T^sB)09dR7inf{q-dEM)+V3J+3LnmmP#3PW$Xr%@o9%BSjN0nDoo z65uJj1is}4P9OjaE#)R8K$|_RqMc(jix+<%^+=Fj2PP80w62aw;~_{xXQ&`ErC(_A!M9YEMpV`P&V^gu|6rk^qbYuBT4`x zJe%2flwJNKUy}P+`%XqbfLWuP>e`8%#)-y00Wi3Mp zPN{+LSi2JeZ5ym*=#hE|!Z}QYu^vazST9%B>?_KeX&6_D@L0P;_6XAo2gf{OLFla) zV?Bs8WBtD|mZEnIdDKh;Ya%?>&r1mII@1aV4|&9ba1Ik;tPdb))71mYy5FN_8dwt{ z)ba;v=2>@8%^b<@*`y=eB+?k)VR3Hnj>_E{ZX+<~oMuq7r?}vtcxM3bQ+5qcm30d?mRx4%%J}tZ6(ht z`}+mg=foAWQfjP4CG%maernvwVx@y0m&eXkXg!^paW8tU_kR}2$SeJ$R2xKAk2nn6uM^G{O z(LL+rh`y!eZ~ z4Ms4}B>@5|u?-D<^;}kMY3M)#$utJ)*Y5u?r7 zn9;XUiA6)mh^@xU89}oN3%Mo0xwTu)TCY|scrG1(>$u77&I?OI$NZQ#=($mHDiUaf zy%$S1@PiT&u~Fvc4XQ+7phOZui2woZL7y9$P#A7RZog#Ng=9(vY70=KvW8pewj4@c zEYCiN5W9sigTGN80t*4X96)S5eih*S(cCit3#0cRrSPczN7pYniM-wjk>f%g#heC^zI(N^A)05*W?>Dc}Nsa2iC^Zy@~}RFtL8>A=K`f3T3Q0ew0u6f@zIw~CF@ zi^F(-2>Un^I!uJvw`=4F)UO?L?S53gVdp}VDRUM*r~5qiZ{#u@gIQF#&qTr8n$bBM zzTcq|oCG!F-?aEC#Np86ulUU)hCXd%gBIuA!O`6FBm>7vznKL={&H;)OZN-WE)3=u zDYzH_<0$rxj8_5(##jHJ(%uBHs_JV0K0%O(VuB+M(F;zX1f!w?qK4s0q6`s&41yt$ z0MXneW`H1~QAkUOsj(GBYc*C|(OMg;C|c2=HsDmFwH2ot(JBaP9Eymxe$TVlb8hYw z@cn;R$?vSa)?Rz<@eKFeb0i-kIYV;a82M<)M@!E;V442_$;V6nA=j!nK=KaBeCP~< zj-6g=o!IH+k`o?SOVfmoL_=eJw{?u6ELBm(D!NE=ndB*wd4nwN&y-vZ84Y(e;AYY_ z{zi?zalOB>92;(ut#BJ0gKMqp_d3a5MW|W!qY*qbyVVWMjkW90nK<6%Sni2EU6vlu z72cJvhQ4#QG(ke7YXG+#Jb(?iD}T^WdB|P|{8Guy(&<2~hoP@vr7c@gUl|!A9cONGDdamPb*WJ9?5JMw=KgXC`-A#zp#_s1_ zjpFxnN{*d~N{*d~E;->uq^7lY4PwKN?|vfjw`ZH6!T{$?Nyg@0J1nK)L-e{ofHHAA zU*rJ7SY{FqB6y!)Yi*@rIe|ASW}!#6zK!FKVDmn~N0+rH@yirGmXC>D-|Ew)7D2PP zpAhsR2pVUtFxKy#hGXxDX!;_hel62+_(TE6OaUO`D9W#E)-IN`zTJgdOC#iWiMWT# zq#T;y&NY*Gs~x1FCe5Z~BXKiaX!tEasy2(U+3M~=^haW4r?T29ug2d*BasfV@T`D3 z;Yei6t+jj}LZXrAY7{>bl^i<~l^i<~nT!zlB!mB5+giJsk+#;pMI=7da()sWYFP^> z{Hiw@O{u|Zy|LG2{Vy>0JCL{OMGjU>52PTAB?JaXRzU8KxMJ>g~q{KZ{WI{?;>4)!{Qx;(_fdwP(cy@HqAVCx)L&y9s7AO=3*# zu|?^tm2OP!@uJch741pCsW;*NrpTtoK_ODy{_;-p1%Z+V(8+zga_U`VkG`*qm>+B((=sNT6 zFjwarFSKKXK}cYoua(UE#_;P-{Eaw9$b#6}=Q)&cWt7Qc9u|Mbohh28e(UI)liCGq!oYcBCX`u zMcO6DA1+`;U}QKmj*j4ss0iMLgi3rwQ(mb0*x%UdZ+z-+?7#-@s>63rE(LXNSet>( zy>@j5&}-yen$SOF%R=_0<8~oIJon@a+zP-7jE=>oF*pCuFEb!FX2QHncz$|*3QPJ&Xv-}Isd#f%dDw`eQDj`VoNx{CE)3fG^tya8P4MpaJP@22R9pFQ`4dbi#bZj2wPK! z5}4o|CK|HGVaVeCXqf1t*HDWyU|ukQsDl?KM8=7`w(+PO_vGDFXHiSoGj5Zr@S9c- zqSl@NSY*ja;cr?aG}}5gHgu>%X*6}EVG;fU54*88e8H@DA;ktab+BfFv$g;m)(=2J z)O5q|L20_zef3pn3mEpa@@89k0cLdrn>w}y;J1ZUzG@9#hK2W?I6ZqI8CzfBP?lU- z%k-4T?EAPxy>Jzd_x#v1KaY!@Nqdid2`;e1Fxg^%Fw2dGq0H)Hrw*|*AwKp)>KX<( zedYlOK7dUIPp+(`Vo$*@M({W}g_W9ZxE0+ODb`KYp=c(!qOE*9-iVJ4inyx`%Mz1t z#~c3kvwHkztgA;RQV=};;!Kx9#3?TJh|IRv7D{P&(JfsAV4Q5;pD^zk&Mzb?kk5~6~G7fZUQMW1(&f*dtblwgAT?}F9SUGVOaVu#fL*w` z9R+ydEH0sbEfbsxZn}es8oQSj(7{ZupQ%FuOo%DqXce%T7ImxI!&zKH{aPldfKAxc z!u7E2&Dz4&)S&<-#1wFh3Rp*rx>YUVEG_}p{QNAq%7{&^TbstX9&Qd>Q-=bW;2b8J zF(P38sb7IpB#gqSb`3UdW5>Q*&c7IeN#z;4CQf?vO4Q{PxU9du#V zm^BKZ4h1m5IkZw5);DjD9o1`@^b>~XF=!Ed#{pyQ_*PoetYLQ7xzwRdCa6-h7C2>YmYiP%RYaXWvrp@kh@lB$N_JOJs6 zuhrtKHZN3kdU1*Jg5x|+E{kz39lPjp)Ya+h-qEfe3!E=nQ-``TA*QZ5PUF{gnv?t} zk5gSUk*c~LVNqt89TkYueAK!`?8}iDSyy;*bBS|=i|T6r*V3`- z8o;K8{69vzx(;x@SXb&$S0*^?L__{{eC?F@xbst-hic9M?1?PS4nQni> zu>*Wl#sktGIRaAWW8LJ~J%KbiTpqp|#&hGM7XR=eaWynJB(4E?NW2{6Au%)TbrLO| zg}opQH9*fAd??k(4eYiP+9d$*IG_FAWuhVR_MkOO0_b_F(orZKy#7j>u? z6a0EHFzmMua&ld5CN1h#Wmy)CIhRnsmI=-T4TnwbR(e|jL(Lki9d&Ft-x`ge0#a2# zfEIPD23QsjYRkd|6_AR}{kdK>^msJW^-N#0Mgi2J046x=Z~^Z1F7AjDs_vHiddr=R zlk@H-iA1-wx$bga+|t&B^ki$zS>|Ppd7+}yi%XOjEp6t1Egh>d z8?mXwg(J<^YUhh5pwywROo(hu%{Y$}uIpbUe~YjCwq1#H+vqvBBJ8YTeaj~?bIy`B z);2?NoK>*#Jl6s1kb>h1{KY{eg~)@*@KoIe1*WQpGB{PcgPf`?=O;|n2HS_j7z-{3 z`cNx-4YRwc+T^y@GQl;7wF(}z_i$co^> zdQ|M~TqmWWmpd9>2V;%X7tDK$^UK{5b?7@L_MR8YwAz}6Jks7&w^Lb1czziJT3u;X?`9YreRaN)~j&i99pO*Y)u_X zV1g?l!MeWfV|O&U047@gUKruLl$jTdV(Q?93C@cJ+pxar-!YwrS4OxN(hCuvhrYFT z6aMnbIaT(|jAZA}?LbnwiARdSX0M&r<(0L>2L^L-$gu5n^ltR@S&gFn3bcI`R{>p_ zN`@8YK`Ov`a0tkGzzlnhGo>NT4Xzd#C)?1y#=3qJv%7gf9h#I07EFCD1M{DW)r@ql za^o!PI;8OW0X5pcpWUgkg`PS%rKxj@T`o2?`clk#jkDp}L>;V|5ETMmb%-k%jYw7m zFWRVDjTA;ejUrgvsj&#CgHM_|pNYoX-!a~{-Hx#q-7hQrJU9_<`LL^g*#!;PCm6f+ z33Tfdl7B+Kyt)t1F`8lQp9xq6)-k*57wXuAfUAJD3?A#hB_^VVwM_a6W$x$3!e$t& z(f)k4n_lhA?)J~rp-d+D9l^$kxMH}87ImxI!dYAbPDA}H_yQE0DqyM=&=R($4h1kF zrhxDj!!~?I(T7%^J2kbID8P-_)Pi4Q{DTF4U#OgMgi2J0478hP+x5a(b#bfbru5l!4cnzB&t(C9w6mlPDigK8Q}u( z+J^Snq2rQpt0NT0+v1#NfzCz>>Vm&GuAmTkToFD%YJvg_&>DaX(1RcsAeQqJ#^Z0? z0a6x>b#=JaMoSK}y9J0kG!heBBUwu|tgm@Lwjyhp^b^Xo>waZ0PPY1PIK##dv%5J! z9mfygcMRJQ=TH9W&1_oKty&Py;u0`e{498Y6*e`=ezXBPEo@C43SdG^0pSxgTHpjN zoF&t;Fu`TP2^uyvcGp+|L&Mh8p#Ubt6ySdg7N7-A(85_<0wfJp(HCBi zSWj*>FPLJ~!3z^2!~ALI8bTM>AjWZS*Ce4Y3(Yxf6G-bvClZ}qcq_TeH}#|T<$pKyUBysv6ARA^tEY_09fi1vQwvkmKW=dB9u z??qN>DR;k-Ov473`x#7Vt-TaLoaJKr$D=Y4nPRFV0v6=jt3wG-y%7Wt0+YGGqbUu;bAp4 zwG!mOPMf*d#H~K~>lTHFPtdJCNMOg`EqS&xE5P4GivnF^Jd{C=+Q#1$%qVcH57l&< zE2q^+pgczM)slxuu8|y&yc}|Z(V;rVjt(Wqjt-ZcaCAu1g!YXY9n#!un#kwybRZ<8 za&%Zn?d9goF3-f>ja-?7@LMW)#MjC4i=TdB3onMp-;{<47_u~U-=fcLpek#_2R-n< zaJxLP>m4NED`h+)&7;m<%AM>s-AlPsu^Ap%G{%#O(Kj1w0}zgM_2_X>x*M?rkW%l8 z!0>W@S1}30%bzpM$*~o)hA^4EItN$LcrW2huH+nM&u+(uVkLohX~4liop^K0;v{QAu9v^*ziDIPXAek+sQ69nt4 zI_fX!Uiap*jY)OabkCamde(+5m{4t5^?kDHQnTtW#$?J#2H`CSGG5|}7p`_@AKy`* z-QC^+;ZH@rU;?jU>cOfb1V*|m(eH&jIGb_jJ-PuSsU4E5tlbNV+bNLlZ}TAr`g#42 z_^7Sy2_VbX_l4GTPY>l*y=QrGYUhhCyOpH-(#?Y<#c$Wwu492cYFLBoo@bzOzqha3 zRab?lMosC++Q@SYuYNqFiD)TwN8QBKIQwNguoH^!e+&p~DCh` zt~GvsYW~J9@~86Q0K2TV96)thV^9nt)$>l8kxxGf--RFb2ER2^4kA3<&yCX_+orpd zW+pig7=FR68{KpN7%3&Z@27*C_P(E8ZqtowJRh(-T9QAX4Zg8#=^I|k4SZuxqSx-c z;TOFL9yfLQ+MU+mM!m`8OI$0n!fV#SXZTTwJG&<*Rqh{t$H?~A5*gXsLJ)ZmHUX|C zlwpj;ycY!r)=brp#4xPa!PB~kN!bh;|1e#~H@TTr$De-(H(}}LOXgC8O?vlT5Nb>2 z+n|E?`pNfZEnC`*8#nu+D)@RQxC?*AH{s8eHLf-AMqT&DAl4HvL&6GCnTaz%lsO8$ zP>#v}EavC+l}K`s|?yrIDT*SB_tulG-aJbrL4=mXtn|Qd9c$N_p(NAKS3P zY{iV=PwUNV3tXTIiQZ>`N@4DgIlixp22GC>oTclc-u2RL`+?!6-ZuAtT)Bhm{D)cw zZ&s58T zvKp468`ro0fMZTRod{#G9eb6ne&sh~9BuaSP=t*^PCjqje=(qZC3@UF0;>(Vv+#g2 zAad=^!aFUf!F!5{WlP(<$^((5jf?8bNZNjYza&#ayV0(`fdXDQsNBn1y2FEeq>}TH z;yh$_$D>H2Tu_1w8rHj)xJJ4_9c!Cuuxx3&SJ@YKPO2Y|%A%363&Wf4w)0V{F1>-5 z#V~iFTHj`V*+RA)H}JVOZeTa8a9i#WvC(bf1&6rZhMRb}8gg{*h%i((Tf4<=;E~xd zWr_7}3&m_c=ehvK+R~Fz+0A(D`vA@+y`NGcYSR;U<@seAMR6Zf5Lqc52bDQ zlW70k27gie102nc@9;;`*3()zDOS|}1v9boO!&go$jWR^TJ{|hpJXCl1R0($DL1!R z>Pn}xY%5)6?rT2T7{ql;G{MH;X4Y~eUgw4nCLt=b^_=VMF%mCfPm5mRlGTLz)>lRE zCw6A$B=LPyRWN9E222N+k(TR%=MS`#B zy}&6pEaZB@{Y6B6rSzT-6a1hl3%_o&|Y4~IWZSs)_Fk%Xf z0-Z*gSt{GF*0fAKJfn}_7O6dESV;Uq9IB3H3hrvgk0$wY^A)vEz+cr-SMhDO!5{R- z^HnV=w{J+^WXhG!gwHDZ)oAcJJg!vAO+B)-6dpZEZT3Uvrei!AR^9it1~?J zjyFH>zTCjBjXjSSEHbi%7>-s{l#)4{5y$r4Y8EFTW2$oqHZWyg$~BvCncu6Kmr}Bc z-VXM?xw0Rmhk1TdQ~`S}osUKfm+k~tI=4`2i(hIBBV{=ZiA217?90!3Mh*lX#_BTILJE1g?$ z-NAAg5}9aRx?pOc^ry)GEtIQ~Gdx9{;6kB8mdcd9G(Ms`dc0pz&jAXbCg2u%7;CS& zq28&_Nvi5o@0{4>i%mEr-OTGPG<8QR+}M7r4yt+jx2->ZB#tAyA5(rYpWiC*kTqrb zO!ox?4`6r}w$(+op5S}k{bShL%`V-5H&QyOfxr>T$Rw=rS75sm_csPNqft2eovW0= znTOzURi<9)jJP{^Gb%r`Umlem%c`F})n%u8r88o7J}?$9=D^>iN}OD{BC{~?up7dk zLmP18EB2$$@-5@0?UOlTr^^*#kJTJ|GuqEeU_aCyZY*D9XWpB&$9Ne^#Kd*992pC@hOs~F{MQ>WkOv8h;7miM;>-!&=X z#VgBQsn*8ak8ef%?hTzVnVB^pvc^Lhh?}9AL)|{C(@O!ogommV+)(8fGtp;X+nAY! z3m7r`!}Gg#JUh~{6P#miG5VQQ`yGZ8TUQo#+i`P?hKRytFe_Ws{VL3K4MCS|ISqyA z=5p)MQ_x!e)Xd|t;hJlN%FP-S*<3EwnrlR7b2%^57`A`V-~?AIZpnET7dh7jhwQ1j zVjbs3I(C9{%q`X}hw5;1`9);1i0ESl8nU@a3j_mRp>fwYvz84(mmFQRWV3<2=i!Su z?(UXA=rPL)PPg!KTFJV1rmUvW>TI*3ZlOEdL85y^UGIJ}8_c3@WV-`Q4E?UB!}f!b zpVvj%e$(ivPi7X+%fr3;Pb@?7h~*@<4aXslaOXI|wIR3E0_+^OnsAEzpZX^&(zg?w zZ*H+M$58D~J=p{ir6lMg+QQ1^vA82h*AcDoCwnf|3xJYgW~>SY^} z>awneuU#86%edF%Cfj-pVsm50NgOl5Z>ZauS(#LMgk3G+lm9lsIM{)H-w@8w8r*@$ zN`8iapX1*bxN5lri?W4)OVc=y!mTCvi^D!#DDSZxV;Z}~zDU6@;dqvXr`G_H-*{R! zek+AbL|d&DSZW{l6eWd#;eu?fwORPfhnoezp}{yvVIjvE$s>YZbJ zcQqSogcS3AC%)TaI!?SQIa@TzpLS%W^^z6M30FWqGpO zS^M9>VA0c0BkVdndYQvEwRZ}xW$=Omw|ly68=WiYiB=fSsl9pIhgtOr-e7BKuu;4j zYh_(8H+J}*XBWOHW0uI-hE}pK zY7$(p4d-uH{<`ryFu^;$_;I!SF5=4fJD+=`4)^`bzOBI@z3uaT1rF?jTf^TK+8Egw z{0KF|m9vkqtLxAa{b?A)9lFq8U-gm8UymgWhx~loIlLxq@596Mk9fEq{Aha%3tAcc z@pwFWir+-VUyo+}>^sJGKb($@SkPSAc)3cr?2M?gcbG9Qiqnl#k)80K@UsEwu-3qqkA-r5zr=3BT*o{5Sr$2>w{y-e$#xzdvww^gO)M>snlRdzen+J4D8DB?{#cn1s;ii=i=X2kmrMw@GleF z`+^nt*8v|MzYe$_njcP;)0dI71{^FA=0!1a2h27`YHQ2ye;g8YSrfqA9n^Gho$3rhl(rGdHm#l-y%DvL_yv-psO9jIj7g~f%T!jj60!GYZJ z#eu2{+Jr;PuMV1ebZJ#d<$!^KMMaeh5YU36`3nlm0}JzutNg+jo5%GE^==Z)J}OEJE=4#pQ+h1&ae^<%J82N~`?yvLhk~#vp0Eed1-O6HwvAJMj2g&jt+Uj^72v$oK1OS z3g=YKzoe*eQC<+keetByMH8zqSG&~4D{QzY&NUi^=a*F!sutcUUb;7?s;szZE?YZ$ zj5l%Kyb82^VTsq@8$8(W%7~!MdlqI-G5%F{ReacBQsLan{F3>_h2Gdn6Q_C?WaoN0 z!AYZo6LP%)UZ|*Kc)%MJ@X!I+80aktl)Hra?(ZD;Hy?ikOQEVPEgM%juhJ!AdlJhx zJ1k43p|Ea_6Mc0|v*wnTWnq#OmXGED7*&OwB?;TgC0cjo*D!(H($eAz zuR7L*+06AgH{k-94fBfTdw~Jye@qk(%~7S*s2M9iD6rW5T~t(1xxj5LC{zuVeN0g~ z8WRh&mpd^hFLz?zsEN6`6UTewf*0gcoRmE_E7zM`bQK(XzMHUG_89u7|OEGES3DOij^jP(n! zE(8!MW(Kz~@Wx@42xPe$d-+wBrQWzgtoY@D$=nMd?5UW{f$^mUh2GSOlg3Q;CQO_V z^d;B3!t(8JNm)D>z5gD{e}lE0zRo$YWEc37cYSet8L+vZCujEsJdIYHgBuexBGs z{d7zxe=Un%z9L+?y#5Xxi!~Nqtlgz<$q5yPO0m;+ds*zju-@m}ZYIHzfUU?yCEPc- zojjLrf4Sy@PuaQfk2_G38xGmnrxxWGW4sL*m>`-E4nP8(M;>!HIT=hj4t?_H&MmBn z*zv$DeDGArbsHHAxJN23x}p#}qW&QDpdVg@R z=cOGE;xUxzU(UAlwO}pe8Q{C%K#+0$D=*2r7JL|_JV){{umN&^@J4Vy=|8zF$@?Yb zd&P<1rI540@!*HEk~|zEAKEJ3C{~F@VlIg5P-)rXAn+f^e<+BTSfn2SGM*hXlf1QH z3&{H20jA^sm0%vyuTc8M;@M)FxUcxdrIvrQ_@sEdcoxWd9S$O{Lw}r+uQ> zqYnHv*HTvHjl^SA+jTc_EPFAy@JskmKOai>yASAjjpM7g{}6fpFU#sX30wksICwJnu9r5*(+%YD}dkXRgAmh3k z{54nxvVH|1>9!V`vA+@&6*oc5fDM5w8{t#R=ls;y*KO zoV1FMgY?q`avod*avtP?oClwuZ}r*+vR)sEZ-_4&L#-g=x)-Fsm13EAiFm#^KuiTW zZauN%Jd@kS7eV@aK&)5#5^)U3xK98X_r4(G{_$LkdpF3qzY=$VY~Pnb+CQfBhm4^$ zAnWlnkmVMOlf|Sq}>6Mw+&75 zeuMP4K^w$c~|6`JGlm1$e@hvijt_0cc zGe9&=`dE+zK2yFlveK>A${((l#cLXdu^gS5+%d;&;6he-Z*i0MBD zY5yEZ{huYTl70zD{}ski2xNO*0={jIRvjyt){q z-7t{ta3aWf`+@Y+UHVUP@IXIXjG=cy`neCJpA{hel!5d!3#6YBAnSQH$o!{@13|8H zsUXYwdXVMc0#d$Da=thW#5qISDdO=U?RrYT69*rZ{|>U9o|F80(6xi)a_OfleW=op zlH5!3Cpd_qpEp7JeG;Uf`z8NO`h}9GOMgDddY)|zod&XY)TWWGVtA0@f{M9X)(SPtS`Fs(qG1u|cz z^e2Lh^B7~OFUWc(fvo4}Cs;kVfz0TOs)h>8F5fha8apv&2y#{hR>O z&moe(Jl_0#08;-vNc|&{8>O$2JXiWjl24WXSjpX_|MEEV_cxGnJ}vofkp6!TGQMk# zp~WEUKL_MI8x7L#6p-!F7i7O53^LB0{Y~EvvcB(t^!Io174QwDuLfzq1f;)0>1P>3 zQ$d!S39_7YkmVc)((f@K{T?Q!g7o`tKlA$xNWb@kw7c6F`ZY+u%R&0R5~SZ^knv0e zneRNw{UrAk+X80y2uQo%fQ)A~$Z{IRl_33vK-$feJPc&J50JdS^t+EW`!_-ATP5EQ zGXHAHRniwo9xMG>k`I=CAITpdWBFeO8Q=59(9;XaV@ zNPqu5+Snm(HHNl;jO%%jaXkz&t_MMudn3qlt3dh*8AJ0y<{JR=c)G8+A4oqtk1{`7 zLFQ{WhTaC5Z#jtTP-zRre31FZiW%Y&VmFY-_1_$6d>^F!Gh!3SI2y(2N$2(p~th`#`bBaS5?%efMy|6-8-3&g2P zpCtK0@nof+AURD;6_bsjZXn}%qOX;Izj!;y@_!Dp{Botw5J!n8fVihG?Qrq?!;|>! za@uF&dm!8QRq+mx^|%#eJ#G}Q7q2pgDnZ6|D#$pF1{ue`AlrNAVdm#ckbbs_?<@Un z$*+r#gMUZ9dnMmt4BY~pNP zvEuSWtek5>uH(}|&WH0s*5_@2tp*wYN|1i8H-@eT z>1PH=yVJ$KVv_jjL8_OyR$L|S?qmMH2HB6FgDmG`@h$N+W9TK2<^B=mc)v@m13BIo zi1x?w%ZVp^%^7|D;{nP^#NJWuX|hmc98ks0ojgEgKV#RLHfDF z7`g>yzG{&3`f~9cko7%9JQ`$N`+@ZP{Q>6ZYh&m$kbZ6jIWFqN>p|vQAZCb1h~32P z`;vdD?AP#-g#*4#1&aWdu*5~_P7SG>7+WiV-++)S9``Pu}CXne%K<1wUGJht> z@%2u!#r=x-EXedKkk_3q7moq2Mf%pB=I3u9{X7NoIwyaGNS+U}--d&1@6*LWAp0W) zWWN9HYw|lF_tURQeiWqs9?3P*FO)o8`Yg#ONPm>%|Mjr^pMfmzMUehmB;O-_9mx2u zGlrIc?8jLk`|U!I{e1|?`lNug?mEz?f%gGVX z5|0&og6y|%_c4AVzA63zWd3@wSm`sxpm?Tu6iE9dkoDT#&Eo$L$oM}K+r`bs(CZ-M ze-LCmcZfHG^miRde^-NS?>vzGH$n0#Altv6%=eu5nD~$}v?MBnU(fa57V&lQS#dGQ{By)CkZ}$NS>EZ!&>)cI{o@C- ze-@-IqL5T$>E=Y-JDYLM&oVvzCA0NKvtK*l-77&;GR`A37y z*G=4t!9%%4yj83b=ZF`HL&U?xojWc6?I7b=0y2)7Amiu-^7wVje{i=X*bLHcB}lsg zU^>cw3HQM+!RDVp#(5LSxUK=|XR*>Jf!u$N5r=@Z>j%>AXps4T_}bF9flO}&*?${A zw#yUZBOu4ouRz9gz2rHPgOWe~%IsP}+C2i&-$Nk%{a(CHyvZ1<2N_Qx$ZrO8=eY--x$@ZLq%{q~B9O?w9(By+M|!tY?|dx2L%{_Hc)UGIAwY=gWCWV_UYj6VP}-h;#^@v8^6 z$6Ao>@kjAKkokWJGG98#e8-A?K=%K)+b!Q0#?Us9^}P?I{cU0i$oMY>8TTlV<(><& z+%v^fL6&I-2>riQ7Lh`5kcsNc;Oh*6%iu^}5Lzss|bGRFHngiWy=+>JCP#BSnOA6fc`AoD*Y-l+6z#RcLtk-t3pCE_?1WV{~8dcXgnts8#@S?~46(BmNE zUInt8C1SofR?HBO5W9)nw|MS;kPpCe_*`S*h?e$v!K*qBk zWWFYl`_l&SacoYPJ{uf{^m9PAdw-?(02$A&_lzAN{XGjFh5Xe@&jlIZaLMUnKs;FN z3DR!IyXNnG@pbX9;u9e4?v#9!xLjN$UIEfBNAfx1V6ngSJtgmc$IAUoY!}}E>E{W_ z4~ln*zZ8E4((Ve$mx&jPW5l5#?Ou7?^Ug+lJpv9*^3J^l9FKMjf;WNvK(^rRfC*&vz7kf-#mBU*Eo>&D_*gBq`z$C ztb57iSudL04P+djykLI+4l>R+HyLX|j>o4rntUn9_zr5tJ(Wm*@~`GE38dW}&zpRs zc)hq#eC#=kI}facpQAw5@118Y-Wed%M~KrmSpBM7tX}CL>vb^5c9`~z$>)KT?|$0q zQvm)6@(}Qk;G^p;{)<7z-ydYXbDlE4JwW<>iZl>`&&WU*NAgK#xn?HJlCUfSid~6Kgjy`0%`ZdL$*FI265>!eF~hC z6%QJp{DbFVsH9H;nV$E6=V1t>4+rU|KS)1+z2Eb2X)1j+_yy#Z;8EZ;Am`yLYfLTy zIZrdeA<%zxpQYdbd*iP`>Z|TG|CfQRce;4PJyzZ|AonY8{1(4*10TEF($|1YKLNZ9 z`To>oeoF5$eeXMw2>tHgnBSK{)?=;Y8$jxdeEl7kZ`iMm$AR>Jz-^wpKX>wc>rYlG=l7p%8r^tG5oXTs0rAj>}%#HGsg zHyTXF)5l%*k--Lo!g9YGe;D_MHD?M)o zcsGcqO`ikel2iI|;6lhB)#2BI;2%I-0#Cmj90>Uoka0bL%s9nQzY)9$%mGn_^ig16 ztY>G7gT(&gejwYu?dP6%F}M!w0LOxV1J4C#ApfqP;g_D^>)_i+4}qMov&7LL=l6OH zF6>g%YdFXt&jjgr4EP`L`{gEo2!08oo7@VbYtnB6IS$jolOZ1~x#>CxNM8stp3A_m!9kJ_0Cz%uwZ_U_4AO2o$n+GY zzjCd$%X45p+T#I`c8wtIia^HwJq9m^MEb|zB=9%jH((jaewh!l-A@L4vVE6&UKQl~ zKwQF3uLkMo%B!tkr-JO)zTi#ZcS~%2+X1p(uY#w84~e&fY=8~5e@;6>( z<*x>rZ;@C8GG9NCe!GLr|N3Ife*<_F1E%rgeX6AMlMw*t?59&ua)?u+(05X2{qivh;Lp%2e>zYR&d zNBkxD6!hnVPs8tzb1eU#K<1wTGLA9ebKvI~l&tr1knx@cQr{C~`+qar>>dT(_yU9WSorBD`G;wqmka$1Anl(94}tz+ z$@SnCq*qH0fg_-wEqN%2rcFOV@{!p-|j{}Pjs@_LZt_YrZ8c&FG6q}?-EL}+&#NO_LruP(GW9tWxaqxf5KwKxf6 zzEsJdqLV2<0WzM`ByZ31yjS3-UA!Em-KmoIll&S6Iqk|pR5kr9$)||BFR*+qAnk6K zTm-VbWRT}S9|XqZ<0I`WO=0#a`4X`|NW1sXGyM}FuE`&R^!JwJKZDFyrt}LX z9|1D1by#%h=O&PL`I4uCr^3&Lk`EKNoMU!(fz&USe7@wvK>FJ<+~R5mDgPd%{cV!V zL6(=H^j?zR8fI}-gUoj^NV|TL4+neWxVe|)e-1Uf--5Ku1F0V-`Ny+O{wGL(zXjP| zWs>JfKV9Kb~y*w?N8w zNnQvt|0s}grAppc`tJss{&kS~8bOwGx#VFW<7ysY`Xyi%^kw4ilPvuikm`nz~x1Z$Kk29HXiemXE zNlp_F5|hPe`%k+D z{}FMGc&FG6WWHx$M7!JYhw>cBUmaoPJ`PgOjla3^LzJ$ z)0czjqO|$qOmUL<=L5{H6r^3Y;|%4ExpX{c93!r$ap^A z&*W#oGqGQ~T=F@RkC41Q+4N1|1mr80d?84GM@!z_)8rRG`X49xSnw?Pe{o;a-w0AJ zk~~84XFbgSlOXlCgY-XJ@^H!ff%M*o91ukung(JDrnh%9 z{Vze*XQJejL6)~6$?Wd|X{9m72W%IFnN) z-y%66xj+5EK0|Vn;Q_$Ay3e5j#$(tmfEP1o!K9aXe{s`qW|1Qao z(tk2!)#oe8-$?$say`nflah(;th$ zOu0$%Oi=vEvcC>vi~8B;FnZ5hB>R@(CTC!ON_{g2IzCe{h$(kSJ`?*3$~m(C662F{ zi~J47{G(hp!t&pCJY@9efN~__lP-CM+JC3wZy#;?tymwKzYX()pPiDMRR0pJkJR&| zke|M4ui5D)uj_C6oIxi43uBS?jgtFge@eMS@+H_WQJyV-kM}S+^;FCMy4t(lZ*S#q zSAV^t_FW-;tNN=&?f(?qIR6(hXgpz0?Oi7QzhvJbd9v!86Eyo8fcZ03-g}apBwu-; z>Dx5kA5wf}%Kr=LQzZ{keby=7VTyl^HfB zIiu9%g&N=0vcEy?S9Y`MuakYwH6~Z9J(_Y&p5f0A<=-Fscb3q)|EBqsI?C)1)Oyk=`Gk`YKVk@IeJId)=y==gb8%creTVda<@o4<@3achDEPdk z_Q^cW>~BRq*zTv)U?l#{rx!Zbou4)ER;n#=XA^eD~->V z5|bO%UKt=iXR5tw5Enn~DnFC^aD2X3`8ATq`0I(}Yt&x!%g-AszY*hzpUs-jEo)4E zzMI8o60Z5lUtor%%u@T*U|#Zbvf8H&cKj^uXZag>z=BVQ#!s8%K7RYi{wTFiyZpVN z@zaKNjh~r*JZc{vFSGs1LZ;7@zG;fdjcPCN5|b~MeUsuJ#r|jiTx$A1sQoi%n!G~w z>%e}AAI=NcUy>hE{W6h{pTqq2mpnrCYnMDu^~=G$;pYq0FIDZqWrqISS2(qYO()mf zWb&zsx90aI-=_7d9pjpxYc+o}CI330`k~(Z1l9g!lE-WQwn-l5&tD#Z;&Y7R>yZ4m z=4101({IrJCROsUwSV_UoBl4%$4tq;(Ehzi@=W+;eN%&GU%ijXEt1{KETGSrX!?Js z{TnBkoTu?Wd%VfNR{J+e{)gJ12kHF$SMA>@f0Y{lWjUt5N&By6tp}H=zHO6Cf3fPD zA(;;_WBmNmlb=)l`bzHQ*H>~2`i1rxlg&O^^-b0KoP0d=X!A`fe+SGcw@Xe|f7e`O z`9D=WZ5NvSs@lIX+vH7(r%m!xiYG(%jcWgP`MX>3w2ia;EsCd6+i-~01Ja-;eu^8(Xv@aKnQ&tIP;57zpWlV$cie{q_X0gcwB{yGX@@~c3R%G%Q)T4d3%HO&0MSsojnLbtXEoZmMHv&$NFQxhUBi2pI zHEyQj>CKWedYJws#aHu#Gxx@+|C-J-`FPD&KIDs^V*}=|V}ujEZkn$d=bFrmsII<} z+tq*G`KEtI{nsq{YxUnI9S;xDde)3`_}N$e6$m)do6yhv^EjQKm;LoZ@>YMnki4Uh z*{32OKfgm;y7(kFtGt$zO<&=cC;45Kmpah&!!$l}Bo}D@HcP%r^EYsc*&n3w(Iz>h z_D@}H`p4COP18(%Q?e)dbglP|Q%#>MIYV-d-~X4G{###G{tDTrPB;B+(znQdsrtL- zB-7`pzuPg6`MD%u?bUXI6TQJ|?^NkeQ+t<5K3whHE`L4!_8wsQ|Dy6{V;=EyhstY4 zyYcf}z{)FwAAaVjyk^OzDlb*``6{nP{?1W(&8R0of6{yk3^jS;G3LMKY?FH&r}EA+ z`Oy7LZk9Y(^FLMg_h|mt$lvGc-;80Fe_zy_^L3iW^L*7WQ|EWp0rTJ3X!bv7{51_R zd9B7DZ(`$TNPn|$JKf|Z8h@#0nB3gg^ktHHeUamvH$m}}tN7X_mur2>RD8*r|EW{V z{&e+EBjzbTDT==g>kvObVqVcdrnUQgwy((H&^AgN&Y>2uz&jM`qB%Wk7%Rg zbv(VB{R?@BWS(YHZqoIcKTEz>@;!<_2XXOpv%kMX9)6}N{&v;3T=55_pQ`w4Bp;#p zo8|8!#h;=2KCJ$lt@Zt*cTbd!w+NOkz+>Xe^NXVlM!V;XkK}V_r{clzqxI1F zktGGb8J8 zQ924pn4TB$Bzd_QRXD$>#GWnd7d1M+cy3iO9_4*O5gzUzr3;o6M9Fy((V9XPs~CrN z^d0IE_2Xk6Q5&v9Vg)LZSdrK1FQPu~q4<0{zCHgo(s_hc^z-u-pp~>YtGtP2g(Z9% zyQ=8d4!Nm`s(z;qPpwBwW*1ygT0XL*v}7@!D_;@gz#iz0_b1Rzj4nZvd*pbGnR`ZX z7M>woTv+bEJYkHz7{JTJ*sH*!qcy%Rt|}~FY!7edW7<0vQ5DF=)7$yz{gHfpG2hOh z>`_Ls$~-*N_>9x@;xgsU#iQ)wjH6s-a8wp?D_qBwy~P**~Wi8z@Dw#^UL>a zVs9SUv(28he9n4VVFBBRk7SQ)xTwD8Set-nvd3Ae;|n;oW0kh>jJ8)g#47U?U3Ofy zyofI2aEQz47G7mfXb=~A=QP1e(DgLwR7Ovei1f~B5|J2HUfeW^FzkAoL>P5WlZeE< zPLoL6h-ng$96wDWlo4$nIRzptx|}8vHeF7W2%9daNrcTFrb&cVSJNcIq|0d%VUu8* zL}(LElL&oO-$zfA2&?#M(y2@^O*)ma(pAVQybnnW1Hg&v+JlkuLA!n{t? zC`&gVV=ba4Oq?=2YvMFfo@1v@oOPG;C(bfFiQ+VSn@RB*I;T^d&cctFF>w|Vy|gE@ zu4Y%9zpkcOoMBhuTD?8OG1OIFm#ZFwQ7y7)8y(IMcYP7;6zf zA7d?ICS{yDqR+!KGtMaC^o+C0;S02~E3)zSl7d3MV#hy5j5w<2ON2(3mg6vXQhq^E zRfSBZlojBxHfFf{N*pd)n?=0vL`R=|TMLG&z0Rp(WN|4DxvGo&jCt6fB+>99?r2A5uQqBywHOsERY>CB6>z|o;H#fjF5SZe&E^-g8n0eYv29pSsq zb^X%$@*#Ivn{V&+Q5cFayQ1@LOwwTOjaUu+<{Md15S5yjhj*&Yy#fdCSLDshFDmwm z^YZfM;x#vwgYCRIqA#qw?WIA3E8M$-#^ui`EcSi7kWp+@tK}{(D~z(TgE7S6pFodZ zP&oGr--l@@;Wbc&QR#8hGrXrkpM}uplNaTe%|T7%D9T<=6WK-WbrQRZII&4sR9;kB z5v{wYVj~8JJ6r8M-AP6ZRCSRW4%3(?tLgE7snPyV_TE z;k&CnRu|@7?YFux?|SdmMTRc+VO>~vwI}PsJZkdnsbdoD)w=K*H9({GZCzxD+ruTc zv$Y}W^epi(^H(XIsU`N^My!K;nW9aPC`Clo6KE66mZ;nbrbm=M!F=%bBP+4` zFNhj*zRE?MaBf6d#7~AOb%N3F>s2b+HM-7hXf}wu$ZD^_(=M&E!Kt5+AL3C4Uz2D0 z&P%*X7++LkmuB7Tk&gGW$B4D= zdS4N1*}0d9)$Dcu5SO9zoTZEKt?d)HOWc4?Y?feTCpJtl#1k7P80(1*6OQb}rtw2O zv0Z|(p4c#Iz9lwExVp#oQPcp9Ue{wy<5%<;iv(+Vj77{jOWdf4==07sIo5}p!f`8i zj1>-^b?8315+@-3f`M-;3Zj~hD+G@(WiY9*BI>By9azO4(1yR<7#zYW2w%9mha+CD z=z|yGGN*f+6JB3JO=9-_CiFS}((S;)NyCm0~ekjpP7{^}cGKyL& z{HOtH1HDrjy?92XcdnZeiBYcN4zeQ*V|%6Z$U4HPbD@k#-0K<{X&bRTMkMQ1mT^_J z=p$Fmh)fX^rwfZN*U1PkT`rLkHeIfc5jJ~R7$dB@S`#Box?Bz;Y@()fT&pEq1S4`s zjfv>>FTyHv2F4Z=&xkJTTVdCW{p=s0@j#-HkW=OCoC9+GjJ|(h?TdEQoMU0?`RV$%s z7YkTITdkW3br`9YI9JPynLm3w=E4h@=a)?1>!F!5n}#)O+{o#9d1Hd3ri{HLJ2*9O z^u%!!C*@5Jjth>?4UWm<+vN9j_J^DojGQtqH__tPsVlPk9y$~30%_!R^LQPuTz4jN zCG3=3_NajqvG~Q9#T|$7sHW2m_jZK|8a?*qZ$(>Ua zb22Y0m_0U&v(8Q5$vGoO2S;a(oa85T8fQ-!6P%EnH#K`qZkDgb*}2&h tCm_Jw(P4dOZUh~il$SGd%os%EXYW+oVlkvE#Ti{GPVY)_8gEqm{{WH=vIzhH literal 166144 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%0A`n2xY(K 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 diff --git a/bindings/odin/clay-odin/wasm/clay.o b/bindings/odin/clay-odin/wasm/clay.o index bf4f8db00c57986c10c7ce8f51b16d4e3e6f1d81..a1240fb9eec47a97becea05814507c0e3c791f4f 100644 GIT binary patch literal 253760 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 z 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 diff --git a/bindings/odin/examples/clay-official-website/clay-official-website.odin b/bindings/odin/examples/clay-official-website/clay-official-website.odin index 7dcd1eb..5d376fb 100644 --- a/bindings/odin/examples/clay-official-website/clay-official-website.odin +++ b/bindings/odin/examples/clay-official-website/clay-official-website.odin @@ -57,46 +57,52 @@ headerTextConfig := clay.TextElementConfig { textColor = {61, 26, 5, 255}, } +border2pxRed := clay.BorderElementConfig { + width = { 2, 2, 2, 2, 0 }, + color = COLOR_RED +} + LandingPageBlob :: proc(index: u32, fontSize: u16, fontId: u16, color: clay.Color, text: string, image: ^raylib.Texture2D) { - if clay.UI( - clay.ID("HeroBlob", index), - clay.Layout({sizing = {width = clay.SizingGrow({max = 480})}, padding = clay.PaddingAll(16), childGap = 16, childAlignment = clay.ChildAlignment{y = .CENTER}}), - clay.BorderOutsideRadius({2, color}, 10), - ) { - if clay.UI( - clay.ID("CheckImage", index), - clay.Layout({sizing = {width = clay.SizingFixed(32)}}), - clay.Image({imageData = image, sourceDimensions = {128, 128}}), - ) {} + if clay.UI().configure({ + id = clay.ID("HeroBlob", index), + layout = { sizing = { width = clay.SizingGrow({ max = 480 }) }, padding = clay.PaddingAll(16), childGap = 16, childAlignment = clay.ChildAlignment{ y = .CENTER } }, + border = border2pxRed, + cornerRadius = clay.CornerRadiusAll(10) + }) { + if clay.UI().configure({ + id = clay.ID("CheckImage", index), + layout = { sizing = { width = clay.SizingFixed(32) } }, + image = { imageData = image, sourceDimensions = { 128, 128 } }, + }) {} clay.Text(text, clay.TextConfig({fontSize = fontSize, fontId = fontId, textColor = color})) } } LandingPageDesktop :: proc() { - if clay.UI( - clay.ID("LandingPage1Desktop"), - clay.Layout({sizing = {width = clay.SizingGrow({}), height = clay.SizingFit({min = cast(f32)windowHeight - 70})}, childAlignment = {y = .CENTER}, padding = {left = 50, right = 50}}), - ) { - if clay.UI( - clay.ID("LandingPage1"), - clay.Layout({sizing = {clay.SizingGrow({}), clay.SizingGrow({})}, childAlignment = {y = .CENTER}, padding = clay.PaddingAll(32), childGap = 32}), - clay.Border({left = {2, COLOR_RED}, right = {2, COLOR_RED}}), - ) { - if clay.UI(clay.ID("LeftText"), clay.Layout({sizing = {width = clay.SizingPercent(0.55)}, layoutDirection = .TOP_TO_BOTTOM, childGap = 8})) { + if clay.UI().configure({ + id = clay.ID("LandingPage1Desktop"), + layout = { sizing = { width = clay.SizingGrow({ }), height = clay.SizingFit({ min = cast(f32)windowHeight - 70 }) }, childAlignment = { y = .CENTER }, padding = { left = 50, right = 50 } }, + }) { + if clay.UI().configure({ + id = clay.ID("LandingPage1"), + layout = { sizing = { clay.SizingGrow({ }), clay.SizingGrow({ }) }, childAlignment = { y = .CENTER }, padding = clay.PaddingAll(32), childGap = 32 }, + border = { COLOR_RED, { left = 2, right = 2 } }, + }) { + if clay.UI().configure({ id = clay.ID("LeftText"), layout = { sizing = { width = clay.SizingPercent(0.55) }, layoutDirection = .TOP_TO_BOTTOM, childGap = 8 } }) { clay.Text( "Clay is a flex-box style UI auto layout library in C, with declarative syntax and microsecond performance.", clay.TextConfig({fontSize = 56, fontId = FONT_ID_TITLE_56, textColor = COLOR_RED}), ) -// if clay.UI(clay.Layout({sizing = {width = clay.SizingGrow({}), height = clay.SizingFixed(32)}})) {} + if clay.UI().configure({ layout = { sizing = { width = clay.SizingGrow({}), height = clay.SizingFixed(32) } } }) {} clay.Text( "Clay is laying out this webpage right now!", clay.TextConfig({fontSize = 36, fontId = FONT_ID_TITLE_36, textColor = COLOR_ORANGE}), ) } - if clay.UI( - clay.ID("HeroImageOuter"), - clay.Layout({layoutDirection = .TOP_TO_BOTTOM, sizing = {width = clay.SizingPercent(0.45)}, childAlignment = {x = .CENTER}, childGap = 16}), - ) { + if clay.UI().configure({ + id = clay.ID("HeroImageOuter"), + layout = { layoutDirection = .TOP_TO_BOTTOM, sizing = { width = clay.SizingPercent(0.45) }, childAlignment = { x = .CENTER }, childGap = 16 }, + }) { LandingPageBlob(1, 30, FONT_ID_BODY_30, COLOR_BLOB_BORDER_5, "High performance", &checkImage5) LandingPageBlob(2, 30, FONT_ID_BODY_30, COLOR_BLOB_BORDER_4, "Flexbox-style responsive layout", &checkImage4) LandingPageBlob(3, 30, FONT_ID_BODY_30, COLOR_BLOB_BORDER_3, "Declarative syntax", &checkImage3) @@ -108,33 +114,31 @@ LandingPageDesktop :: proc() { } LandingPageMobile :: proc() { - if clay.UI( - clay.ID("LandingPage1Mobile"), - clay.Layout( - { - layoutDirection = .TOP_TO_BOTTOM, - sizing = {width = clay.SizingGrow({}), height = clay.SizingFit({min = cast(f32)windowHeight - 70})}, - childAlignment = {x = .CENTER, y = .CENTER}, - padding = {16, 16, 32, 32}, - childGap = 32, - }, - ), - ) { - if clay.UI(clay.ID("LeftText"), clay.Layout({sizing = {width = clay.SizingGrow({})}, layoutDirection = .TOP_TO_BOTTOM, childGap = 8})) { + if clay.UI().configure({ + id = clay.ID("LandingPage1Mobile"), + layout = { + layoutDirection = .TOP_TO_BOTTOM, + sizing = { width = clay.SizingGrow({ }), height = clay.SizingFit({ min = cast(f32)windowHeight - 70 }) }, + childAlignment = { x = .CENTER, y = .CENTER }, + padding = { 16, 16, 32, 32 }, + childGap = 32, + }, + }) { + if clay.UI().configure({ id = clay.ID("LeftText"), layout = { sizing = { width = clay.SizingGrow({ }) }, layoutDirection = .TOP_TO_BOTTOM, childGap = 8 } }) { clay.Text( "Clay is a flex-box style UI auto layout library in C, with declarative syntax and microsecond performance.", clay.TextConfig({fontSize = 48, fontId = FONT_ID_TITLE_48, textColor = COLOR_RED}), ) - if clay.UI(clay.Layout({sizing = {width = clay.SizingGrow({}), height = clay.SizingFixed(32)}})) {} + if clay.UI().configure({ layout = { sizing = { width = clay.SizingGrow({}), height = clay.SizingFixed(32) } } }) {} clay.Text( "Clay is laying out this webpage right now!", clay.TextConfig({fontSize = 32, fontId = FONT_ID_TITLE_32, textColor = COLOR_ORANGE}), ) } - if clay.UI( - clay.ID("HeroImageOuter"), - clay.Layout({layoutDirection = .TOP_TO_BOTTOM, sizing = {width = clay.SizingGrow({})}, childAlignment = {x = .CENTER}, childGap = 16}), - ) { + if clay.UI().configure({ + id = clay.ID("HeroImageOuter"), + layout = { layoutDirection = .TOP_TO_BOTTOM, sizing = { width = clay.SizingGrow({ }) }, childAlignment = { x = .CENTER }, childGap = 16 }, + }) { LandingPageBlob(1, 24, FONT_ID_BODY_24, COLOR_BLOB_BORDER_5, "High performance", &checkImage5) LandingPageBlob(2, 24, FONT_ID_BODY_24, COLOR_BLOB_BORDER_4, "Flexbox-style responsive layout", &checkImage4) LandingPageBlob(3, 24, FONT_ID_BODY_24, COLOR_BLOB_BORDER_3, "Declarative syntax", &checkImage3) @@ -146,20 +150,20 @@ LandingPageMobile :: proc() { FeatureBlocks :: proc(widthSizing: clay.SizingAxis, outerPadding: u16) { textConfig := clay.TextConfig({fontSize = 24, fontId = FONT_ID_BODY_24, textColor = COLOR_RED}) - if clay.UI( - clay.ID("HFileBoxOuter"), - clay.Layout({layoutDirection = .TOP_TO_BOTTOM, sizing = {width = widthSizing}, childAlignment = {y = .CENTER}, padding = {outerPadding, outerPadding, 32, 32}, childGap = 8}), - ) { - if clay.UI(clay.ID("HFileIncludeOuter"), clay.Layout({padding = {8, 8, 4, 4}}), clay.Rectangle({color = COLOR_RED, cornerRadius = clay.CornerRadiusAll(8)})) { + if clay.UI().configure({ + id = clay.ID("HFileBoxOuter"), + layout = { layoutDirection = .TOP_TO_BOTTOM, sizing = { width = widthSizing }, childAlignment = { y = .CENTER }, padding = { outerPadding, outerPadding, 32, 32 }, childGap = 8 }, + }) { + if clay.UI().configure({ id = clay.ID("HFileIncludeOuter"), layout = { padding = { 8, 8, 4, 4 } }, backgroundColor = COLOR_RED, cornerRadius = clay.CornerRadiusAll(8) }) { clay.Text("#include clay.h", clay.TextConfig({fontSize = 24, fontId = FONT_ID_BODY_24, textColor = COLOR_LIGHT})) } clay.Text("~2000 lines of C99.", textConfig) clay.Text("Zero dependencies, including no C standard library.", textConfig) } - if clay.UI( - clay.ID("BringYourOwnRendererOuter"), - clay.Layout({layoutDirection = .TOP_TO_BOTTOM, sizing = {width = widthSizing}, childAlignment = {y = .CENTER}, padding = {outerPadding, outerPadding, 32, 32}, childGap = 8}), - ) { + if clay.UI().configure({ + id = clay.ID("BringYourOwnRendererOuter"), + layout = { layoutDirection = .TOP_TO_BOTTOM, sizing = { width = widthSizing }, childAlignment = { y = .CENTER }, padding = { outerPadding, outerPadding, 32, 32 }, childGap = 8 }, + }) { clay.Text("Renderer agnostic.", clay.TextConfig({fontId = FONT_ID_BODY_24, fontSize = 24, textColor = COLOR_ORANGE})) clay.Text("Layout with clay, then render with Raylib, WebGL Canvas or even as HTML.", textConfig) clay.Text("Flexible output for easy compositing in your custom engine or environment.", textConfig) @@ -167,31 +171,31 @@ FeatureBlocks :: proc(widthSizing: clay.SizingAxis, outerPadding: u16) { } FeatureBlocksDesktop :: proc() { - if clay.UI(clay.ID("FeatureBlocksOuter"), clay.Layout({sizing = {width = clay.SizingGrow({})}})) { - if clay.UI( - clay.ID("FeatureBlocksInner"), - clay.Layout({sizing = {width = clay.SizingGrow({})}, childAlignment = {y = .CENTER}}), - clay.Border({betweenChildren = {width = 2, color = COLOR_RED}}), - ) { + if clay.UI().configure({ id = clay.ID("FeatureBlocksOuter"), layout = { sizing = { width = clay.SizingGrow({}) } } }) { + if clay.UI().configure({ + id = clay.ID("FeatureBlocksInner"), + layout = { sizing = { width = clay.SizingGrow({ }) }, childAlignment = { y = .CENTER } }, + border = { width = { betweenChildren = 2}, color = COLOR_RED }, + }) { FeatureBlocks(clay.SizingPercent(0.5), 50) } } } FeatureBlocksMobile :: proc() { - if clay.UI( - clay.ID("FeatureBlocksInner"), - clay.Layout({layoutDirection = .TOP_TO_BOTTOM, sizing = {width = clay.SizingGrow({})}}), - clay.Border({betweenChildren = {width = 2, color = COLOR_RED}}), - ) { + if clay.UI().configure({ + id = clay.ID("FeatureBlocksInner"), + layout = { layoutDirection = .TOP_TO_BOTTOM, sizing = { width = clay.SizingGrow({ }) } }, + border = { width = { betweenChildren = 2}, color = COLOR_RED }, + }) { FeatureBlocks(clay.SizingGrow({}), 16) } } DeclarativeSyntaxPage :: proc(titleTextConfig: clay.TextElementConfig, widthSizing: clay.SizingAxis) { - if clay.UI(clay.ID("SyntaxPageLeftText"), clay.Layout({sizing = {width = widthSizing}, layoutDirection = .TOP_TO_BOTTOM, childGap = 8})) { + if clay.UI().configure({ id = clay.ID("SyntaxPageLeftText"), layout = { sizing = { width = widthSizing }, layoutDirection = .TOP_TO_BOTTOM, childGap = 8 } }) { clay.Text("Declarative Syntax", clay.TextConfig(titleTextConfig)) - if clay.UI(clay.ID("SyntaxSpacer"), clay.Layout({sizing = {width = clay.SizingGrow({max = 16})}})) {} + if clay.UI().configure({ id = clay.ID("SyntaxSpacer"), layout = { sizing = { width = clay.SizingGrow({ max = 16 }) } } }) {} clay.Text( "Flexible and readable declarative syntax with nested UI element hierarchies.", clay.TextConfig({fontSize = 28, fontId = FONT_ID_BODY_28, textColor = COLOR_RED}), @@ -205,43 +209,41 @@ DeclarativeSyntaxPage :: proc(titleTextConfig: clay.TextElementConfig, widthSizi clay.TextConfig({fontSize = 28, fontId = FONT_ID_BODY_28, textColor = COLOR_RED}), ) } - if clay.UI(clay.ID("SyntaxPageRightImage"), clay.Layout({sizing = {width = widthSizing}, childAlignment = {x = .CENTER}})) { - if clay.UI( - clay.ID("SyntaxPageRightImageInner"), - clay.Layout({sizing = {width = clay.SizingGrow({max = 568})}}), - clay.Image({imageData = &syntaxImage, sourceDimensions = {1136, 1194}}), - ) {} + if clay.UI().configure({ id = clay.ID("SyntaxPageRightImage"), layout = { sizing = { width = widthSizing }, childAlignment = { x = .CENTER } } }) { + if clay.UI().configure({ + id = clay.ID("SyntaxPageRightImageInner"), + layout = { sizing = { width = clay.SizingGrow({ max = 568 }) } }, + image = { imageData = &syntaxImage, sourceDimensions = { 1136, 1194 } }, + }) {} } } DeclarativeSyntaxPageDesktop :: proc() { - if clay.UI( - clay.ID("SyntaxPageDesktop"), - clay.Layout({sizing = {clay.SizingGrow({}), clay.SizingFit({min = cast(f32)windowHeight - 50})}, childAlignment = {y = .CENTER}, padding = {left = 50, right = 50}}), - ) { - if clay.UI( - clay.ID("SyntaxPage"), - clay.Layout({sizing = {clay.SizingGrow({}), clay.SizingGrow({})}, childAlignment = {y = .CENTER}, padding = clay.PaddingAll(32), childGap = 32}), - clay.Border({left = {2, COLOR_RED}, right = {2, COLOR_RED}}), - ) { + if clay.UI().configure({ + id = clay.ID("SyntaxPageDesktop"), + layout = { sizing = { clay.SizingGrow({ }), clay.SizingFit({ min = cast(f32)windowHeight - 50 }) }, childAlignment = { y = .CENTER }, padding = { left = 50, right = 50 } }, + }) { + if clay.UI().configure({ + id = clay.ID("SyntaxPage"), + layout = { sizing = { clay.SizingGrow({ }), clay.SizingGrow({ }) }, childAlignment = { y = .CENTER }, padding = clay.PaddingAll(32), childGap = 32 }, + border = border2pxRed, + }) { DeclarativeSyntaxPage({fontSize = 52, fontId = FONT_ID_TITLE_52, textColor = COLOR_RED}, clay.SizingPercent(0.5)) } } } DeclarativeSyntaxPageMobile :: proc() { - if clay.UI( - clay.ID("SyntaxPageMobile"), - clay.Layout( - { - layoutDirection = .TOP_TO_BOTTOM, - sizing = {clay.SizingGrow({}), clay.SizingFit({min = cast(f32)windowHeight - 50})}, - childAlignment = {x = .CENTER, y = .CENTER}, - padding = {16, 16, 32, 32}, - childGap = 16, - }, - ), - ) { + if clay.UI().configure({ + id = clay.ID("SyntaxPageMobile"), + layout = { + layoutDirection = .TOP_TO_BOTTOM, + sizing = { clay.SizingGrow({ }), clay.SizingFit({ min = cast(f32)windowHeight - 50 }) }, + childAlignment = { x = .CENTER, y = .CENTER }, + padding = { 16, 16, 32, 32 }, + childGap = 16, + }, + }) { DeclarativeSyntaxPage({fontSize = 48, fontId = FONT_ID_TITLE_48, textColor = COLOR_RED}, clay.SizingGrow({})) } } @@ -253,9 +255,9 @@ ColorLerp :: proc(a: clay.Color, b: clay.Color, amount: f32) -> clay.Color { LOREM_IPSUM_TEXT := "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." HighPerformancePage :: proc(lerpValue: f32, titleTextConfig: clay.TextElementConfig, widthSizing: clay.SizingAxis) { - if clay.UI(clay.ID("PerformanceLeftText"), clay.Layout({sizing = {width = widthSizing}, layoutDirection = .TOP_TO_BOTTOM, childGap = 8})) { + if clay.UI().configure({ id = clay.ID("PerformanceLeftText"), layout = { sizing = { width = widthSizing }, layoutDirection = .TOP_TO_BOTTOM, childGap = 8 } }) { clay.Text("High Performance", clay.TextConfig(titleTextConfig)) - if clay.UI(clay.Layout({sizing = {width = clay.SizingGrow({max = 16})}})) {} + if clay.UI().configure({ layout = { sizing = { width = clay.SizingGrow({ max = 16 }) } }}) {} clay.Text( "Fast enough to recompute your entire UI every frame.", clay.TextConfig({fontSize = 28, fontId = FONT_ID_BODY_36, textColor = COLOR_LIGHT}), @@ -269,24 +271,24 @@ HighPerformancePage :: proc(lerpValue: f32, titleTextConfig: clay.TextElementCon clay.TextConfig({fontSize = 28, fontId = FONT_ID_BODY_36, textColor = COLOR_LIGHT}), ) } - if clay.UI(clay.ID("PerformanceRightImageOuter"), clay.Layout({sizing = {width = widthSizing}, childAlignment = {x = .CENTER}})) { - if clay.UI( - clay.ID("PerformanceRightBorder"), - clay.Layout({sizing = {clay.SizingGrow({}), clay.SizingFixed(400)}}), - clay.BorderAll({width = 2, color = COLOR_LIGHT}), - ) { - if clay.UI( - clay.ID("AnimationDemoContainerLeft"), - clay.Layout({sizing = {clay.SizingPercent(0.35 + 0.3 * lerpValue), clay.SizingGrow({})}, childAlignment = {y = .CENTER}, padding = clay.PaddingAll(16)}), - clay.Rectangle({color = ColorLerp(COLOR_RED, COLOR_ORANGE, lerpValue)}), - ) { + if clay.UI().configure({ id = clay.ID("PerformanceRightImageOuter"), layout = { sizing = { width = widthSizing }, childAlignment = { x = .CENTER } } }) { + if clay.UI().configure({ + id = clay.ID("PerformanceRightBorder"), + layout = { sizing = { clay.SizingGrow({ }), clay.SizingFixed(400) } }, + border = { COLOR_LIGHT, {2, 2, 2, 2, 2} }, + }) { + if clay.UI().configure({ + id = clay.ID("AnimationDemoContainerLeft"), + layout = { sizing = { clay.SizingPercent(0.35 + 0.3 * lerpValue), clay.SizingGrow({ }) }, childAlignment = { y = .CENTER }, padding = clay.PaddingAll(16) }, + backgroundColor = ColorLerp(COLOR_RED, COLOR_ORANGE, lerpValue), + }) { clay.Text(LOREM_IPSUM_TEXT, clay.TextConfig({fontSize = 16, fontId = FONT_ID_BODY_16, textColor = COLOR_LIGHT})) } - if clay.UI( - clay.ID("AnimationDemoContainerRight"), - clay.Layout({sizing = {clay.SizingGrow({}), clay.SizingGrow({})}, childAlignment = {y = .CENTER}, padding = clay.PaddingAll(16)}), - clay.Rectangle({color = ColorLerp(COLOR_ORANGE, COLOR_RED, lerpValue)}), - ) { + if clay.UI().configure({ + id = clay.ID("AnimationDemoContainerRight"), + layout = { sizing = { clay.SizingGrow({ }), clay.SizingGrow({ }) }, childAlignment = { y = .CENTER }, padding = clay.PaddingAll(16) }, + backgroundColor = ColorLerp(COLOR_ORANGE, COLOR_RED, lerpValue), + }) { clay.Text(LOREM_IPSUM_TEXT, clay.TextConfig({fontSize = 16, fontId = FONT_ID_BODY_16, textColor = COLOR_LIGHT})) } } @@ -294,60 +296,58 @@ HighPerformancePage :: proc(lerpValue: f32, titleTextConfig: clay.TextElementCon } HighPerformancePageDesktop :: proc(lerpValue: f32) { - if clay.UI( - clay.ID("PerformanceDesktop"), - clay.Layout( - {sizing = {clay.SizingGrow({}), clay.SizingFit({min = cast(f32)windowHeight - 50})}, childAlignment = {y = .CENTER}, padding = {82, 82, 32, 32}, childGap = 64}, - ), - clay.Rectangle({color = COLOR_RED}), - ) { + if clay.UI().configure({ + id = clay.ID("PerformanceDesktop"), + layout = { sizing = { clay.SizingGrow({ }), clay.SizingFit({ min = cast(f32)windowHeight - 50 }) }, childAlignment = { y = .CENTER }, padding = { 82, 82, 32, 32 }, childGap = 64 }, + backgroundColor = COLOR_RED, + }) { HighPerformancePage(lerpValue, {fontSize = 52, fontId = FONT_ID_TITLE_52, textColor = COLOR_LIGHT}, clay.SizingPercent(0.5)) } } HighPerformancePageMobile :: proc(lerpValue: f32) { - if clay.UI( - clay.ID("PerformanceMobile"), - clay.Layout( - { - layoutDirection = .TOP_TO_BOTTOM, - sizing = {clay.SizingGrow({}), clay.SizingFit({min = cast(f32)windowHeight - 50})}, - childAlignment = {x = .CENTER, y = .CENTER}, - padding = { 16, 16, 32, 32}, - childGap = 32, - }, - ), - clay.Rectangle({color = COLOR_RED}), - ) { + if clay.UI().configure({ + id = clay.ID("PerformanceMobile"), + layout = { + layoutDirection = .TOP_TO_BOTTOM, + sizing = { clay.SizingGrow({ }), clay.SizingFit({ min = cast(f32)windowHeight - 50 }) }, + childAlignment = { x = .CENTER, y = .CENTER }, + padding = { 16, 16, 32, 32 }, + childGap = 32, + }, + backgroundColor = COLOR_RED, + }) { HighPerformancePage(lerpValue, {fontSize = 48, fontId = FONT_ID_TITLE_48, textColor = COLOR_LIGHT}, clay.SizingGrow({})) } } RendererButtonActive :: proc(index: i32, text: string) { - if clay.UI( - clay.Layout({sizing = {width = clay.SizingFixed(300)}, padding = clay.PaddingAll(16)}), - clay.Rectangle({color = COLOR_RED, cornerRadius = clay.CornerRadiusAll(10)}), - ) { + if clay.UI().configure({ + layout = { sizing = { width = clay.SizingFixed(300) }, padding = clay.PaddingAll(16) }, + backgroundColor = COLOR_RED, + cornerRadius = clay.CornerRadiusAll(10) + }) { clay.Text(text, clay.TextConfig({fontSize = 28, fontId = FONT_ID_BODY_28, textColor = COLOR_LIGHT})) } } RendererButtonInactive :: proc(index: u32, text: string) { - if clay.UI(clay.Layout({}), clay.BorderOutsideRadius({2, COLOR_RED}, 10)) { - if clay.UI( - clay.ID("RendererButtonInactiveInner", index), - clay.Layout({sizing = {width = clay.SizingFixed(300)}, padding = clay.PaddingAll(16)}), - clay.Rectangle({color = COLOR_LIGHT, cornerRadius = clay.CornerRadiusAll(10)}), - ) { + if clay.UI().configure({ border = border2pxRed }) { + if clay.UI().configure({ + id = clay.ID("RendererButtonInactiveInner", index), + layout = { sizing = { width = clay.SizingFixed(300) }, padding = clay.PaddingAll(16) }, + backgroundColor = COLOR_LIGHT, + cornerRadius = clay.CornerRadiusAll(10) + }) { clay.Text(text, clay.TextConfig({fontSize = 28, fontId = FONT_ID_BODY_28, textColor = COLOR_RED})) } } } RendererPage :: proc(titleTextConfig: clay.TextElementConfig, widthSizing: clay.SizingAxis) { - if clay.UI(clay.ID("RendererLeftText"), clay.Layout({sizing = {width = widthSizing}, layoutDirection = .TOP_TO_BOTTOM, childGap = 8})) { + if clay.UI().configure({ id = clay.ID("RendererLeftText"), layout = { sizing = { width = widthSizing }, layoutDirection = .TOP_TO_BOTTOM, childGap = 8 } }) { clay.Text("Renderer & Platform Agnostic", clay.TextConfig(titleTextConfig)) - if clay.UI(clay.Layout({sizing = {width = clay.SizingGrow({max = 16})}})) {} + if clay.UI().configure({ layout = { sizing = { width = clay.SizingGrow({ max = 16 }) } } }) {} clay.Text( "Clay outputs a sorted array of primitive render commands, such as RECTANGLE, TEXT or IMAGE.", clay.TextConfig({fontSize = 28, fontId = FONT_ID_BODY_36, textColor = COLOR_RED}), @@ -361,45 +361,43 @@ RendererPage :: proc(titleTextConfig: clay.TextElementConfig, widthSizing: clay. clay.TextConfig({fontSize = 28, fontId = FONT_ID_BODY_36, textColor = COLOR_RED}), ) } - if clay.UI( - clay.ID("RendererRightText"), - clay.Layout({sizing = {width = widthSizing}, childAlignment = {x = .CENTER}, layoutDirection = .TOP_TO_BOTTOM, childGap = 16}), - ) { + if clay.UI().configure({ + id = clay.ID("RendererRightText"), + layout = { sizing = { width = widthSizing }, childAlignment = { x = .CENTER }, layoutDirection = .TOP_TO_BOTTOM, childGap = 16 }, + }) { clay.Text("Try changing renderer!", clay.TextConfig({fontSize = 36, fontId = FONT_ID_BODY_36, textColor = COLOR_ORANGE})) - if clay.UI(clay.Layout({sizing = {width = clay.SizingGrow({max = 32})}})) {} + if clay.UI().configure({ layout = { sizing = { width = clay.SizingGrow({ max = 32 }) } } }) {} RendererButtonActive(0, "Raylib Renderer") } } RendererPageDesktop :: proc() { - if clay.UI( - clay.ID("RendererPageDesktop"), - clay.Layout({sizing = {clay.SizingGrow({}), clay.SizingFit({min = cast(f32)windowHeight - 50})}, childAlignment = {y = .CENTER}, padding = {left = 50, right = 50}}), - ) { - if clay.UI( - clay.ID("RendererPage"), - clay.Layout({sizing = {clay.SizingGrow({}), clay.SizingGrow({})}, childAlignment = {y = .CENTER}, padding = clay.PaddingAll(32), childGap = 32}), - clay.Border({left = {2, COLOR_RED}, right = {2, COLOR_RED}}), - ) { + if clay.UI().configure({ + id = clay.ID("RendererPageDesktop"), + layout = { sizing = { clay.SizingGrow({ }), clay.SizingFit({ min = cast(f32)windowHeight - 50 }) }, childAlignment = { y = .CENTER }, padding = { left = 50, right = 50 } }, + }) { + if clay.UI().configure({ + id = clay.ID("RendererPage"), + layout = { sizing = { clay.SizingGrow({ }), clay.SizingGrow({ }) }, childAlignment = { y = .CENTER }, padding = clay.PaddingAll(32), childGap = 32 }, + border = { COLOR_RED, { left = 2, right = 2 } }, + }) { RendererPage({fontSize = 52, fontId = FONT_ID_TITLE_52, textColor = COLOR_RED}, clay.SizingPercent(0.5)) } } } RendererPageMobile :: proc() { - if clay.UI( - clay.ID("RendererMobile"), - clay.Layout( - { - layoutDirection = .TOP_TO_BOTTOM, - sizing = {clay.SizingGrow({}), clay.SizingFit({min = cast(f32)windowHeight - 50})}, - childAlignment = {x = .CENTER, y = .CENTER}, - padding = {16, 16, 32, 32}, - childGap = 32, - }, - ), - clay.Rectangle({color = COLOR_LIGHT}), - ) { + if clay.UI().configure({ + id = clay.ID("RendererMobile"), + layout = { + layoutDirection = .TOP_TO_BOTTOM, + sizing = { clay.SizingGrow({ }), clay.SizingFit({ min = cast(f32)windowHeight - 50 }) }, + childAlignment = { x = .CENTER, y = .CENTER }, + padding = { 16, 16, 32, 32 }, + childGap = 32, + }, + backgroundColor = COLOR_LIGHT, + }) { RendererPage({fontSize = 48, fontId = FONT_ID_TITLE_48, textColor = COLOR_RED}, clay.SizingGrow({})) } } @@ -416,47 +414,48 @@ animationLerpValue: f32 = -1.0 createLayout :: proc(lerpValue: f32) -> clay.ClayArray(clay.RenderCommand) { mobileScreen := windowWidth < 750 clay.BeginLayout() - if clay.UI( - clay.ID("OuterContainer"), - clay.Layout({layoutDirection = .TOP_TO_BOTTOM, sizing = {clay.SizingGrow({}), clay.SizingGrow({})}}), - clay.Rectangle({color = COLOR_LIGHT}), - ) { - if clay.UI( - clay.ID("Header"), - clay.Layout({sizing = {clay.SizingGrow({}), clay.SizingFixed(50)}, childAlignment = {y = .CENTER}, childGap = 24, padding = {left = 32, right = 32}}), - ) { + if clay.UI().configure({ + id = clay.ID("OuterContainer"), + layout = { layoutDirection = .TOP_TO_BOTTOM, sizing = { clay.SizingGrow({ }), clay.SizingGrow({ }) } }, + backgroundColor = COLOR_LIGHT, + }) { + if clay.UI().configure({ + id = clay.ID("Header"), + layout = { sizing = { clay.SizingGrow({ }), clay.SizingFixed(50) }, childAlignment = { y = .CENTER }, childGap = 24, padding = { left = 32, right = 32 } }, + }) { clay.Text("Clay", &headerTextConfig) - if clay.UI(clay.Layout({sizing = {width = clay.SizingGrow({})}})) {} + if clay.UI().configure({ layout = { sizing = { width = clay.SizingGrow({ }) } } }) {} if (!mobileScreen) { - if clay.UI(clay.ID("LinkExamplesOuter"), clay.Layout({}), clay.Rectangle({color = {0, 0, 0, 0}})) { + if clay.UI().configure({ id = clay.ID("LinkExamplesOuter"), backgroundColor = {0, 0, 0, 0} }) { clay.Text("Examples", clay.TextConfig({fontId = FONT_ID_BODY_24, fontSize = 24, textColor = {61, 26, 5, 255}})) } - if clay.UI(clay.ID("LinkDocsOuter"), clay.Layout({}), clay.Rectangle({color = {0, 0, 0, 0}})) { + if clay.UI().configure({ id = clay.ID("LinkDocsOuter"), backgroundColor = {0, 0, 0, 0} }) { clay.Text("Docs", clay.TextConfig({fontId = FONT_ID_BODY_24, fontSize = 24, textColor = {61, 26, 5, 255}})) } } - if clay.UI( - clay.ID("LinkGithubOuter"), - clay.Layout({padding = {16, 16, 6, 6}}), - clay.BorderOutsideRadius({2, COLOR_RED}, 10), - clay.Rectangle({cornerRadius = clay.CornerRadiusAll(10), color = clay.PointerOver(clay.GetElementId(clay.MakeString("LinkGithubOuter"))) ? COLOR_LIGHT_HOVER : COLOR_LIGHT}) - ) { + if clay.UI().configure({ + id = clay.ID("LinkGithubOuter"), + layout = { padding = { 16, 16, 6, 6 } }, + border = border2pxRed, + backgroundColor = clay.PointerOver(clay.GetElementId(clay.MakeString("LinkGithubOuter"))) ? COLOR_LIGHT_HOVER : COLOR_LIGHT, + cornerRadius = clay.CornerRadiusAll(10) + }) { clay.Text("Github", clay.TextConfig({fontId = FONT_ID_BODY_24, fontSize = 24, textColor = {61, 26, 5, 255}})) } } - if clay.UI(clay.ID("TopBorder1"), clay.Layout({sizing = {clay.SizingGrow({}), clay.SizingFixed(4)}}), clay.Rectangle({color = COLOR_TOP_BORDER_5})) {} - if clay.UI(clay.ID("TopBorder2"), clay.Layout({sizing = {clay.SizingGrow({}), clay.SizingFixed(4)}}), clay.Rectangle({color = COLOR_TOP_BORDER_4})) {} - if clay.UI(clay.ID("TopBorder3"), clay.Layout({sizing = {clay.SizingGrow({}), clay.SizingFixed(4)}}), clay.Rectangle({color = COLOR_TOP_BORDER_3})) {} - if clay.UI(clay.ID("TopBorder4"), clay.Layout({sizing = {clay.SizingGrow({}), clay.SizingFixed(4)}}), clay.Rectangle({color = COLOR_TOP_BORDER_2})) {} - if clay.UI(clay.ID("TopBorder5"), clay.Layout({sizing = {clay.SizingGrow({}), clay.SizingFixed(4)}}), clay.Rectangle({color = COLOR_TOP_BORDER_1})) {} - if clay.UI( - clay.ID("ScrollContainerBackgroundRectangle"), - clay.Scroll({vertical = true}), - clay.Layout({sizing = {clay.SizingGrow({}), clay.SizingGrow({})}, layoutDirection = clay.LayoutDirection.TOP_TO_BOTTOM}), - clay.Rectangle({color = COLOR_LIGHT}), - clay.Border({betweenChildren = {2, COLOR_RED}}) - ) { + if clay.UI().configure({ id = clay.ID("TopBorder1"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingFixed(4) } }, backgroundColor = COLOR_TOP_BORDER_5 } ) {} + if clay.UI().configure({ id = clay.ID("TopBorder2"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingFixed(4) } }, backgroundColor = COLOR_TOP_BORDER_4 } ) {} + if clay.UI().configure({ id = clay.ID("TopBorder3"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingFixed(4) } }, backgroundColor = COLOR_TOP_BORDER_3 } ) {} + if clay.UI().configure({ id = clay.ID("TopBorder4"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingFixed(4) } }, backgroundColor = COLOR_TOP_BORDER_2 } ) {} + if clay.UI().configure({ id = clay.ID("TopBorder5"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingFixed(4) } }, backgroundColor = COLOR_TOP_BORDER_1 } ) {} + if clay.UI().configure({ + id = clay.ID("ScrollContainerBackgroundRectangle"), + scroll = { vertical = true }, + layout = { sizing = { clay.SizingGrow({ }), clay.SizingGrow({ }) }, layoutDirection = clay.LayoutDirection.TOP_TO_BOTTOM }, + backgroundColor = COLOR_LIGHT, + border = { COLOR_RED, { betweenChildren = 2} }, + }) { if (!mobileScreen) { LandingPageDesktop() FeatureBlocksDesktop() diff --git a/bindings/odin/examples/clay-official-website/clay_renderer_raylib.odin b/bindings/odin/examples/clay-official-website/clay_renderer_raylib.odin index 470e417..7a6408c 100644 --- a/bindings/odin/examples/clay-official-website/clay_renderer_raylib.odin +++ b/bindings/odin/examples/clay-official-website/clay_renderer_raylib.odin @@ -56,22 +56,24 @@ clayRaylibRender :: proc(renderCommands: ^clay.ClayArray(clay.RenderCommand), al case clay.RenderCommandType.None: {} case clay.RenderCommandType.Text: + config := renderCommand.renderData.text // Raylib uses standard C strings so isn't compatible with cheap slices, we need to clone the string to append null terminator - text := string(renderCommand.text.chars[:renderCommand.text.length]) + text := string(config.stringContents.chars[:config.stringContents.length]) cloned := strings.clone_to_cstring(text, allocator) - fontToUse: raylib.Font = raylibFonts[renderCommand.config.textElementConfig.fontId].font + fontToUse: raylib.Font = raylibFonts[config.fontId].font raylib.DrawTextEx( fontToUse, cloned, raylib.Vector2{boundingBox.x, boundingBox.y}, - cast(f32)renderCommand.config.textElementConfig.fontSize, - cast(f32)renderCommand.config.textElementConfig.letterSpacing, - clayColorToRaylibColor(renderCommand.config.textElementConfig.textColor), + cast(f32)config.fontSize, + cast(f32)config.letterSpacing, + clayColorToRaylibColor(config.textColor), ) case clay.RenderCommandType.Image: + config := renderCommand.renderData.image // TODO image handling - imageTexture := cast(^raylib.Texture2D)renderCommand.config.imageElementConfig.imageData - raylib.DrawTextureEx(imageTexture^, raylib.Vector2{boundingBox.x, boundingBox.y}, 0, boundingBox.width / cast(f32)imageTexture.width, raylib.WHITE) + imageTexture := cast(^raylib.Texture2D)config.imageData + raylib.DrawTextureEx(imageTexture^, raylib.Vector2{boundingBox.x, boundingBox.y}, 0, boundingBox.width / cast(f32)imageTexture.width, clayColorToRaylibColor(config.backgroundColor)) case clay.RenderCommandType.ScissorStart: raylib.BeginScissorMode( cast(i32)math.round(boundingBox.x), @@ -82,86 +84,86 @@ clayRaylibRender :: proc(renderCommands: ^clay.ClayArray(clay.RenderCommand), al case clay.RenderCommandType.ScissorEnd: raylib.EndScissorMode() case clay.RenderCommandType.Rectangle: - config: ^clay.RectangleElementConfig = renderCommand.config.rectangleElementConfig + config := renderCommand.renderData.rectangle if (config.cornerRadius.topLeft > 0) { radius: f32 = (config.cornerRadius.topLeft * 2) / min(boundingBox.width, boundingBox.height) - raylib.DrawRectangleRounded(raylib.Rectangle{boundingBox.x, boundingBox.y, boundingBox.width, boundingBox.height}, radius, 8, clayColorToRaylibColor(config.color)) + raylib.DrawRectangleRounded(raylib.Rectangle{boundingBox.x, boundingBox.y, boundingBox.width, boundingBox.height}, radius, 8, clayColorToRaylibColor(config.backgroundColor)) } else { - raylib.DrawRectangle(cast(i32)boundingBox.x, cast(i32)boundingBox.y, cast(i32)boundingBox.width, cast(i32)boundingBox.height, clayColorToRaylibColor(config.color)) + raylib.DrawRectangle(cast(i32)boundingBox.x, cast(i32)boundingBox.y, cast(i32)boundingBox.width, cast(i32)boundingBox.height, clayColorToRaylibColor(config.backgroundColor)) } case clay.RenderCommandType.Border: - config := renderCommand.config.borderElementConfig + config := renderCommand.renderData.border // Left border - if (config.left.width > 0) { + if (config.width.left > 0) { raylib.DrawRectangle( cast(i32)math.round(boundingBox.x), cast(i32)math.round(boundingBox.y + config.cornerRadius.topLeft), - cast(i32)config.left.width, + cast(i32)config.width.left, cast(i32)math.round(boundingBox.height - config.cornerRadius.topLeft - config.cornerRadius.bottomLeft), - clayColorToRaylibColor(config.left.color), + clayColorToRaylibColor(config.color), ) } // Right border - if (config.right.width > 0) { + if (config.width.right > 0) { raylib.DrawRectangle( - cast(i32)math.round(boundingBox.x + boundingBox.width - cast(f32)config.right.width), + cast(i32)math.round(boundingBox.x + boundingBox.width - cast(f32)config.width.right), cast(i32)math.round(boundingBox.y + config.cornerRadius.topRight), - cast(i32)config.right.width, + cast(i32)config.width.right, cast(i32)math.round(boundingBox.height - config.cornerRadius.topRight - config.cornerRadius.bottomRight), - clayColorToRaylibColor(config.right.color), + clayColorToRaylibColor(config.color), ) } // Top border - if (config.top.width > 0) { + if (config.width.top > 0) { raylib.DrawRectangle( cast(i32)math.round(boundingBox.x + config.cornerRadius.topLeft), cast(i32)math.round(boundingBox.y), cast(i32)math.round(boundingBox.width - config.cornerRadius.topLeft - config.cornerRadius.topRight), - cast(i32)config.top.width, - clayColorToRaylibColor(config.top.color), + cast(i32)config.width.top, + clayColorToRaylibColor(config.color), ) } // Bottom border - if (config.bottom.width > 0) { + if (config.width.bottom > 0) { raylib.DrawRectangle( cast(i32)math.round(boundingBox.x + config.cornerRadius.bottomLeft), - cast(i32)math.round(boundingBox.y + boundingBox.height - cast(f32)config.bottom.width), + cast(i32)math.round(boundingBox.y + boundingBox.height - cast(f32)config.width.bottom), cast(i32)math.round(boundingBox.width - config.cornerRadius.bottomLeft - config.cornerRadius.bottomRight), - cast(i32)config.bottom.width, - clayColorToRaylibColor(config.bottom.color), + cast(i32)config.width.bottom, + clayColorToRaylibColor(config.color), ) } if (config.cornerRadius.topLeft > 0) { raylib.DrawRing( raylib.Vector2{math.round(boundingBox.x + config.cornerRadius.topLeft), math.round(boundingBox.y + config.cornerRadius.topLeft)}, - math.round(config.cornerRadius.topLeft - cast(f32)config.top.width), + math.round(config.cornerRadius.topLeft - cast(f32)config.width.top), config.cornerRadius.topLeft, 180, 270, 10, - clayColorToRaylibColor(config.top.color), + clayColorToRaylibColor(config.color), ) } if (config.cornerRadius.topRight > 0) { raylib.DrawRing( raylib.Vector2{math.round(boundingBox.x + boundingBox.width - config.cornerRadius.topRight), math.round(boundingBox.y + config.cornerRadius.topRight)}, - math.round(config.cornerRadius.topRight - cast(f32)config.top.width), + math.round(config.cornerRadius.topRight - cast(f32)config.width.top), config.cornerRadius.topRight, 270, 360, 10, - clayColorToRaylibColor(config.top.color), + clayColorToRaylibColor(config.color), ) } if (config.cornerRadius.bottomLeft > 0) { raylib.DrawRing( raylib.Vector2{math.round(boundingBox.x + config.cornerRadius.bottomLeft), math.round(boundingBox.y + boundingBox.height - config.cornerRadius.bottomLeft)}, - math.round(config.cornerRadius.bottomLeft - cast(f32)config.top.width), + math.round(config.cornerRadius.bottomLeft - cast(f32)config.width.top), config.cornerRadius.bottomLeft, 90, 180, 10, - clayColorToRaylibColor(config.bottom.color), + clayColorToRaylibColor(config.color), ) } if (config.cornerRadius.bottomRight > 0) { @@ -170,12 +172,12 @@ clayRaylibRender :: proc(renderCommands: ^clay.ClayArray(clay.RenderCommand), al math.round(boundingBox.x + boundingBox.width - config.cornerRadius.bottomRight), math.round(boundingBox.y + boundingBox.height - config.cornerRadius.bottomRight), }, - math.round(config.cornerRadius.bottomRight - cast(f32)config.bottom.width), + math.round(config.cornerRadius.bottomRight - cast(f32)config.width.bottom), config.cornerRadius.bottomRight, 0.1, 90, 10, - clayColorToRaylibColor(config.bottom.color), + clayColorToRaylibColor(config.color), ) } case clay.RenderCommandType.Custom: diff --git a/clay.h b/clay.h index cb7f91a..8a6bc96 100644 --- a/clay.h +++ b/clay.h @@ -14,6 +14,13 @@ #include #include +// SIMD includes on supported platforms +#if defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64) +#include +#elif __aarch64__ +#include +#endif + // ----------------------------------------- // HEADER DECLARATIONS --------------------- // ----------------------------------------- @@ -44,29 +51,11 @@ #define CLAY__MAX(x, y) (((x) > (y)) ? (x) : (y)) #define CLAY__MIN(x, y) (((x) < (y)) ? (x) : (y)) -#define CLAY_LAYOUT(...) Clay__AttachLayoutConfig(Clay__StoreLayoutConfig(CLAY__CONFIG_WRAPPER(Clay_LayoutConfig, __VA_ARGS__))) - -#define CLAY_RECTANGLE(...) Clay__AttachElementConfig(CLAY__INIT(Clay_ElementConfigUnion) { .rectangleElementConfig = Clay__StoreRectangleElementConfig(CLAY__CONFIG_WRAPPER(Clay_RectangleElementConfig, __VA_ARGS__)) }, CLAY__ELEMENT_CONFIG_TYPE_RECTANGLE) - #define CLAY_TEXT_CONFIG(...) Clay__StoreTextElementConfig(CLAY__CONFIG_WRAPPER(Clay_TextElementConfig, __VA_ARGS__)) -#define CLAY_IMAGE(...) Clay__AttachElementConfig(CLAY__INIT(Clay_ElementConfigUnion) { .imageElementConfig = Clay__StoreImageElementConfig(CLAY__CONFIG_WRAPPER(Clay_ImageElementConfig, __VA_ARGS__)) }, CLAY__ELEMENT_CONFIG_TYPE_IMAGE) +#define CLAY_BORDER_OUTSIDE(widthValue) {widthValue, widthValue, widthValue, widthValue, 0} -#define CLAY_FLOATING(...) Clay__AttachElementConfig(CLAY__INIT(Clay_ElementConfigUnion) { .floatingElementConfig = Clay__StoreFloatingElementConfig(CLAY__CONFIG_WRAPPER(Clay_FloatingElementConfig, __VA_ARGS__)) }, CLAY__ELEMENT_CONFIG_TYPE_FLOATING_CONTAINER) - -#define CLAY_CUSTOM_ELEMENT(...) Clay__AttachElementConfig(CLAY__INIT(Clay_ElementConfigUnion) { .customElementConfig = Clay__StoreCustomElementConfig(CLAY__CONFIG_WRAPPER(Clay_CustomElementConfig, __VA_ARGS__)) }, CLAY__ELEMENT_CONFIG_TYPE_CUSTOM) - -#define CLAY_SCROLL(...) Clay__AttachElementConfig(CLAY__INIT(Clay_ElementConfigUnion) { .scrollElementConfig = Clay__StoreScrollElementConfig(CLAY__CONFIG_WRAPPER(Clay_ScrollElementConfig, __VA_ARGS__)) }, CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER) - -#define CLAY_BORDER(...) Clay__AttachElementConfig(CLAY__INIT(Clay_ElementConfigUnion) { .borderElementConfig = Clay__StoreBorderElementConfig(CLAY__CONFIG_WRAPPER(Clay_BorderElementConfig, __VA_ARGS__)) }, CLAY__ELEMENT_CONFIG_TYPE_BORDER_CONTAINER) - -#define CLAY_BORDER_OUTSIDE(...) Clay__AttachElementConfig(CLAY__INIT(Clay_ElementConfigUnion) { .borderElementConfig = Clay__StoreBorderElementConfig(CLAY__INIT(Clay_BorderElementConfig) { .left = __VA_ARGS__, .right = __VA_ARGS__, .top = __VA_ARGS__, .bottom = __VA_ARGS__ }) }, CLAY__ELEMENT_CONFIG_TYPE_BORDER_CONTAINER) - -#define CLAY_BORDER_OUTSIDE_RADIUS(width, color, radius) Clay__AttachElementConfig(CLAY__INIT(Clay_ElementConfigUnion) { .borderElementConfig = Clay__StoreBorderElementConfig(CLAY__INIT(Clay_BorderElementConfig) { .left = { width, color }, .right = { width, color }, .top = { width, color }, .bottom = { width, color }, .cornerRadius = CLAY_CORNER_RADIUS(radius) })}, CLAY__ELEMENT_CONFIG_TYPE_BORDER_CONTAINER) - -#define CLAY_BORDER_ALL(...) Clay__AttachElementConfig(CLAY__INIT(Clay_ElementConfigUnion) { .borderElementConfig = Clay__StoreBorderElementConfig(CLAY__INIT(Clay_BorderElementConfig) { .left = __VA_ARGS__, .right = __VA_ARGS__, .top = __VA_ARGS__, .bottom = __VA_ARGS__, .betweenChildren = __VA_ARGS__ } ) }, CLAY__ELEMENT_CONFIG_TYPE_BORDER_CONTAINER) - -#define CLAY_BORDER_ALL_RADIUS(width, color, radius) Clay__AttachElementConfig(CLAY__INIT(Clay_ElementConfigUnion) { .borderElementConfig = Clay__StoreBorderElementConfig(CLAY__INIT(Clay_BorderElementConfig) { .left = { width, color }, .right = { width, color }, .top = { width, color }, .bottom = { width, color }, .betweenChildren = { width, color }, .cornerRadius = CLAY_CORNER_RADIUS(radius)}) }, CLAY__ELEMENT_CONFIG_TYPE_BORDER_CONTAINER) +#define CLAY_BORDER_ALL(widthValue) {widthValue, widthValue, widthValue, widthValue, widthValue} #define CLAY_CORNER_RADIUS(radius) (CLAY__INIT(Clay_CornerRadius) { radius, radius, radius, radius }) @@ -80,13 +69,13 @@ #define CLAY_SIZING_PERCENT(percentOfParent) (CLAY__INIT(Clay_SizingAxis) { .size = { .percent = (percentOfParent) }, .type = CLAY__SIZING_TYPE_PERCENT }) -#define CLAY_ID(label) Clay__AttachId(Clay__HashString(CLAY_STRING(label), 0, 0)) +#define CLAY_ID(label) CLAY_IDI(label, 0) -#define CLAY_IDI(label, index) Clay__AttachId(Clay__HashString(CLAY_STRING(label), index, 0)) +#define CLAY_IDI(label, index) Clay__HashString(CLAY_STRING(label), index, 0) #define CLAY_ID_LOCAL(label) CLAY_IDI_LOCAL(label, 0) -#define CLAY_IDI_LOCAL(label, index) Clay__AttachId(Clay__HashString(CLAY_STRING(label), index, Clay__GetParentElementId())) +#define CLAY_IDI_LOCAL(label, index) Clay__HashString(CLAY_STRING(label), index, Clay__GetParentElementId()) #define CLAY__STRING_LENGTH(s) ((sizeof(s) / sizeof((s)[0])) - sizeof((s)[0])) @@ -126,7 +115,7 @@ static uint8_t CLAY__ELEMENT_DEFINITION_LATCH; */ #define CLAY(...) \ for (\ - CLAY__ELEMENT_DEFINITION_LATCH = (Clay__OpenElement(), __VA_ARGS__, Clay__ElementPostConfiguration(), 0); \ + CLAY__ELEMENT_DEFINITION_LATCH = (Clay__OpenElement(), Clay__ConfigureOpenElement(CLAY__CONFIG_WRAPPER(Clay_ElementDeclaration, __VA_ARGS__)), 0); \ CLAY__ELEMENT_DEFINITION_LATCH < 1; \ ++CLAY__ELEMENT_DEFINITION_LATCH, Clay__CloseElement() \ ) @@ -218,14 +207,14 @@ typedef struct { } Clay_CornerRadius; typedef CLAY_PACKED_ENUM { - CLAY__ELEMENT_CONFIG_TYPE_NONE = 0, - CLAY__ELEMENT_CONFIG_TYPE_RECTANGLE = 1, - CLAY__ELEMENT_CONFIG_TYPE_BORDER_CONTAINER = 2, - CLAY__ELEMENT_CONFIG_TYPE_FLOATING_CONTAINER = 4, - CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER = 8, - CLAY__ELEMENT_CONFIG_TYPE_IMAGE = 16, - CLAY__ELEMENT_CONFIG_TYPE_TEXT = 32, - CLAY__ELEMENT_CONFIG_TYPE_CUSTOM = 64, + CLAY__ELEMENT_CONFIG_TYPE_NONE, + CLAY__ELEMENT_CONFIG_TYPE_BORDER, + CLAY__ELEMENT_CONFIG_TYPE_FLOATING, + CLAY__ELEMENT_CONFIG_TYPE_SCROLL, + CLAY__ELEMENT_CONFIG_TYPE_IMAGE, + CLAY__ELEMENT_CONFIG_TYPE_TEXT, + CLAY__ELEMENT_CONFIG_TYPE_CUSTOM, + CLAY__ELEMENT_CONFIG_TYPE_SHARED, } Clay__ElementConfigType; // Element Configs --------------------------- @@ -298,20 +287,8 @@ CLAY__WRAPPER_STRUCT(Clay_LayoutConfig); extern Clay_LayoutConfig CLAY_LAYOUT_DEFAULT; -// Rectangle -// NOTE: Not declared in the typedef asan ifdef inside macro arguments is UB -typedef struct { - Clay_Color color; - Clay_CornerRadius cornerRadius; - #ifdef CLAY_EXTEND_CONFIG_RECTANGLE - CLAY_EXTEND_CONFIG_RECTANGLE - #endif -} Clay_RectangleElementConfig; - -CLAY__WRAPPER_STRUCT(Clay_RectangleElementConfig); - // Text -typedef enum { +typedef CLAY_PACKED_ENUM { CLAY_TEXT_WRAP_WORDS, CLAY_TEXT_WRAP_NEWLINES, CLAY_TEXT_WRAP_NONE, @@ -325,20 +302,14 @@ typedef struct { uint16_t lineHeight; Clay_TextElementConfigWrapMode wrapMode; bool hashStringContents; - #ifdef CLAY_EXTEND_CONFIG_TEXT - CLAY_EXTEND_CONFIG_TEXT - #endif } Clay_TextElementConfig; CLAY__WRAPPER_STRUCT(Clay_TextElementConfig); // Image typedef struct { - void *imageData; + void* imageData; Clay_Dimensions sourceDimensions; - #ifdef CLAY_EXTEND_CONFIG_IMAGE - CLAY_EXTEND_CONFIG_IMAGE - #endif } Clay_ImageElementConfig; CLAY__WRAPPER_STRUCT(Clay_ImageElementConfig); @@ -361,30 +332,34 @@ typedef struct { Clay_FloatingAttachPointType parent; } Clay_FloatingAttachPoints; -typedef enum { +typedef CLAY_PACKED_ENUM { CLAY_POINTER_CAPTURE_MODE_CAPTURE, // CLAY_POINTER_CAPTURE_MODE_PARENT, TODO pass pointer through to attached parent CLAY_POINTER_CAPTURE_MODE_PASSTHROUGH, } Clay_PointerCaptureMode; +typedef CLAY_PACKED_ENUM { + CLAY_ATTACH_TO_NONE, + CLAY_ATTACH_TO_PARENT, + CLAY_ATTACH_TO_ELEMENT_WITH_ID, + CLAY_ATTACH_TO_ROOT, +} Clay_FloatingAttachToElement; + typedef struct { Clay_Vector2 offset; Clay_Dimensions expand; - uint16_t zIndex; uint32_t parentId; - Clay_FloatingAttachPoints attachment; + int16_t zIndex; + Clay_FloatingAttachPoints attachPoints; Clay_PointerCaptureMode pointerCaptureMode; + Clay_FloatingAttachToElement attachTo; } Clay_FloatingElementConfig; CLAY__WRAPPER_STRUCT(Clay_FloatingElementConfig); // Custom typedef struct { - #ifndef CLAY_EXTEND_CONFIG_CUSTOM - void *customData; - #else - CLAY_EXTEND_CONFIG_CUSTOM - #endif + void* customData; } Clay_CustomElementConfig; CLAY__WRAPPER_STRUCT(Clay_CustomElementConfig); @@ -397,40 +372,71 @@ typedef struct { CLAY__WRAPPER_STRUCT(Clay_ScrollElementConfig); +// Shared +typedef struct { + Clay_Color backgroundColor; + Clay_CornerRadius cornerRadius; + void* userData; +} Clay_SharedElementConfig; + +CLAY__WRAPPER_STRUCT(Clay_SharedElementConfig); + // Border typedef struct { - uint32_t width; - Clay_Color color; -} Clay_Border; + uint16_t left; + uint16_t right; + uint16_t top; + uint16_t bottom; + uint16_t betweenChildren; +} Clay_BorderWidth; typedef struct { - Clay_Border left; - Clay_Border right; - Clay_Border top; - Clay_Border bottom; - Clay_Border betweenChildren; - Clay_CornerRadius cornerRadius; - #ifdef CLAY_EXTEND_CONFIG_BORDER - CLAY_EXTEND_CONFIG_BORDER - #endif + Clay_Color color; + Clay_BorderWidth width; } Clay_BorderElementConfig; CLAY__WRAPPER_STRUCT(Clay_BorderElementConfig); -typedef union { - Clay_RectangleElementConfig *rectangleElementConfig; - Clay_TextElementConfig *textElementConfig; - Clay_ImageElementConfig *imageElementConfig; - Clay_FloatingElementConfig *floatingElementConfig; - Clay_CustomElementConfig *customElementConfig; - Clay_ScrollElementConfig *scrollElementConfig; - Clay_BorderElementConfig *borderElementConfig; -} Clay_ElementConfigUnion; +typedef struct { + Clay_StringSlice stringContents; + Clay_Color textColor; + uint16_t fontId; + uint16_t fontSize; + uint16_t letterSpacing; + uint16_t lineHeight; +} Clay_TextRenderData; typedef struct { - Clay__ElementConfigType type; - Clay_ElementConfigUnion config; -} Clay_ElementConfig; + Clay_Color backgroundColor; + Clay_CornerRadius cornerRadius; +} Clay_RectangleRenderData; + +typedef struct { + Clay_Color backgroundColor; + Clay_CornerRadius cornerRadius; + Clay_Dimensions sourceDimensions; + void* imageData; +} Clay_ImageRenderData; + +typedef struct { + Clay_Color backgroundColor; + Clay_CornerRadius cornerRadius; + void* customData; +} Clay_CustomRenderData; + +typedef struct { + Clay_Color color; + Clay_CornerRadius cornerRadius; + Clay_BorderWidth width; +} Clay_BorderRenderData; + +typedef union { + Clay_RectangleRenderData rectangle; + Clay_TextRenderData text; + Clay_ImageRenderData image; + Clay_CustomRenderData custom; + Clay_BorderRenderData border; +} Clay_RenderData; // Miscellaneous Structs & Enums --------------------------------- typedef struct { @@ -464,10 +470,11 @@ typedef CLAY_PACKED_ENUM { typedef struct { Clay_BoundingBox boundingBox; - Clay_ElementConfigUnion config; - Clay_StringSlice text; // TODO I wish there was a way to avoid having to have this on every render command - int32_t zIndex; + Clay_RenderData renderData; + // A pointer passed through from the element declaration + void *userData; uint32_t id; + int16_t zIndex; Clay_RenderCommandType commandType; } Clay_RenderCommand; @@ -489,6 +496,22 @@ typedef struct { Clay_PointerDataInteractionState state; } Clay_PointerData; +typedef struct { + Clay_ElementId id; + Clay_LayoutConfig layout; + Clay_Color backgroundColor; + Clay_CornerRadius cornerRadius; + Clay_ImageElementConfig image; + Clay_FloatingElementConfig floating; + Clay_CustomElementConfig custom; + Clay_ScrollElementConfig scroll; + Clay_BorderElementConfig border; + // A pointer that will be transparently passed through to resulting render commands. + void *userData; +} Clay_ElementDeclaration; + +CLAY__WRAPPER_STRUCT(Clay_ElementDeclaration); + typedef CLAY_PACKED_ENUM { CLAY_ERROR_TYPE_TEXT_MEASUREMENT_FUNCTION_NOT_PROVIDED, CLAY_ERROR_TYPE_ARENA_CAPACITY_EXCEEDED, @@ -502,12 +525,12 @@ typedef CLAY_PACKED_ENUM { typedef struct { Clay_ErrorType errorType; Clay_String errorText; - uintptr_t userData; + void *userData; } Clay_ErrorData; typedef struct { void (*errorHandlerFunction)(Clay_ErrorData errorText); - uintptr_t userData; + void *userData; } Clay_ErrorHandler; // Function Forward Declarations --------------------------------- @@ -529,8 +552,9 @@ bool Clay_Hovered(void); void Clay_OnHover(void (*onHoverFunction)(Clay_ElementId elementId, Clay_PointerData pointerData, intptr_t userData), intptr_t userData); bool Clay_PointerOver(Clay_ElementId elementId); Clay_ScrollContainerData Clay_GetScrollContainerData(Clay_ElementId id); -void Clay_SetMeasureTextFunction(Clay_Dimensions (*measureTextFunction)(Clay_StringSlice text, Clay_TextElementConfig *config, uintptr_t userData), uintptr_t userData); -void Clay_SetQueryScrollOffsetFunction(Clay_Vector2 (*queryScrollOffsetFunction)(uint32_t elementId, uintptr_t userData), uintptr_t userData); +Clay_TextElementConfig * Clay__StoreTextElementConfig(Clay_TextElementConfig config); +void Clay_SetMeasureTextFunction(Clay_Dimensions (*measureTextFunction)(Clay_StringSlice text, Clay_TextElementConfig *config, void *userData), void *userData); +void Clay_SetQueryScrollOffsetFunction(Clay_Vector2 (*queryScrollOffsetFunction)(uint32_t elementId, void *userData), void *userData); Clay_RenderCommand * Clay_RenderCommandArray_Get(Clay_RenderCommandArray* array, int32_t index); void Clay_SetDebugModeEnabled(bool enabled); bool Clay_IsDebugModeEnabled(void); @@ -543,19 +567,10 @@ void Clay_ResetMeasureTextCache(void); // Internal API functions required by macros void Clay__OpenElement(void); +void Clay__ConfigureOpenElement(const Clay_ElementDeclaration config); void Clay__CloseElement(void); Clay_LayoutConfig * Clay__StoreLayoutConfig(Clay_LayoutConfig config); -void Clay__ElementPostConfiguration(void); -void Clay__AttachId(Clay_ElementId id); -void Clay__AttachLayoutConfig(Clay_LayoutConfig *config); -void Clay__AttachElementConfig(Clay_ElementConfigUnion config, Clay__ElementConfigType type); -Clay_RectangleElementConfig * Clay__StoreRectangleElementConfig(Clay_RectangleElementConfig config); -Clay_TextElementConfig * Clay__StoreTextElementConfig(Clay_TextElementConfig config); -Clay_ImageElementConfig * Clay__StoreImageElementConfig(Clay_ImageElementConfig config); -Clay_FloatingElementConfig * Clay__StoreFloatingElementConfig(Clay_FloatingElementConfig config); -Clay_CustomElementConfig * Clay__StoreCustomElementConfig(Clay_CustomElementConfig config); -Clay_ScrollElementConfig * Clay__StoreScrollElementConfig(Clay_ScrollElementConfig config); -Clay_BorderElementConfig * Clay__StoreBorderElementConfig(Clay_BorderElementConfig config); +Clay_ElementId Clay__AttachId(Clay_ElementId id); Clay_ElementId Clay__HashString(Clay_String key, uint32_t offset, uint32_t seed); void Clay__OpenTextElement(Clay_String text, Clay_TextElementConfig *textConfig); uint32_t Clay__GetParentElementId(void); @@ -585,6 +600,10 @@ extern uint32_t Clay__debugViewWidth; Clay_LayoutConfig CLAY_LAYOUT_DEFAULT = CLAY__DEFAULT_STRUCT; +Clay_Color Clay__Color_DEFAULT = CLAY__DEFAULT_STRUCT; +Clay_CornerRadius Clay__CornerRadius_DEFAULT = CLAY__DEFAULT_STRUCT; +Clay_BorderWidth Clay__BorderWidth_DEFAULT = CLAY__DEFAULT_STRUCT; + #define CLAY__ARRAY_DEFINE_FUNCTIONS(typeName, arrayName) \ \ typedef struct \ @@ -687,9 +706,7 @@ CLAY__ARRAY_DEFINE(bool, Clay__boolArray) CLAY__ARRAY_DEFINE(int32_t, Clay__int32_tArray) CLAY__ARRAY_DEFINE(char, Clay__charArray) CLAY__ARRAY_DEFINE(Clay_ElementId, Clay__ElementIdArray) -CLAY__ARRAY_DEFINE(Clay_ElementConfig, Clay__ElementConfigArray) CLAY__ARRAY_DEFINE(Clay_LayoutConfig, Clay__LayoutConfigArray) -CLAY__ARRAY_DEFINE(Clay_RectangleElementConfig, Clay__RectangleElementConfigArray) CLAY__ARRAY_DEFINE(Clay_TextElementConfig, Clay__TextElementConfigArray) CLAY__ARRAY_DEFINE(Clay_ImageElementConfig, Clay__ImageElementConfigArray) CLAY__ARRAY_DEFINE(Clay_FloatingElementConfig, Clay__FloatingElementConfigArray) @@ -697,8 +714,26 @@ CLAY__ARRAY_DEFINE(Clay_CustomElementConfig, Clay__CustomElementConfigArray) CLAY__ARRAY_DEFINE(Clay_ScrollElementConfig, Clay__ScrollElementConfigArray) CLAY__ARRAY_DEFINE(Clay_BorderElementConfig, Clay__BorderElementConfigArray) CLAY__ARRAY_DEFINE(Clay_String, Clay__StringArray) +CLAY__ARRAY_DEFINE(Clay_SharedElementConfig, Clay__SharedElementConfigArray) CLAY__ARRAY_DEFINE_FUNCTIONS(Clay_RenderCommand, Clay_RenderCommandArray) +typedef union { + Clay_TextElementConfig *textElementConfig; + Clay_ImageElementConfig *imageElementConfig; + Clay_FloatingElementConfig *floatingElementConfig; + Clay_CustomElementConfig *customElementConfig; + Clay_ScrollElementConfig *scrollElementConfig; + Clay_BorderElementConfig *borderElementConfig; + Clay_SharedElementConfig *sharedElementConfig; +} Clay_ElementConfigUnion; + +typedef struct { + Clay__ElementConfigType type; + Clay_ElementConfigUnion config; +} Clay_ElementConfig; + +CLAY__ARRAY_DEFINE(Clay_ElementConfig, Clay__ElementConfigArray) + typedef struct { Clay_Dimensions dimensions; Clay_String line; @@ -729,7 +764,6 @@ typedef struct { Clay_Dimensions minDimensions; Clay_LayoutConfig *layoutConfig; Clay__ElementConfigArraySlice elementConfigs; - uint32_t configsEnabled; uint32_t id; } Clay_LayoutElement; @@ -805,7 +839,7 @@ typedef struct { int32_t layoutElementIndex; uint32_t parentId; // This can be zero in the case of the root layout tree uint32_t clipElementId; // This can be zero if there is no clip element - int32_t zIndex; + int16_t zIndex; Clay_Vector2 pointerOffset; // Only used when scroll containers are managed externally } Clay__LayoutElementTreeRoot; @@ -829,8 +863,8 @@ struct Clay_Context { uint32_t debugSelectedElementId; uint32_t generation; uintptr_t arenaResetOffset; - uintptr_t mesureTextUserData; - uintptr_t queryScrollOffsetUserData; + void *measureTextUserData; + void *queryScrollOffsetUserData; Clay_Arena internalArena; // Layout Elements / Render Commands Clay_LayoutElementArray layoutElements; @@ -844,15 +878,14 @@ struct Clay_Context { Clay__int32_tArray layoutElementClipElementIds; // Configs Clay__LayoutConfigArray layoutConfigs; - Clay__ElementConfigArray elementConfigBuffer; Clay__ElementConfigArray elementConfigs; - Clay__RectangleElementConfigArray rectangleElementConfigs; Clay__TextElementConfigArray textElementConfigs; Clay__ImageElementConfigArray imageElementConfigs; Clay__FloatingElementConfigArray floatingElementConfigs; Clay__ScrollElementConfigArray scrollElementConfigs; Clay__CustomElementConfigArray customElementConfigs; Clay__BorderElementConfigArray borderElementConfigs; + Clay__SharedElementConfigArray sharedElementConfigs; // Misc Data Structures Clay__StringArray layoutElementIdStrings; Clay__WrappedTextLineArray wrappedTextLines; @@ -895,11 +928,11 @@ Clay_String Clay__WriteStringToCharBuffer(Clay__charArray *buffer, Clay_String s } #ifdef CLAY_WASM - __attribute__((import_module("clay"), import_name("measureTextFunction"))) Clay_Dimensions Clay__MeasureText(Clay_StringSlice text, Clay_TextElementConfig *config, uintptr_t userData); - __attribute__((import_module("clay"), import_name("queryScrollOffsetFunction"))) Clay_Vector2 Clay__QueryScrollOffset(uint32_t elementId, uintptr_t userData); + __attribute__((import_module("clay"), import_name("measureTextFunction"))) Clay_Dimensions Clay__MeasureText(Clay_StringSlice text, Clay_TextElementConfig *config, void *userData); + __attribute__((import_module("clay"), import_name("queryScrollOffsetFunction"))) Clay_Vector2 Clay__QueryScrollOffset(uint32_t elementId, void *userData); #else - Clay_Dimensions (*Clay__MeasureText)(Clay_StringSlice text, Clay_TextElementConfig *config, uintptr_t userData); - Clay_Vector2 (*Clay__QueryScrollOffset)(uint32_t elementId, uintptr_t userData); + Clay_Dimensions (*Clay__MeasureText)(Clay_StringSlice text, Clay_TextElementConfig *config, void *userData); + Clay_Vector2 (*Clay__QueryScrollOffset)(uint32_t elementId, void *userData); #endif Clay_LayoutElement* Clay__GetOpenLayoutElement(void) { @@ -912,8 +945,23 @@ uint32_t Clay__GetParentElementId(void) { return Clay_LayoutElementArray_Get(&context->layoutElements, Clay__int32_tArray_GetValue(&context->openLayoutElementStack, context->openLayoutElementStack.length - 2))->id; } -bool Clay__ElementHasConfig(Clay_LayoutElement *element, Clay__ElementConfigType type) { - return (element->configsEnabled & type); +Clay_LayoutConfig * Clay__StoreLayoutConfig(Clay_LayoutConfig config) { return Clay_GetCurrentContext()->booleanWarnings.maxElementsExceeded ? &CLAY_LAYOUT_DEFAULT : Clay__LayoutConfigArray_Add(&Clay_GetCurrentContext()->layoutConfigs, config); } +Clay_TextElementConfig * Clay__StoreTextElementConfig(Clay_TextElementConfig config) { return Clay_GetCurrentContext()->booleanWarnings.maxElementsExceeded ? &Clay_TextElementConfig_DEFAULT : Clay__TextElementConfigArray_Add(&Clay_GetCurrentContext()->textElementConfigs, config); } +Clay_ImageElementConfig * Clay__StoreImageElementConfig(Clay_ImageElementConfig config) { return Clay_GetCurrentContext()->booleanWarnings.maxElementsExceeded ? &Clay_ImageElementConfig_DEFAULT : Clay__ImageElementConfigArray_Add(&Clay_GetCurrentContext()->imageElementConfigs, config); } +Clay_FloatingElementConfig * Clay__StoreFloatingElementConfig(Clay_FloatingElementConfig config) { return Clay_GetCurrentContext()->booleanWarnings.maxElementsExceeded ? &Clay_FloatingElementConfig_DEFAULT : Clay__FloatingElementConfigArray_Add(&Clay_GetCurrentContext()->floatingElementConfigs, config); } +Clay_CustomElementConfig * Clay__StoreCustomElementConfig(Clay_CustomElementConfig config) { return Clay_GetCurrentContext()->booleanWarnings.maxElementsExceeded ? &Clay_CustomElementConfig_DEFAULT : Clay__CustomElementConfigArray_Add(&Clay_GetCurrentContext()->customElementConfigs, config); } +Clay_ScrollElementConfig * Clay__StoreScrollElementConfig(Clay_ScrollElementConfig config) { return Clay_GetCurrentContext()->booleanWarnings.maxElementsExceeded ? &Clay_ScrollElementConfig_DEFAULT : Clay__ScrollElementConfigArray_Add(&Clay_GetCurrentContext()->scrollElementConfigs, config); } +Clay_BorderElementConfig * Clay__StoreBorderElementConfig(Clay_BorderElementConfig config) { return Clay_GetCurrentContext()->booleanWarnings.maxElementsExceeded ? &Clay_BorderElementConfig_DEFAULT : Clay__BorderElementConfigArray_Add(&Clay_GetCurrentContext()->borderElementConfigs, config); } +Clay_SharedElementConfig * Clay__StoreSharedElementConfig(Clay_SharedElementConfig config) { return Clay_GetCurrentContext()->booleanWarnings.maxElementsExceeded ? &Clay_SharedElementConfig_DEFAULT : Clay__SharedElementConfigArray_Add(&Clay_GetCurrentContext()->sharedElementConfigs, config); } + +Clay_ElementConfig Clay__AttachElementConfig(Clay_ElementConfigUnion config, Clay__ElementConfigType type) { + Clay_Context* context = Clay_GetCurrentContext(); + if (context->booleanWarnings.maxElementsExceeded) { + return CLAY__INIT(Clay_ElementConfig) CLAY__DEFAULT_STRUCT; + } + Clay_LayoutElement *openLayoutElement = Clay__GetOpenLayoutElement(); + openLayoutElement->elementConfigs.length++; + return *Clay__ElementConfigArray_Add(&context->elementConfigs, CLAY__INIT(Clay_ElementConfig) { .type = type, .config = config }); } Clay_ElementConfigUnion Clay__FindElementConfigWithType(Clay_LayoutElement *element, Clay__ElementConfigType type) { @@ -961,29 +1009,6 @@ Clay_ElementId Clay__HashString(Clay_String key, const uint32_t offset, const ui return CLAY__INIT(Clay_ElementId) { .id = hash + 1, .offset = offset, .baseId = base + 1, .stringId = key }; // Reserve the hash result of zero as "null id" } -Clay_ElementId Clay__Rehash(Clay_ElementId elementId, uint32_t number) { - uint32_t id = elementId.baseId; - id += number; - id += (id << 10); - id ^= (id >> 6); - - id += (id << 3); - id ^= (id >> 11); - id += (id << 15); - return CLAY__INIT(Clay_ElementId) { .id = id, .offset = number, .baseId = elementId.baseId, .stringId = elementId.stringId }; -} - -uint32_t Clay__RehashWithNumber(uint32_t id, uint32_t number) { - id += number; - id += (id << 10); - id ^= (id >> 6); - - id += (id << 3); - id ^= (id >> 11); - id += (id << 15); - return id; -} - uint32_t Clay__HashTextWithConfig(Clay_String *text, Clay_TextElementConfig *config) { uint32_t hash = 0; uintptr_t pointerAsNumber = (uintptr_t)text->chars; @@ -1123,7 +1148,7 @@ Clay__MeasureTextCacheItem *Clay__MeasureTextCached(Clay_String *text, Clay_Text float lineWidth = 0; float measuredWidth = 0; float measuredHeight = 0; - float spaceWidth = Clay__MeasureText(CLAY__INIT(Clay_StringSlice) { .length = 1, .chars = CLAY__SPACECHAR.chars, .baseChars = CLAY__SPACECHAR.chars }, config, context->mesureTextUserData).width; + float spaceWidth = Clay__MeasureText(CLAY__INIT(Clay_StringSlice) { .length = 1, .chars = CLAY__SPACECHAR.chars, .baseChars = CLAY__SPACECHAR.chars }, config, context->measureTextUserData).width; Clay__MeasuredWord tempWord = { .next = -1 }; Clay__MeasuredWord *previousWord = &tempWord; while (end < text->length) { @@ -1140,7 +1165,7 @@ Clay__MeasureTextCacheItem *Clay__MeasureTextCached(Clay_String *text, Clay_Text char current = text->chars[end]; if (current == ' ' || current == '\n') { int32_t length = end - start; - Clay_Dimensions dimensions = Clay__MeasureText(CLAY__INIT(Clay_StringSlice) { .length = length, .chars = &text->chars[start], .baseChars = text->chars }, config, context->mesureTextUserData); + Clay_Dimensions dimensions = Clay__MeasureText(CLAY__INIT(Clay_StringSlice) { .length = length, .chars = &text->chars[start], .baseChars = text->chars }, config, context->measureTextUserData); measuredHeight = CLAY__MAX(measuredHeight, dimensions.height); if (current == ' ') { dimensions.width += spaceWidth; @@ -1162,7 +1187,7 @@ Clay__MeasureTextCacheItem *Clay__MeasureTextCached(Clay_String *text, Clay_Text end++; } if (end - start > 0) { - Clay_Dimensions dimensions = Clay__MeasureText(CLAY__INIT(Clay_StringSlice) { .length = end - start, .chars = &text->chars[start], .baseChars = text->chars }, config, context->mesureTextUserData); + Clay_Dimensions dimensions = Clay__MeasureText(CLAY__INIT(Clay_StringSlice) { .length = end - start, .chars = &text->chars[start], .baseChars = text->chars }, config, context->measureTextUserData); Clay__AddMeasuredWord(CLAY__INIT(Clay__MeasuredWord) { .startOffset = start, .length = end - start, .width = dimensions.width, .next = -1 }, previousWord); lineWidth += dimensions.width; measuredHeight = CLAY__MAX(measuredHeight, dimensions.height); @@ -1250,95 +1275,13 @@ void Clay__GenerateIdForAnonymousElement(Clay_LayoutElement *openLayoutElement) Clay__StringArray_Add(&context->layoutElementIdStrings, elementId.stringId); } -void Clay__ElementPostConfiguration(void) { - Clay_Context* context = Clay_GetCurrentContext(); - if (context->booleanWarnings.maxElementsExceeded) { - return; - } - Clay_LayoutElement *openLayoutElement = Clay__GetOpenLayoutElement(); - // ID - if (openLayoutElement->id == 0) { - Clay__GenerateIdForAnonymousElement(openLayoutElement); - } - // Layout Config - if (!openLayoutElement->layoutConfig) { - openLayoutElement->layoutConfig = &CLAY_LAYOUT_DEFAULT; - } - - // Loop through element configs and handle special cases - openLayoutElement->elementConfigs.internalArray = &context->elementConfigs.internalArray[context->elementConfigs.length]; - for (int32_t elementConfigIndex = 0; elementConfigIndex < openLayoutElement->elementConfigs.length; elementConfigIndex++) { - Clay_ElementConfig *config = Clay__ElementConfigArray_Add(&context->elementConfigs, *Clay__ElementConfigArray_Get(&context->elementConfigBuffer, context->elementConfigBuffer.length - openLayoutElement->elementConfigs.length + elementConfigIndex)); - openLayoutElement->configsEnabled |= config->type; - switch (config->type) { - case CLAY__ELEMENT_CONFIG_TYPE_RECTANGLE: - case CLAY__ELEMENT_CONFIG_TYPE_BORDER_CONTAINER: break; - case CLAY__ELEMENT_CONFIG_TYPE_FLOATING_CONTAINER: { - Clay_FloatingElementConfig *floatingConfig = config->config.floatingElementConfig; - // This looks dodgy but because of the auto generated root element the depth of the tree will always be at least 2 here - Clay_LayoutElement *hierarchicalParent = Clay_LayoutElementArray_Get(&context->layoutElements, Clay__int32_tArray_GetValue(&context->openLayoutElementStack, context->openLayoutElementStack.length - 2)); - if (!hierarchicalParent) { - break; - } - uint32_t clipElementId = 0; - if (floatingConfig->parentId == 0) { - // If no parent id was specified, attach to the elements direct hierarchical parent - Clay_FloatingElementConfig newConfig = *floatingConfig; - newConfig.parentId = hierarchicalParent->id; - floatingConfig = Clay__FloatingElementConfigArray_Add(&context->floatingElementConfigs, newConfig); - config->config.floatingElementConfig = floatingConfig; - if (context->openClipElementStack.length > 0) { - clipElementId = Clay__int32_tArray_GetValue(&context->openClipElementStack, (int)context->openClipElementStack.length - 1); - } - } else { - Clay_LayoutElementHashMapItem *parentItem = Clay__GetHashMapItem(floatingConfig->parentId); - if (!parentItem) { - context->errorHandler.errorHandlerFunction(CLAY__INIT(Clay_ErrorData) { - .errorType = CLAY_ERROR_TYPE_FLOATING_CONTAINER_PARENT_NOT_FOUND, - .errorText = CLAY_STRING("A floating element was declared with a parentId, but no element with that ID was found."), - .userData = context->errorHandler.userData }); - } else { - clipElementId = Clay__int32_tArray_GetValue(&context->layoutElementClipElementIds, parentItem->layoutElement - context->layoutElements.internalArray); - } - } - Clay__LayoutElementTreeRootArray_Add(&context->layoutElementTreeRoots, CLAY__INIT(Clay__LayoutElementTreeRoot) { - .layoutElementIndex = Clay__int32_tArray_GetValue(&context->openLayoutElementStack, context->openLayoutElementStack.length - 1), - .parentId = floatingConfig->parentId, - .clipElementId = clipElementId, - .zIndex = floatingConfig->zIndex, - }); - break; - } - case CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER: { - Clay__int32_tArray_Add(&context->openClipElementStack, (int)openLayoutElement->id); - // Retrieve or create cached data to track scroll position across frames - Clay__ScrollContainerDataInternal *scrollOffset = CLAY__NULL; - for (int32_t i = 0; i < context->scrollContainerDatas.length; i++) { - Clay__ScrollContainerDataInternal *mapping = Clay__ScrollContainerDataInternalArray_Get(&context->scrollContainerDatas, i); - if (openLayoutElement->id == mapping->elementId) { - scrollOffset = mapping; - scrollOffset->layoutElement = openLayoutElement; - scrollOffset->openThisFrame = true; - } - } - if (!scrollOffset) { - scrollOffset = Clay__ScrollContainerDataInternalArray_Add(&context->scrollContainerDatas, CLAY__INIT(Clay__ScrollContainerDataInternal){.layoutElement = openLayoutElement, .scrollOrigin = {-1,-1}, .elementId = openLayoutElement->id, .openThisFrame = true}); - } - if (context->externalScrollHandlingEnabled) { - scrollOffset->scrollPosition = Clay__QueryScrollOffset(scrollOffset->elementId, context->queryScrollOffsetUserData); - } - break; - } - case CLAY__ELEMENT_CONFIG_TYPE_CUSTOM: break; - case CLAY__ELEMENT_CONFIG_TYPE_IMAGE: { - Clay__int32_tArray_Add(&context->imageElementPointers, context->layoutElements.length - 1); - break; - } - case CLAY__ELEMENT_CONFIG_TYPE_TEXT: - default: break; +bool Clay__ElementHasConfig(Clay_LayoutElement *layoutElement, Clay__ElementConfigType type) { + for (int32_t i = 0; i < layoutElement->elementConfigs.length; i++) { + if (Clay__ElementConfigArraySlice_Get(&layoutElement->elementConfigs, i)->type == type) { + return true; } } - context->elementConfigBuffer.length -= openLayoutElement->elementConfigs.length; + return false; } void Clay__CloseElement(void) { @@ -1350,11 +1293,14 @@ void Clay__CloseElement(void) { Clay_LayoutConfig *layoutConfig = openLayoutElement->layoutConfig; bool elementHasScrollHorizontal = false; bool elementHasScrollVertical = false; - if (Clay__ElementHasConfig(openLayoutElement, CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER)) { - Clay_ScrollElementConfig *scrollConfig = Clay__FindElementConfigWithType(openLayoutElement, CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER).scrollElementConfig; - elementHasScrollHorizontal = scrollConfig->horizontal; - elementHasScrollVertical = scrollConfig->vertical; - context->openClipElementStack.length--; + for (int32_t i = 0; i < openLayoutElement->elementConfigs.length; i++) { + Clay_ElementConfig *config = Clay__ElementConfigArraySlice_Get(&openLayoutElement->elementConfigs, i); + if (config->type == CLAY__ELEMENT_CONFIG_TYPE_SCROLL) { + elementHasScrollHorizontal = config->config.scrollElementConfig->horizontal; + elementHasScrollVertical = config->config.scrollElementConfig->vertical; + context->openClipElementStack.length--; + break; + } } // Attach children to the current open element @@ -1424,7 +1370,7 @@ void Clay__CloseElement(void) { openLayoutElement->dimensions.height = 0; } - bool elementIsFloating = Clay__ElementHasConfig(openLayoutElement, CLAY__ELEMENT_CONFIG_TYPE_FLOATING_CONTAINER); + bool elementIsFloating = Clay__ElementHasConfig(openLayoutElement, CLAY__ELEMENT_CONFIG_TYPE_FLOATING); // Close the currently open element int32_t closingElementIndex = Clay__int32_tArray_RemoveSwapback(&context->openLayoutElementStack, (int)context->openLayoutElementStack.length - 1); @@ -1436,6 +1382,71 @@ void Clay__CloseElement(void) { } } +bool Clay__MemCmp(const char *s1, const char *s2, int32_t length); +#if defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64) + bool Clay__MemCmp(const char *s1, const char *s2, int32_t length) { + while (length >= 16) { + __m128i v1 = _mm_loadu_si128((const __m128i *)s1); + __m128i v2 = _mm_loadu_si128((const __m128i *)s2); + + if (_mm_movemask_epi8(_mm_cmpeq_epi8(v1, v2)) != 0xFFFFFFFF) { // If any byte differs + return false; + } + + s1 += 16; + s2 += 16; + length -= 16; + } + + // Handle remaining bytes + while (length--) { + if (*s1 != *s2) { + return false; + } + s1++; + s2++; + } + + return true; + } +#elif defined(__aarch64__) + bool Clay__MemCmp(const char *s1, const char *s2, int32_t length) { + while (length >= 16) { + uint8x16_t v1 = vld1q_u8((const uint8_t *)s1); + uint8x16_t v2 = vld1q_u8((const uint8_t *)s2); + + // Compare vectors + if (vminvq_u32(vceqq_u8(v1, v2)) != 0xFFFFFFFF) { // If there's a difference + return false; + } + + s1 += 16; + s2 += 16; + length -= 16; + } + + // Handle remaining bytes + while (length--) { + if (*s1 != *s2) { + return false; + } + s1++; + s2++; + } + + return true; + } +#else + bool Clay__MemCmp(const char *s1, const char *s2, int32_t length) { + for (int32_t i = 0; i < length; i++) { + if (s1[i] != s2[i]) { + return false; + } + } + return true; + } +#endif + void Clay__OpenElement(void) { Clay_Context* context = Clay_GetCurrentContext(); if (context->layoutElements.length == context->layoutElements.capacity - 1 || context->booleanWarnings.maxElementsExceeded) { @@ -1459,28 +1470,129 @@ void Clay__OpenTextElement(Clay_String text, Clay_TextElementConfig *textConfig) return; } Clay_LayoutElement *parentElement = Clay__GetOpenLayoutElement(); - parentElement->childrenOrTextContent.children.length++; - Clay__OpenElement(); - Clay_LayoutElement * openLayoutElement = Clay__GetOpenLayoutElement(); + Clay_LayoutElement layoutElement = CLAY__DEFAULT_STRUCT; + Clay_LayoutElement *textElement = Clay_LayoutElementArray_Add(&context->layoutElements, layoutElement); + if (context->openClipElementStack.length > 0) { + Clay__int32_tArray_Set(&context->layoutElementClipElementIds, context->layoutElements.length - 1, Clay__int32_tArray_GetValue(&context->openClipElementStack, (int)context->openClipElementStack.length - 1)); + } else { + Clay__int32_tArray_Set(&context->layoutElementClipElementIds, context->layoutElements.length - 1, 0); + } + Clay__int32_tArray_Add(&context->layoutElementChildrenBuffer, context->layoutElements.length - 1); Clay__MeasureTextCacheItem *textMeasured = Clay__MeasureTextCached(&text, textConfig); - Clay_ElementId elementId = Clay__HashString(CLAY_STRING("Text"), parentElement->childrenOrTextContent.children.length, parentElement->id); - openLayoutElement->id = elementId.id; - Clay__AddHashMapItem(elementId, openLayoutElement); + Clay_ElementId elementId = Clay__HashNumber(parentElement->childrenOrTextContent.children.length, parentElement->id); + textElement->id = elementId.id; + Clay__AddHashMapItem(elementId, textElement); Clay__StringArray_Add(&context->layoutElementIdStrings, elementId.stringId); Clay_Dimensions textDimensions = { .width = textMeasured->unwrappedDimensions.width, .height = textConfig->lineHeight > 0 ? (float)textConfig->lineHeight : textMeasured->unwrappedDimensions.height }; - openLayoutElement->dimensions = textDimensions; - openLayoutElement->minDimensions = CLAY__INIT(Clay_Dimensions) { .width = textMeasured->unwrappedDimensions.height, .height = textDimensions.height }; // TODO not sure this is the best way to decide min width for text - openLayoutElement->childrenOrTextContent.textElementData = Clay__TextElementDataArray_Add(&context->textElementData, CLAY__INIT(Clay__TextElementData) { .text = text, .preferredDimensions = textMeasured->unwrappedDimensions, .elementIndex = context->layoutElements.length - 1 }); - openLayoutElement->elementConfigs = CLAY__INIT(Clay__ElementConfigArraySlice) { - .length = 1, - .internalArray = Clay__ElementConfigArray_Add(&context->elementConfigs, CLAY__INIT(Clay_ElementConfig) { .type = CLAY__ELEMENT_CONFIG_TYPE_TEXT, .config = { .textElementConfig = textConfig }}) + textElement->dimensions = textDimensions; + textElement->minDimensions = CLAY__INIT(Clay_Dimensions) { .width = textMeasured->unwrappedDimensions.height, .height = textDimensions.height }; // TODO not sure this is the best way to decide min width for text + textElement->childrenOrTextContent.textElementData = Clay__TextElementDataArray_Add(&context->textElementData, CLAY__INIT(Clay__TextElementData) { .text = text, .preferredDimensions = textMeasured->unwrappedDimensions, .elementIndex = context->layoutElements.length - 1 }); + textElement->elementConfigs = CLAY__INIT(Clay__ElementConfigArraySlice) { + .length = 1, + .internalArray = Clay__ElementConfigArray_Add(&context->elementConfigs, CLAY__INIT(Clay_ElementConfig) { .type = CLAY__ELEMENT_CONFIG_TYPE_TEXT, .config = { .textElementConfig = textConfig }}) }; - openLayoutElement->configsEnabled |= CLAY__ELEMENT_CONFIG_TYPE_TEXT; - openLayoutElement->layoutConfig = &CLAY_LAYOUT_DEFAULT; - // Close the currently open element - Clay__int32_tArray_RemoveSwapback(&context->openLayoutElementStack, (int)context->openLayoutElementStack.length - 1); + textElement->layoutConfig = &CLAY_LAYOUT_DEFAULT; + parentElement->childrenOrTextContent.children.length++; +} + +void Clay__ConfigureOpenElement(const Clay_ElementDeclaration declaration) { + Clay_Context* context = Clay_GetCurrentContext(); + Clay_LayoutElement *openLayoutElement = Clay__GetOpenLayoutElement(); + openLayoutElement->layoutConfig = Clay__StoreLayoutConfig(declaration.layout); + if (declaration.id.id != 0) { + Clay__AttachId(declaration.id); + } else if (openLayoutElement->id == 0) { + Clay__GenerateIdForAnonymousElement(openLayoutElement); + } + + openLayoutElement->elementConfigs.internalArray = &context->elementConfigs.internalArray[context->elementConfigs.length]; + Clay_SharedElementConfig *sharedConfig = NULL; + if (declaration.backgroundColor.a > 0) { + sharedConfig = Clay__StoreSharedElementConfig(CLAY__INIT(Clay_SharedElementConfig) { .backgroundColor = declaration.backgroundColor }); + Clay__AttachElementConfig(CLAY__INIT(Clay_ElementConfigUnion) { .sharedElementConfig = sharedConfig }, CLAY__ELEMENT_CONFIG_TYPE_SHARED); + } + if (!Clay__MemCmp((char *)(&declaration.cornerRadius), (char *)(&Clay__CornerRadius_DEFAULT), sizeof(Clay_CornerRadius))) { + if (sharedConfig) { + sharedConfig->cornerRadius = declaration.cornerRadius; + } else { + sharedConfig = Clay__StoreSharedElementConfig(CLAY__INIT(Clay_SharedElementConfig) { .cornerRadius = declaration.cornerRadius }); + Clay__AttachElementConfig(CLAY__INIT(Clay_ElementConfigUnion) { .sharedElementConfig = sharedConfig }, CLAY__ELEMENT_CONFIG_TYPE_SHARED); + } + } + if (declaration.userData != 0) { + if (sharedConfig) { + sharedConfig->userData = declaration.userData; + } else { + sharedConfig = Clay__StoreSharedElementConfig(CLAY__INIT(Clay_SharedElementConfig) { .userData = declaration.userData }); + Clay__AttachElementConfig(CLAY__INIT(Clay_ElementConfigUnion) { .sharedElementConfig = sharedConfig }, CLAY__ELEMENT_CONFIG_TYPE_SHARED); + } + } + if (declaration.image.imageData) { + Clay__AttachElementConfig(CLAY__INIT(Clay_ElementConfigUnion) { .imageElementConfig = Clay__StoreImageElementConfig(declaration.image) }, CLAY__ELEMENT_CONFIG_TYPE_IMAGE); + Clay__int32_tArray_Add(&context->imageElementPointers, context->layoutElements.length - 1); + } + if (declaration.floating.attachTo != CLAY_ATTACH_TO_NONE) { + Clay_FloatingElementConfig floatingConfig = declaration.floating; + // This looks dodgy but because of the auto generated root element the depth of the tree will always be at least 2 here + Clay_LayoutElement *hierarchicalParent = Clay_LayoutElementArray_Get(&context->layoutElements, Clay__int32_tArray_GetValue(&context->openLayoutElementStack, context->openLayoutElementStack.length - 2)); + if (hierarchicalParent) { + uint32_t clipElementId = 0; + if (declaration.floating.attachTo == CLAY_ATTACH_TO_PARENT) { + // Attach to the element's direct hierarchical parent + floatingConfig.parentId = hierarchicalParent->id; + if (context->openClipElementStack.length > 0) { + clipElementId = Clay__int32_tArray_GetValue(&context->openClipElementStack, (int)context->openClipElementStack.length - 1); + } + } else if (declaration.floating.attachTo == CLAY_ATTACH_TO_ELEMENT_WITH_ID) { + Clay_LayoutElementHashMapItem *parentItem = Clay__GetHashMapItem(floatingConfig.parentId); + if (!parentItem) { + context->errorHandler.errorHandlerFunction(CLAY__INIT(Clay_ErrorData) { + .errorType = CLAY_ERROR_TYPE_FLOATING_CONTAINER_PARENT_NOT_FOUND, + .errorText = CLAY_STRING("A floating element was declared with a parentId, but no element with that ID was found."), + .userData = context->errorHandler.userData }); + } else { + clipElementId = Clay__int32_tArray_GetValue(&context->layoutElementClipElementIds, parentItem->layoutElement - context->layoutElements.internalArray); + } + } else if (declaration.floating.attachTo == CLAY_ATTACH_TO_ROOT) { + floatingConfig.parentId = Clay__HashString(CLAY_STRING("Clay__RootContainer"), 0, 0).id; + } + Clay__LayoutElementTreeRootArray_Add(&context->layoutElementTreeRoots, CLAY__INIT(Clay__LayoutElementTreeRoot) { + .layoutElementIndex = Clay__int32_tArray_GetValue(&context->openLayoutElementStack, context->openLayoutElementStack.length - 1), + .parentId = floatingConfig.parentId, + .clipElementId = clipElementId, + .zIndex = floatingConfig.zIndex, + }); + Clay__AttachElementConfig(CLAY__INIT(Clay_ElementConfigUnion) { .floatingElementConfig = Clay__StoreFloatingElementConfig(declaration.floating) }, CLAY__ELEMENT_CONFIG_TYPE_FLOATING); + } + } + if (declaration.custom.customData) { + Clay__AttachElementConfig(CLAY__INIT(Clay_ElementConfigUnion) { .customElementConfig = Clay__StoreCustomElementConfig(declaration.custom) }, CLAY__ELEMENT_CONFIG_TYPE_CUSTOM); + } + if (declaration.scroll.horizontal | declaration.scroll.vertical) { + Clay__AttachElementConfig(CLAY__INIT(Clay_ElementConfigUnion) { .scrollElementConfig = Clay__StoreScrollElementConfig(declaration.scroll) }, CLAY__ELEMENT_CONFIG_TYPE_SCROLL); + Clay__int32_tArray_Add(&context->openClipElementStack, (int)openLayoutElement->id); + // Retrieve or create cached data to track scroll position across frames + Clay__ScrollContainerDataInternal *scrollOffset = CLAY__NULL; + for (int32_t i = 0; i < context->scrollContainerDatas.length; i++) { + Clay__ScrollContainerDataInternal *mapping = Clay__ScrollContainerDataInternalArray_Get(&context->scrollContainerDatas, i); + if (openLayoutElement->id == mapping->elementId) { + scrollOffset = mapping; + scrollOffset->layoutElement = openLayoutElement; + scrollOffset->openThisFrame = true; + } + } + if (!scrollOffset) { + scrollOffset = Clay__ScrollContainerDataInternalArray_Add(&context->scrollContainerDatas, CLAY__INIT(Clay__ScrollContainerDataInternal){.layoutElement = openLayoutElement, .scrollOrigin = {-1,-1}, .elementId = openLayoutElement->id, .openThisFrame = true}); + } + if (context->externalScrollHandlingEnabled) { + scrollOffset->scrollPosition = Clay__QueryScrollOffset(scrollOffset->elementId, context->queryScrollOffsetUserData); + } + } + if (!Clay__MemCmp((char *)(&declaration.border.width), (char *)(&Clay__BorderWidth_DEFAULT), sizeof(Clay_BorderWidth))) { + Clay__AttachElementConfig(CLAY__INIT(Clay_ElementConfigUnion) { .borderElementConfig = Clay__StoreBorderElementConfig(declaration.border) }, CLAY__ELEMENT_CONFIG_TYPE_BORDER); + } } void Clay__InitializeEphemeralMemory(Clay_Context* context) { @@ -1494,15 +1606,14 @@ void Clay__InitializeEphemeralMemory(Clay_Context* context) { context->warnings = Clay__WarningArray_Allocate_Arena(100, arena); context->layoutConfigs = Clay__LayoutConfigArray_Allocate_Arena(maxElementCount, arena); - context->elementConfigBuffer = Clay__ElementConfigArray_Allocate_Arena(maxElementCount, arena); context->elementConfigs = Clay__ElementConfigArray_Allocate_Arena(maxElementCount, arena); - context->rectangleElementConfigs = Clay__RectangleElementConfigArray_Allocate_Arena(maxElementCount, arena); context->textElementConfigs = Clay__TextElementConfigArray_Allocate_Arena(maxElementCount, arena); context->imageElementConfigs = Clay__ImageElementConfigArray_Allocate_Arena(maxElementCount, arena); context->floatingElementConfigs = Clay__FloatingElementConfigArray_Allocate_Arena(maxElementCount, arena); context->scrollElementConfigs = Clay__ScrollElementConfigArray_Allocate_Arena(maxElementCount, arena); context->customElementConfigs = Clay__CustomElementConfigArray_Allocate_Arena(maxElementCount, arena); context->borderElementConfigs = Clay__BorderElementConfigArray_Allocate_Arena(maxElementCount, arena); + context->sharedElementConfigs = Clay__SharedElementConfigArray_Allocate_Arena(maxElementCount, arena); context->layoutElementIdStrings = Clay__StringArray_Allocate_Arena(maxElementCount, arena); context->wrappedTextLines = Clay__WrappedTextLineArray_Allocate_Arena(maxElementCount, arena); @@ -1526,7 +1637,7 @@ void Clay__InitializePersistentMemory(Clay_Context* context) { int32_t maxElementCount = context->maxElementCount; int32_t maxMeasureTextCacheWordCount = context->maxMeasureTextCacheWordCount; Clay_Arena *arena = &context->internalArena; - + context->scrollContainerDatas = Clay__ScrollContainerDataInternalArray_Allocate_Arena(10, arena); context->layoutElementsHashMapInternal = Clay__LayoutElementHashMapItemArray_Allocate_Arena(maxElementCount, arena); context->layoutElementsHashMap = Clay__int32_tArray_Allocate_Arena(maxElementCount, arena); @@ -1540,7 +1651,6 @@ void Clay__InitializePersistentMemory(Clay_Context* context) { context->arenaResetOffset = arena->nextAllocation; } - void Clay__CompressChildrenAlongAxis(bool xAxis, float totalSizeToDistribute, Clay__int32_tArray resizableContainerBuffer) { Clay_Context* context = Clay_GetCurrentContext(); Clay__int32_tArray largestContainers = context->openClipElementStack; @@ -1551,9 +1661,6 @@ void Clay__CompressChildrenAlongAxis(bool xAxis, float totalSizeToDistribute, Cl float targetSize = 0; for (int32_t i = 0; i < resizableContainerBuffer.length; ++i) { Clay_LayoutElement *childElement = Clay_LayoutElementArray_Get(&context->layoutElements, Clay__int32_tArray_GetValue(&resizableContainerBuffer, i)); - if (!xAxis && Clay__ElementHasConfig(childElement, CLAY__ELEMENT_CONFIG_TYPE_IMAGE)) { - continue; - } float childSize = xAxis ? childElement->dimensions.width : childElement->dimensions.height; if ((childSize - largestSize) < 0.1 && (childSize - largestSize) > -0.1) { Clay__int32_tArray_Add(&largestContainers, Clay__int32_tArray_GetValue(&resizableContainerBuffer, i)); @@ -1605,10 +1712,10 @@ void Clay__SizeContainersAlongAxis(bool xAxis) { Clay__int32_tArray_Add(&bfsBuffer, (int32_t)root->layoutElementIndex); // Size floating containers to their parents - if (Clay__ElementHasConfig(rootElement, CLAY__ELEMENT_CONFIG_TYPE_FLOATING_CONTAINER)) { - Clay_FloatingElementConfig *floatingElementConfig = Clay__FindElementConfigWithType(rootElement, CLAY__ELEMENT_CONFIG_TYPE_FLOATING_CONTAINER).floatingElementConfig; + if (Clay__ElementHasConfig(rootElement, CLAY__ELEMENT_CONFIG_TYPE_FLOATING)) { + Clay_FloatingElementConfig *floatingElementConfig = Clay__FindElementConfigWithType(rootElement, CLAY__ELEMENT_CONFIG_TYPE_FLOATING).floatingElementConfig; Clay_LayoutElementHashMapItem *parentItem = Clay__GetHashMapItem(floatingElementConfig->parentId); - if (parentItem) { + if (parentItem && parentItem != &Clay_LayoutElementHashMapItem_DEFAULT) { Clay_LayoutElement *parentLayoutElement = parentItem->layoutElement; if (rootElement->layoutConfig->sizing.width.type == CLAY__SIZING_TYPE_GROW) { rootElement->dimensions.width = parentLayoutElement->dimensions.width; @@ -1644,7 +1751,11 @@ void Clay__SizeContainersAlongAxis(bool xAxis) { Clay__int32_tArray_Add(&bfsBuffer, childElementIndex); } - if (childSizing.type != CLAY__SIZING_TYPE_PERCENT && childSizing.type != CLAY__SIZING_TYPE_FIXED && (!Clay__ElementHasConfig(childElement, CLAY__ELEMENT_CONFIG_TYPE_TEXT) || (Clay__FindElementConfigWithType(childElement, CLAY__ELEMENT_CONFIG_TYPE_TEXT).textElementConfig->wrapMode == CLAY_TEXT_WRAP_WORDS))) { + if (childSizing.type != CLAY__SIZING_TYPE_PERCENT + && childSizing.type != CLAY__SIZING_TYPE_FIXED + && (!Clay__ElementHasConfig(childElement, CLAY__ELEMENT_CONFIG_TYPE_TEXT) || (Clay__FindElementConfigWithType(childElement, CLAY__ELEMENT_CONFIG_TYPE_TEXT).textElementConfig->wrapMode == CLAY_TEXT_WRAP_WORDS)) // todo too many loops + && (xAxis || !Clay__ElementHasConfig(childElement, CLAY__ELEMENT_CONFIG_TYPE_IMAGE)) + ) { Clay__int32_tArray_Add(&resizableContainerBuffer, childElementIndex); } @@ -1682,8 +1793,8 @@ void Clay__SizeContainersAlongAxis(bool xAxis) { // The content is too large, compress the children as much as possible if (sizeToDistribute < 0) { // If the parent can scroll in the axis direction in this direction, don't compress children, just leave them alone - if (Clay__ElementHasConfig(parent, CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER)) { - Clay_ScrollElementConfig *scrollElementConfig = Clay__FindElementConfigWithType(parent, CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER).scrollElementConfig; + Clay_ScrollElementConfig *scrollElementConfig = Clay__FindElementConfigWithType(parent, CLAY__ELEMENT_CONFIG_TYPE_SCROLL).scrollElementConfig; + if (scrollElementConfig) { if (((xAxis && scrollElementConfig->horizontal) || (!xAxis && scrollElementConfig->vertical))) { continue; } @@ -1724,8 +1835,8 @@ void Clay__SizeContainersAlongAxis(bool xAxis) { // If we're laying out the children of a scroll panel, grow containers expand to the height of the inner content, not the outer container float maxSize = parentSize - parentPadding; - if (Clay__ElementHasConfig(parent, CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER)) { - Clay_ScrollElementConfig *scrollElementConfig = Clay__FindElementConfigWithType(parent, CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER).scrollElementConfig; + if (Clay__ElementHasConfig(parent, CLAY__ELEMENT_CONFIG_TYPE_SCROLL)) { + Clay_ScrollElementConfig *scrollElementConfig = Clay__FindElementConfigWithType(parent, CLAY__ELEMENT_CONFIG_TYPE_SCROLL).scrollElementConfig; if (((xAxis && scrollElementConfig->horizontal) || (!xAxis && scrollElementConfig->vertical))) { maxSize = CLAY__MAX(maxSize, innerContentSize); } @@ -1939,13 +2050,13 @@ void Clay__CalculateFinalLayout(void) { Clay_Vector2 rootPosition = CLAY__DEFAULT_STRUCT; Clay_LayoutElementHashMapItem *parentHashMapItem = Clay__GetHashMapItem(root->parentId); // Position root floating containers - if (Clay__ElementHasConfig(rootElement, CLAY__ELEMENT_CONFIG_TYPE_FLOATING_CONTAINER) && parentHashMapItem) { - Clay_FloatingElementConfig *config = Clay__FindElementConfigWithType(rootElement, CLAY__ELEMENT_CONFIG_TYPE_FLOATING_CONTAINER).floatingElementConfig; + if (Clay__ElementHasConfig(rootElement, CLAY__ELEMENT_CONFIG_TYPE_FLOATING) && parentHashMapItem) { + Clay_FloatingElementConfig *config = Clay__FindElementConfigWithType(rootElement, CLAY__ELEMENT_CONFIG_TYPE_FLOATING).floatingElementConfig; Clay_Dimensions rootDimensions = rootElement->dimensions; Clay_BoundingBox parentBoundingBox = parentHashMapItem->boundingBox; // Set X position Clay_Vector2 targetAttachPosition = CLAY__DEFAULT_STRUCT; - switch (config->attachment.parent) { + switch (config->attachPoints.parent) { case CLAY_ATTACH_POINT_LEFT_TOP: case CLAY_ATTACH_POINT_LEFT_CENTER: case CLAY_ATTACH_POINT_LEFT_BOTTOM: targetAttachPosition.x = parentBoundingBox.x; break; @@ -1956,7 +2067,7 @@ void Clay__CalculateFinalLayout(void) { case CLAY_ATTACH_POINT_RIGHT_CENTER: case CLAY_ATTACH_POINT_RIGHT_BOTTOM: targetAttachPosition.x = parentBoundingBox.x + parentBoundingBox.width; break; } - switch (config->attachment.element) { + switch (config->attachPoints.element) { case CLAY_ATTACH_POINT_LEFT_TOP: case CLAY_ATTACH_POINT_LEFT_CENTER: case CLAY_ATTACH_POINT_LEFT_BOTTOM: break; @@ -1967,7 +2078,7 @@ void Clay__CalculateFinalLayout(void) { case CLAY_ATTACH_POINT_RIGHT_CENTER: case CLAY_ATTACH_POINT_RIGHT_BOTTOM: targetAttachPosition.x -= rootDimensions.width; break; } - switch (config->attachment.parent) { // I know I could merge the x and y switch statements, but this is easier to read + switch (config->attachPoints.parent) { // I know I could merge the x and y switch statements, but this is easier to read case CLAY_ATTACH_POINT_LEFT_TOP: case CLAY_ATTACH_POINT_RIGHT_TOP: case CLAY_ATTACH_POINT_CENTER_TOP: targetAttachPosition.y = parentBoundingBox.y; break; @@ -1978,7 +2089,7 @@ void Clay__CalculateFinalLayout(void) { case CLAY_ATTACH_POINT_CENTER_BOTTOM: case CLAY_ATTACH_POINT_RIGHT_BOTTOM: targetAttachPosition.y = parentBoundingBox.y + parentBoundingBox.height; break; } - switch (config->attachment.element) { + switch (config->attachPoints.element) { case CLAY_ATTACH_POINT_LEFT_TOP: case CLAY_ATTACH_POINT_RIGHT_TOP: case CLAY_ATTACH_POINT_CENTER_TOP: break; @@ -1998,7 +2109,7 @@ void Clay__CalculateFinalLayout(void) { if (clipHashMapItem) { // Floating elements that are attached to scrolling contents won't be correctly positioned if external scroll handling is enabled, fix here if (context->externalScrollHandlingEnabled) { - Clay_ScrollElementConfig *scrollConfig = Clay__FindElementConfigWithType(clipHashMapItem->layoutElement, CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER).scrollElementConfig; + Clay_ScrollElementConfig *scrollConfig = Clay__FindElementConfigWithType(clipHashMapItem->layoutElement, CLAY__ELEMENT_CONFIG_TYPE_SCROLL).scrollElementConfig; for (int32_t i = 0; i < context->scrollContainerDatas.length; i++) { Clay__ScrollContainerDataInternal *mapping = Clay__ScrollContainerDataInternalArray_Get(&context->scrollContainerDatas, i); if (mapping->layoutElement == clipHashMapItem->layoutElement) { @@ -2015,9 +2126,9 @@ void Clay__CalculateFinalLayout(void) { } Clay__AddRenderCommand(CLAY__INIT(Clay_RenderCommand) { .boundingBox = clipHashMapItem->boundingBox, - .config = { .scrollElementConfig = Clay__StoreScrollElementConfig(CLAY__INIT(Clay_ScrollElementConfig)CLAY__DEFAULT_STRUCT) }, + .userData = 0, + .id = Clay__HashNumber(rootElement->id, rootElement->childrenOrTextContent.children.length + 10).id, // TODO need a better strategy for managing derived ids .zIndex = root->zIndex, - .id = Clay__RehashWithNumber(rootElement->id, 10), // TODO need a better strategy for managing derived ids .commandType = CLAY_RENDER_COMMAND_TYPE_SCISSOR_START, }); } @@ -2036,8 +2147,8 @@ void Clay__CalculateFinalLayout(void) { context->treeNodeVisited.internalArray[dfsBuffer.length - 1] = true; Clay_BoundingBox currentElementBoundingBox = { currentElementTreeNode->position.x, currentElementTreeNode->position.y, currentElement->dimensions.width, currentElement->dimensions.height }; - if (Clay__ElementHasConfig(currentElement, CLAY__ELEMENT_CONFIG_TYPE_FLOATING_CONTAINER)) { - Clay_FloatingElementConfig *floatingElementConfig = Clay__FindElementConfigWithType(currentElement, CLAY__ELEMENT_CONFIG_TYPE_FLOATING_CONTAINER).floatingElementConfig; + if (Clay__ElementHasConfig(currentElement, CLAY__ELEMENT_CONFIG_TYPE_FLOATING)) { + Clay_FloatingElementConfig *floatingElementConfig = Clay__FindElementConfigWithType(currentElement, CLAY__ELEMENT_CONFIG_TYPE_FLOATING).floatingElementConfig; Clay_Dimensions expand = floatingElementConfig->expand; currentElementBoundingBox.x -= expand.width; currentElementBoundingBox.width += expand.width * 2; @@ -2047,8 +2158,8 @@ void Clay__CalculateFinalLayout(void) { Clay__ScrollContainerDataInternal *scrollContainerData = CLAY__NULL; // Apply scroll offsets to container - if (Clay__ElementHasConfig(currentElement, CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER)) { - Clay_ScrollElementConfig *scrollConfig = Clay__FindElementConfigWithType(currentElement, CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER).scrollElementConfig; + if (Clay__ElementHasConfig(currentElement, CLAY__ELEMENT_CONFIG_TYPE_SCROLL)) { + Clay_ScrollElementConfig *scrollConfig = Clay__FindElementConfigWithType(currentElement, CLAY__ELEMENT_CONFIG_TYPE_SCROLL).scrollElementConfig; // This linear scan could theoretically be slow under very strange conditions, but I can't imagine a real UI with more than a few 10's of scroll containers for (int32_t i = 0; i < context->scrollContainerDatas.length; i++) { @@ -2086,7 +2197,7 @@ void Clay__CalculateFinalLayout(void) { int32_t next = sortedConfigIndexes[i + 1]; Clay__ElementConfigType currentType = Clay__ElementConfigArraySlice_Get(¤tElement->elementConfigs, current)->type; Clay__ElementConfigType nextType = Clay__ElementConfigArraySlice_Get(¤tElement->elementConfigs, next)->type; - if (nextType == CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER || currentType == CLAY__ELEMENT_CONFIG_TYPE_BORDER_CONTAINER) { + if (nextType == CLAY__ELEMENT_CONFIG_TYPE_SCROLL || currentType == CLAY__ELEMENT_CONFIG_TYPE_BORDER) { sortedConfigIndexes[i] = next; sortedConfigIndexes[i + 1] = current; } @@ -2094,12 +2205,20 @@ void Clay__CalculateFinalLayout(void) { sortMax--; } + bool emitRectangle; // Create the render commands for this element + Clay_SharedElementConfig *sharedConfig = Clay__FindElementConfigWithType(currentElement, CLAY__ELEMENT_CONFIG_TYPE_SHARED).sharedElementConfig; + if (sharedConfig) { + emitRectangle = true; + } + else if (!sharedConfig) { + emitRectangle = false; + sharedConfig = &Clay_SharedElementConfig_DEFAULT; + } for (int32_t elementConfigIndex = 0; elementConfigIndex < currentElement->elementConfigs.length; ++elementConfigIndex) { Clay_ElementConfig *elementConfig = Clay__ElementConfigArraySlice_Get(¤tElement->elementConfigs, sortedConfigIndexes[elementConfigIndex]); Clay_RenderCommand renderCommand = { .boundingBox = currentElementBoundingBox, - .config = elementConfig->config, .id = currentElement->id, }; @@ -2107,26 +2226,27 @@ void Clay__CalculateFinalLayout(void) { // Culling - Don't bother to generate render commands for rectangles entirely outside the screen - this won't stop their children from being rendered if they overflow bool shouldRender = !offscreen; switch (elementConfig->type) { - case CLAY__ELEMENT_CONFIG_TYPE_RECTANGLE: { - renderCommand.commandType = CLAY_RENDER_COMMAND_TYPE_RECTANGLE; - break; - } - case CLAY__ELEMENT_CONFIG_TYPE_BORDER_CONTAINER: { + case CLAY__ELEMENT_CONFIG_TYPE_FLOATING: + case CLAY__ELEMENT_CONFIG_TYPE_SHARED: + case CLAY__ELEMENT_CONFIG_TYPE_BORDER: { shouldRender = false; break; } - case CLAY__ELEMENT_CONFIG_TYPE_FLOATING_CONTAINER: { - renderCommand.commandType = CLAY_RENDER_COMMAND_TYPE_NONE; - shouldRender = false; - break; - } - case CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER: { + case CLAY__ELEMENT_CONFIG_TYPE_SCROLL: { renderCommand.commandType = CLAY_RENDER_COMMAND_TYPE_SCISSOR_START; - shouldRender = true; break; } case CLAY__ELEMENT_CONFIG_TYPE_IMAGE: { renderCommand.commandType = CLAY_RENDER_COMMAND_TYPE_IMAGE; + renderCommand.renderData = CLAY__INIT(Clay_RenderData) { + .image = { + .backgroundColor = emitRectangle ? sharedConfig->backgroundColor : CLAY__INIT(Clay_Color) { 255, 255, 255, 255 }, + .cornerRadius = sharedConfig->cornerRadius, + .sourceDimensions = elementConfig->config.imageElementConfig->sourceDimensions, + .imageData = elementConfig->config.imageElementConfig->imageData, + } + }; + emitRectangle = false; break; } case CLAY__ELEMENT_CONFIG_TYPE_TEXT: { @@ -2141,17 +2261,24 @@ void Clay__CalculateFinalLayout(void) { float lineHeightOffset = (finalLineHeight - naturalLineHeight) / 2; float yPosition = lineHeightOffset; for (int32_t lineIndex = 0; lineIndex < currentElement->childrenOrTextContent.textElementData->wrappedLines.length; ++lineIndex) { - Clay__WrappedTextLine wrappedLine = currentElement->childrenOrTextContent.textElementData->wrappedLines.internalArray[lineIndex]; // todo range check - if (wrappedLine.line.length == 0) { + Clay__WrappedTextLine *wrappedLine = Clay__WrappedTextLineArraySlice_Get(¤tElement->childrenOrTextContent.textElementData->wrappedLines, lineIndex); + if (wrappedLine->line.length == 0) { yPosition += finalLineHeight; continue; } Clay__AddRenderCommand(CLAY__INIT(Clay_RenderCommand) { - .boundingBox = { currentElementBoundingBox.x, currentElementBoundingBox.y + yPosition, wrappedLine.dimensions.width, wrappedLine.dimensions.height }, // TODO width - .config = configUnion, - .text = CLAY__INIT(Clay_StringSlice) { .length = wrappedLine.line.length, .chars = wrappedLine.line.chars, .baseChars = currentElement->childrenOrTextContent.textElementData->text.chars }, - .zIndex = root->zIndex, + .boundingBox = { currentElementBoundingBox.x, currentElementBoundingBox.y + yPosition, wrappedLine->dimensions.width, wrappedLine->dimensions.height }, + .renderData = { .text = { + .stringContents = CLAY__INIT(Clay_StringSlice) { .length = wrappedLine->line.length, .chars = wrappedLine->line.chars, .baseChars = currentElement->childrenOrTextContent.textElementData->text.chars }, + .textColor = textElementConfig->textColor, + .fontId = textElementConfig->fontId, + .fontSize = textElementConfig->fontSize, + .letterSpacing = textElementConfig->letterSpacing, + .lineHeight = textElementConfig->lineHeight, + }}, + .userData = sharedConfig->userData, .id = Clay__HashNumber(lineIndex, currentElement->id).id, + .zIndex = root->zIndex, .commandType = CLAY_RENDER_COMMAND_TYPE_TEXT, }); yPosition += finalLineHeight; @@ -2164,6 +2291,14 @@ void Clay__CalculateFinalLayout(void) { } case CLAY__ELEMENT_CONFIG_TYPE_CUSTOM: { renderCommand.commandType = CLAY_RENDER_COMMAND_TYPE_CUSTOM; + renderCommand.renderData = CLAY__INIT(Clay_RenderData) { + .custom = { + .backgroundColor = sharedConfig->backgroundColor, + .cornerRadius = sharedConfig->cornerRadius, + .customData = elementConfig->config.customElementConfig->customData, + } + }; + emitRectangle = false; break; } default: break; @@ -2178,6 +2313,20 @@ void Clay__CalculateFinalLayout(void) { } } + if (emitRectangle) { + Clay__AddRenderCommand(CLAY__INIT(Clay_RenderCommand) { + .boundingBox = currentElementBoundingBox, + .renderData = { .rectangle = { + .backgroundColor = sharedConfig->backgroundColor, + .cornerRadius = sharedConfig->cornerRadius, + }}, + .userData = sharedConfig->userData, + .id = currentElement->id, + .zIndex = root->zIndex, + .commandType = CLAY_RENDER_COMMAND_TYPE_RECTANGLE, + }); + } + // Setup initial on-axis alignment if (!Clay__ElementHasConfig(currentElementTreeNode->layoutElement, CLAY__ELEMENT_CONFIG_TYPE_TEXT)) { Clay_Dimensions contentSize = {0,0}; @@ -2219,9 +2368,9 @@ void Clay__CalculateFinalLayout(void) { else { // DFS is returning upwards backwards bool closeScrollElement = false; - if (Clay__ElementHasConfig(currentElement, CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER)) { + Clay_ScrollElementConfig *scrollConfig = Clay__FindElementConfigWithType(currentElement, CLAY__ELEMENT_CONFIG_TYPE_SCROLL).scrollElementConfig; + if (scrollConfig) { closeScrollElement = true; - Clay_ScrollElementConfig *scrollConfig = Clay__FindElementConfigWithType(currentElement, CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER).scrollElementConfig; for (int32_t i = 0; i < context->scrollContainerDatas.length; i++) { Clay__ScrollContainerDataInternal *mapping = Clay__ScrollContainerDataInternalArray_Get(&context->scrollContainerDatas, i); if (mapping->layoutElement == currentElement) { @@ -2235,22 +2384,26 @@ void Clay__CalculateFinalLayout(void) { } } - if (Clay__ElementHasConfig(currentElement, CLAY__ELEMENT_CONFIG_TYPE_BORDER_CONTAINER)) { + if (Clay__ElementHasConfig(currentElement, CLAY__ELEMENT_CONFIG_TYPE_BORDER)) { Clay_LayoutElementHashMapItem *currentElementData = Clay__GetHashMapItem(currentElement->id); Clay_BoundingBox currentElementBoundingBox = currentElementData->boundingBox; // Culling - Don't bother to generate render commands for rectangles entirely outside the screen - this won't stop their children from being rendered if they overflow if (!Clay__ElementIsOffscreen(¤tElementBoundingBox)) { - Clay_BorderElementConfig *borderConfig = Clay__FindElementConfigWithType(currentElement, CLAY__ELEMENT_CONFIG_TYPE_BORDER_CONTAINER).borderElementConfig; + Clay_SharedElementConfig *sharedConfig = Clay__ElementHasConfig(currentElement, CLAY__ELEMENT_CONFIG_TYPE_SHARED) ? Clay__FindElementConfigWithType(currentElement, CLAY__ELEMENT_CONFIG_TYPE_SHARED).sharedElementConfig : &Clay_SharedElementConfig_DEFAULT; + Clay_BorderElementConfig *borderConfig = Clay__FindElementConfigWithType(currentElement, CLAY__ELEMENT_CONFIG_TYPE_BORDER).borderElementConfig; Clay_RenderCommand renderCommand = { .boundingBox = currentElementBoundingBox, - .config = { .borderElementConfig = borderConfig }, - .id = Clay__RehashWithNumber(currentElement->id, 4), + .renderData = { .border = { + .color = borderConfig->color, + .cornerRadius = sharedConfig->cornerRadius, + .width = borderConfig->width + }}, + .id = Clay__HashNumber(currentElement->id, currentElement->childrenOrTextContent.children.length).id, .commandType = CLAY_RENDER_COMMAND_TYPE_BORDER, }; Clay__AddRenderCommand(renderCommand); - if (borderConfig->betweenChildren.width > 0 && borderConfig->betweenChildren.color.a > 0) { - Clay_RectangleElementConfig *rectangleConfig = Clay__StoreRectangleElementConfig(CLAY__INIT(Clay_RectangleElementConfig) {.color = borderConfig->betweenChildren.color}); + if (borderConfig->width.betweenChildren > 0 && borderConfig->color.a > 0) { float halfGap = layoutConfig->childGap / 2; Clay_Vector2 borderOffset = { (float)layoutConfig->padding.left - halfGap, (float)layoutConfig->padding.top - halfGap }; if (layoutConfig->layoutDirection == CLAY_LEFT_TO_RIGHT) { @@ -2258,9 +2411,11 @@ void Clay__CalculateFinalLayout(void) { Clay_LayoutElement *childElement = Clay_LayoutElementArray_Get(&context->layoutElements, currentElement->childrenOrTextContent.children.elements[i]); if (i > 0) { Clay__AddRenderCommand(CLAY__INIT(Clay_RenderCommand) { - .boundingBox = { currentElementBoundingBox.x + borderOffset.x + scrollOffset.x, currentElementBoundingBox.y + scrollOffset.y, (float)borderConfig->betweenChildren.width, currentElement->dimensions.height }, - .config = { rectangleConfig }, - .id = Clay__RehashWithNumber(currentElement->id, 5 + i), + .boundingBox = { currentElementBoundingBox.x + borderOffset.x + scrollOffset.x, currentElementBoundingBox.y + scrollOffset.y, (float)borderConfig->width.betweenChildren, currentElement->dimensions.height }, + .renderData = { .rectangle = { + .backgroundColor = borderConfig->color, + } }, + .id = Clay__HashNumber(currentElement->id, currentElement->childrenOrTextContent.children.length + 1 + i).id, .commandType = CLAY_RENDER_COMMAND_TYPE_RECTANGLE, }); } @@ -2271,9 +2426,11 @@ void Clay__CalculateFinalLayout(void) { Clay_LayoutElement *childElement = Clay_LayoutElementArray_Get(&context->layoutElements, currentElement->childrenOrTextContent.children.elements[i]); if (i > 0) { Clay__AddRenderCommand(CLAY__INIT(Clay_RenderCommand) { - .boundingBox = { currentElementBoundingBox.x + scrollOffset.x, currentElementBoundingBox.y + borderOffset.y + scrollOffset.y, currentElement->dimensions.width, (float)borderConfig->betweenChildren.width }, - .config = { rectangleConfig }, - .id = Clay__RehashWithNumber(currentElement->id, 5 + i), + .boundingBox = { currentElementBoundingBox.x + scrollOffset.x, currentElementBoundingBox.y + borderOffset.y + scrollOffset.y, currentElement->dimensions.width, (float)borderConfig->width.betweenChildren }, + .renderData = { .rectangle = { + .backgroundColor = borderConfig->color, + } }, + .id = Clay__HashNumber(currentElement->id, currentElement->childrenOrTextContent.children.length + 1 + i).id, .commandType = CLAY_RENDER_COMMAND_TYPE_RECTANGLE, }); } @@ -2286,7 +2443,7 @@ void Clay__CalculateFinalLayout(void) { // This exists because the scissor needs to end _after_ borders between elements if (closeScrollElement) { Clay__AddRenderCommand(CLAY__INIT(Clay_RenderCommand) { - .id = Clay__RehashWithNumber(currentElement->id, 11), + .id = Clay__HashNumber(currentElement->id, rootElement->childrenOrTextContent.children.length + 11).id, .commandType = CLAY_RENDER_COMMAND_TYPE_SCISSOR_END, }); } @@ -2344,47 +2501,23 @@ void Clay__CalculateFinalLayout(void) { } if (root->clipElementId) { - Clay__AddRenderCommand(CLAY__INIT(Clay_RenderCommand) { .id = Clay__RehashWithNumber(rootElement->id, 11), .commandType = CLAY_RENDER_COMMAND_TYPE_SCISSOR_END }); + Clay__AddRenderCommand(CLAY__INIT(Clay_RenderCommand) { .id = Clay__HashNumber(rootElement->id, rootElement->childrenOrTextContent.children.length + 11).id, .commandType = CLAY_RENDER_COMMAND_TYPE_SCISSOR_END }); } } } -void Clay__AttachId(Clay_ElementId elementId) { +Clay_ElementId Clay__AttachId(Clay_ElementId elementId) { Clay_Context* context = Clay_GetCurrentContext(); if (context->booleanWarnings.maxElementsExceeded) { - return; + return Clay_ElementId_DEFAULT; } Clay_LayoutElement *openLayoutElement = Clay__GetOpenLayoutElement(); openLayoutElement->id = elementId.id; Clay__AddHashMapItem(elementId, openLayoutElement); Clay__StringArray_Add(&context->layoutElementIdStrings, elementId.stringId); + return elementId; } -void Clay__AttachLayoutConfig(Clay_LayoutConfig *config) { - Clay_Context* context = Clay_GetCurrentContext(); - if (context->booleanWarnings.maxElementsExceeded) { - return; - } - Clay__GetOpenLayoutElement()->layoutConfig = config; -} -void Clay__AttachElementConfig(Clay_ElementConfigUnion config, Clay__ElementConfigType type) { - Clay_Context* context = Clay_GetCurrentContext(); - if (context->booleanWarnings.maxElementsExceeded) { - return; - } - Clay_LayoutElement *openLayoutElement = Clay__GetOpenLayoutElement(); - openLayoutElement->elementConfigs.length++; - Clay__ElementConfigArray_Add(&context->elementConfigBuffer, CLAY__INIT(Clay_ElementConfig) { .type = type, .config = config }); -} -Clay_LayoutConfig * Clay__StoreLayoutConfig(Clay_LayoutConfig config) { return Clay_GetCurrentContext()->booleanWarnings.maxElementsExceeded ? &CLAY_LAYOUT_DEFAULT : Clay__LayoutConfigArray_Add(&Clay_GetCurrentContext()->layoutConfigs, config); } -Clay_RectangleElementConfig * Clay__StoreRectangleElementConfig(Clay_RectangleElementConfig config) { return Clay_GetCurrentContext()->booleanWarnings.maxElementsExceeded ? &Clay_RectangleElementConfig_DEFAULT : Clay__RectangleElementConfigArray_Add(&Clay_GetCurrentContext()->rectangleElementConfigs, config); } -Clay_TextElementConfig * Clay__StoreTextElementConfig(Clay_TextElementConfig config) { return Clay_GetCurrentContext()->booleanWarnings.maxElementsExceeded ? &Clay_TextElementConfig_DEFAULT : Clay__TextElementConfigArray_Add(&Clay_GetCurrentContext()->textElementConfigs, config); } -Clay_ImageElementConfig * Clay__StoreImageElementConfig(Clay_ImageElementConfig config) { return Clay_GetCurrentContext()->booleanWarnings.maxElementsExceeded ? &Clay_ImageElementConfig_DEFAULT : Clay__ImageElementConfigArray_Add(&Clay_GetCurrentContext()->imageElementConfigs, config); } -Clay_FloatingElementConfig * Clay__StoreFloatingElementConfig(Clay_FloatingElementConfig config) { return Clay_GetCurrentContext()->booleanWarnings.maxElementsExceeded ? &Clay_FloatingElementConfig_DEFAULT : Clay__FloatingElementConfigArray_Add(&Clay_GetCurrentContext()->floatingElementConfigs, config); } -Clay_CustomElementConfig * Clay__StoreCustomElementConfig(Clay_CustomElementConfig config) { return Clay_GetCurrentContext()->booleanWarnings.maxElementsExceeded ? &Clay_CustomElementConfig_DEFAULT : Clay__CustomElementConfigArray_Add(&Clay_GetCurrentContext()->customElementConfigs, config); } -Clay_ScrollElementConfig * Clay__StoreScrollElementConfig(Clay_ScrollElementConfig config) { return Clay_GetCurrentContext()->booleanWarnings.maxElementsExceeded ? &Clay_ScrollElementConfig_DEFAULT : Clay__ScrollElementConfigArray_Add(&Clay_GetCurrentContext()->scrollElementConfigs, config); } -Clay_BorderElementConfig * Clay__StoreBorderElementConfig(Clay_BorderElementConfig config) { return Clay_GetCurrentContext()->booleanWarnings.maxElementsExceeded ? &Clay_BorderElementConfig_DEFAULT : Clay__BorderElementConfigArray_Add(&Clay_GetCurrentContext()->borderElementConfigs, config); } - #pragma region DebugTools Clay_Color CLAY__DEBUGVIEW_COLOR_1 = {58, 56, 52, 255}; Clay_Color CLAY__DEBUGVIEW_COLOR_2 = {62, 60, 58, 255}; @@ -2404,12 +2537,12 @@ typedef struct { Clay__DebugElementConfigTypeLabelConfig Clay__DebugGetElementConfigTypeLabel(Clay__ElementConfigType type) { switch (type) { - case CLAY__ELEMENT_CONFIG_TYPE_RECTANGLE: return CLAY__INIT(Clay__DebugElementConfigTypeLabelConfig) { CLAY_STRING("Rectangle"), {243,134,48,255} }; + case CLAY__ELEMENT_CONFIG_TYPE_SHARED: return CLAY__INIT(Clay__DebugElementConfigTypeLabelConfig) { CLAY_STRING("Shared"), {243,134,48,255} }; case CLAY__ELEMENT_CONFIG_TYPE_TEXT: return CLAY__INIT(Clay__DebugElementConfigTypeLabelConfig) { CLAY_STRING("Text"), {105,210,231,255} }; case CLAY__ELEMENT_CONFIG_TYPE_IMAGE: return CLAY__INIT(Clay__DebugElementConfigTypeLabelConfig) { CLAY_STRING("Image"), {121,189,154,255} }; - case CLAY__ELEMENT_CONFIG_TYPE_FLOATING_CONTAINER: return CLAY__INIT(Clay__DebugElementConfigTypeLabelConfig) { CLAY_STRING("Floating"), {250,105,0,255} }; - case CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER: return CLAY__INIT(Clay__DebugElementConfigTypeLabelConfig) { CLAY_STRING("Scroll"), {242,196,90,255} }; - case CLAY__ELEMENT_CONFIG_TYPE_BORDER_CONTAINER: return CLAY__INIT(Clay__DebugElementConfigTypeLabelConfig) { CLAY_STRING("Border"), {108,91,123, 255} }; + case CLAY__ELEMENT_CONFIG_TYPE_FLOATING: return CLAY__INIT(Clay__DebugElementConfigTypeLabelConfig) { CLAY_STRING("Floating"), {250,105,0,255} }; + case CLAY__ELEMENT_CONFIG_TYPE_SCROLL: return CLAY__INIT(Clay__DebugElementConfigTypeLabelConfig) {CLAY_STRING("Scroll"), {242, 196, 90, 255} }; + case CLAY__ELEMENT_CONFIG_TYPE_BORDER: return CLAY__INIT(Clay__DebugElementConfigTypeLabelConfig) {CLAY_STRING("Border"), {108, 91, 123, 255} }; case CLAY__ELEMENT_CONFIG_TYPE_CUSTOM: return CLAY__INIT(Clay__DebugElementConfigTypeLabelConfig) { CLAY_STRING("Custom"), {11,72,107,255} }; default: break; } @@ -2436,8 +2569,8 @@ Clay__RenderDebugLayoutData Clay__RenderDebugLayoutElementsList(int32_t initialR Clay__int32_tArray_Add(&dfsBuffer, (int32_t)root->layoutElementIndex); context->treeNodeVisited.internalArray[0] = false; if (rootIndex > 0) { - CLAY(CLAY_IDI("Clay__DebugView_EmptyRowOuter", rootIndex), CLAY_LAYOUT({ .sizing = {.width = CLAY_SIZING_GROW(0)}, .padding = {CLAY__DEBUGVIEW_INDENT_WIDTH / 2, 0} })) { - CLAY(CLAY_IDI("Clay__DebugView_EmptyRow", rootIndex), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED((float)CLAY__DEBUGVIEW_ROW_HEIGHT) }}), CLAY_BORDER({ .top = { .width = 1, .color = CLAY__DEBUGVIEW_COLOR_3 } })) {} + CLAY({ .id = CLAY_IDI("Clay__DebugView_EmptyRowOuter", rootIndex), .layout = { .sizing = {.width = CLAY_SIZING_GROW(0)}, .padding = {CLAY__DEBUGVIEW_INDENT_WIDTH / 2, 0} } }) { + CLAY({ .id = CLAY_IDI("Clay__DebugView_EmptyRow", rootIndex), .layout = { .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED((float)CLAY__DEBUGVIEW_ROW_HEIGHT) }}, .border = { .color = CLAY__DEBUGVIEW_COLOR_3, .width = { .top = 1 } } }) {} } layoutData.rowCount++; } @@ -2467,29 +2600,31 @@ Clay__RenderDebugLayoutData Clay__RenderDebugLayoutElementsList(int32_t initialR if (context->debugSelectedElementId == currentElement->id) { layoutData.selectedElementRowIndex = layoutData.rowCount; } - CLAY(CLAY_IDI("Clay__DebugView_ElementOuter", currentElement->id), Clay__AttachLayoutConfig(&Clay__DebugView_ScrollViewItemLayoutConfig)) { + CLAY({ .id = CLAY_IDI("Clay__DebugView_ElementOuter", currentElement->id), .layout = Clay__DebugView_ScrollViewItemLayoutConfig }) { // Collapse icon / button if (!(Clay__ElementHasConfig(currentElement, CLAY__ELEMENT_CONFIG_TYPE_TEXT) || currentElement->childrenOrTextContent.children.length == 0)) { - CLAY(CLAY_IDI("Clay__DebugView_CollapseElement", currentElement->id), - CLAY_LAYOUT({ .sizing = {CLAY_SIZING_FIXED(16), CLAY_SIZING_FIXED(16)}, .childAlignment = { CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER} }), - CLAY_BORDER_OUTSIDE_RADIUS(1, CLAY__DEBUGVIEW_COLOR_3, 4) - ) { + CLAY({ + .id = CLAY_IDI("Clay__DebugView_CollapseElement", currentElement->id), + .layout = { .sizing = {CLAY_SIZING_FIXED(16), CLAY_SIZING_FIXED(16)}, .childAlignment = { CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER} }, + .cornerRadius = CLAY_CORNER_RADIUS(4), + .border = { .color = CLAY__DEBUGVIEW_COLOR_3, .width = {1, 1, 1, 1} }, + }) { CLAY_TEXT((currentElementData && currentElementData->debugData->collapsed) ? CLAY_STRING("+") : CLAY_STRING("-"), CLAY_TEXT_CONFIG({ .textColor = CLAY__DEBUGVIEW_COLOR_4, .fontSize = 16 })); } } else { // Square dot for empty containers - CLAY(CLAY_LAYOUT({ .sizing = {CLAY_SIZING_FIXED(16), CLAY_SIZING_FIXED(16)}, .childAlignment = { CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER } })) { - CLAY(CLAY_LAYOUT({ .sizing = {CLAY_SIZING_FIXED(8), CLAY_SIZING_FIXED(8)} }), CLAY_RECTANGLE({ .color = CLAY__DEBUGVIEW_COLOR_3, .cornerRadius = CLAY_CORNER_RADIUS(2) })) {} + CLAY({ .layout = { .sizing = {CLAY_SIZING_FIXED(16), CLAY_SIZING_FIXED(16)}, .childAlignment = { CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER } } }) { + CLAY({ .layout = { .sizing = {CLAY_SIZING_FIXED(8), CLAY_SIZING_FIXED(8)} }, .backgroundColor = CLAY__DEBUGVIEW_COLOR_3, .cornerRadius = CLAY_CORNER_RADIUS(2) }) {} } } // Collisions and offscreen info if (currentElementData) { if (currentElementData->debugData->collision) { - CLAY(CLAY_LAYOUT({ .padding = { 8, 8, 2, 2 } }), CLAY_BORDER_OUTSIDE_RADIUS(1, (CLAY__INIT(Clay_Color){177, 147, 8, 255}), 4)) { + CLAY({ .layout = { .padding = { 8, 8, 2, 2 }}, .border = { .color = {177, 147, 8, 255}, .width = {1, 1, 1, 1} } }) { CLAY_TEXT(CLAY_STRING("Duplicate ID"), CLAY_TEXT_CONFIG({ .textColor = CLAY__DEBUGVIEW_COLOR_3, .fontSize = 16 })); } } if (offscreen) { - CLAY(CLAY_LAYOUT({ .padding = { 8, 8, 2, 2 } }), CLAY_BORDER_OUTSIDE_RADIUS(1, CLAY__DEBUGVIEW_COLOR_3, 4)) { + CLAY({ .layout = { .padding = { 8, 8, 2, 2 } }, .border = { .color = CLAY__DEBUGVIEW_COLOR_3, .width = { 1, 1, 1, 1 } } }) { CLAY_TEXT(CLAY_STRING("Offscreen"), CLAY_TEXT_CONFIG({ .textColor = CLAY__DEBUGVIEW_COLOR_3, .fontSize = 16 })); } } @@ -2503,7 +2638,7 @@ Clay__RenderDebugLayoutData Clay__RenderDebugLayoutElementsList(int32_t initialR Clay__DebugElementConfigTypeLabelConfig config = Clay__DebugGetElementConfigTypeLabel(elementConfig->type); Clay_Color backgroundColor = config.color; backgroundColor.a = 90; - CLAY(CLAY_LAYOUT({ .padding = { 8, 8, 2, 2 } }), CLAY_RECTANGLE({ .color = backgroundColor, .cornerRadius = CLAY_CORNER_RADIUS(4) }), CLAY_BORDER_OUTSIDE_RADIUS(1, config.color, 4)) { + CLAY({ .layout = { .padding = { 8, 8, 2, 2 } }, .backgroundColor = backgroundColor, .cornerRadius = CLAY_CORNER_RADIUS(4), .border = { .color = config.color, .width = { 1, 1, 1, 1 } } }) { CLAY_TEXT(config.label, CLAY_TEXT_CONFIG({ .textColor = offscreen ? CLAY__DEBUGVIEW_COLOR_3 : CLAY__DEBUGVIEW_COLOR_4, .fontSize = 16 })); } } @@ -2514,8 +2649,8 @@ Clay__RenderDebugLayoutData Clay__RenderDebugLayoutElementsList(int32_t initialR layoutData.rowCount++; Clay__TextElementData *textElementData = currentElement->childrenOrTextContent.textElementData; Clay_TextElementConfig *rawTextConfig = offscreen ? CLAY_TEXT_CONFIG({ .textColor = CLAY__DEBUGVIEW_COLOR_3, .fontSize = 16 }) : &Clay__DebugView_TextNameConfig; - CLAY(CLAY_LAYOUT({ .sizing = { .height = CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT)}, .childAlignment = { .y = CLAY_ALIGN_Y_CENTER } }), CLAY_RECTANGLE(CLAY__DEFAULT_STRUCT)) { - CLAY(CLAY_LAYOUT({ .sizing = {CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_INDENT_WIDTH + 16), CLAY__DEFAULT_STRUCT} })) {} + CLAY({ .layout = { .sizing = { .height = CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT)}, .childAlignment = { .y = CLAY_ALIGN_Y_CENTER } } }) { + CLAY({ .layout = { .sizing = {CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_INDENT_WIDTH + 16) } } }) {} CLAY_TEXT(CLAY_STRING("\""), rawTextConfig); CLAY_TEXT(textElementData->text.length > 40 ? (CLAY__INIT(Clay_String) { .length = 40, .chars = textElementData->text.chars }) : textElementData->text, rawTextConfig); if (textElementData->text.length > 40) { @@ -2525,15 +2660,11 @@ Clay__RenderDebugLayoutData Clay__RenderDebugLayoutElementsList(int32_t initialR } } else if (currentElement->childrenOrTextContent.children.length > 0) { Clay__OpenElement(); - CLAY_LAYOUT({ .padding = { 8 } }); - Clay__ElementPostConfiguration(); + Clay__ConfigureOpenElement(CLAY__INIT(Clay_ElementDeclaration) { .layout = { .padding = { 8 } } }); Clay__OpenElement(); - CLAY_BORDER({ .left = { .width = 1, .color = CLAY__DEBUGVIEW_COLOR_3 }}); - Clay__ElementPostConfiguration(); - CLAY(CLAY_LAYOUT({ .sizing = {CLAY_SIZING_FIXED( CLAY__DEBUGVIEW_INDENT_WIDTH), CLAY__DEFAULT_STRUCT}, .childAlignment = { .x = CLAY_ALIGN_X_RIGHT } })) {} + Clay__ConfigureOpenElement(CLAY__INIT(Clay_ElementDeclaration) { .layout = { .padding = { .left = CLAY__DEBUGVIEW_INDENT_WIDTH }}, .border = { .color = CLAY__DEBUGVIEW_COLOR_3, .width = { .left = 1 } }}); Clay__OpenElement(); - CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM }); - Clay__ElementPostConfiguration(); + Clay__ConfigureOpenElement(CLAY__INIT(Clay_ElementDeclaration) { .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM } }); } layoutData.rowCount++; @@ -2559,8 +2690,8 @@ Clay__RenderDebugLayoutData Clay__RenderDebugLayoutElementsList(int32_t initialR } if (highlightedElementId) { - CLAY(CLAY_ID("Clay__DebugView_ElementHighlight"), CLAY_LAYOUT({ .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0)} }), CLAY_FLOATING({ .zIndex = 65535, .parentId = highlightedElementId })) { - CLAY(CLAY_ID("Clay__DebugView_ElementHighlightRectangle"), CLAY_LAYOUT({ .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0)} }), CLAY_RECTANGLE({.color = Clay__debugViewHighlightColor })) {} + CLAY({ .id = CLAY_ID("Clay__DebugView_ElementHighlight"), .layout = { .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0)} }, .floating = { .parentId = highlightedElementId, .zIndex = 32767, .pointerCaptureMode = CLAY_POINTER_CAPTURE_MODE_PASSTHROUGH, .attachTo = CLAY_ATTACH_TO_ELEMENT_WITH_ID } }) { + CLAY({ .id = CLAY_ID("Clay__DebugView_ElementHighlightRectangle"), .layout = { .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0)} }, .backgroundColor = Clay__debugViewHighlightColor }) {} } } return layoutData; @@ -2595,17 +2726,17 @@ void Clay__RenderDebugViewElementConfigHeader(Clay_String elementId, Clay__Eleme Clay__DebugElementConfigTypeLabelConfig config = Clay__DebugGetElementConfigTypeLabel(type); Clay_Color backgroundColor = config.color; backgroundColor.a = 90; - CLAY(CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0)}, .padding = CLAY_PADDING_ALL(CLAY__DEBUGVIEW_OUTER_PADDING), .childAlignment = { .y = CLAY_ALIGN_Y_CENTER } })) { - CLAY(CLAY_LAYOUT({ .padding = { 8, 8, 2, 2 } }), CLAY_RECTANGLE({ .color = backgroundColor, .cornerRadius = CLAY_CORNER_RADIUS(4) }), CLAY_BORDER_OUTSIDE_RADIUS(1, config.color, 4)) { + CLAY({ .layout = { .sizing = { CLAY_SIZING_GROW(0)}, .padding = CLAY_PADDING_ALL(CLAY__DEBUGVIEW_OUTER_PADDING), .childAlignment = { .y = CLAY_ALIGN_Y_CENTER } } }) { + CLAY({ .layout = { .padding = { 8, 8, 2, 2 } }, .backgroundColor = backgroundColor, .cornerRadius = CLAY_CORNER_RADIUS(4), .border = { .color = config.color, .width = { 1, 1, 1, 1 } } }) { CLAY_TEXT(config.label, CLAY_TEXT_CONFIG({ .textColor = CLAY__DEBUGVIEW_COLOR_4, .fontSize = 16 })); } - CLAY(CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_GROW(0) } })) {} + CLAY({ .layout = { .sizing = { .width = CLAY_SIZING_GROW(0) } } }) {} CLAY_TEXT(elementId, CLAY_TEXT_CONFIG({ .textColor = CLAY__DEBUGVIEW_COLOR_3, .fontSize = 16, .wrapMode = CLAY_TEXT_WRAP_NONE })); } } void Clay__RenderDebugViewColor(Clay_Color color, Clay_TextElementConfig *textConfig) { - CLAY(CLAY_LAYOUT({ .childAlignment = {.y = CLAY_ALIGN_Y_CENTER} })) { + CLAY({ .layout = { .childAlignment = {.y = CLAY_ALIGN_Y_CENTER} } }) { CLAY_TEXT(CLAY_STRING("{ r: "), textConfig); CLAY_TEXT(Clay__IntToString(color.r), textConfig); CLAY_TEXT(CLAY_STRING(", g: "), textConfig); @@ -2615,15 +2746,13 @@ void Clay__RenderDebugViewColor(Clay_Color color, Clay_TextElementConfig *textCo CLAY_TEXT(CLAY_STRING(", a: "), textConfig); CLAY_TEXT(Clay__IntToString(color.a), textConfig); CLAY_TEXT(CLAY_STRING(" }"), textConfig); - CLAY(CLAY_LAYOUT({ .sizing = { CLAY_SIZING_FIXED(10), CLAY__DEFAULT_STRUCT } })) {} - CLAY(CLAY_LAYOUT({ .sizing = { CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT - 8), CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT - 8)} }), CLAY_BORDER_OUTSIDE_RADIUS(1, CLAY__DEBUGVIEW_COLOR_4, 4)) { - CLAY(CLAY_LAYOUT({ .sizing = { CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT - 8), CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT - 8)} }), CLAY_RECTANGLE({ .color = color, .cornerRadius = CLAY_CORNER_RADIUS(4) })) {} - } + CLAY({ .layout = { .sizing = { CLAY_SIZING_FIXED(10) } } }) {} + CLAY({ .layout = { .sizing = { CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT - 8), CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT - 8)} }, .backgroundColor = color, .cornerRadius = CLAY_CORNER_RADIUS(4), .border = { .color = CLAY__DEBUGVIEW_COLOR_4, .width = { 1, 1, 1, 1 } } }) {} } } void Clay__RenderDebugViewCornerRadius(Clay_CornerRadius cornerRadius, Clay_TextElementConfig *textConfig) { - CLAY(CLAY_LAYOUT({ .childAlignment = {.y = CLAY_ALIGN_Y_CENTER} })) { + CLAY({ .layout = { .childAlignment = {.y = CLAY_ALIGN_Y_CENTER} } }) { CLAY_TEXT(CLAY_STRING("{ topLeft: "), textConfig); CLAY_TEXT(Clay__IntToString(cornerRadius.topLeft), textConfig); CLAY_TEXT(CLAY_STRING(", topRight: "), textConfig); @@ -2636,17 +2765,6 @@ void Clay__RenderDebugViewCornerRadius(Clay_CornerRadius cornerRadius, Clay_Text } } -void Clay__RenderDebugViewBorder(int32_t index, Clay_Border border, Clay_TextElementConfig *textConfig) { - (void) index; - CLAY(CLAY_LAYOUT({ .childAlignment = {.y = CLAY_ALIGN_Y_CENTER} })) { - CLAY_TEXT(CLAY_STRING("{ width: "), textConfig); - CLAY_TEXT(Clay__IntToString(border.width), textConfig); - CLAY_TEXT(CLAY_STRING(", color: "), textConfig); - Clay__RenderDebugViewColor(border.color, textConfig); - CLAY_TEXT(CLAY_STRING(" }"), textConfig); - } -} - void HandleDebugViewCloseButtonInteraction(Clay_ElementId elementId, Clay_PointerData pointerInfo, intptr_t userData) { Clay_Context* context = Clay_GetCurrentContext(); (void) elementId; (void) pointerInfo; (void) userData; @@ -2693,35 +2811,37 @@ void Clay__RenderDebugView(void) { highlightedRow = -1; } Clay__RenderDebugLayoutData layoutData = CLAY__DEFAULT_STRUCT; - CLAY(CLAY_ID("Clay__DebugView"), - CLAY_FLOATING({ .zIndex = 65000, .parentId = Clay__HashString(CLAY_STRING("Clay__RootContainer"), 0, 0).id, .attachment = { .element = CLAY_ATTACH_POINT_LEFT_CENTER, .parent = CLAY_ATTACH_POINT_RIGHT_CENTER }}), - CLAY_LAYOUT({ .sizing = { CLAY_SIZING_FIXED((float)Clay__debugViewWidth) , CLAY_SIZING_FIXED(context->layoutDimensions.height) }, .layoutDirection = CLAY_TOP_TO_BOTTOM }), - CLAY_BORDER({ .bottom = { .width = 1, .color = CLAY__DEBUGVIEW_COLOR_3 }}) - ) { - CLAY(CLAY_LAYOUT({ .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT)}, .padding = {CLAY__DEBUGVIEW_OUTER_PADDING, CLAY__DEBUGVIEW_OUTER_PADDING }, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER} }), CLAY_RECTANGLE({ .color = CLAY__DEBUGVIEW_COLOR_2 })) { + CLAY({ .id = CLAY_ID("Clay__DebugView"), + .layout = { .sizing = { CLAY_SIZING_FIXED((float)Clay__debugViewWidth) , CLAY_SIZING_FIXED(context->layoutDimensions.height) }, .layoutDirection = CLAY_TOP_TO_BOTTOM }, + .floating = { .zIndex = 32765, .attachPoints = { .element = CLAY_ATTACH_POINT_LEFT_CENTER, .parent = CLAY_ATTACH_POINT_RIGHT_CENTER }, .attachTo = CLAY_ATTACH_TO_ROOT }, + .border = { .color = CLAY__DEBUGVIEW_COLOR_3, .width = { .bottom = 1 } } + }) { + CLAY({ .layout = { .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT)}, .padding = {CLAY__DEBUGVIEW_OUTER_PADDING, CLAY__DEBUGVIEW_OUTER_PADDING }, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER} }, .backgroundColor = CLAY__DEBUGVIEW_COLOR_2 }) { CLAY_TEXT(CLAY_STRING("Clay Debug Tools"), infoTextConfig); - CLAY(CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0) } })) {} + CLAY({ .layout = { .sizing = { CLAY_SIZING_GROW(0) } } }) {} // Close button - CLAY(CLAY_BORDER_OUTSIDE_RADIUS(1, (CLAY__INIT(Clay_Color){217,91,67,255}), 4), - CLAY_LAYOUT({ .sizing = {CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT - 10), CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT - 10)}, .childAlignment = {CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER} }), - CLAY_RECTANGLE({ .color = {217,91,67,80} }), - Clay_OnHover(HandleDebugViewCloseButtonInteraction, 0) - ) { + CLAY({ + .layout = { .sizing = {CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT - 10), CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT - 10)}, .childAlignment = {CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER} }, + .backgroundColor = {217,91,67,80}, + .cornerRadius = CLAY_CORNER_RADIUS(4), + .border = { .color = { 217,91,67,255 }, .width = { 1, 1, 1, 1 } }, + }) { + Clay_OnHover(HandleDebugViewCloseButtonInteraction, 0); CLAY_TEXT(CLAY_STRING("x"), CLAY_TEXT_CONFIG({ .textColor = CLAY__DEBUGVIEW_COLOR_4, .fontSize = 16 })); } } - CLAY(CLAY_LAYOUT({ .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(1)} }), CLAY_RECTANGLE({ .color = CLAY__DEBUGVIEW_COLOR_3 })) {} - CLAY(Clay__AttachId(scrollId), CLAY_LAYOUT({ .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0)} }), CLAY_SCROLL({ .horizontal = true, .vertical = true })) { - CLAY(CLAY_LAYOUT({ .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0)}, .layoutDirection = CLAY_TOP_TO_BOTTOM }), CLAY_RECTANGLE({ .color = ((initialElementsLength + initialRootsLength) & 1) == 0 ? CLAY__DEBUGVIEW_COLOR_2 : CLAY__DEBUGVIEW_COLOR_1 })) { + CLAY({ .layout = { .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(1)} }, .backgroundColor = CLAY__DEBUGVIEW_COLOR_3 } ) {} + CLAY({ .id = scrollId, .layout = { .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0)} }, .scroll = { .horizontal = true, .vertical = true } }) { + CLAY({ .layout = { .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0)}, .layoutDirection = CLAY_TOP_TO_BOTTOM }, .backgroundColor = ((initialElementsLength + initialRootsLength) & 1) == 0 ? CLAY__DEBUGVIEW_COLOR_2 : CLAY__DEBUGVIEW_COLOR_1 }) { Clay_ElementId panelContentsId = Clay__HashString(CLAY_STRING("Clay__DebugViewPaneOuter"), 0, 0); // Element list - CLAY(Clay__AttachId(panelContentsId), CLAY_LAYOUT({ .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0)} }), CLAY_FLOATING({ .zIndex = 65001, .pointerCaptureMode = CLAY_POINTER_CAPTURE_MODE_PASSTHROUGH })) { - CLAY(CLAY_LAYOUT({ .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0)}, .padding = { CLAY__DEBUGVIEW_OUTER_PADDING, CLAY__DEBUGVIEW_OUTER_PADDING }, .layoutDirection = CLAY_TOP_TO_BOTTOM })) { + CLAY({ .id = panelContentsId, .layout = { .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0)} }, .floating = { .zIndex = 32766, .pointerCaptureMode = CLAY_POINTER_CAPTURE_MODE_PASSTHROUGH, .attachTo = CLAY_ATTACH_TO_PARENT } }) { + CLAY({ .layout = { .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0)}, .padding = { CLAY__DEBUGVIEW_OUTER_PADDING, CLAY__DEBUGVIEW_OUTER_PADDING }, .layoutDirection = CLAY_TOP_TO_BOTTOM } }) { layoutData = Clay__RenderDebugLayoutElementsList((int32_t)initialRootsLength, highlightedRow); } } float contentWidth = Clay__GetHashMapItem(panelContentsId.id)->layoutElement->dimensions.width; - CLAY(CLAY_LAYOUT({ .sizing = {CLAY_SIZING_FIXED(contentWidth), CLAY__DEFAULT_STRUCT}, .layoutDirection = CLAY_TOP_TO_BOTTOM })) {} + CLAY({ .layout = { .sizing = {CLAY_SIZING_FIXED(contentWidth) }, .layoutDirection = CLAY_TOP_TO_BOTTOM } }) {} for (int32_t i = 0; i < layoutData.rowCount; i++) { Clay_Color rowColor = (i & 1) == 0 ? CLAY__DEBUGVIEW_COLOR_2 : CLAY__DEBUGVIEW_COLOR_1; if (i == layoutData.selectedElementRowIndex) { @@ -2732,22 +2852,22 @@ void Clay__RenderDebugView(void) { rowColor.g *= 1.25f; rowColor.b *= 1.25f; } - CLAY(CLAY_LAYOUT({ .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT)}, .layoutDirection = CLAY_TOP_TO_BOTTOM }), CLAY_RECTANGLE({ .color = rowColor })) {} + CLAY({ .layout = { .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT)}, .layoutDirection = CLAY_TOP_TO_BOTTOM }, .backgroundColor = rowColor } ) {} } } } - CLAY(CLAY_LAYOUT({ .sizing = {.width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(1)} }), CLAY_RECTANGLE({ .color = CLAY__DEBUGVIEW_COLOR_3 })) {} + CLAY({ .layout = { .sizing = {.width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(1)} }, .backgroundColor = CLAY__DEBUGVIEW_COLOR_3 }) {} if (context->debugSelectedElementId != 0) { Clay_LayoutElementHashMapItem *selectedItem = Clay__GetHashMapItem(context->debugSelectedElementId); - CLAY( - CLAY_SCROLL({ .vertical = true }), - CLAY_LAYOUT({ .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(300)}, .layoutDirection = CLAY_TOP_TO_BOTTOM }), - CLAY_RECTANGLE({ .color = CLAY__DEBUGVIEW_COLOR_2 }), - CLAY_BORDER({ .betweenChildren = { .width = 1, .color = CLAY__DEBUGVIEW_COLOR_3 }}) - ) { - CLAY(CLAY_LAYOUT({ .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT + 8)}, .padding = {CLAY__DEBUGVIEW_OUTER_PADDING, CLAY__DEBUGVIEW_OUTER_PADDING}, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER} })) { + CLAY({ + .layout = { .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(300)}, .layoutDirection = CLAY_TOP_TO_BOTTOM }, + .backgroundColor = CLAY__DEBUGVIEW_COLOR_2 , + .scroll = { .vertical = true }, + .border = { .color = CLAY__DEBUGVIEW_COLOR_3, .width = { .betweenChildren = 1 } } + }) { + CLAY({ .layout = { .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT + 8)}, .padding = {CLAY__DEBUGVIEW_OUTER_PADDING, CLAY__DEBUGVIEW_OUTER_PADDING}, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER} } }) { CLAY_TEXT(CLAY_STRING("Layout Config"), infoTextConfig); - CLAY(CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0) } })) {} + CLAY({ .layout = { .sizing = { CLAY_SIZING_GROW(0) } } }) {} if (selectedItem->elementId.stringId.length != 0) { CLAY_TEXT(selectedItem->elementId.stringId, infoTitleConfig); if (selectedItem->elementId.offset != 0) { @@ -2759,10 +2879,10 @@ void Clay__RenderDebugView(void) { } Clay_Padding attributeConfigPadding = {CLAY__DEBUGVIEW_OUTER_PADDING, CLAY__DEBUGVIEW_OUTER_PADDING, 8, 8}; // Clay_LayoutConfig debug info - CLAY(CLAY_LAYOUT({ .padding = attributeConfigPadding, .childGap = 8, .layoutDirection = CLAY_TOP_TO_BOTTOM })) { + CLAY({ .layout = { .padding = attributeConfigPadding, .childGap = 8, .layoutDirection = CLAY_TOP_TO_BOTTOM } }) { // .boundingBox CLAY_TEXT(CLAY_STRING("Bounding Box"), infoTitleConfig); - CLAY(CLAY_LAYOUT(CLAY__DEFAULT_STRUCT)) { + CLAY({{0}}) { CLAY_TEXT(CLAY_STRING("{ x: "), infoTextConfig); CLAY_TEXT(Clay__IntToString(selectedItem->boundingBox.x), infoTextConfig); CLAY_TEXT(CLAY_STRING(", y: "), infoTextConfig); @@ -2779,17 +2899,17 @@ void Clay__RenderDebugView(void) { CLAY_TEXT(layoutConfig->layoutDirection == CLAY_TOP_TO_BOTTOM ? CLAY_STRING("TOP_TO_BOTTOM") : CLAY_STRING("LEFT_TO_RIGHT"), infoTextConfig); // .sizing CLAY_TEXT(CLAY_STRING("Sizing"), infoTitleConfig); - CLAY(CLAY_LAYOUT(CLAY__DEFAULT_STRUCT)) { + CLAY({{0}}) { CLAY_TEXT(CLAY_STRING("width: "), infoTextConfig); Clay__RenderDebugLayoutSizing(layoutConfig->sizing.width, infoTextConfig); } - CLAY(CLAY_LAYOUT(CLAY__DEFAULT_STRUCT)) { + CLAY({{0}}) { CLAY_TEXT(CLAY_STRING("height: "), infoTextConfig); Clay__RenderDebugLayoutSizing(layoutConfig->sizing.height, infoTextConfig); } // .padding CLAY_TEXT(CLAY_STRING("Padding"), infoTitleConfig); - CLAY(CLAY_ID("Clay__DebugViewElementInfoPadding")) { + CLAY({ .id = CLAY_ID("Clay__DebugViewElementInfoPadding") }) { CLAY_TEXT(CLAY_STRING("{ left: "), infoTextConfig); CLAY_TEXT(Clay__IntToString(layoutConfig->padding.left), infoTextConfig); CLAY_TEXT(CLAY_STRING(", right: "), infoTextConfig); @@ -2805,7 +2925,7 @@ void Clay__RenderDebugView(void) { CLAY_TEXT(Clay__IntToString(layoutConfig->childGap), infoTextConfig); // .childAlignment CLAY_TEXT(CLAY_STRING("Child Alignment"), infoTitleConfig); - CLAY(CLAY_LAYOUT(CLAY__DEFAULT_STRUCT)) { + CLAY({{0}}) { CLAY_TEXT(CLAY_STRING("{ x: "), infoTextConfig); Clay_String alignX = CLAY_STRING("LEFT"); if (layoutConfig->childAlignment.x == CLAY_ALIGN_X_CENTER) { @@ -2829,21 +2949,18 @@ void Clay__RenderDebugView(void) { Clay_ElementConfig *elementConfig = Clay__ElementConfigArraySlice_Get(&selectedItem->layoutElement->elementConfigs, elementConfigIndex); Clay__RenderDebugViewElementConfigHeader(selectedItem->elementId.stringId, elementConfig->type); switch (elementConfig->type) { - case CLAY__ELEMENT_CONFIG_TYPE_RECTANGLE: { - Clay_RectangleElementConfig *rectangleConfig = elementConfig->config.rectangleElementConfig; - CLAY(CLAY_LAYOUT({ .padding = attributeConfigPadding, .childGap = 8, .layoutDirection = CLAY_TOP_TO_BOTTOM })) { - // .color - CLAY_TEXT(CLAY_STRING("Color"), infoTitleConfig); - Clay__RenderDebugViewColor(rectangleConfig->color, infoTextConfig); + case CLAY__ELEMENT_CONFIG_TYPE_SHARED: { + Clay_SharedElementConfig *sharedConfig = elementConfig->config.sharedElementConfig; + CLAY({ .layout = { .padding = attributeConfigPadding, .childGap = 8, .layoutDirection = CLAY_TOP_TO_BOTTOM }}) { // .cornerRadius - CLAY_TEXT(CLAY_STRING("Corner Radius"), infoTitleConfig); - Clay__RenderDebugViewCornerRadius(rectangleConfig->cornerRadius, infoTextConfig); + CLAY_TEXT(CLAY_STRING("Color"), infoTitleConfig); + Clay__RenderDebugViewCornerRadius(sharedConfig->cornerRadius, infoTextConfig); } break; } case CLAY__ELEMENT_CONFIG_TYPE_TEXT: { Clay_TextElementConfig *textConfig = elementConfig->config.textElementConfig; - CLAY(CLAY_LAYOUT({ .padding = attributeConfigPadding, .childGap = 8, .layoutDirection = CLAY_TOP_TO_BOTTOM })) { + CLAY({ .layout = { .padding = attributeConfigPadding, .childGap = 8, .layoutDirection = CLAY_TOP_TO_BOTTOM } }) { // .fontSize CLAY_TEXT(CLAY_STRING("Font Size"), infoTitleConfig); CLAY_TEXT(Clay__IntToString(textConfig->fontSize), infoTextConfig); @@ -2873,10 +2990,10 @@ void Clay__RenderDebugView(void) { } case CLAY__ELEMENT_CONFIG_TYPE_IMAGE: { Clay_ImageElementConfig *imageConfig = elementConfig->config.imageElementConfig; - CLAY(CLAY_ID("Clay__DebugViewElementInfoImageBody"), CLAY_LAYOUT({ .padding = attributeConfigPadding, .childGap = 8, .layoutDirection = CLAY_TOP_TO_BOTTOM })) { + CLAY({ .id = CLAY_ID("Clay__DebugViewElementInfoImageBody"), .layout = { .padding = attributeConfigPadding, .childGap = 8, .layoutDirection = CLAY_TOP_TO_BOTTOM } }) { // .sourceDimensions CLAY_TEXT(CLAY_STRING("Source Dimensions"), infoTitleConfig); - CLAY(CLAY_ID("Clay__DebugViewElementInfoImageDimensions")) { + CLAY({ .id = CLAY_ID("Clay__DebugViewElementInfoImageDimensions") }) { CLAY_TEXT(CLAY_STRING("{ width: "), infoTextConfig); CLAY_TEXT(Clay__IntToString(imageConfig->sourceDimensions.width), infoTextConfig); CLAY_TEXT(CLAY_STRING(", height: "), infoTextConfig); @@ -2885,13 +3002,13 @@ void Clay__RenderDebugView(void) { } // Image Preview CLAY_TEXT(CLAY_STRING("Preview"), infoTitleConfig); - CLAY(CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0, imageConfig->sourceDimensions.width) }}), Clay__AttachElementConfig(CLAY__INIT(Clay_ElementConfigUnion) { .imageElementConfig = imageConfig }, CLAY__ELEMENT_CONFIG_TYPE_IMAGE)) {} + CLAY({ .layout = { .sizing = { CLAY_SIZING_GROW(0, imageConfig->sourceDimensions.width) }}, .image = *imageConfig }) {} } break; } - case CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER: { + case CLAY__ELEMENT_CONFIG_TYPE_SCROLL: { Clay_ScrollElementConfig *scrollConfig = elementConfig->config.scrollElementConfig; - CLAY(CLAY_LAYOUT({ .padding = attributeConfigPadding, .childGap = 8, .layoutDirection = CLAY_TOP_TO_BOTTOM })) { + CLAY({ .layout = { .padding = attributeConfigPadding, .childGap = 8, .layoutDirection = CLAY_TOP_TO_BOTTOM } }) { // .vertical CLAY_TEXT(CLAY_STRING("Vertical"), infoTitleConfig); CLAY_TEXT(scrollConfig->vertical ? CLAY_STRING("true") : CLAY_STRING("false") , infoTextConfig); @@ -2901,12 +3018,12 @@ void Clay__RenderDebugView(void) { } break; } - case CLAY__ELEMENT_CONFIG_TYPE_FLOATING_CONTAINER: { + case CLAY__ELEMENT_CONFIG_TYPE_FLOATING: { Clay_FloatingElementConfig *floatingConfig = elementConfig->config.floatingElementConfig; - CLAY(CLAY_LAYOUT({ .padding = attributeConfigPadding, .childGap = 8, .layoutDirection = CLAY_TOP_TO_BOTTOM })) { + CLAY({ .layout = { .padding = attributeConfigPadding, .childGap = 8, .layoutDirection = CLAY_TOP_TO_BOTTOM } }) { // .offset CLAY_TEXT(CLAY_STRING("Offset"), infoTitleConfig); - CLAY(CLAY_LAYOUT(CLAY__DEFAULT_STRUCT)) { + CLAY({{0}}) { CLAY_TEXT(CLAY_STRING("{ x: "), infoTextConfig); CLAY_TEXT(Clay__IntToString(floatingConfig->offset.x), infoTextConfig); CLAY_TEXT(CLAY_STRING(", y: "), infoTextConfig); @@ -2915,7 +3032,7 @@ void Clay__RenderDebugView(void) { } // .expand CLAY_TEXT(CLAY_STRING("Expand"), infoTitleConfig); - CLAY(CLAY_LAYOUT(CLAY__DEFAULT_STRUCT)) { + CLAY({{0}}) { CLAY_TEXT(CLAY_STRING("{ width: "), infoTextConfig); CLAY_TEXT(Clay__IntToString(floatingConfig->expand.width), infoTextConfig); CLAY_TEXT(CLAY_STRING(", height: "), infoTextConfig); @@ -2932,27 +3049,24 @@ void Clay__RenderDebugView(void) { } break; } - case CLAY__ELEMENT_CONFIG_TYPE_BORDER_CONTAINER: { + case CLAY__ELEMENT_CONFIG_TYPE_BORDER: { Clay_BorderElementConfig *borderConfig = elementConfig->config.borderElementConfig; - CLAY(CLAY_ID("Clay__DebugViewElementInfoBorderBody"), CLAY_LAYOUT({ .padding = attributeConfigPadding, .childGap = 8, .layoutDirection = CLAY_TOP_TO_BOTTOM })) { - // .left - CLAY_TEXT(CLAY_STRING("Left Border"), infoTitleConfig); - Clay__RenderDebugViewBorder(1, borderConfig->left, infoTextConfig); - // .right - CLAY_TEXT(CLAY_STRING("Right Border"), infoTitleConfig); - Clay__RenderDebugViewBorder(2, borderConfig->right, infoTextConfig); - // .top - CLAY_TEXT(CLAY_STRING("Top Border"), infoTitleConfig); - Clay__RenderDebugViewBorder(3, borderConfig->top, infoTextConfig); - // .bottom - CLAY_TEXT(CLAY_STRING("Bottom Border"), infoTitleConfig); - Clay__RenderDebugViewBorder(4, borderConfig->bottom, infoTextConfig); - // .betweenChildren - CLAY_TEXT(CLAY_STRING("Border Between Children"), infoTitleConfig); - Clay__RenderDebugViewBorder(5, borderConfig->betweenChildren, infoTextConfig); - // .cornerRadius - CLAY_TEXT(CLAY_STRING("Corner Radius"), infoTitleConfig); - Clay__RenderDebugViewCornerRadius(borderConfig->cornerRadius, infoTextConfig); + CLAY({ .id = CLAY_ID("Clay__DebugViewElementInfoBorderBody"), .layout = { .padding = attributeConfigPadding, .childGap = 8, .layoutDirection = CLAY_TOP_TO_BOTTOM } }) { + CLAY_TEXT(CLAY_STRING("Border Widths"), infoTitleConfig); + CLAY({{0}}) { + CLAY_TEXT(CLAY_STRING("{ left: "), infoTextConfig); + CLAY_TEXT(Clay__IntToString(borderConfig->width.left), infoTextConfig); + CLAY_TEXT(CLAY_STRING("{ right: "), infoTextConfig); + CLAY_TEXT(Clay__IntToString(borderConfig->width.right), infoTextConfig); + CLAY_TEXT(CLAY_STRING("{ top: "), infoTextConfig); + CLAY_TEXT(Clay__IntToString(borderConfig->width.top), infoTextConfig); + CLAY_TEXT(CLAY_STRING("{ bottom: "), infoTextConfig); + CLAY_TEXT(Clay__IntToString(borderConfig->width.bottom), infoTextConfig); + CLAY_TEXT(CLAY_STRING(" }"), infoTextConfig); + } + // .textColor + CLAY_TEXT(CLAY_STRING("Border Color"), infoTitleConfig); + Clay__RenderDebugViewColor(borderConfig->color, infoTextConfig); } break; } @@ -2962,16 +3076,16 @@ void Clay__RenderDebugView(void) { } } } else { - CLAY(CLAY_ID("Clay__DebugViewWarningsScrollPane"), CLAY_LAYOUT({ .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(300)}, .childGap = 6, .layoutDirection = CLAY_TOP_TO_BOTTOM }), CLAY_SCROLL({ .horizontal = true, .vertical = true }), CLAY_RECTANGLE({ .color = CLAY__DEBUGVIEW_COLOR_2 })) { + CLAY({ .id = CLAY_ID("Clay__DebugViewWarningsScrollPane"), .layout = { .sizing = {CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(300)}, .childGap = 6, .layoutDirection = CLAY_TOP_TO_BOTTOM }, .backgroundColor = CLAY__DEBUGVIEW_COLOR_2, .scroll = { .horizontal = true, .vertical = true } }) { Clay_TextElementConfig *warningConfig = CLAY_TEXT_CONFIG({ .textColor = CLAY__DEBUGVIEW_COLOR_4, .fontSize = 16, .wrapMode = CLAY_TEXT_WRAP_NONE }); - CLAY(CLAY_ID("Clay__DebugViewWarningItemHeader"), CLAY_LAYOUT({ .sizing = {.height = CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT)}, .padding = {CLAY__DEBUGVIEW_OUTER_PADDING, CLAY__DEBUGVIEW_OUTER_PADDING}, .childGap = 8, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER} })) { + CLAY({ .id = CLAY_ID("Clay__DebugViewWarningItemHeader"), .layout = { .sizing = {.height = CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT)}, .padding = {CLAY__DEBUGVIEW_OUTER_PADDING, CLAY__DEBUGVIEW_OUTER_PADDING}, .childGap = 8, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER} } }) { CLAY_TEXT(CLAY_STRING("Warnings"), warningConfig); } - CLAY(CLAY_ID("Clay__DebugViewWarningsTopBorder"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(1)} }), CLAY_RECTANGLE({ .color = {200, 200, 200, 255} })) {} + CLAY({ .id = CLAY_ID("Clay__DebugViewWarningsTopBorder"), .layout = { .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(1)} }, .backgroundColor = {200, 200, 200, 255} }) {} int32_t previousWarningsLength = context->warnings.length; for (int32_t i = 0; i < previousWarningsLength; i++) { Clay__Warning warning = context->warnings.internalArray[i]; - CLAY(CLAY_IDI("Clay__DebugViewWarningItem", i), CLAY_LAYOUT({ .sizing = {.height = CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT)}, .padding = {CLAY__DEBUGVIEW_OUTER_PADDING, CLAY__DEBUGVIEW_OUTER_PADDING}, .childGap = 8, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER} })) { + CLAY({ .id = CLAY_IDI("Clay__DebugViewWarningItem", i), .layout = { .sizing = {.height = CLAY_SIZING_FIXED(CLAY__DEBUGVIEW_ROW_HEIGHT)}, .padding = {CLAY__DEBUGVIEW_OUTER_PADDING, CLAY__DEBUGVIEW_OUTER_PADDING}, .childGap = 8, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER} } }) { CLAY_TEXT(warning.baseMessage, warningConfig); if (warning.dynamicMessage.length > 0) { CLAY_TEXT(warning.dynamicMessage, warningConfig); @@ -3090,12 +3204,12 @@ Clay_Arena Clay_CreateArenaWithCapacityAndMemory(uint32_t capacity, void *offset } #ifndef CLAY_WASM -void Clay_SetMeasureTextFunction(Clay_Dimensions (*measureTextFunction)(Clay_StringSlice text, Clay_TextElementConfig *config, uintptr_t userData), uintptr_t userData) { +void Clay_SetMeasureTextFunction(Clay_Dimensions (*measureTextFunction)(Clay_StringSlice text, Clay_TextElementConfig *config, void *userData), void *userData) { Clay_Context* context = Clay_GetCurrentContext(); Clay__MeasureText = measureTextFunction; - context->mesureTextUserData = userData; + context->measureTextUserData = userData; } -void Clay_SetQueryScrollOffsetFunction(Clay_Vector2 (*queryScrollOffsetFunction)(uint32_t elementId, uintptr_t userData), uintptr_t userData) { +void Clay_SetQueryScrollOffsetFunction(Clay_Vector2 (*queryScrollOffsetFunction)(uint32_t elementId, void *userData), void *userData) { Clay_Context* context = Clay_GetCurrentContext(); Clay__QueryScrollOffset = queryScrollOffsetFunction; context->queryScrollOffsetUserData = userData; @@ -3155,8 +3269,8 @@ void Clay_SetPointerState(Clay_Vector2 position, bool isPointerDown) { } Clay_LayoutElement *rootElement = Clay_LayoutElementArray_Get(&context->layoutElements, root->layoutElementIndex); - if (found && Clay__ElementHasConfig(rootElement, CLAY__ELEMENT_CONFIG_TYPE_FLOATING_CONTAINER) && - Clay__FindElementConfigWithType(rootElement, CLAY__ELEMENT_CONFIG_TYPE_FLOATING_CONTAINER).floatingElementConfig->pointerCaptureMode == CLAY_POINTER_CAPTURE_MODE_CAPTURE) { + if (found && Clay__ElementHasConfig(rootElement, CLAY__ELEMENT_CONFIG_TYPE_FLOATING) && + Clay__FindElementConfigWithType(rootElement, CLAY__ELEMENT_CONFIG_TYPE_FLOATING).floatingElementConfig->pointerCaptureMode == CLAY_POINTER_CAPTURE_MODE_CAPTURE) { break; } } @@ -3277,7 +3391,7 @@ void Clay_UpdateScrollContainers(bool enableDragScrolling, Clay_Vector2 scrollDe if (highestPriorityElementIndex > -1 && highestPriorityScrollData) { Clay_LayoutElement *scrollElement = highestPriorityScrollData->layoutElement; - Clay_ScrollElementConfig *scrollConfig = Clay__FindElementConfigWithType(scrollElement, CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER).scrollElementConfig; + Clay_ScrollElementConfig *scrollConfig = Clay__FindElementConfigWithType(scrollElement, CLAY__ELEMENT_CONFIG_TYPE_SCROLL).scrollElementConfig; bool canScrollVertically = scrollConfig->vertical && highestPriorityScrollData->contentSize.height > scrollElement->dimensions.height; bool canScrollHorizontally = scrollConfig->horizontal && highestPriorityScrollData->contentSize.width > scrollElement->dimensions.width; // Handle wheel scroll @@ -3340,15 +3454,14 @@ void Clay_BeginLayout(void) { } context->booleanWarnings = CLAY__INIT(Clay_BooleanWarnings) CLAY__DEFAULT_STRUCT; Clay__OpenElement(); - CLAY_ID("Clay__RootContainer"); - CLAY_LAYOUT({ .sizing = {CLAY_SIZING_FIXED((rootDimensions.width)), CLAY_SIZING_FIXED(rootDimensions.height)} }); - Clay__ElementPostConfiguration(); + Clay__ConfigureOpenElement(CLAY__INIT(Clay_ElementDeclaration) { + .id = CLAY_ID("Clay__RootContainer"), + .layout = { .sizing = {CLAY_SIZING_FIXED((rootDimensions.width)), CLAY_SIZING_FIXED(rootDimensions.height)} } + }); Clay__int32_tArray_Add(&context->openLayoutElementStack, 0); Clay__LayoutElementTreeRootArray_Add(&context->layoutElementTreeRoots, CLAY__INIT(Clay__LayoutElementTreeRoot) { .layoutElementIndex = 0 }); } -Clay_TextElementConfig Clay__DebugView_ErrorTextConfig = {.textColor = {255, 0, 0, 255}, .fontSize = 16, .wrapMode = CLAY_TEXT_WRAP_NONE }; - CLAY_WASM_EXPORT("Clay_EndLayout") Clay_RenderCommandArray Clay_EndLayout(void) { Clay_Context* context = Clay_GetCurrentContext(); @@ -3360,7 +3473,11 @@ Clay_RenderCommandArray Clay_EndLayout(void) { } if (context->booleanWarnings.maxElementsExceeded) { Clay_String message = CLAY_STRING("Clay Error: Layout elements exceeded Clay__maxElementCount"); - Clay__AddRenderCommand(CLAY__INIT(Clay_RenderCommand ) { .boundingBox = { context->layoutDimensions.width / 2 - 59 * 4, context->layoutDimensions.height / 2, 0, 0 }, .config = { .textElementConfig = &Clay__DebugView_ErrorTextConfig }, .text = CLAY__INIT(Clay_StringSlice) { .length = message.length, .chars = message.chars, .baseChars = message.chars }, .commandType = CLAY_RENDER_COMMAND_TYPE_TEXT }); + Clay__AddRenderCommand(CLAY__INIT(Clay_RenderCommand ) { + .boundingBox = { context->layoutDimensions.width / 2 - 59 * 4, context->layoutDimensions.height / 2, 0, 0 }, + .renderData = { .text = { .stringContents = CLAY__INIT(Clay_StringSlice) { .length = message.length, .chars = message.chars, .baseChars = message.chars }, .textColor = {255, 0, 0, 255}, .fontSize = 16 } }, + .commandType = CLAY_RENDER_COMMAND_TYPE_TEXT + }); } else { Clay__CalculateFinalLayout(); } @@ -3430,7 +3547,7 @@ Clay_ScrollContainerData Clay_GetScrollContainerData(Clay_ElementId id) { .scrollPosition = &scrollContainerData->scrollPosition, .scrollContainerDimensions = { scrollContainerData->boundingBox.width, scrollContainerData->boundingBox.height }, .contentDimensions = scrollContainerData->contentSize, - .config = *Clay__FindElementConfigWithType(scrollContainerData->layoutElement, CLAY__ELEMENT_CONFIG_TYPE_SCROLL_CONTAINER).scrollElementConfig, + .config = *Clay__FindElementConfigWithType(scrollContainerData->layoutElement, CLAY__ELEMENT_CONFIG_TYPE_SCROLL).scrollElementConfig, .found = true }; } @@ -3488,7 +3605,7 @@ void Clay_SetMaxElementCount(int32_t maxElementCount) { context->maxElementCount = maxElementCount; } else { Clay__defaultMaxElementCount = maxElementCount; // TODO: Fix this - Clay__defaultMaxMeasureTextWordCacheCount = maxElementCount * 2; + Clay__defaultMaxMeasureTextWordCacheCount = maxElementCount * 2; } } diff --git a/examples/SDL2-video-demo/CMakeLists.txt b/examples/SDL2-video-demo/CMakeLists.txt index ace8592..4dffd2b 100644 --- a/examples/SDL2-video-demo/CMakeLists.txt +++ b/examples/SDL2-video-demo/CMakeLists.txt @@ -45,10 +45,10 @@ target_link_libraries(SDL2_video_demo PUBLIC ) if(MSVC) - set(CMAKE_C_FLAGS_DEBUG "/D CLAY_DEBUG") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") else() - set(CMAKE_C_FLAGS_DEBUG "-Wall -Werror -Wno-error=missing-braces -DCLAY_DEBUG") - set(CMAKE_C_FLAGS_RELEASE "-O3") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") endif() add_custom_command( diff --git a/examples/SDL2-video-demo/main.c b/examples/SDL2-video-demo/main.c index e8c3413..4e03b12 100644 --- a/examples/SDL2-video-demo/main.c +++ b/examples/SDL2-video-demo/main.c @@ -9,278 +9,15 @@ #include #include #include - -const int FONT_ID_BODY_16 = 0; -Clay_Color COLOR_WHITE = { 255, 255, 255, 255}; +#include "../shared-layouts/clay-video-demo.c" SDL_Surface *sample_image; -void RenderHeaderButton(Clay_String text) { - CLAY( - CLAY_LAYOUT({ .padding = { 16, 16, 8, 8 }}), - CLAY_RECTANGLE({ - .color = { 140, 140, 140, 255 }, - .cornerRadius = 5 - }) - ) { - CLAY_TEXT(text, CLAY_TEXT_CONFIG({ - .fontId = FONT_ID_BODY_16, - .fontSize = 16, - .textColor = { 255, 255, 255, 255 } - })); - } -} - -void RenderDropdownMenuItem(Clay_String text) { - CLAY(CLAY_LAYOUT({ .padding = CLAY_PADDING_ALL(16)})) { - CLAY_TEXT(text, CLAY_TEXT_CONFIG({ - .fontId = FONT_ID_BODY_16, - .fontSize = 16, - .textColor = { 255, 255, 255, 255 } - })); - } -} - -typedef struct { - Clay_String title; - Clay_String contents; -} Document; - -typedef struct { - Document *documents; - uint32_t length; -} DocumentArray; - -DocumentArray documents = { - .documents = NULL, - .length = 5 -}; - -uint32_t selectedDocumentIndex = 0; - -void HandleSidebarInteraction( - Clay_ElementId elementId, - Clay_PointerData pointerData, - intptr_t userData -) { - // If this button was clicked - if (pointerData.state == CLAY_POINTER_DATA_PRESSED_THIS_FRAME) { - if (userData >= 0 && userData < documents.length) { - // Select the corresponding document - selectedDocumentIndex = userData; - } - } -} - -static Clay_RenderCommandArray CreateLayout() { - Clay_BeginLayout(); - Clay_Sizing layoutExpand = { - .width = CLAY_SIZING_GROW(0), - .height = CLAY_SIZING_GROW(0) - }; - - Clay_RectangleElementConfig contentBackgroundConfig = { - .color = { 90, 90, 90, 255 }, - .cornerRadius = 8 - }; - - Clay_BeginLayout(); - // Build UI here - CLAY( - CLAY_ID("OuterContainer"), - CLAY_RECTANGLE({ .color = { 43, 41, 51, 255 } }), - CLAY_LAYOUT({ - .layoutDirection = CLAY_TOP_TO_BOTTOM, - .sizing = layoutExpand, - .padding = CLAY_PADDING_ALL(16), - .childGap = 16 - }) - ) { - // Child elements go inside braces - CLAY( - CLAY_ID("HeaderBar"), - CLAY_RECTANGLE(contentBackgroundConfig), - CLAY_LAYOUT({ - .sizing = { - .height = CLAY_SIZING_FIXED(60), - .width = CLAY_SIZING_GROW(0) - }, - .padding = { 16 }, - .childGap = 16, - .childAlignment = { - .y = CLAY_ALIGN_Y_CENTER - } - }) - ) { - // Header buttons go here - CLAY( - CLAY_LAYOUT({ .padding = { 16, 16, 8, 8 }}), - CLAY_BORDER_ALL({ 2, COLOR_WHITE }) - ) { - CLAY( - CLAY_LAYOUT({ .padding = { 8, 8, 8, 8 }}), - CLAY_IMAGE({ sample_image, { 23, 42 } }) - ) {} - } - CLAY( - CLAY_ID("FileButton"), - CLAY_LAYOUT({ .padding = { 16, 16, 8, 8 }}), - CLAY_RECTANGLE({ - .color = { 140, 140, 140, 255 }, - .cornerRadius = 5 - }) - ) { - CLAY_TEXT(CLAY_STRING("File"), CLAY_TEXT_CONFIG({ - .fontId = FONT_ID_BODY_16, - .fontSize = 16, - .textColor = { 255, 255, 255, 255 } - })); - - bool fileMenuVisible = - Clay_PointerOver(Clay_GetElementId(CLAY_STRING("FileButton"))) - || - Clay_PointerOver(Clay_GetElementId(CLAY_STRING("FileMenu"))); - - if (fileMenuVisible) { // Below has been changed slightly to fix the small bug where the menu would dismiss when mousing over the top gap - CLAY( - CLAY_ID("FileMenu"), - CLAY_FLOATING({ - .attachment = { - .parent = CLAY_ATTACH_POINT_LEFT_BOTTOM - }, - }), - CLAY_LAYOUT({ - .padding = {0, 8 } - }) - ) { - CLAY( - CLAY_LAYOUT({ - .layoutDirection = CLAY_TOP_TO_BOTTOM, - .sizing = { - .width = CLAY_SIZING_FIXED(200) - }, - }), - CLAY_RECTANGLE({ - .color = { 40, 40, 40, 255 }, - .cornerRadius = 8 - }) - ) { - // Render dropdown items here - RenderDropdownMenuItem(CLAY_STRING("New")); - RenderDropdownMenuItem(CLAY_STRING("Open")); - RenderDropdownMenuItem(CLAY_STRING("Close")); - } - } - } - } - RenderHeaderButton(CLAY_STRING("Edit")); - CLAY(CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0) }})) {} - RenderHeaderButton(CLAY_STRING("Upload")); - RenderHeaderButton(CLAY_STRING("Media")); - RenderHeaderButton(CLAY_STRING("Support")); - } - - CLAY( - CLAY_ID("LowerContent"), - CLAY_LAYOUT({ .sizing = layoutExpand, .childGap = 16 }) - ) { - CLAY( - CLAY_ID("Sidebar"), - CLAY_RECTANGLE(contentBackgroundConfig), - CLAY_LAYOUT({ - .layoutDirection = CLAY_TOP_TO_BOTTOM, - .padding = CLAY_PADDING_ALL(16), - .childGap = 8, - .sizing = { - .width = CLAY_SIZING_FIXED(250), - .height = CLAY_SIZING_GROW(0) - } - }) - ) { - for (int i = 0; i < documents.length; i++) { - Document document = documents.documents[i]; - Clay_LayoutConfig sidebarButtonLayout = { - .sizing = { .width = CLAY_SIZING_GROW(0) }, - .padding = CLAY_PADDING_ALL(16) - }; - - if (i == selectedDocumentIndex) { - CLAY( - CLAY_LAYOUT(sidebarButtonLayout), - CLAY_RECTANGLE({ - .color = { 120, 120, 120, 255 }, - .cornerRadius = 8, - }) - ) { - CLAY_TEXT(document.title, CLAY_TEXT_CONFIG({ - .fontId = FONT_ID_BODY_16, - .fontSize = 20, - .textColor = { 255, 255, 255, 255 } - })); - } - } else { - CLAY( - CLAY_LAYOUT(sidebarButtonLayout), - Clay_OnHover(HandleSidebarInteraction, i), - Clay_Hovered() - ? CLAY_RECTANGLE({ - .color = { 120, 120, 120, 120 }, - .cornerRadius = 8 - }) - : 0 - ) { - CLAY_TEXT(document.title, CLAY_TEXT_CONFIG({ - .fontId = FONT_ID_BODY_16, - .fontSize = 20, - .textColor = { 255, 255, 255, 255 } - })); - } - } - } - } - - CLAY( - CLAY_ID("MainContent"), - CLAY_RECTANGLE(contentBackgroundConfig), - CLAY_SCROLL({ .vertical = true }), - CLAY_LAYOUT({ - .layoutDirection = CLAY_TOP_TO_BOTTOM, - .childGap = 16, - .padding = CLAY_PADDING_ALL(16), - .sizing = layoutExpand - }) - ) { - Document selectedDocument = documents.documents[selectedDocumentIndex]; - CLAY_TEXT(selectedDocument.title, CLAY_TEXT_CONFIG({ - .fontId = FONT_ID_BODY_16, - .fontSize = 24, - .textColor = COLOR_WHITE - })); - CLAY_TEXT(selectedDocument.contents, CLAY_TEXT_CONFIG({ - .fontId = FONT_ID_BODY_16, - .fontSize = 24, - .textColor = COLOR_WHITE - })); - } - } - } - - return Clay_EndLayout(); -} - void HandleClayErrors(Clay_ErrorData errorData) { printf("%s", errorData.errorText.chars); } int main(int argc, char *argv[]) { - documents.documents = (Document[]) { - { .title = CLAY_STRING("Squirrels"), .contents = CLAY_STRING("The Secret Life of Squirrels: Nature's Clever Acrobats\n""Squirrels are often overlooked creatures, dismissed as mere park inhabitants or backyard nuisances. Yet, beneath their fluffy tails and twitching noses lies an intricate world of cunning, agility, and survival tactics that are nothing short of fascinating. As one of the most common mammals in North America, squirrels have adapted to a wide range of environments from bustling urban centers to tranquil forests and have developed a variety of unique behaviors that continue to intrigue scientists and nature enthusiasts alike.\n""\n""Master Tree Climbers\n""At the heart of a squirrel's skill set is its impressive ability to navigate trees with ease. Whether they're darting from branch to branch or leaping across wide gaps, squirrels possess an innate talent for acrobatics. Their powerful hind legs, which are longer than their front legs, give them remarkable jumping power. With a tail that acts as a counterbalance, squirrels can leap distances of up to ten times the length of their body, making them some of the best aerial acrobats in the animal kingdom.\n""But it's not just their agility that makes them exceptional climbers. Squirrels' sharp, curved claws allow them to grip tree bark with precision, while the soft pads on their feet provide traction on slippery surfaces. Their ability to run at high speeds and scale vertical trunks with ease is a testament to the evolutionary adaptations that have made them so successful in their arboreal habitats.\n""\n""Food Hoarders Extraordinaire\n""Squirrels are often seen frantically gathering nuts, seeds, and even fungi in preparation for winter. While this behavior may seem like instinctual hoarding, it is actually a survival strategy that has been honed over millions of years. Known as \"scatter hoarding,\" squirrels store their food in a variety of hidden locations, often burying it deep in the soil or stashing it in hollowed-out tree trunks.\n""Interestingly, squirrels have an incredible memory for the locations of their caches. Research has shown that they can remember thousands of hiding spots, often returning to them months later when food is scarce. However, they don't always recover every stash some forgotten caches eventually sprout into new trees, contributing to forest regeneration. This unintentional role as forest gardeners highlights the ecological importance of squirrels in their ecosystems.\n""\n""The Great Squirrel Debate: Urban vs. Wild\n""While squirrels are most commonly associated with rural or wooded areas, their adaptability has allowed them to thrive in urban environments as well. In cities, squirrels have become adept at finding food sources in places like parks, streets, and even garbage cans. However, their urban counterparts face unique challenges, including traffic, predators, and the lack of natural shelters. Despite these obstacles, squirrels in urban areas are often observed using human infrastructure such as buildings, bridges, and power lines as highways for their acrobatic escapades.\n""There is, however, a growing concern regarding the impact of urban life on squirrel populations. Pollution, deforestation, and the loss of natural habitats are making it more difficult for squirrels to find adequate food and shelter. As a result, conservationists are focusing on creating squirrel-friendly spaces within cities, with the goal of ensuring these resourceful creatures continue to thrive in both rural and urban landscapes.\n""\n""A Symbol of Resilience\n""In many cultures, squirrels are symbols of resourcefulness, adaptability, and preparation. Their ability to thrive in a variety of environments while navigating challenges with agility and grace serves as a reminder of the resilience inherent in nature. Whether you encounter them in a quiet forest, a city park, or your own backyard, squirrels are creatures that never fail to amaze with their endless energy and ingenuity.\n""In the end, squirrels may be small, but they are mighty in their ability to survive and thrive in a world that is constantly changing. So next time you spot one hopping across a branch or darting across your lawn, take a moment to appreciate the remarkable acrobat at work a true marvel of the natural world.\n") }, - { .title = CLAY_STRING("Lorem Ipsum"), .contents = CLAY_STRING("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.") }, - { .title = CLAY_STRING("Vacuum Instructions"), .contents = CLAY_STRING("Chapter 3: Getting Started - Unpacking and Setup\n""\n""Congratulations on your new SuperClean Pro 5000 vacuum cleaner! In this section, we will guide you through the simple steps to get your vacuum up and running. Before you begin, please ensure that you have all the components listed in the \"Package Contents\" section on page 2.\n""\n""1. Unboxing Your Vacuum\n""Carefully remove the vacuum cleaner from the box. Avoid using sharp objects that could damage the product. Once removed, place the unit on a flat, stable surface to proceed with the setup. Inside the box, you should find:\n""\n"" The main vacuum unit\n"" A telescoping extension wand\n"" A set of specialized cleaning tools (crevice tool, upholstery brush, etc.)\n"" A reusable dust bag (if applicable)\n"" A power cord with a 3-prong plug\n"" A set of quick-start instructions\n""\n""2. Assembling Your Vacuum\n""Begin by attaching the extension wand to the main body of the vacuum cleaner. Line up the connectors and twist the wand into place until you hear a click. Next, select the desired cleaning tool and firmly attach it to the wand's end, ensuring it is securely locked in.\n""\n""For models that require a dust bag, slide the bag into the compartment at the back of the vacuum, making sure it is properly aligned with the internal mechanism. If your vacuum uses a bagless system, ensure the dust container is correctly seated and locked in place before use.\n""\n""3. Powering On\n""To start the vacuum, plug the power cord into a grounded electrical outlet. Once plugged in, locate the power switch, usually positioned on the side of the handle or body of the unit, depending on your model. Press the switch to the \"On\" position, and you should hear the motor begin to hum. If the vacuum does not power on, check that the power cord is securely plugged in, and ensure there are no blockages in the power switch.\n""\n""Note: Before first use, ensure that the vacuum filter (if your model has one) is properly installed. If unsure, refer to \"Section 5: Maintenance\" for filter installation instructions.") }, - { .title = CLAY_STRING("Article 4"), .contents = CLAY_STRING("Article 4") }, - { .title = CLAY_STRING("Article 5"), .contents = CLAY_STRING("Article 5") }, - }; - if (SDL_Init(SDL_INIT_VIDEO) < 0) { fprintf(stderr, "Error: could not initialize SDL: %s\n", SDL_GetError()); return 1; @@ -323,11 +60,12 @@ int main(int argc, char *argv[]) { SDL_GetWindowSize(window, &windowWidth, &windowHeight); Clay_Initialize(clayMemory, (Clay_Dimensions) { (float)windowWidth, (float)windowHeight }, (Clay_ErrorHandler) { HandleClayErrors }); - Clay_SetMeasureTextFunction(SDL2_MeasureText, (uintptr_t)&fonts); + Clay_SetMeasureTextFunction(SDL2_MeasureText, &fonts); Uint64 NOW = SDL_GetPerformanceCounter(); Uint64 LAST = 0; double deltaTime = 0; + ClayVideoDemo_Data demoData = ClayVideoDemo_Initialize(); while (true) { Clay_Vector2 scrollDelta = {}; @@ -345,6 +83,7 @@ int main(int argc, char *argv[]) { LAST = NOW; NOW = SDL_GetPerformanceCounter(); deltaTime = (double)((NOW - LAST)*1000 / (double)SDL_GetPerformanceFrequency() ); + printf("%f\n", deltaTime); int mouseX = 0; int mouseY = 0; @@ -361,7 +100,7 @@ int main(int argc, char *argv[]) { SDL_GetWindowSize(window, &windowWidth, &windowHeight); Clay_SetLayoutDimensions((Clay_Dimensions) { (float)windowWidth, (float)windowHeight }); - Clay_RenderCommandArray renderCommands = CreateLayout(); + Clay_RenderCommandArray renderCommands = ClayVideoDemo_CreateLayout(&demoData); SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_RenderClear(renderer); diff --git a/examples/SDL3-simple-demo/CMakeLists.txt b/examples/SDL3-simple-demo/CMakeLists.txt index 4a86f0e..df467a9 100644 --- a/examples/SDL3-simple-demo/CMakeLists.txt +++ b/examples/SDL3-simple-demo/CMakeLists.txt @@ -4,8 +4,8 @@ cmake_minimum_required(VERSION 3.27) project(clay_examples_sdl3_simple_demo C) set(CMAKE_C_STANDARD 99) -set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g") -set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3") +set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") +set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") include(FetchContent) set(FETCHCONTENT_QUIET FALSE) diff --git a/examples/SDL3-simple-demo/main.c b/examples/SDL3-simple-demo/main.c index 2b89dbb..8d7be39 100644 --- a/examples/SDL3-simple-demo/main.c +++ b/examples/SDL3-simple-demo/main.c @@ -9,6 +9,7 @@ #include #include "../../renderers/SDL3/clay_renderer_SDL3.c" +#include "../shared-layouts/clay-video-demo.c" static const Uint32 FONT_ID = 0; @@ -19,9 +20,10 @@ static const Clay_Color COLOR_LIGHT = (Clay_Color) {224, 215, 210, 255}; typedef struct app_state { SDL_Window *window; SDL_Renderer *renderer; + ClayVideoDemo_Data demoData; } AppState; -static inline Clay_Dimensions SDL_MeasureText(Clay_StringSlice text, Clay_TextElementConfig *config, uintptr_t userData) +static inline Clay_Dimensions SDL_MeasureText(Clay_StringSlice text, Clay_TextElementConfig *config, void *userData) { TTF_Font *font = gFonts[config->fontId]; int width, height; @@ -33,75 +35,6 @@ static inline Clay_Dimensions SDL_MeasureText(Clay_StringSlice text, Clay_TextEl return (Clay_Dimensions) { (float) width, (float) height }; } -static void Label(const Clay_String text, const int cornerRadius) -{ - CLAY(CLAY_LAYOUT({ .padding = {8, 8} }), - CLAY_RECTANGLE({ - .color = Clay_Hovered() ? COLOR_BLUE : COLOR_ORANGE, - .cornerRadius = cornerRadius, - })) { - CLAY_TEXT(text, CLAY_TEXT_CONFIG({ - .textColor = { 255, 255, 255, 255 }, - .fontId = FONT_ID, - .fontSize = 24, - })); - } -} - -static void LabelBorder(const Clay_String text, const int cornerRadius, const int thickness) -{ - CLAY( - CLAY_LAYOUT({ - .padding = {16, 16, 8, 8 } }), - CLAY_BORDER_OUTSIDE_RADIUS( - thickness, - COLOR_BLUE, - cornerRadius) - ){ - CLAY_TEXT(text, CLAY_TEXT_CONFIG({ - .textColor = { 255, 255, 255, 255 }, - .fontId = FONT_ID, - .fontSize = 24, - })); - } -} - -static Clay_RenderCommandArray Clay_CreateLayout() -{ - Clay_BeginLayout(); - CLAY(CLAY_ID("MainContent"), - CLAY_LAYOUT({ - .sizing = { - .width = CLAY_SIZING_GROW(), - .height = CLAY_SIZING_GROW(), - }, - .childAlignment = { - .x = CLAY_ALIGN_X_CENTER, - .y = CLAY_ALIGN_Y_CENTER, - }, - .childGap = 10, - .padding = { 10, 10 }, - .layoutDirection = CLAY_TOP_TO_BOTTOM, - }), - CLAY_BORDER({ - .left = { 20, COLOR_BLUE }, - .right = { 20, COLOR_BLUE }, - .bottom = { 20, COLOR_BLUE } - }), - CLAY_RECTANGLE({ - .color = COLOR_LIGHT, - }) - ) { - Label(CLAY_STRING("Rounded - Button 1"), 10); - Label(CLAY_STRING("Straight - Button 2") , 0); - Label(CLAY_STRING("Rounded+ - Button 3") , 20); - LabelBorder(CLAY_STRING("Border - Button 4"), 0, 5); - LabelBorder(CLAY_STRING("RoundedBorder - Button 5"), 10, 5); - LabelBorder(CLAY_STRING("RoundedBorder - Button 6"), 40, 15); - } - return Clay_EndLayout(); -} - void HandleClayErrors(Clay_ErrorData errorData) { printf("%s", errorData.errorText.chars); } @@ -147,6 +80,8 @@ SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[]) Clay_Initialize(clayMemory, (Clay_Dimensions) { (float) width, (float) height }, (Clay_ErrorHandler) { HandleClayErrors }); Clay_SetMeasureTextFunction(SDL_MeasureText, 0); + state->demoData = ClayVideoDemo_Initialize(); + *appstate = state; return SDL_APP_CONTINUE; } @@ -180,7 +115,7 @@ SDL_AppResult SDL_AppIterate(void *appstate) { AppState *state = appstate; - Clay_RenderCommandArray render_commands = Clay_CreateLayout(); + Clay_RenderCommandArray render_commands = ClayVideoDemo_CreateLayout(&state->demoData); SDL_SetRenderDrawColor(state->renderer, 0, 0, 0, 255); SDL_RenderClear(state->renderer); diff --git a/examples/cairo-pdf-rendering/CMakeLists.txt b/examples/cairo-pdf-rendering/CMakeLists.txt index 1f321dd..bdfe4e7 100644 --- a/examples/cairo-pdf-rendering/CMakeLists.txt +++ b/examples/cairo-pdf-rendering/CMakeLists.txt @@ -4,7 +4,6 @@ set(CMAKE_C_STANDARD 99) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../cmake") - add_executable(clay_examples_cairo_pdf_rendering main.c) find_package(Cairo REQUIRED) @@ -13,8 +12,8 @@ target_compile_options(clay_examples_cairo_pdf_rendering PUBLIC) target_include_directories(clay_examples_cairo_pdf_rendering PUBLIC . ${CAIRO_INCLUDE_DIRS}) target_link_libraries(clay_examples_cairo_pdf_rendering PUBLIC Cairo::Cairo) -set(CMAKE_C_FLAGS_DEBUG "-Wall -Werror -Wno-error=missing-braces") -set(CMAKE_C_FLAGS_RELEASE "-O3") +set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") +set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") add_custom_command( TARGET clay_examples_cairo_pdf_rendering POST_BUILD diff --git a/examples/cairo-pdf-rendering/main.c b/examples/cairo-pdf-rendering/main.c index f9fc793..b2374ac 100644 --- a/examples/cairo-pdf-rendering/main.c +++ b/examples/cairo-pdf-rendering/main.c @@ -31,78 +31,78 @@ // e.g. render PNGs. #include +const uint16_t FONT_CALLISTOGA = 0; +const uint16_t FONT_QUICKSAND = 0; + // Layout the first page. void Layout() { static Clay_Color PRIMARY = { 0xa8, 0x42, 0x1c, 255 }; static Clay_Color BACKGROUND = { 0xF4, 0xEB, 0xE6, 255 }; static Clay_Color ACCENT = { 0xFA, 0xE0, 0xD4, 255 }; - CLAY(CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) }, - .layoutDirection = CLAY_TOP_TO_BOTTOM }), - CLAY_RECTANGLE({ .color = BACKGROUND })) { - CLAY(CLAY_ID("PageMargins"), - CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) }, - .padding = { 70, 70, 50, 50 }, // Some nice looking page margins - .layoutDirection = CLAY_TOP_TO_BOTTOM, - .childGap = 10})) { - + CLAY({ + .layout = { .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) }, + .layoutDirection = CLAY_TOP_TO_BOTTOM }, + .backgroundColor = BACKGROUND + }) { + CLAY({ .id = CLAY_ID("PageMargins"), .layout = { .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) }, + .padding = { 70, 70, 50, 50 }, // Some nice looking page margins + .layoutDirection = CLAY_TOP_TO_BOTTOM, + .childGap = 10} + }) { // Section Title - CLAY(CLAY_TEXT( - CLAY_STRING("Features Overview"), - CLAY_TEXT_CONFIG({ - .fontFamily = CLAY_STRING("Calistoga"), - .textColor = PRIMARY, - .fontSize = 24 - }) - )); + CLAY_TEXT(CLAY_STRING("Features Overview"), CLAY_TEXT_CONFIG({ .fontId = FONT_CALLISTOGA, .textColor = PRIMARY, .fontSize = 24 })); // Feature Box - CLAY(CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIT(0) }, .childGap = 10 })) { - CLAY(CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIT(0) }}), CLAY_RECTANGLE({ - .color = ACCENT, - .cornerRadius = CLAY_CORNER_RADIUS(12), - })) { - CLAY(CLAY_LAYOUT({.padding = CLAY_PADDING_ALL(20), .childGap = 4, .layoutDirection = CLAY_TOP_TO_BOTTOM })) { + CLAY({ .layout = { .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIT(0) }, .childGap = 10 }}) { + CLAY({ .layout = { .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIT(0) }}, .backgroundColor = ACCENT, .cornerRadius = CLAY_CORNER_RADIUS(12) }) { + CLAY({ .layout = {.padding = CLAY_PADDING_ALL(20), .childGap = 4, .layoutDirection = CLAY_TOP_TO_BOTTOM }}) { CLAY_TEXT(CLAY_STRING("- High performance"), - CLAY_TEXT_CONFIG({ .textColor = PRIMARY, .fontSize = 14, .fontFamily = CLAY_STRING("Quicksand SemiBold") })); + CLAY_TEXT_CONFIG({ .textColor = PRIMARY, .fontSize = 14, .fontId = FONT_QUICKSAND })); CLAY_TEXT(CLAY_STRING("- Declarative syntax"), - CLAY_TEXT_CONFIG({ .textColor = PRIMARY, .fontSize = 14, .fontFamily = CLAY_STRING("Quicksand SemiBold") })); + CLAY_TEXT_CONFIG({ .textColor = PRIMARY, .fontSize = 14, .fontId = FONT_QUICKSAND })); CLAY_TEXT(CLAY_STRING("- Flexbox-style responsive layout"), - CLAY_TEXT_CONFIG({ .textColor = PRIMARY, .fontSize = 14, .fontFamily = CLAY_STRING("Quicksand SemiBold") })); + CLAY_TEXT_CONFIG({ .textColor = PRIMARY, .fontSize = 14, .fontId = FONT_QUICKSAND })); CLAY_TEXT(CLAY_STRING("- Single .h file for C/C++"), - CLAY_TEXT_CONFIG({ .textColor = PRIMARY, .fontSize = 14, .fontFamily = CLAY_STRING("Quicksand SemiBold") })); + CLAY_TEXT_CONFIG({ .textColor = PRIMARY, .fontSize = 14, .fontId = FONT_QUICKSAND })); CLAY_TEXT(CLAY_STRING("- And now with cairo!"), - CLAY_TEXT_CONFIG({ .textColor = PRIMARY, .fontSize = 14, .fontFamily = CLAY_STRING("Quicksand SemiBold") })); + CLAY_TEXT_CONFIG({ .textColor = PRIMARY, .fontSize = 14, .fontId = FONT_QUICKSAND })); } } - CLAY(CLAY_LAYOUT({ - .sizing = {CLAY_SIZING_FIT(0), CLAY_SIZING_GROW(0)}, - .padding = CLAY_PADDING_ALL(10), - .layoutDirection = CLAY_TOP_TO_BOTTOM, - .childAlignment = { CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER }, - .childGap = 4 - }), CLAY_RECTANGLE({ .color = ACCENT, .cornerRadius = CLAY_CORNER_RADIUS(8) })) { + CLAY({ + .layout = { + .sizing = {CLAY_SIZING_FIT(0), CLAY_SIZING_GROW(0)}, + .padding = CLAY_PADDING_ALL(10), + .layoutDirection = CLAY_TOP_TO_BOTTOM, + .childAlignment = { CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER }, + .childGap = 4 + }, + .backgroundColor = ACCENT, + .cornerRadius = CLAY_CORNER_RADIUS(8) + }) { // Profile picture - CLAY(CLAY_LAYOUT({ - .sizing = {CLAY_SIZING_FIT(0), CLAY_SIZING_GROW(0)}, - .padding = { 30, 30, 0, 0 }, - .layoutDirection = CLAY_TOP_TO_BOTTOM, - .childAlignment = { CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER }}), CLAY_BORDER_OUTSIDE_RADIUS(2, PRIMARY, 10)) { - CLAY(CLAY_LAYOUT({ .sizing = { CLAY_SIZING_FIXED(32), CLAY_SIZING_FIXED(32) } }), CLAY_IMAGE({ .sourceDimensions = { 32, 32 }, .path = CLAY_STRING("resources/check.png") })); + CLAY({ .layout = { + .sizing = {CLAY_SIZING_FIT(0), CLAY_SIZING_GROW(0)}, + .padding = { 30, 30, 0, 0 }, + .layoutDirection = CLAY_TOP_TO_BOTTOM, + .childAlignment = { CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER }}, + .border = { .color = PRIMARY, .width = 2, 2, 2, 2 }, .cornerRadius = 10 + }) { + CLAY({ .layout = { .sizing = { CLAY_SIZING_FIXED(32), CLAY_SIZING_FIXED(32) } }, .image = { .sourceDimensions = { 32, 32 }, .imageData = "resources/check.png" }}); } } } - CLAY(CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(16) } })); + CLAY({ .layout = { .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(16) } }}); - CLAY(CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) }, .childGap = 10, .layoutDirection = CLAY_TOP_TO_BOTTOM })) { - CLAY_TEXT(CLAY_STRING("Cairo"), CLAY_TEXT_CONFIG({ .fontFamily = CLAY_STRING("Calistoga"), .fontSize = 24, .textColor = PRIMARY })); - CLAY(CLAY_LAYOUT({ .padding = CLAY_PADDING_ALL(10) }), CLAY_RECTANGLE({ .color = ACCENT, .cornerRadius = CLAY_CORNER_RADIUS(10) })) { + CLAY({ .layout = { .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) }, .childGap = 10, .layoutDirection = CLAY_TOP_TO_BOTTOM }}) { + CLAY_TEXT(CLAY_STRING("Cairo"), CLAY_TEXT_CONFIG({ .fontId = FONT_CALLISTOGA, .fontSize = 24, .textColor = PRIMARY })); + CLAY({ .layout = { .padding = CLAY_PADDING_ALL(10) }, .backgroundColor = ACCENT, .cornerRadius = 10 }) { CLAY_TEXT(CLAY_STRING("Officiis quia quia qui inventore ratione voluptas et. Quidem sunt unde similique. Qui est et exercitationem cumque harum illum. Numquam placeat aliquid quo voluptatem. " "Deleniti saepe nihil exercitationem nemo illo. Consequatur beatae repellat provident similique. Provident qui exercitationem deserunt sapiente. Quam qui dolor corporis odit. " "Assumenda corrupti sunt culpa pariatur. Vero sit ut minima. In est consequatur minus et cum sint illum aperiam. Qui ipsa quas nisi omnis aut quia nobis. " "Corporis deserunt eum mollitia modi rerum voluptas. Expedita non ab esse. Sit voluptates eos voluptatem labore aspernatur quia eum. Modi cumque atque non. Sunt officiis corrupti neque ut inventore excepturi rem minima. Possimus sed soluta qui ea aut ipsum laborum fugit. " - "Voluptate eum consectetur non. Quo autem voluptate soluta atque dolorum maxime. Officiis inventore omnis eveniet beatae ipsa optio. Unde voluptatum ut autem quia sit sit et. Ut inventore qui quia totam consequatur. Sit ea consequatur omnis rerum nulla aspernatur deleniti."), CLAY_TEXT_CONFIG({ .fontFamily = CLAY_STRING("Quicksand SemiBold"), .fontSize = 16, .textColor = PRIMARY, .lineHeight = 16 })); + "Voluptate eum consectetur non. Quo autem voluptate soluta atque dolorum maxime. Officiis inventore omnis eveniet beatae ipsa optio. Unde voluptatum ut autem quia sit sit et. Ut inventore qui quia totam consequatur. Sit ea consequatur omnis rerum nulla aspernatur deleniti."), CLAY_TEXT_CONFIG({ .fontId = FONT_QUICKSAND, .fontSize = 16, .textColor = PRIMARY, .lineHeight = 16 })); } } } @@ -136,11 +136,17 @@ int main(void) { uint64_t totalMemorySize = Clay_MinMemorySize(); Clay_Arena clayMemory = Clay_CreateArenaWithCapacityAndMemory(totalMemorySize, malloc(totalMemorySize)); - Clay_SetMeasureTextFunction(Clay_Cairo_MeasureText); // We initialize Clay with the same size Clay_Initialize(clayMemory, (Clay_Dimensions) { width, height }, (Clay_ErrorHandler) { HandleClayErrors }); + char** fonts = (char*[]) { + "Callistoga", + "Quicksand Semibold" + }; + + Clay_SetMeasureTextFunction(Clay_Cairo_MeasureText, (uintptr_t)fonts); + Clay_BeginLayout(); // Here you can now create the declarative clay layout. @@ -149,7 +155,7 @@ int main(void) { Clay_RenderCommandArray commands = Clay_EndLayout(); // Pass our layout to the cairo backend - Clay_Cairo_Render(commands); + Clay_Cairo_Render(commands, fonts); // To keep this example short, we will not emit a second page in the PDF. // But to do so, you have to diff --git a/examples/clay-official-website/CMakeLists.txt b/examples/clay-official-website/CMakeLists.txt index 9702d21..503f90f 100644 --- a/examples/clay-official-website/CMakeLists.txt +++ b/examples/clay-official-website/CMakeLists.txt @@ -5,7 +5,5 @@ set(CMAKE_C_STANDARD 99) add_executable(clay_official_website main.c) -target_compile_options(clay_official_website PUBLIC -Wall -Werror -Wno-unknown-pragmas -Wno-error=missing-braces) +target_compile_options(clay_official_website PUBLIC) target_include_directories(clay_official_website PUBLIC .) - -set(CMAKE_C_FLAGS_RELEASE "-O3") \ No newline at end of file diff --git a/examples/clay-official-website/build/clay/index.html b/examples/clay-official-website/build/clay/index.html index f168175..0eab546 100644 --- a/examples/clay-official-website/build/clay/index.html +++ b/examples/clay-official-website/build/clay/index.html @@ -113,7 +113,6 @@ ]}; let rectangleConfigDefinition = { name: 'rectangle', type: 'struct', members: [ { name: 'color', ...colorDefinition }, - { name: 'cornerRadius', ...cornerRadiusDefinition }, { name: 'link', ...stringDefinition }, { name: 'cursorPointer', type: 'uint8_t' }, ]}; @@ -123,7 +122,6 @@ { name: 'top', ...borderDefinition }, { name: 'bottom', ...borderDefinition }, { name: 'betweenChildren', ...borderDefinition }, - { name: 'cornerRadius', ...cornerRadiusDefinition } ]}; let textConfigDefinition = { name: 'text', type: 'struct', members: [ { name: 'textColor', ...colorDefinition }, @@ -149,6 +147,9 @@ let customConfigDefinition = { name: 'custom', type: 'struct', members: [ { name: 'customData', type: 'uint32_t' }, ]} + let sharedConfigDefinition = { name: 'shared', type: 'struct', members: [ + { name: 'cornerRadius', ...cornerRadiusDefinition }, + ]}; let renderCommandDefinition = { name: 'CLay_RenderCommand', type: 'struct', @@ -160,7 +161,10 @@ { name: 'height', type: 'float' }, ]}, { name: 'config', type: 'uint32_t'}, - { name: 'text', ...stringSliceDefinition }, + { name: 'textOrSharedConfig', type: 'union', members: [ + { name: 'text', ...stringSliceDefinition }, + { name: 'sharedConfig', type: 'uint32_t' } + ]}, { name: 'zIndex', type: 'int32_t' }, { name: 'id', type: 'uint32_t' }, { name: 'commandType', type: 'uint32_t', }, @@ -378,7 +382,7 @@ let isMultiConfigElement = previousId === renderCommand.id.value; if (!elementCache[renderCommand.id.value]) { let elementType = 'div'; - switch (renderCommand.commandType.value) { + switch (renderCommand.commandType.value & 0xff) { case CLAY_RENDER_COMMAND_TYPE_RECTANGLE: { if (readStructAtAddress(renderCommand.config.value, rectangleConfigDefinition).link.length.value > 0) { elementType = 'a'; @@ -386,6 +390,7 @@ break; } case CLAY_RENDER_COMMAND_TYPE_IMAGE: { + console.log('test5'); elementType = 'img'; break; } default: break; @@ -439,6 +444,7 @@ } case (CLAY_RENDER_COMMAND_TYPE_RECTANGLE): { let config = readStructAtAddress(renderCommand.config.value, rectangleConfigDefinition); + let sharedConfig = readStructAtAddress( renderCommand.textOrSharedConfig.sharedConfig.value, sharedConfigDefinition); let configMemory = new Uint8Array(memoryDataView.buffer.slice(renderCommand.config.value, renderCommand.config.value + config.__size)); let linkContents = config.link.length.value > 0 ? textDecoder.decode(new Uint8Array(memoryDataView.buffer.slice(config.link.chars.value, config.link.chars.value + config.link.length.value))) : 0; memoryDataView.setUint32(0, renderCommand.id.value, true); @@ -459,22 +465,23 @@ elementData.previousMemoryConfig = configMemory; let color = config.color; element.style.backgroundColor = `rgba(${color.r.value}, ${color.g.value}, ${color.b.value}, ${color.a.value / 255})`; - if (config.cornerRadius.topLeft.value > 0) { - element.style.borderTopLeftRadius = config.cornerRadius.topLeft.value + 'px'; + if (sharedConfig.cornerRadius.topLeft.value > 0) { + element.style.borderTopLeftRadius = sharedConfig.cornerRadius.topLeft.value + 'px'; } - if (config.cornerRadius.topRight.value > 0) { - element.style.borderTopRightRadius = config.cornerRadius.topRight.value + 'px'; + if (sharedConfig.cornerRadius.topRight.value > 0) { + element.style.borderTopRightRadius = sharedConfig.cornerRadius.topRight.value + 'px'; } - if (config.cornerRadius.bottomLeft.value > 0) { - element.style.borderBottomLeftRadius = config.cornerRadius.bottomLeft.value + 'px'; + if (sharedConfig.cornerRadius.bottomLeft.value > 0) { + element.style.borderBottomLeftRadius = sharedConfig.cornerRadius.bottomLeft.value + 'px'; } - if (config.cornerRadius.bottomRight.value > 0) { - element.style.borderBottomRightRadius = config.cornerRadius.bottomRight.value + 'px'; + if (sharedConfig.cornerRadius.bottomRight.value > 0) { + element.style.borderBottomRightRadius = sharedConfig.cornerRadius.bottomRight.value + 'px'; } break; } case (CLAY_RENDER_COMMAND_TYPE_BORDER): { let config = readStructAtAddress(renderCommand.config.value, borderConfigDefinition); + let sharedConfig = readStructAtAddress( renderCommand.textOrSharedConfig.sharedConfig.value, sharedConfigDefinition); let configMemory = new Uint8Array(memoryDataView.buffer.slice(renderCommand.config.value, renderCommand.config.value + config.__size)); if (!dirty && !MemoryIsDifferent(configMemory, elementData.previousMemoryConfig, config.__size)) { break; @@ -496,24 +503,24 @@ let color = config.bottom.color; element.style.borderBottom = `${config.bottom.width.value}px solid rgba(${color.r.value}, ${color.g.value}, ${color.b.value}, ${color.a.value / 255})` } - if (config.cornerRadius.topLeft.value > 0) { - element.style.borderTopLeftRadius = config.cornerRadius.topLeft.value + 'px'; + if (sharedConfig.cornerRadius.topLeft.value > 0) { + element.style.borderTopLeftRadius = sharedConfig.cornerRadius.topLeft.value + 'px'; } - if (config.cornerRadius.topRight.value > 0) { - element.style.borderTopRightRadius = config.cornerRadius.topRight.value + 'px'; + if (sharedConfig.cornerRadius.topRight.value > 0) { + element.style.borderTopRightRadius = sharedConfig.cornerRadius.topRight.value + 'px'; } - if (config.cornerRadius.bottomLeft.value > 0) { - element.style.borderBottomLeftRadius = config.cornerRadius.bottomLeft.value + 'px'; + if (sharedConfig.cornerRadius.bottomLeft.value > 0) { + element.style.borderBottomLeftRadius = sharedConfig.cornerRadius.bottomLeft.value + 'px'; } - if (config.cornerRadius.bottomRight.value > 0) { - element.style.borderBottomRightRadius = config.cornerRadius.bottomRight.value + 'px'; + if (sharedConfig.cornerRadius.bottomRight.value > 0) { + element.style.borderBottomRightRadius = sharedConfig.cornerRadius.bottomRight.value + 'px'; } break; } case (CLAY_RENDER_COMMAND_TYPE_TEXT): { let config = readStructAtAddress(renderCommand.config.value, textConfigDefinition); let configMemory = new Uint8Array(memoryDataView.buffer.slice(renderCommand.config.value, renderCommand.config.value + config.__size)); - let textContents = renderCommand.text; + let textContents = renderCommand.textOrSharedConfig.text; let stringContents = new Uint8Array(memoryDataView.buffer.slice(textContents.chars.value, textContents.chars.value + textContents.length.value)); if (MemoryIsDifferent(configMemory, elementData.previousMemoryConfig, config.__size)) { element.className = 'text'; @@ -549,6 +556,7 @@ break; } case (CLAY_RENDER_COMMAND_TYPE_IMAGE): { + console.log('test1'); let config = readStructAtAddress(renderCommand.config.value, imageConfigDefinition); let srcContents = new Uint8Array(memoryDataView.buffer.slice(config.sourceURL.chars.value, config.sourceURL.chars.value + config.sourceURL.length.value)); if (srcContents.length !== elementData.previousMemoryText.length || MemoryIsDifferent(srcContents, elementData.previousMemoryText, srcContents.length)) { diff --git a/examples/clay-official-website/build/clay/index.wasm b/examples/clay-official-website/build/clay/index.wasm index 34351388ce04eee0e03ef670770d280208667cec..91fa130e75d619678e4c0ff373494d615f218211 100755 GIT binary patch literal 111977 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 ec;7rjG0pi$b`}Hs7J={{IK$HWu>$ diff --git a/examples/clay-official-website/index.html b/examples/clay-official-website/index.html index f168175..0eab546 100644 --- a/examples/clay-official-website/index.html +++ b/examples/clay-official-website/index.html @@ -113,7 +113,6 @@ ]}; let rectangleConfigDefinition = { name: 'rectangle', type: 'struct', members: [ { name: 'color', ...colorDefinition }, - { name: 'cornerRadius', ...cornerRadiusDefinition }, { name: 'link', ...stringDefinition }, { name: 'cursorPointer', type: 'uint8_t' }, ]}; @@ -123,7 +122,6 @@ { name: 'top', ...borderDefinition }, { name: 'bottom', ...borderDefinition }, { name: 'betweenChildren', ...borderDefinition }, - { name: 'cornerRadius', ...cornerRadiusDefinition } ]}; let textConfigDefinition = { name: 'text', type: 'struct', members: [ { name: 'textColor', ...colorDefinition }, @@ -149,6 +147,9 @@ let customConfigDefinition = { name: 'custom', type: 'struct', members: [ { name: 'customData', type: 'uint32_t' }, ]} + let sharedConfigDefinition = { name: 'shared', type: 'struct', members: [ + { name: 'cornerRadius', ...cornerRadiusDefinition }, + ]}; let renderCommandDefinition = { name: 'CLay_RenderCommand', type: 'struct', @@ -160,7 +161,10 @@ { name: 'height', type: 'float' }, ]}, { name: 'config', type: 'uint32_t'}, - { name: 'text', ...stringSliceDefinition }, + { name: 'textOrSharedConfig', type: 'union', members: [ + { name: 'text', ...stringSliceDefinition }, + { name: 'sharedConfig', type: 'uint32_t' } + ]}, { name: 'zIndex', type: 'int32_t' }, { name: 'id', type: 'uint32_t' }, { name: 'commandType', type: 'uint32_t', }, @@ -378,7 +382,7 @@ let isMultiConfigElement = previousId === renderCommand.id.value; if (!elementCache[renderCommand.id.value]) { let elementType = 'div'; - switch (renderCommand.commandType.value) { + switch (renderCommand.commandType.value & 0xff) { case CLAY_RENDER_COMMAND_TYPE_RECTANGLE: { if (readStructAtAddress(renderCommand.config.value, rectangleConfigDefinition).link.length.value > 0) { elementType = 'a'; @@ -386,6 +390,7 @@ break; } case CLAY_RENDER_COMMAND_TYPE_IMAGE: { + console.log('test5'); elementType = 'img'; break; } default: break; @@ -439,6 +444,7 @@ } case (CLAY_RENDER_COMMAND_TYPE_RECTANGLE): { let config = readStructAtAddress(renderCommand.config.value, rectangleConfigDefinition); + let sharedConfig = readStructAtAddress( renderCommand.textOrSharedConfig.sharedConfig.value, sharedConfigDefinition); let configMemory = new Uint8Array(memoryDataView.buffer.slice(renderCommand.config.value, renderCommand.config.value + config.__size)); let linkContents = config.link.length.value > 0 ? textDecoder.decode(new Uint8Array(memoryDataView.buffer.slice(config.link.chars.value, config.link.chars.value + config.link.length.value))) : 0; memoryDataView.setUint32(0, renderCommand.id.value, true); @@ -459,22 +465,23 @@ elementData.previousMemoryConfig = configMemory; let color = config.color; element.style.backgroundColor = `rgba(${color.r.value}, ${color.g.value}, ${color.b.value}, ${color.a.value / 255})`; - if (config.cornerRadius.topLeft.value > 0) { - element.style.borderTopLeftRadius = config.cornerRadius.topLeft.value + 'px'; + if (sharedConfig.cornerRadius.topLeft.value > 0) { + element.style.borderTopLeftRadius = sharedConfig.cornerRadius.topLeft.value + 'px'; } - if (config.cornerRadius.topRight.value > 0) { - element.style.borderTopRightRadius = config.cornerRadius.topRight.value + 'px'; + if (sharedConfig.cornerRadius.topRight.value > 0) { + element.style.borderTopRightRadius = sharedConfig.cornerRadius.topRight.value + 'px'; } - if (config.cornerRadius.bottomLeft.value > 0) { - element.style.borderBottomLeftRadius = config.cornerRadius.bottomLeft.value + 'px'; + if (sharedConfig.cornerRadius.bottomLeft.value > 0) { + element.style.borderBottomLeftRadius = sharedConfig.cornerRadius.bottomLeft.value + 'px'; } - if (config.cornerRadius.bottomRight.value > 0) { - element.style.borderBottomRightRadius = config.cornerRadius.bottomRight.value + 'px'; + if (sharedConfig.cornerRadius.bottomRight.value > 0) { + element.style.borderBottomRightRadius = sharedConfig.cornerRadius.bottomRight.value + 'px'; } break; } case (CLAY_RENDER_COMMAND_TYPE_BORDER): { let config = readStructAtAddress(renderCommand.config.value, borderConfigDefinition); + let sharedConfig = readStructAtAddress( renderCommand.textOrSharedConfig.sharedConfig.value, sharedConfigDefinition); let configMemory = new Uint8Array(memoryDataView.buffer.slice(renderCommand.config.value, renderCommand.config.value + config.__size)); if (!dirty && !MemoryIsDifferent(configMemory, elementData.previousMemoryConfig, config.__size)) { break; @@ -496,24 +503,24 @@ let color = config.bottom.color; element.style.borderBottom = `${config.bottom.width.value}px solid rgba(${color.r.value}, ${color.g.value}, ${color.b.value}, ${color.a.value / 255})` } - if (config.cornerRadius.topLeft.value > 0) { - element.style.borderTopLeftRadius = config.cornerRadius.topLeft.value + 'px'; + if (sharedConfig.cornerRadius.topLeft.value > 0) { + element.style.borderTopLeftRadius = sharedConfig.cornerRadius.topLeft.value + 'px'; } - if (config.cornerRadius.topRight.value > 0) { - element.style.borderTopRightRadius = config.cornerRadius.topRight.value + 'px'; + if (sharedConfig.cornerRadius.topRight.value > 0) { + element.style.borderTopRightRadius = sharedConfig.cornerRadius.topRight.value + 'px'; } - if (config.cornerRadius.bottomLeft.value > 0) { - element.style.borderBottomLeftRadius = config.cornerRadius.bottomLeft.value + 'px'; + if (sharedConfig.cornerRadius.bottomLeft.value > 0) { + element.style.borderBottomLeftRadius = sharedConfig.cornerRadius.bottomLeft.value + 'px'; } - if (config.cornerRadius.bottomRight.value > 0) { - element.style.borderBottomRightRadius = config.cornerRadius.bottomRight.value + 'px'; + if (sharedConfig.cornerRadius.bottomRight.value > 0) { + element.style.borderBottomRightRadius = sharedConfig.cornerRadius.bottomRight.value + 'px'; } break; } case (CLAY_RENDER_COMMAND_TYPE_TEXT): { let config = readStructAtAddress(renderCommand.config.value, textConfigDefinition); let configMemory = new Uint8Array(memoryDataView.buffer.slice(renderCommand.config.value, renderCommand.config.value + config.__size)); - let textContents = renderCommand.text; + let textContents = renderCommand.textOrSharedConfig.text; let stringContents = new Uint8Array(memoryDataView.buffer.slice(textContents.chars.value, textContents.chars.value + textContents.length.value)); if (MemoryIsDifferent(configMemory, elementData.previousMemoryConfig, config.__size)) { element.className = 'text'; @@ -549,6 +556,7 @@ break; } case (CLAY_RENDER_COMMAND_TYPE_IMAGE): { + console.log('test1'); let config = readStructAtAddress(renderCommand.config.value, imageConfigDefinition); let srcContents = new Uint8Array(memoryDataView.buffer.slice(config.sourceURL.chars.value, config.sourceURL.chars.value + config.sourceURL.length.value)); if (srcContents.length !== elementData.previousMemoryText.length || MemoryIsDifferent(srcContents, elementData.previousMemoryText, srcContents.length)) { diff --git a/examples/clay-official-website/main.c b/examples/clay-official-website/main.c index 4944262..19d9635 100644 --- a/examples/clay-official-website/main.c +++ b/examples/clay-official-website/main.c @@ -1,6 +1,3 @@ -#define CLAY_EXTEND_CONFIG_RECTANGLE Clay_String link; bool cursorPointer; -#define CLAY_EXTEND_CONFIG_IMAGE Clay_String sourceURL; -#define CLAY_EXTEND_CONFIG_TEXT bool disablePointerEvents; #define CLAY_IMPLEMENTATION #include "../../clay.h" @@ -40,61 +37,80 @@ const Clay_Color COLOR_BLOB_BORDER_5 = (Clay_Color) {240, 189, 100, 255}; Clay_TextElementConfig headerTextConfig = (Clay_TextElementConfig) { .fontId = 2, .fontSize = 24, .textColor = {61, 26, 5, 255} }; Clay_TextElementConfig blobTextConfig = (Clay_TextElementConfig) { .fontId = 2, .fontSize = 30, .textColor = {244, 235, 230, 255} }; -void LandingPageBlob(int index, int fontSize, Clay_Color color, Clay_String text, Clay_String imageURL) { - CLAY(CLAY_IDI("HeroBlob", index), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(.max = 480) }, .padding = CLAY_PADDING_ALL(16), .childGap = 16, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER} }), CLAY_BORDER_OUTSIDE_RADIUS(2, color, 10)) { - CLAY(CLAY_IDI("CheckImage", index), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_FIXED(32) } }), CLAY_IMAGE({ .sourceDimensions = { 128, 128 }, .sourceURL = imageURL })) {} +typedef struct { + void* memory; + uintptr_t offset; +} Arena; + +Arena frameArena = {}; + +typedef struct { + Clay_String link; + bool cursorPointer; + bool disablePointerEvents; +} CustomHTMLData; + +CustomHTMLData* FrameAllocateCustomData(CustomHTMLData data) { + CustomHTMLData *customData = (CustomHTMLData *)(frameArena.memory + frameArena.offset); + frameArena.offset += sizeof(CustomHTMLData); + return customData; +} + +void LandingPageBlob(int index, int fontSize, Clay_Color color, Clay_String text, char* imageURL) { + CLAY({ .id = CLAY_IDI("HeroBlob", index), .layout = { .sizing = { CLAY_SIZING_GROW(.max = 480) }, .padding = CLAY_PADDING_ALL(16), .childGap = 16, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER} }, .border = { .color = color, .width = { 2, 2, 2, 2 }}, .cornerRadius = CLAY_CORNER_RADIUS(10) }) { + CLAY({ .id = CLAY_IDI("CheckImage", index), .layout = { .sizing = { CLAY_SIZING_FIXED(32) } }, .image = { .sourceDimensions = { 128, 128 }, .imageData = imageURL } }) {} CLAY_TEXT(text, CLAY_TEXT_CONFIG({ .fontSize = fontSize, .fontId = FONT_ID_BODY_24, .textColor = color })); } } void LandingPageDesktop() { - CLAY(CLAY_ID("LandingPage1Desktop"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIT(.min = windowHeight - 70) }, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER}, .padding = { 50, 50 } })) { - CLAY(CLAY_ID("LandingPage1"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) }, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER}, .padding = CLAY_PADDING_ALL(32), .childGap = 32 }), CLAY_BORDER({ .left = { 2, COLOR_RED }, .right = { 2, COLOR_RED } })) { - CLAY(CLAY_ID("LeftText"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_PERCENT(0.55f) }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 8 })) { + CLAY({ .id = CLAY_ID("LandingPage1Desktop"), .layout = { .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIT(.min = windowHeight - 70) }, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER}, .padding = { 50, 50 } } }) { + CLAY({ .id = CLAY_ID("LandingPage1"), .layout = { .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) }, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER}, .padding = CLAY_PADDING_ALL(32), .childGap = 32 }, .border = { .width = { .left = 2, .right = 2 }, .color = COLOR_RED } }) { + CLAY({ .id = CLAY_ID("LeftText"), .layout = { .sizing = { .width = CLAY_SIZING_PERCENT(0.55f) }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 8 } }) { CLAY_TEXT(CLAY_STRING("Clay is a flex-box style UI auto layout library in C, with declarative syntax and microsecond performance."), CLAY_TEXT_CONFIG({ .fontSize = 56, .fontId = FONT_ID_TITLE_56, .textColor = COLOR_RED })); - CLAY(CLAY_ID("LandingPageSpacer"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(32) } })) {} + CLAY({ .id = CLAY_ID("LandingPageSpacer"), .layout = { .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(32) } } }) {} CLAY_TEXT(CLAY_STRING("Clay is laying out this webpage right now!"), CLAY_TEXT_CONFIG({ .fontSize = 36, .fontId = FONT_ID_TITLE_36, .textColor = COLOR_ORANGE })); } - CLAY(CLAY_ID("HeroImageOuter"), CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { .width = CLAY_SIZING_PERCENT(0.45f) }, .childAlignment = { CLAY_ALIGN_X_CENTER }, .childGap = 16 })) { - LandingPageBlob(1, 32, COLOR_BLOB_BORDER_5, CLAY_STRING("High performance"), CLAY_STRING("/clay/images/check_5.png")); - LandingPageBlob(2, 32, COLOR_BLOB_BORDER_4, CLAY_STRING("Flexbox-style responsive layout"), CLAY_STRING("/clay/images/check_4.png")); - LandingPageBlob(3, 32, COLOR_BLOB_BORDER_3, CLAY_STRING("Declarative syntax"), CLAY_STRING("/clay/images/check_3.png")); - LandingPageBlob(4, 32, COLOR_BLOB_BORDER_2, CLAY_STRING("Single .h file for C/C++"), CLAY_STRING("/clay/images/check_2.png")); - LandingPageBlob(5, 32, COLOR_BLOB_BORDER_1, CLAY_STRING("Compile to 15kb .wasm"), CLAY_STRING("/clay/images/check_1.png")); + CLAY({ .id = CLAY_ID("HeroImageOuter"), .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { .width = CLAY_SIZING_PERCENT(0.45f) }, .childAlignment = { CLAY_ALIGN_X_CENTER }, .childGap = 16 } }) { + LandingPageBlob(1, 32, COLOR_BLOB_BORDER_5, CLAY_STRING("High performance"), "/clay/images/check_5.png"); + LandingPageBlob(2, 32, COLOR_BLOB_BORDER_4, CLAY_STRING("Flexbox-style responsive layout"), "/clay/images/check_4.png"); + LandingPageBlob(3, 32, COLOR_BLOB_BORDER_3, CLAY_STRING("Declarative syntax"), "/clay/images/check_3.png"); + LandingPageBlob(4, 32, COLOR_BLOB_BORDER_2, CLAY_STRING("Single .h file for C/C++"), "/clay/images/check_2.png"); + LandingPageBlob(5, 32, COLOR_BLOB_BORDER_1, CLAY_STRING("Compile to 15kb .wasm"), "/clay/images/check_1.png"); } } } } void LandingPageMobile() { - CLAY(CLAY_ID("LandingPage1Mobile"), CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIT(.min = windowHeight - 70) }, .childAlignment = {CLAY_ALIGN_X_CENTER, .y = CLAY_ALIGN_Y_CENTER}, .padding = { 16, 16, 32, 32 }, .childGap = 32 })) { - CLAY(CLAY_ID("LeftText"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_GROW(0) }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 8 })) { + CLAY({ .id = CLAY_ID("LandingPage1Mobile"), .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIT(.min = windowHeight - 70) }, .childAlignment = {CLAY_ALIGN_X_CENTER, .y = CLAY_ALIGN_Y_CENTER}, .padding = { 16, 16, 32, 32 }, .childGap = 32 } }) { + CLAY({ .id = CLAY_ID("LeftText"), .layout = { .sizing = { .width = CLAY_SIZING_GROW(0) }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 8 } }) { CLAY_TEXT(CLAY_STRING("Clay is a flex-box style UI auto layout library in C, with declarative syntax and microsecond performance."), CLAY_TEXT_CONFIG({ .fontSize = 48, .fontId = FONT_ID_TITLE_56, .textColor = COLOR_RED })); - CLAY(CLAY_ID("LandingPageSpacer"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(32) } })) {} + CLAY({ .id = CLAY_ID("LandingPageSpacer"), .layout = { .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(32) } } }) {} CLAY_TEXT(CLAY_STRING("Clay is laying out this webpage right now!"), CLAY_TEXT_CONFIG({ .fontSize = 32, .fontId = FONT_ID_TITLE_36, .textColor = COLOR_ORANGE })); } - CLAY(CLAY_ID("HeroImageOuter"), CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { .width = CLAY_SIZING_GROW(0) }, .childAlignment = { CLAY_ALIGN_X_CENTER }, .childGap = 16 })) { - LandingPageBlob(1, 28, COLOR_BLOB_BORDER_5, CLAY_STRING("High performance"), CLAY_STRING("/clay/images/check_5.png")); - LandingPageBlob(2, 28, COLOR_BLOB_BORDER_4, CLAY_STRING("Flexbox-style responsive layout"), CLAY_STRING("/clay/images/check_4.png")); - LandingPageBlob(3, 28, COLOR_BLOB_BORDER_3, CLAY_STRING("Declarative syntax"), CLAY_STRING("/clay/images/check_3.png")); - LandingPageBlob(4, 28, COLOR_BLOB_BORDER_2, CLAY_STRING("Single .h file for C/C++"), CLAY_STRING("/clay/images/check_2.png")); - LandingPageBlob(5, 28, COLOR_BLOB_BORDER_1, CLAY_STRING("Compile to 15kb .wasm"), CLAY_STRING("/clay/images/check_1.png")); + CLAY({ .id = CLAY_ID("HeroImageOuter"), .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { .width = CLAY_SIZING_GROW(0) }, .childAlignment = { CLAY_ALIGN_X_CENTER }, .childGap = 16 } }) { + LandingPageBlob(1, 28, COLOR_BLOB_BORDER_5, CLAY_STRING("High performance"), "/clay/images/check_5.png"); + LandingPageBlob(2, 28, COLOR_BLOB_BORDER_4, CLAY_STRING("Flexbox-style responsive layout"), "/clay/images/check_4.png"); + LandingPageBlob(3, 28, COLOR_BLOB_BORDER_3, CLAY_STRING("Declarative syntax"), "/clay/images/check_3.png"); + LandingPageBlob(4, 28, COLOR_BLOB_BORDER_2, CLAY_STRING("Single .h file for C/C++"), "/clay/images/check_2.png"); + LandingPageBlob(5, 28, COLOR_BLOB_BORDER_1, CLAY_STRING("Compile to 15kb .wasm"), "/clay/images/check_1.png"); } } } void FeatureBlocksDesktop() { - CLAY(CLAY_ID("FeatureBlocksOuter"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0) } })) { - CLAY(CLAY_ID("FeatureBlocksInner"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0) }, .childAlignment = { .y = CLAY_ALIGN_Y_CENTER } }), CLAY_BORDER({ .betweenChildren = { .width = 2, .color = COLOR_RED } })) { + CLAY({ .id = CLAY_ID("FeatureBlocksOuter"), .layout = { .sizing = { CLAY_SIZING_GROW(0) } } }) { + CLAY({ .id = CLAY_ID("FeatureBlocksInner"), .layout = { .sizing = { CLAY_SIZING_GROW(0) }, .childAlignment = { .y = CLAY_ALIGN_Y_CENTER } }, .border = { .width = { .betweenChildren = 2 }, .color = COLOR_RED } }) { Clay_TextElementConfig *textConfig = CLAY_TEXT_CONFIG({ .fontSize = 24, .fontId = FONT_ID_BODY_24, .textColor = COLOR_RED }); - CLAY(CLAY_ID("HFileBoxOuter"), CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { CLAY_SIZING_PERCENT(0.5f) }, .childAlignment = {0, CLAY_ALIGN_Y_CENTER}, .padding = {50, 50, 32, 32}, .childGap = 8 })) { - CLAY(CLAY_ID("HFileIncludeOuter"), CLAY_LAYOUT({ .padding = {8, 4} }), CLAY_RECTANGLE({ .color = COLOR_RED, .cornerRadius = CLAY_CORNER_RADIUS(8) })) { + CLAY({ .id = CLAY_ID("HFileBoxOuter"), .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { CLAY_SIZING_PERCENT(0.5f) }, .childAlignment = {0, CLAY_ALIGN_Y_CENTER}, .padding = {50, 50, 32, 32}, .childGap = 8 } }) { + CLAY({ .id = CLAY_ID("HFileIncludeOuter"), .layout = { .padding = {8, 4} }, .backgroundColor = COLOR_RED, .cornerRadius = CLAY_CORNER_RADIUS(8) }) { CLAY_TEXT(CLAY_STRING("#include clay.h"), CLAY_TEXT_CONFIG({ .fontSize = 24, .fontId = FONT_ID_BODY_24, .textColor = COLOR_LIGHT })); } CLAY_TEXT(CLAY_STRING("~2000 lines of C99."), textConfig); CLAY_TEXT(CLAY_STRING("Zero dependencies, including no C standard library."), textConfig); } - CLAY(CLAY_ID("BringYourOwnRendererOuter"), CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { CLAY_SIZING_PERCENT(0.5f) }, .childAlignment = {0, CLAY_ALIGN_Y_CENTER}, .padding = {50, 50, 32, 32}, .childGap = 8 })) { + CLAY({ .id = CLAY_ID("BringYourOwnRendererOuter"), .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { CLAY_SIZING_PERCENT(0.5f) }, .childAlignment = {0, CLAY_ALIGN_Y_CENTER}, .padding = {50, 50, 32, 32}, .childGap = 8 } }) { CLAY_TEXT(CLAY_STRING("Renderer agnostic."), CLAY_TEXT_CONFIG({ .fontId = FONT_ID_BODY_24, .fontSize = 24, .textColor = COLOR_ORANGE })); CLAY_TEXT(CLAY_STRING("Layout with clay, then render with Raylib, WebGL Canvas or even as HTML."), textConfig); CLAY_TEXT(CLAY_STRING("Flexible output for easy compositing in your custom engine or environment."), textConfig); @@ -104,16 +120,16 @@ void FeatureBlocksDesktop() { } void FeatureBlocksMobile() { - CLAY(CLAY_ID("FeatureBlocksInner"), CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { CLAY_SIZING_GROW(0) } }), CLAY_BORDER({ .betweenChildren = { .width = 2, .color = COLOR_RED } })) { + CLAY({ .id = CLAY_ID("FeatureBlocksInner"), .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { CLAY_SIZING_GROW(0) } }, .border = { .width = { .betweenChildren = 2 }, .color = COLOR_RED } }) { Clay_TextElementConfig *textConfig = CLAY_TEXT_CONFIG({ .fontSize = 24, .fontId = FONT_ID_BODY_24, .textColor = COLOR_RED }); - CLAY(CLAY_ID("HFileBoxOuter"), CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { CLAY_SIZING_GROW(0) }, .childAlignment = {0, CLAY_ALIGN_Y_CENTER}, .padding = {16, 16, 32, 32}, .childGap = 8 })) { - CLAY(CLAY_ID("HFileIncludeOuter"), CLAY_LAYOUT({ .padding = {8, 4} }), CLAY_RECTANGLE({ .color = COLOR_RED, .cornerRadius = CLAY_CORNER_RADIUS(8) })) { + CLAY({ .id = CLAY_ID("HFileBoxOuter"), .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { CLAY_SIZING_GROW(0) }, .childAlignment = {0, CLAY_ALIGN_Y_CENTER}, .padding = {16, 16, 32, 32}, .childGap = 8 } }) { + CLAY({ .id = CLAY_ID("HFileIncludeOuter"), .layout = { .padding = {8, 4} }, .backgroundColor = COLOR_RED, .cornerRadius = CLAY_CORNER_RADIUS(8) }) { CLAY_TEXT(CLAY_STRING("#include clay.h"), CLAY_TEXT_CONFIG({ .fontSize = 24, .fontId = FONT_ID_BODY_24, .textColor = COLOR_LIGHT })); } CLAY_TEXT(CLAY_STRING("~2000 lines of C99."), textConfig); CLAY_TEXT(CLAY_STRING("Zero dependencies, including no C standard library."), textConfig); } - CLAY(CLAY_ID("BringYourOwnRendererOuter"), CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { CLAY_SIZING_GROW(0) }, .childAlignment = {0, CLAY_ALIGN_Y_CENTER}, .padding = {16, 16, 32, 32}, .childGap = 8 })) { + CLAY({ .id = CLAY_ID("BringYourOwnRendererOuter"), .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { CLAY_SIZING_GROW(0) }, .childAlignment = {0, CLAY_ALIGN_Y_CENTER}, .padding = {16, 16, 32, 32}, .childGap = 8 } }) { CLAY_TEXT(CLAY_STRING("Renderer agnostic."), CLAY_TEXT_CONFIG({ .fontId = FONT_ID_BODY_24, .fontSize = 24, .textColor = COLOR_ORANGE })); CLAY_TEXT(CLAY_STRING("Layout with clay, then render with Raylib, WebGL Canvas or even as HTML."), textConfig); CLAY_TEXT(CLAY_STRING("Flexible output for easy compositing in your custom engine or environment."), textConfig); @@ -122,33 +138,33 @@ void FeatureBlocksMobile() { } void DeclarativeSyntaxPageDesktop() { - CLAY(CLAY_ID("SyntaxPageDesktop"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIT(.min = windowHeight - 50) }, .childAlignment = {0, CLAY_ALIGN_Y_CENTER}, .padding = { 50, 50 } })) { - CLAY(CLAY_ID("SyntaxPage"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) }, .childAlignment = { 0, CLAY_ALIGN_Y_CENTER }, .padding = CLAY_PADDING_ALL(32), .childGap = 32 }), CLAY_BORDER({ .left = { 2, COLOR_RED }, .right = { 2, COLOR_RED } })) { - CLAY(CLAY_ID("SyntaxPageLeftText"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_PERCENT(0.5) }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 8 })) { + CLAY({ .id = CLAY_ID("SyntaxPageDesktop"), .layout = { .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIT(.min = windowHeight - 50) }, .childAlignment = {0, CLAY_ALIGN_Y_CENTER}, .padding = { 50, 50 } } }) { + CLAY({ .id = CLAY_ID("SyntaxPage"), .layout = { .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) }, .childAlignment = { 0, CLAY_ALIGN_Y_CENTER }, .padding = CLAY_PADDING_ALL(32), .childGap = 32 }, .border = { .width = { .left = 2, .right = 2 }, .color = COLOR_RED }}) { + CLAY({ .id = CLAY_ID("SyntaxPageLeftText"), .layout = { .sizing = { CLAY_SIZING_PERCENT(0.5) }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 8 } }) { CLAY_TEXT(CLAY_STRING("Declarative Syntax"), CLAY_TEXT_CONFIG({ .fontSize = 52, .fontId = FONT_ID_TITLE_56, .textColor = COLOR_RED })); - CLAY(CLAY_ID("SyntaxSpacer"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(.max = 16) } })) {} + CLAY({ .id = CLAY_ID("SyntaxSpacer"), .layout = { .sizing = { CLAY_SIZING_GROW(.max = 16) } } }) {} CLAY_TEXT(CLAY_STRING("Flexible and readable declarative syntax with nested UI element hierarchies."), CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_RED })); CLAY_TEXT(CLAY_STRING("Mix elements with standard C code like loops, conditionals and functions."), CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_RED })); CLAY_TEXT(CLAY_STRING("Create your own library of re-usable components from UI primitives like text, images and rectangles."), CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_RED })); } - CLAY(CLAY_ID("SyntaxPageRightImage"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_PERCENT(0.50) }, .childAlignment = {.x = CLAY_ALIGN_X_CENTER} })) { - CLAY(CLAY_ID("SyntaxPageRightImageInner"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(.max = 568) } }), CLAY_IMAGE({ .sourceDimensions = {1136, 1194}, .sourceURL = CLAY_STRING("/clay/images/declarative.png") })) {} + CLAY({ .id = CLAY_ID("SyntaxPageRightImage"), .layout = { .sizing = { CLAY_SIZING_PERCENT(0.50) }, .childAlignment = {.x = CLAY_ALIGN_X_CENTER} } }) { + CLAY({ .id = CLAY_ID("SyntaxPageRightImageInner"), .layout = { .sizing = { CLAY_SIZING_GROW(.max = 568) } }, .image = { .sourceDimensions = {1136, 1194}, .imageData = "/clay/images/declarative.png" } }) {} } } } } void DeclarativeSyntaxPageMobile() { - CLAY(CLAY_ID("SyntaxPageDesktop"), CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIT(.min = windowHeight - 50) }, .childAlignment = {CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER}, .padding = {16, 16, 32, 32}, .childGap = 16 })) { - CLAY(CLAY_ID("SyntaxPageLeftText"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0) }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 8 })) { + CLAY({ .id = CLAY_ID("SyntaxPageDesktop"), .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIT(.min = windowHeight - 50) }, .childAlignment = {CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER}, .padding = {16, 16, 32, 32}, .childGap = 16 } }) { + CLAY({ .id = CLAY_ID("SyntaxPageLeftText"), .layout = { .sizing = { CLAY_SIZING_GROW(0) }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 8 } }) { CLAY_TEXT(CLAY_STRING("Declarative Syntax"), CLAY_TEXT_CONFIG({ .fontSize = 48, .fontId = FONT_ID_TITLE_56, .textColor = COLOR_RED })); - CLAY(CLAY_ID("SyntaxSpacer"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(.max = 16) } })) {} + CLAY({ .id = CLAY_ID("SyntaxSpacer"), .layout = { .sizing = { CLAY_SIZING_GROW(.max = 16) } } }) {} CLAY_TEXT(CLAY_STRING("Flexible and readable declarative syntax with nested UI element hierarchies."), CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_RED })); CLAY_TEXT(CLAY_STRING("Mix elements with standard C code like loops, conditionals and functions."), CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_RED })); CLAY_TEXT(CLAY_STRING("Create your own library of re-usable components from UI primitives like text, images and rectangles."), CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_RED })); } - CLAY(CLAY_ID("SyntaxPageRightImage"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0) }, .childAlignment = {.x = CLAY_ALIGN_X_CENTER} })) { - CLAY(CLAY_ID("SyntaxPageRightImageInner"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(.max = 568) } }), CLAY_IMAGE({ .sourceDimensions = {1136, 1194}, .sourceURL = CLAY_STRING("/clay/images/declarative.png") } )) {} + CLAY({ .id = CLAY_ID("SyntaxPageRightImage"), .layout = { .sizing = { CLAY_SIZING_GROW(0) }, .childAlignment = {.x = CLAY_ALIGN_X_CENTER} } }) { + CLAY({ .id = CLAY_ID("SyntaxPageRightImageInner"), .layout = { .sizing = { CLAY_SIZING_GROW(.max = 568) } }, .image = { .sourceDimensions = {1136, 1194}, .imageData = "/clay/images/declarative.png" } }) {} } } } @@ -165,20 +181,20 @@ Clay_Color ColorLerp(Clay_Color a, Clay_Color b, float amount) { Clay_String LOREM_IPSUM_TEXT = CLAY_STRING("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."); void HighPerformancePageDesktop(float lerpValue) { - CLAY(CLAY_ID("PerformanceOuter"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIT(.min = windowHeight - 50) }, .childAlignment = {0, CLAY_ALIGN_Y_CENTER}, .padding = {82, 82, 32, 32}, .childGap = 64 }), CLAY_RECTANGLE({ .color = COLOR_RED })) { - CLAY(CLAY_ID("PerformanceLeftText"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_PERCENT(0.5) }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 8 })) { + CLAY({ .id = CLAY_ID("PerformanceOuter"), .layout = { .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIT(.min = windowHeight - 50) }, .childAlignment = {0, CLAY_ALIGN_Y_CENTER}, .padding = {82, 82, 32, 32}, .childGap = 64 }, .backgroundColor = COLOR_RED }) { + CLAY({ .id = CLAY_ID("PerformanceLeftText"), .layout = { .sizing = { CLAY_SIZING_PERCENT(0.5) }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 8 } }) { CLAY_TEXT(CLAY_STRING("High Performance"), CLAY_TEXT_CONFIG({ .fontSize = 52, .fontId = FONT_ID_TITLE_56, .textColor = COLOR_LIGHT })); - CLAY(CLAY_ID("PerformanceSpacer"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(.max = 16) }})) {} + CLAY({ .id = CLAY_ID("PerformanceSpacer"), .layout = { .sizing = { CLAY_SIZING_GROW(.max = 16) }} }) {} CLAY_TEXT(CLAY_STRING("Fast enough to recompute your entire UI every frame."), CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_LIGHT })); CLAY_TEXT(CLAY_STRING("Small memory footprint (3.5mb default) with static allocation & reuse. No malloc / free."), CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_LIGHT })); CLAY_TEXT(CLAY_STRING("Simplify animations and reactive UI design by avoiding the standard performance hacks."), CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_LIGHT })); } - CLAY(CLAY_ID("PerformanceRightImageOuter"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_PERCENT(0.50) }, .childAlignment = {CLAY_ALIGN_X_CENTER} })) { - CLAY(CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(400) } }), CLAY_BORDER_ALL({ .width = 2, .color = COLOR_LIGHT })) { - CLAY(CLAY_ID("AnimationDemoContainerLeft"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_PERCENT(0.3f + 0.4f * lerpValue), CLAY_SIZING_GROW(0) }, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER}, .padding = CLAY_PADDING_ALL(32) }), CLAY_RECTANGLE({ .color = ColorLerp(COLOR_RED, COLOR_ORANGE, lerpValue) })) { + CLAY({ .id = CLAY_ID("PerformanceRightImageOuter"), .layout = { .sizing = { CLAY_SIZING_PERCENT(0.50) }, .childAlignment = {CLAY_ALIGN_X_CENTER} } }) { + CLAY({ .layout = { .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(400) } }, .border = { .width = {2, 2, 2, 2}, .color = COLOR_LIGHT } }) { + CLAY({ .id = CLAY_ID("AnimationDemoContainerLeft"), .layout = { .sizing = { CLAY_SIZING_PERCENT(0.3f + 0.4f * lerpValue), CLAY_SIZING_GROW(0) }, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER}, .padding = CLAY_PADDING_ALL(32) }, .backgroundColor = ColorLerp(COLOR_RED, COLOR_ORANGE, lerpValue) }) { CLAY_TEXT(LOREM_IPSUM_TEXT, CLAY_TEXT_CONFIG({ .fontSize = 24, .fontId = FONT_ID_TITLE_56, .textColor = COLOR_LIGHT })); } - CLAY(CLAY_ID("AnimationDemoContainerRight"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) }, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER}, .padding = CLAY_PADDING_ALL(32) }), CLAY_RECTANGLE({ .color = ColorLerp(COLOR_ORANGE, COLOR_RED, lerpValue) })) { + CLAY({ .id = CLAY_ID("AnimationDemoContainerRight"), .layout = { .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) }, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER}, .padding = CLAY_PADDING_ALL(32) }, .backgroundColor = ColorLerp(COLOR_ORANGE, COLOR_RED, lerpValue) }) { CLAY_TEXT(LOREM_IPSUM_TEXT, CLAY_TEXT_CONFIG({ .fontSize = 24, .fontId = FONT_ID_TITLE_56, .textColor = COLOR_LIGHT })); } } @@ -187,20 +203,20 @@ void HighPerformancePageDesktop(float lerpValue) { } void HighPerformancePageMobile(float lerpValue) { - CLAY(CLAY_ID("PerformanceOuter"), CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIT(.min = windowHeight - 50) }, .childAlignment = {CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER}, .padding = {16, 16, 32, 32}, .childGap = 32 }), CLAY_RECTANGLE({ .color = COLOR_RED })) { - CLAY(CLAY_ID("PerformanceLeftText"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0) }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 8 })) { + CLAY({ .id = CLAY_ID("PerformanceOuter"), .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIT(.min = windowHeight - 50) }, .childAlignment = {CLAY_ALIGN_X_CENTER, CLAY_ALIGN_Y_CENTER}, .padding = {16, 16, 32, 32}, .childGap = 32 }, .backgroundColor = COLOR_RED }) { + CLAY({ .id = CLAY_ID("PerformanceLeftText"), .layout = { .sizing = { CLAY_SIZING_GROW(0) }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 8 } }) { CLAY_TEXT(CLAY_STRING("High Performance"), CLAY_TEXT_CONFIG({ .fontSize = 48, .fontId = FONT_ID_TITLE_56, .textColor = COLOR_LIGHT })); - CLAY(CLAY_ID("PerformanceSpacer"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(.max = 16) }})) {} + CLAY({ .id = CLAY_ID("PerformanceSpacer"), .layout = { .sizing = { CLAY_SIZING_GROW(.max = 16) }} }) {} CLAY_TEXT(CLAY_STRING("Fast enough to recompute your entire UI every frame."), CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_LIGHT })); CLAY_TEXT(CLAY_STRING("Small memory footprint (3.5mb default) with static allocation & reuse. No malloc / free."), CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_LIGHT })); CLAY_TEXT(CLAY_STRING("Simplify animations and reactive UI design by avoiding the standard performance hacks."), CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_LIGHT })); } - CLAY(CLAY_ID("PerformanceRightImageOuter"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0) }, .childAlignment = {CLAY_ALIGN_X_CENTER} })) { - CLAY(CLAY_ID(""), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(400) } }), CLAY_BORDER_ALL({ .width = 2, .color = COLOR_LIGHT })) { - CLAY(CLAY_ID("AnimationDemoContainerLeft"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_PERCENT(0.35f + 0.3f * lerpValue), CLAY_SIZING_GROW(0) }, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER}, .padding = CLAY_PADDING_ALL(16) }), CLAY_RECTANGLE({ .color = ColorLerp(COLOR_RED, COLOR_ORANGE, lerpValue) })) { + CLAY({ .id = CLAY_ID("PerformanceRightImageOuter"), .layout = { .sizing = { CLAY_SIZING_GROW(0) }, .childAlignment = {CLAY_ALIGN_X_CENTER} } }) { + CLAY({ .id = CLAY_ID(""), .layout = { .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(400) } }, .border = { .width = { 2, 2, 2, 2 }, .color = COLOR_LIGHT }}) { + CLAY({ .id = CLAY_ID("AnimationDemoContainerLeft"), .layout = { .sizing = { CLAY_SIZING_PERCENT(0.35f + 0.3f * lerpValue), CLAY_SIZING_GROW(0) }, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER}, .padding = CLAY_PADDING_ALL(16) }, .backgroundColor = ColorLerp(COLOR_RED, COLOR_ORANGE, lerpValue) }) { CLAY_TEXT(LOREM_IPSUM_TEXT, CLAY_TEXT_CONFIG({ .fontSize = 24, .fontId = FONT_ID_TITLE_56, .textColor = COLOR_LIGHT })); } - CLAY(CLAY_ID("AnimationDemoContainerRight"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) }, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER}, .padding = CLAY_PADDING_ALL(16) }), CLAY_RECTANGLE({ .color = ColorLerp(COLOR_ORANGE, COLOR_RED, lerpValue) })) { + CLAY({ .id = CLAY_ID("AnimationDemoContainerRight"), .layout = { .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) }, .childAlignment = {.y = CLAY_ALIGN_Y_CENTER}, .padding = CLAY_PADDING_ALL(16) }, .backgroundColor = ColorLerp(COLOR_ORANGE, COLOR_RED, lerpValue) }) { CLAY_TEXT(LOREM_IPSUM_TEXT, CLAY_TEXT_CONFIG({ .fontSize = 24, .fontId = FONT_ID_TITLE_56, .textColor = COLOR_LIGHT })); } } @@ -217,36 +233,42 @@ void HandleRendererButtonInteraction(Clay_ElementId elementId, Clay_PointerData } void RendererButtonActive(Clay_String text) { - CLAY(CLAY_LAYOUT({ .sizing = {CLAY_SIZING_FIXED(300) }, .padding = CLAY_PADDING_ALL(16) }), - CLAY_RECTANGLE({ .color = Clay_Hovered() ? COLOR_RED_HOVER : COLOR_RED, .cornerRadius = CLAY_CORNER_RADIUS(10) }) - ) { - CLAY_TEXT(text, CLAY_TEXT_CONFIG({ .disablePointerEvents = true, .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_LIGHT })); + CLAY({ + .layout = { .sizing = {CLAY_SIZING_FIXED(300) }, .padding = CLAY_PADDING_ALL(16) }, + .backgroundColor = Clay_Hovered() ? COLOR_RED_HOVER : COLOR_RED, + .cornerRadius = CLAY_CORNER_RADIUS(10), + .custom = { .customData = FrameAllocateCustomData((CustomHTMLData) { .disablePointerEvents = true, .cursorPointer = true })} + }) { + CLAY_TEXT(text, CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_LIGHT })); } } void RendererButtonInactive(Clay_String text, size_t rendererIndex) { - CLAY(CLAY_LAYOUT({ .sizing = {CLAY_SIZING_FIXED(300)}, .padding = CLAY_PADDING_ALL(16) }), - CLAY_BORDER_OUTSIDE_RADIUS(2, COLOR_RED, 10), - CLAY_RECTANGLE({ .color = Clay_Hovered() ? COLOR_LIGHT_HOVER : COLOR_LIGHT, .cornerRadius = CLAY_CORNER_RADIUS(10), .cursorPointer = true }), - Clay_OnHover(HandleRendererButtonInteraction, rendererIndex) - ) { - CLAY_TEXT(text, CLAY_TEXT_CONFIG({ .disablePointerEvents = true, .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_RED })); + CLAY({ + .layout = { .sizing = {CLAY_SIZING_FIXED(300)}, .padding = CLAY_PADDING_ALL(16) }, + .border = { .width = {2, 2, 2, 2}, .color = COLOR_RED }, + .backgroundColor = Clay_Hovered() ? COLOR_LIGHT_HOVER : COLOR_LIGHT, + .cornerRadius = CLAY_CORNER_RADIUS(10), + .custom = { .customData = FrameAllocateCustomData((CustomHTMLData) { .disablePointerEvents = true, .cursorPointer = true })} + }) { + Clay_OnHover(HandleRendererButtonInteraction, rendererIndex); + CLAY_TEXT(text, CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_RED })); } } void RendererPageDesktop() { - CLAY(CLAY_ID("RendererPageDesktop"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIT(.min = windowHeight - 50) }, .childAlignment = {0, CLAY_ALIGN_Y_CENTER}, .padding = { 50, 50 } })) { - CLAY(CLAY_ID("RendererPage"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) }, .childAlignment = { 0, CLAY_ALIGN_Y_CENTER }, .padding = CLAY_PADDING_ALL(32), .childGap = 32 }), CLAY_BORDER({ .left = { 2, COLOR_RED }, .right = { 2, COLOR_RED } })) { - CLAY(CLAY_ID("RendererLeftText"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_PERCENT(0.5) }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 8 })) { + CLAY({ .id = CLAY_ID("RendererPageDesktop"), .layout = { .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIT(.min = windowHeight - 50) }, .childAlignment = {0, CLAY_ALIGN_Y_CENTER}, .padding = { 50, 50 } } }) { + CLAY({ .id = CLAY_ID("RendererPage"), .layout = { .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) }, .childAlignment = { 0, CLAY_ALIGN_Y_CENTER }, .padding = CLAY_PADDING_ALL(32), .childGap = 32 }, .border = { .width = { .left = 2, .right = 2 }, .color = COLOR_RED } }) { + CLAY({ .id = CLAY_ID("RendererLeftText"), .layout = { .sizing = { CLAY_SIZING_PERCENT(0.5) }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 8 } }) { CLAY_TEXT(CLAY_STRING("Renderer & Platform Agnostic"), CLAY_TEXT_CONFIG({ .fontSize = 52, .fontId = FONT_ID_TITLE_56, .textColor = COLOR_RED })); - CLAY(CLAY_ID("RendererSpacerLeft"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(.max = 16) }})) {} + CLAY({ .id = CLAY_ID("RendererSpacerLeft"), .layout = { .sizing = { CLAY_SIZING_GROW(.max = 16) }} }) {} CLAY_TEXT(CLAY_STRING("Clay outputs a sorted array of primitive render commands, such as RECTANGLE, TEXT or IMAGE."), CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_RED })); CLAY_TEXT(CLAY_STRING("Write your own renderer in a few hundred lines of code, or use the provided examples for Raylib, WebGL canvas and more."), CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_RED })); CLAY_TEXT(CLAY_STRING("There's even an HTML renderer - you're looking at it right now!"), CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_RED })); } - CLAY(CLAY_ID("RendererRightText"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_PERCENT(0.5) }, .childAlignment = {CLAY_ALIGN_X_CENTER}, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 16 })) { + CLAY({ .id = CLAY_ID("RendererRightText"), .layout = { .sizing = { CLAY_SIZING_PERCENT(0.5) }, .childAlignment = {CLAY_ALIGN_X_CENTER}, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 16 } }) { CLAY_TEXT(CLAY_STRING("Try changing renderer!"), CLAY_TEXT_CONFIG({ .fontSize = 36, .fontId = FONT_ID_BODY_36, .textColor = COLOR_ORANGE })); - CLAY(CLAY_ID("RendererSpacerRight"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(.max = 32) } })) {} + CLAY({ .id = CLAY_ID("RendererSpacerRight"), .layout = { .sizing = { CLAY_SIZING_GROW(.max = 32) } } }) {} if (ACTIVE_RENDERER_INDEX == 0) { RendererButtonActive(CLAY_STRING("HTML Renderer")); RendererButtonInactive(CLAY_STRING("Canvas Renderer"), 1); @@ -260,17 +282,17 @@ void RendererPageDesktop() { } void RendererPageMobile() { - CLAY(CLAY_ID("RendererMobile"), CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIT(.min = windowHeight - 50) }, .childAlignment = {.x = CLAY_ALIGN_X_CENTER, .y = CLAY_ALIGN_Y_CENTER}, .padding = { 16, 16, 32, 32}, .childGap = 32 }), CLAY_RECTANGLE({ .color = COLOR_LIGHT })) { - CLAY(CLAY_ID("RendererLeftText"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0) }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 8 })) { + CLAY({ .id = CLAY_ID("RendererMobile"), .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIT(.min = windowHeight - 50) }, .childAlignment = {.x = CLAY_ALIGN_X_CENTER, .y = CLAY_ALIGN_Y_CENTER}, .padding = { 16, 16, 32, 32}, .childGap = 32 }, .backgroundColor = COLOR_LIGHT }) { + CLAY({ .id = CLAY_ID("RendererLeftText"), .layout = { .sizing = { CLAY_SIZING_GROW(0) }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 8 } }) { CLAY_TEXT(CLAY_STRING("Renderer & Platform Agnostic"), CLAY_TEXT_CONFIG({ .fontSize = 48, .fontId = FONT_ID_TITLE_56, .textColor = COLOR_RED })); - CLAY(CLAY_ID("RendererSpacerLeft"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(.max = 16) }})) {} + CLAY({ .id = CLAY_ID("RendererSpacerLeft"), .layout = { .sizing = { CLAY_SIZING_GROW(.max = 16) }} }) {} CLAY_TEXT(CLAY_STRING("Clay outputs a sorted array of primitive render commands, such as RECTANGLE, TEXT or IMAGE."), CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_RED })); CLAY_TEXT(CLAY_STRING("Write your own renderer in a few hundred lines of code, or use the provided examples for Raylib, WebGL canvas and more."), CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_RED })); CLAY_TEXT(CLAY_STRING("There's even an HTML renderer - you're looking at it right now!"), CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_RED })); } - CLAY(CLAY_ID("RendererRightText"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0) }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 16 })) { + CLAY({ .id = CLAY_ID("RendererRightText"), .layout = { .sizing = { CLAY_SIZING_GROW(0) }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 16 } }) { CLAY_TEXT(CLAY_STRING("Try changing renderer!"), CLAY_TEXT_CONFIG({ .fontSize = 36, .fontId = FONT_ID_BODY_36, .textColor = COLOR_ORANGE })); - CLAY(CLAY_ID("RendererSpacerRight"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(.max = 32) }})) {} + CLAY({ .id = CLAY_ID("RendererSpacerRight"), .layout = { .sizing = { CLAY_SIZING_GROW(.max = 32) }} }) {} if (ACTIVE_RENDERER_INDEX == 0) { RendererButtonActive(CLAY_STRING("HTML Renderer")); RendererButtonInactive(CLAY_STRING("Canvas Renderer"), 1); @@ -283,17 +305,17 @@ void RendererPageMobile() { } void DebuggerPageDesktop() { - CLAY(CLAY_ID("DebuggerDesktop"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIT(.min = windowHeight - 50) }, .childAlignment = {0, CLAY_ALIGN_Y_CENTER}, .padding = { 82, 82, 32, 32 }, .childGap = 64 }), CLAY_RECTANGLE({ .color = COLOR_RED })) { - CLAY(CLAY_ID("DebuggerLeftText"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_PERCENT(0.5) }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 8 })) { + CLAY({ .id = CLAY_ID("DebuggerDesktop"), .layout = { .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIT(.min = windowHeight - 50) }, .childAlignment = {0, CLAY_ALIGN_Y_CENTER}, .padding = { 82, 82, 32, 32 }, .childGap = 64 }, .backgroundColor = COLOR_RED }) { + CLAY({ .id = CLAY_ID("DebuggerLeftText"), .layout = { .sizing = { CLAY_SIZING_PERCENT(0.5) }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .childGap = 8 } }) { CLAY_TEXT(CLAY_STRING("Integrated Debug Tools"), CLAY_TEXT_CONFIG({ .fontSize = 52, .fontId = FONT_ID_TITLE_56, .textColor = COLOR_LIGHT })); - CLAY(CLAY_ID("DebuggerSpacer"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(.max = 16) }})) {} + CLAY({ .id = CLAY_ID("DebuggerSpacer"), .layout = { .sizing = { CLAY_SIZING_GROW(.max = 16) }} }) {} CLAY_TEXT(CLAY_STRING("Clay includes built in \"Chrome Inspector\"-style debug tooling."), CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_LIGHT })); CLAY_TEXT(CLAY_STRING("View your layout hierarchy and config in real time."), CLAY_TEXT_CONFIG({ .fontSize = 28, .fontId = FONT_ID_BODY_36, .textColor = COLOR_LIGHT })); - CLAY(CLAY_ID("DebuggerPageSpacer"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(32) } })) {} + CLAY({ .id = CLAY_ID("DebuggerPageSpacer"), .layout = { .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(32) } } }) {} CLAY_TEXT(CLAY_STRING("Press the \"d\" key to try it out now!"), CLAY_TEXT_CONFIG({ .fontSize = 32, .fontId = FONT_ID_TITLE_36, .textColor = COLOR_ORANGE })); } - CLAY(CLAY_ID("DebuggerRightImageOuter"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_PERCENT(0.50) }, .childAlignment = {CLAY_ALIGN_X_CENTER} })) { - CLAY(CLAY_ID("DebuggerPageRightImageInner"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(.max = 558) } }), CLAY_IMAGE({ .sourceDimensions = {1620, 1474}, .sourceURL = CLAY_STRING("/clay/images/debugger.png") })) {} + CLAY({ .id = CLAY_ID("DebuggerRightImageOuter"), .layout = { .sizing = { CLAY_SIZING_PERCENT(0.50) }, .childAlignment = {CLAY_ALIGN_X_CENTER} } }) { + CLAY({ .id = CLAY_ID("DebuggerPageRightImageInner"), .layout = { .sizing = { CLAY_SIZING_GROW(.max = 558) } }, .image = { .sourceDimensions = {1620, 1474}, .imageData = "/clay/images/debugger.png" } }) {} } } } @@ -310,45 +332,48 @@ float animationLerpValue = -1.0f; Clay_RenderCommandArray CreateLayout(bool mobileScreen, float lerpValue) { Clay_BeginLayout(); - CLAY(CLAY_ID("OuterContainer"), CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) } }), CLAY_RECTANGLE({ .color = COLOR_LIGHT })) { - CLAY(CLAY_ID("Header"), CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(50) }, .childAlignment = { 0, CLAY_ALIGN_Y_CENTER }, .childGap = 16, .padding = { 32, 32 } })) { + CLAY({ .id = CLAY_ID("OuterContainer"), .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) } }, .backgroundColor = COLOR_LIGHT }) { + CLAY({ .id = CLAY_ID("Header"), .layout = { .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(50) }, .childAlignment = { 0, CLAY_ALIGN_Y_CENTER }, .childGap = 16, .padding = { 32, 32 } } }) { CLAY_TEXT(CLAY_STRING("Clay"), &headerTextConfig); - CLAY(CLAY_ID("Spacer"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_GROW(0) } })) {} + CLAY({ .id = CLAY_ID("Spacer"), .layout = { .sizing = { .width = CLAY_SIZING_GROW(0) } } }) {} if (!mobileScreen) { - CLAY(CLAY_ID("LinkExamplesOuter"), CLAY_LAYOUT({ .padding = {8, 8} }), CLAY_RECTANGLE({ .link = CLAY_STRING("https://github.com/nicbarker/clay/tree/main/examples"), .color = {0,0,0,0} })) { - CLAY_TEXT(CLAY_STRING("Examples"), CLAY_TEXT_CONFIG({ .disablePointerEvents = true, .fontId = FONT_ID_BODY_24, .fontSize = 24, .textColor = {61, 26, 5, 255} })); + CLAY({ .id = CLAY_ID("LinkExamplesOuter"), .layout = { .padding = {8, 8} }, .custom = { .customData = FrameAllocateCustomData((CustomHTMLData) { .link = CLAY_STRING("https://github.com/nicbarker/clay/tree/main/examples") }) } }) { + CLAY_TEXT(CLAY_STRING("Examples"), CLAY_TEXT_CONFIG({ .fontId = FONT_ID_BODY_24, .fontSize = 24, .textColor = {61, 26, 5, 255} })); } - CLAY(CLAY_ID("LinkDocsOuter"), CLAY_LAYOUT({ .padding = {8, 8} }), CLAY_RECTANGLE({ .link = CLAY_STRING("https://github.com/nicbarker/clay/blob/main/README.md"), .color = {0,0,0,0} })) { - CLAY_TEXT(CLAY_STRING("Docs"), CLAY_TEXT_CONFIG({ .disablePointerEvents = true, .fontId = FONT_ID_BODY_24, .fontSize = 24, .textColor = {61, 26, 5, 255} })); + CLAY({ .id = CLAY_ID("LinkDocsOuter"), .layout = { .padding = {8, 8} }, .custom = { .customData = FrameAllocateCustomData((CustomHTMLData) { .link = CLAY_STRING("https://github.com/nicbarker/clay/blob/main/README.md") }) } }) { + CLAY_TEXT(CLAY_STRING("Docs"), CLAY_TEXT_CONFIG({ .fontId = FONT_ID_BODY_24, .fontSize = 24, .textColor = {61, 26, 5, 255} })); } } - CLAY(CLAY_LAYOUT({ .padding = {16, 16, 6, 6} }), - CLAY_RECTANGLE({ - .cornerRadius = CLAY_CORNER_RADIUS(10), - .link = CLAY_STRING("https://discord.gg/b4FTWkxdvT"), - .color = Clay_Hovered() ? COLOR_LIGHT_HOVER : COLOR_LIGHT }), - CLAY_BORDER_OUTSIDE_RADIUS(2, COLOR_RED, 10) - ) { - CLAY_TEXT(CLAY_STRING("Discord"), CLAY_TEXT_CONFIG({ .disablePointerEvents = true, .fontId = FONT_ID_BODY_24, .fontSize = 24, .textColor = {61, 26, 5, 255} })); + CLAY({ + .layout = { .padding = {16, 16, 6, 6} }, + .backgroundColor = Clay_Hovered() ? COLOR_LIGHT_HOVER : COLOR_LIGHT, + .border = { .width = {2, 2, 2, 2}, .color = COLOR_RED }, + .cornerRadius = CLAY_CORNER_RADIUS(10), + .custom = { .customData = FrameAllocateCustomData((CustomHTMLData) { .link = CLAY_STRING("https://github.com/nicbarker/clay/tree/main/examples") }) }, + }) { + CLAY_TEXT(CLAY_STRING("Discord"), CLAY_TEXT_CONFIG({ .fontId = FONT_ID_BODY_24, .fontSize = 24, .textColor = {61, 26, 5, 255} })); } - CLAY(CLAY_LAYOUT({ .padding = {16, 16, 6, 6} }), - CLAY_RECTANGLE({ .cornerRadius = CLAY_CORNER_RADIUS(10), .link = CLAY_STRING("https://github.com/nicbarker/clay"), .color = Clay_Hovered() ? COLOR_LIGHT_HOVER : COLOR_LIGHT }), - CLAY_BORDER_OUTSIDE_RADIUS(2, COLOR_RED, 10) - ) { - CLAY_TEXT(CLAY_STRING("Github"), CLAY_TEXT_CONFIG({ .disablePointerEvents = true, .fontId = FONT_ID_BODY_24, .fontSize = 24, .textColor = {61, 26, 5, 255} })); + CLAY({ + .layout = { .padding = {16, 16, 6, 6} }, + .backgroundColor = Clay_Hovered() ? COLOR_LIGHT_HOVER : COLOR_LIGHT, + .border = { .width = {2, 2, 2, 2}, .color = COLOR_RED }, + .cornerRadius = CLAY_CORNER_RADIUS(10), + .custom = { .customData = FrameAllocateCustomData((CustomHTMLData) { .link = CLAY_STRING("https://github.com/nicbarker/clay") }) }, + }) { + CLAY_TEXT(CLAY_STRING("Github"), CLAY_TEXT_CONFIG({ .fontId = FONT_ID_BODY_24, .fontSize = 24, .textColor = {61, 26, 5, 255} })); } } Clay_LayoutConfig topBorderConfig = (Clay_LayoutConfig) { .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_FIXED(4) }}; - CLAY(CLAY_ID("TopBorder1"), CLAY_LAYOUT(topBorderConfig), CLAY_RECTANGLE({ .color = COLOR_TOP_BORDER_5 })) {} - CLAY(CLAY_ID("TopBorder2"), CLAY_LAYOUT(topBorderConfig), CLAY_RECTANGLE({ .color = COLOR_TOP_BORDER_4 })) {} - CLAY(CLAY_ID("TopBorder3"), CLAY_LAYOUT(topBorderConfig), CLAY_RECTANGLE({ .color = COLOR_TOP_BORDER_3 })) {} - CLAY(CLAY_ID("TopBorder4"), CLAY_LAYOUT(topBorderConfig), CLAY_RECTANGLE({ .color = COLOR_TOP_BORDER_2 })) {} - CLAY(CLAY_ID("TopBorder5"), CLAY_LAYOUT(topBorderConfig), CLAY_RECTANGLE({ .color = COLOR_TOP_BORDER_1 })) {} - CLAY(CLAY_ID("OuterScrollContainer"), - CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) }, .layoutDirection = CLAY_TOP_TO_BOTTOM }), - CLAY_SCROLL({ .vertical = true }), - CLAY_BORDER({ .betweenChildren = {2, COLOR_RED} }) - ) { + CLAY({ .id = CLAY_ID("TopBorder1"), .layout = topBorderConfig, .backgroundColor = COLOR_TOP_BORDER_5 }) {} + CLAY({ .id = CLAY_ID("TopBorder2"), .layout = topBorderConfig, .backgroundColor = COLOR_TOP_BORDER_4 }) {} + CLAY({ .id = CLAY_ID("TopBorder3"), .layout = topBorderConfig, .backgroundColor = COLOR_TOP_BORDER_3 }) {} + CLAY({ .id = CLAY_ID("TopBorder4"), .layout = topBorderConfig, .backgroundColor = COLOR_TOP_BORDER_2 }) {} + CLAY({ .id = CLAY_ID("TopBorder5"), .layout = topBorderConfig, .backgroundColor = COLOR_TOP_BORDER_1 }) {} + CLAY({ .id = CLAY_ID("OuterScrollContainer"), + .layout = { .sizing = { CLAY_SIZING_GROW(0), CLAY_SIZING_GROW(0) }, .layoutDirection = CLAY_TOP_TO_BOTTOM }, + .scroll = { .vertical = true }, + .border = { .width = { .betweenChildren = 2 }, .color = COLOR_RED } + }) { if (mobileScreen) { LandingPageMobile(); FeatureBlocksMobile(); @@ -375,11 +400,13 @@ Clay_RenderCommandArray CreateLayout(bool mobileScreen, float lerpValue) { scrollbarColor = (Clay_Color){225, 138, 50, 160}; } float scrollHeight = scrollData.scrollContainerDimensions.height - 12; - CLAY(CLAY_ID("ScrollBar"), - CLAY_FLOATING({ .offset = { .x = -6, .y = -(scrollData.scrollPosition->y / scrollData.contentDimensions.height) * scrollHeight + 6}, .zIndex = 1, .parentId = Clay_GetElementId(CLAY_STRING("OuterScrollContainer")).id, .attachment = {.element = CLAY_ATTACH_POINT_RIGHT_TOP, .parent = CLAY_ATTACH_POINT_RIGHT_TOP }}), - CLAY_LAYOUT({ .sizing = {CLAY_SIZING_FIXED(10), CLAY_SIZING_FIXED((scrollHeight / scrollData.contentDimensions.height) * scrollHeight)} }), - CLAY_RECTANGLE({ .cornerRadius = CLAY_CORNER_RADIUS(5), .color = scrollbarColor }) - ) {} + CLAY({ + .id = CLAY_ID("ScrollBar"), + .floating = { .offset = { .x = -6, .y = -(scrollData.scrollPosition->y / scrollData.contentDimensions.height) * scrollHeight + 6}, .zIndex = 1, .parentId = Clay_GetElementId(CLAY_STRING("OuterScrollContainer")).id, .attachPoints = {.element = CLAY_ATTACH_POINT_RIGHT_TOP, .parent = CLAY_ATTACH_POINT_RIGHT_TOP }, .attachTo = CLAY_ATTACH_TO_PARENT }, + .layout = { .sizing = {CLAY_SIZING_FIXED(10), CLAY_SIZING_FIXED((scrollHeight / scrollData.contentDimensions.height) * scrollHeight)} }, + .backgroundColor = scrollbarColor, + .cornerRadius = CLAY_CORNER_RADIUS(5) + }) {} } return Clay_EndLayout(); } diff --git a/examples/cpp-project-example/CMakeLists.txt b/examples/cpp-project-example/CMakeLists.txt index 24422d7..4ddcf39 100644 --- a/examples/cpp-project-example/CMakeLists.txt +++ b/examples/cpp-project-example/CMakeLists.txt @@ -11,6 +11,6 @@ add_executable(clay_examples_cpp_project_example main.cpp) target_include_directories(clay_examples_cpp_project_example PUBLIC .) if(NOT MSVC) - set(CMAKE_CXX_FLAGS_DEBUG "-Werror -Wall") - set(CMAKE_CXX_FLAGS_RELEASE "-O3") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") endif() diff --git a/examples/cpp-project-example/main.cpp b/examples/cpp-project-example/main.cpp index 363e8ef..0075a32 100644 --- a/examples/cpp-project-example/main.cpp +++ b/examples/cpp-project-example/main.cpp @@ -13,7 +13,7 @@ int main(void) { Clay_Arena clayMemory = Clay_CreateArenaWithCapacityAndMemory(totalMemorySize, (char *)malloc(totalMemorySize)); Clay_Initialize(clayMemory, Clay_Dimensions {1024,768}, Clay_ErrorHandler { HandleClayErrors }); Clay_BeginLayout(); - CLAY(CLAY_RECTANGLE({ .color = {255,255,255,0} }), CLAY_LAYOUT(layoutElement)) { + CLAY({ .layout = layoutElement, .backgroundColor = {255,255,255,0} }) { CLAY_TEXT(CLAY_STRING(""), CLAY_TEXT_CONFIG({ .fontId = 0 })); } Clay_EndLayout(); diff --git a/examples/introducing-clay-video-demo/CMakeLists.txt b/examples/introducing-clay-video-demo/CMakeLists.txt index a59d678..48c5983 100644 --- a/examples/introducing-clay-video-demo/CMakeLists.txt +++ b/examples/introducing-clay-video-demo/CMakeLists.txt @@ -28,8 +28,8 @@ target_link_libraries(clay_examples_introducing_clay_video_demo PUBLIC raylib) if(MSVC) set(CMAKE_C_FLAGS_DEBUG "/D CLAY_DEBUG") else() - set(CMAKE_C_FLAGS_DEBUG "-Wall -Werror -Wno-error=missing-braces -DCLAY_DEBUG") - set(CMAKE_C_FLAGS_RELEASE "-O3") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") endif() add_custom_command( diff --git a/examples/introducing-clay-video-demo/main.c b/examples/introducing-clay-video-demo/main.c index 7f3ae24..5456ebc 100644 --- a/examples/introducing-clay-video-demo/main.c +++ b/examples/introducing-clay-video-demo/main.c @@ -1,81 +1,14 @@ #define CLAY_IMPLEMENTATION #include "../../clay.h" #include "../../renderers/raylib/clay_renderer_raylib.c" - -const int FONT_ID_BODY_16 = 0; -Clay_Color COLOR_WHITE = { 255, 255, 255, 255}; - -void RenderHeaderButton(Clay_String text) { - CLAY( - CLAY_LAYOUT({ .padding = { 16, 16, 8, 8 }}), - CLAY_RECTANGLE({ - .color = { 140, 140, 140, 255 }, - .cornerRadius = 5 - }) - ) { - CLAY_TEXT(text, CLAY_TEXT_CONFIG({ - .fontId = FONT_ID_BODY_16, - .fontSize = 16, - .textColor = { 255, 255, 255, 255 } - })); - } -} - -void RenderDropdownMenuItem(Clay_String text) { - CLAY(CLAY_LAYOUT({ .padding = CLAY_PADDING_ALL(16)})) { - CLAY_TEXT(text, CLAY_TEXT_CONFIG({ - .fontId = FONT_ID_BODY_16, - .fontSize = 16, - .textColor = { 255, 255, 255, 255 } - })); - } -} - -typedef struct { - Clay_String title; - Clay_String contents; -} Document; - -typedef struct { - Document *documents; - uint32_t length; -} DocumentArray; - -DocumentArray documents = { - .documents = NULL, // TODO figure out if it's possible to const init this list - .length = 5 -}; - -uint32_t selectedDocumentIndex = 0; - -void HandleSidebarInteraction( - Clay_ElementId elementId, - Clay_PointerData pointerData, - intptr_t userData -) { - // If this button was clicked - if (pointerData.state == CLAY_POINTER_DATA_PRESSED_THIS_FRAME) { - if (userData >= 0 && userData < documents.length) { - // Select the corresponding document - selectedDocumentIndex = userData; - } - } -} +#include "../shared-layouts/clay-video-demo.c" // This function is new since the video was published void HandleClayErrors(Clay_ErrorData errorData) { printf("%s", errorData.errorText.chars); } - int main(void) { - documents.documents = (Document[]) { - { .title = CLAY_STRING("Squirrels"), .contents = CLAY_STRING("The Secret Life of Squirrels: Nature's Clever Acrobats\n""Squirrels are often overlooked creatures, dismissed as mere park inhabitants or backyard nuisances. Yet, beneath their fluffy tails and twitching noses lies an intricate world of cunning, agility, and survival tactics that are nothing short of fascinating. As one of the most common mammals in North America, squirrels have adapted to a wide range of environments from bustling urban centers to tranquil forests and have developed a variety of unique behaviors that continue to intrigue scientists and nature enthusiasts alike.\n""\n""Master Tree Climbers\n""At the heart of a squirrel's skill set is its impressive ability to navigate trees with ease. Whether they're darting from branch to branch or leaping across wide gaps, squirrels possess an innate talent for acrobatics. Their powerful hind legs, which are longer than their front legs, give them remarkable jumping power. With a tail that acts as a counterbalance, squirrels can leap distances of up to ten times the length of their body, making them some of the best aerial acrobats in the animal kingdom.\n""But it's not just their agility that makes them exceptional climbers. Squirrels' sharp, curved claws allow them to grip tree bark with precision, while the soft pads on their feet provide traction on slippery surfaces. Their ability to run at high speeds and scale vertical trunks with ease is a testament to the evolutionary adaptations that have made them so successful in their arboreal habitats.\n""\n""Food Hoarders Extraordinaire\n""Squirrels are often seen frantically gathering nuts, seeds, and even fungi in preparation for winter. While this behavior may seem like instinctual hoarding, it is actually a survival strategy that has been honed over millions of years. Known as \"scatter hoarding,\" squirrels store their food in a variety of hidden locations, often burying it deep in the soil or stashing it in hollowed-out tree trunks.\n""Interestingly, squirrels have an incredible memory for the locations of their caches. Research has shown that they can remember thousands of hiding spots, often returning to them months later when food is scarce. However, they don't always recover every stash some forgotten caches eventually sprout into new trees, contributing to forest regeneration. This unintentional role as forest gardeners highlights the ecological importance of squirrels in their ecosystems.\n""\n""The Great Squirrel Debate: Urban vs. Wild\n""While squirrels are most commonly associated with rural or wooded areas, their adaptability has allowed them to thrive in urban environments as well. In cities, squirrels have become adept at finding food sources in places like parks, streets, and even garbage cans. However, their urban counterparts face unique challenges, including traffic, predators, and the lack of natural shelters. Despite these obstacles, squirrels in urban areas are often observed using human infrastructure such as buildings, bridges, and power lines as highways for their acrobatic escapades.\n""There is, however, a growing concern regarding the impact of urban life on squirrel populations. Pollution, deforestation, and the loss of natural habitats are making it more difficult for squirrels to find adequate food and shelter. As a result, conservationists are focusing on creating squirrel-friendly spaces within cities, with the goal of ensuring these resourceful creatures continue to thrive in both rural and urban landscapes.\n""\n""A Symbol of Resilience\n""In many cultures, squirrels are symbols of resourcefulness, adaptability, and preparation. Their ability to thrive in a variety of environments while navigating challenges with agility and grace serves as a reminder of the resilience inherent in nature. Whether you encounter them in a quiet forest, a city park, or your own backyard, squirrels are creatures that never fail to amaze with their endless energy and ingenuity.\n""In the end, squirrels may be small, but they are mighty in their ability to survive and thrive in a world that is constantly changing. So next time you spot one hopping across a branch or darting across your lawn, take a moment to appreciate the remarkable acrobat at work a true marvel of the natural world.\n") }, - { .title = CLAY_STRING("Lorem Ipsum"), .contents = CLAY_STRING("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.") }, - { .title = CLAY_STRING("Vacuum Instructions"), .contents = CLAY_STRING("Chapter 3: Getting Started - Unpacking and Setup\n""\n""Congratulations on your new SuperClean Pro 5000 vacuum cleaner! In this section, we will guide you through the simple steps to get your vacuum up and running. Before you begin, please ensure that you have all the components listed in the \"Package Contents\" section on page 2.\n""\n""1. Unboxing Your Vacuum\n""Carefully remove the vacuum cleaner from the box. Avoid using sharp objects that could damage the product. Once removed, place the unit on a flat, stable surface to proceed with the setup. Inside the box, you should find:\n""\n"" The main vacuum unit\n"" A telescoping extension wand\n"" A set of specialized cleaning tools (crevice tool, upholstery brush, etc.)\n"" A reusable dust bag (if applicable)\n"" A power cord with a 3-prong plug\n"" A set of quick-start instructions\n""\n""2. Assembling Your Vacuum\n""Begin by attaching the extension wand to the main body of the vacuum cleaner. Line up the connectors and twist the wand into place until you hear a click. Next, select the desired cleaning tool and firmly attach it to the wand's end, ensuring it is securely locked in.\n""\n""For models that require a dust bag, slide the bag into the compartment at the back of the vacuum, making sure it is properly aligned with the internal mechanism. If your vacuum uses a bagless system, ensure the dust container is correctly seated and locked in place before use.\n""\n""3. Powering On\n""To start the vacuum, plug the power cord into a grounded electrical outlet. Once plugged in, locate the power switch, usually positioned on the side of the handle or body of the unit, depending on your model. Press the switch to the \"On\" position, and you should hear the motor begin to hum. If the vacuum does not power on, check that the power cord is securely plugged in, and ensure there are no blockages in the power switch.\n""\n""Note: Before first use, ensure that the vacuum filter (if your model has one) is properly installed. If unsure, refer to \"Section 5: Maintenance\" for filter installation instructions.") }, - { .title = CLAY_STRING("Article 4"), .contents = CLAY_STRING("Article 4") }, - { .title = CLAY_STRING("Article 5"), .contents = CLAY_STRING("Article 5") }, - }; Clay_Raylib_Initialize(1024, 768, "Introducing Clay Demo", FLAG_WINDOW_RESIZABLE | FLAG_WINDOW_HIGHDPI | FLAG_MSAA_4X_HINT | FLAG_VSYNC_HINT); // Extra parameters to this function are new since the video was published uint64_t clayRequiredMemory = Clay_MinMemorySize(); @@ -84,18 +17,18 @@ int main(void) { .width = GetScreenWidth(), .height = GetScreenHeight() }, (Clay_ErrorHandler) { HandleClayErrors }); // This final argument is new since the video was published - Clay_SetMeasureTextFunction(Raylib_MeasureText, 0); - Raylib_fonts[FONT_ID_BODY_16] = (Raylib_Font) { - .font = LoadFontEx("resources/Roboto-Regular.ttf", 48, 0, 400), - .fontId = FONT_ID_BODY_16 - }; - SetTextureFilter(Raylib_fonts[FONT_ID_BODY_16].font.texture, TEXTURE_FILTER_BILINEAR); + Font fonts[1]; + fonts[FONT_ID_BODY_16] = LoadFontEx("resources/Roboto-Regular.ttf", 48, 0, 400); + SetTextureFilter(fonts[FONT_ID_BODY_16].texture, TEXTURE_FILTER_BILINEAR); + Clay_SetMeasureTextFunction(Raylib_MeasureText, fonts); + + ClayVideoDemo_Data data = ClayVideoDemo_Initialize(); while (!WindowShouldClose()) { // Run once per frame Clay_SetLayoutDimensions((Clay_Dimensions) { - .width = GetScreenWidth(), - .height = GetScreenHeight() + .width = GetScreenWidth(), + .height = GetScreenHeight() }); Vector2 mousePosition = GetMousePosition(); @@ -110,193 +43,11 @@ int main(void) { GetFrameTime() ); - Clay_Sizing layoutExpand = { - .width = CLAY_SIZING_GROW(0), - .height = CLAY_SIZING_GROW(0) - }; - - Clay_RectangleElementConfig contentBackgroundConfig = { - .color = { 90, 90, 90, 255 }, - .cornerRadius = CLAY_CORNER_RADIUS(8) - }; - - Clay_BeginLayout(); - // Build UI here - CLAY( - CLAY_ID("OuterContainer"), - CLAY_RECTANGLE({ .color = { 43, 41, 51, 255 } }), - CLAY_LAYOUT({ - .layoutDirection = CLAY_TOP_TO_BOTTOM, - .sizing = layoutExpand, - .padding = CLAY_PADDING_ALL(16), - .childGap = 16 - }) - ) { - // Child elements go inside braces - CLAY( - CLAY_ID("HeaderBar"), - CLAY_RECTANGLE(contentBackgroundConfig), - CLAY_LAYOUT({ - .sizing = { - .height = CLAY_SIZING_FIXED(60), - .width = CLAY_SIZING_GROW(0) - }, - .padding = { 16, 16, 0, 0 }, - .childGap = 16, - .childAlignment = { - .y = CLAY_ALIGN_Y_CENTER - } - }) - ) { - // Header buttons go here - CLAY( - CLAY_ID("FileButton"), - CLAY_LAYOUT({ .padding = { 16, 16, 8, 8 }}), - CLAY_RECTANGLE({ - .color = { 140, 140, 140, 255 }, - .cornerRadius = CLAY_CORNER_RADIUS(5) - }) - ) { - CLAY_TEXT(CLAY_STRING("File"), CLAY_TEXT_CONFIG({ - .fontId = FONT_ID_BODY_16, - .fontSize = 16, - .textColor = { 255, 255, 255, 255 } - })); - - bool fileMenuVisible = - Clay_PointerOver(Clay_GetElementId(CLAY_STRING("FileButton"))) - || - Clay_PointerOver(Clay_GetElementId(CLAY_STRING("FileMenu"))); - - if (fileMenuVisible) { // Below has been changed slightly to fix the small bug where the menu would dismiss when mousing over the top gap - CLAY( - CLAY_ID("FileMenu"), - CLAY_FLOATING({ - .attachment = { - .parent = CLAY_ATTACH_POINT_LEFT_BOTTOM - }, - }), - CLAY_LAYOUT({ - .padding = {0, 0, 8, 8 } - }) - ) { - CLAY( - CLAY_LAYOUT({ - .layoutDirection = CLAY_TOP_TO_BOTTOM, - .sizing = { - .width = CLAY_SIZING_FIXED(200) - }, - }), - CLAY_RECTANGLE({ - .color = { 40, 40, 40, 255 }, - .cornerRadius = CLAY_CORNER_RADIUS(8) - }) - ) { - // Render dropdown items here - RenderDropdownMenuItem(CLAY_STRING("New")); - RenderDropdownMenuItem(CLAY_STRING("Open")); - RenderDropdownMenuItem(CLAY_STRING("Close")); - } - } - } - } - RenderHeaderButton(CLAY_STRING("Edit")); - CLAY(CLAY_LAYOUT({ .sizing = { CLAY_SIZING_GROW(0) }})) {} - RenderHeaderButton(CLAY_STRING("Upload")); - RenderHeaderButton(CLAY_STRING("Media")); - RenderHeaderButton(CLAY_STRING("Support")); - } - - CLAY( - CLAY_ID("LowerContent"), - CLAY_LAYOUT({ .sizing = layoutExpand, .childGap = 16 }) - ) { - CLAY( - CLAY_ID("Sidebar"), - CLAY_RECTANGLE(contentBackgroundConfig), - CLAY_LAYOUT({ - .layoutDirection = CLAY_TOP_TO_BOTTOM, - .padding = CLAY_PADDING_ALL(16), - .childGap = 8, - .sizing = { - .width = CLAY_SIZING_FIXED(250), - .height = CLAY_SIZING_GROW(0) - } - }) - ) { - for (int i = 0; i < documents.length; i++) { - Document document = documents.documents[i]; - Clay_LayoutConfig sidebarButtonLayout = { - .sizing = { .width = CLAY_SIZING_GROW(0) }, - .padding = CLAY_PADDING_ALL(16) - }; - - if (i == selectedDocumentIndex) { - CLAY( - CLAY_LAYOUT(sidebarButtonLayout), - CLAY_RECTANGLE({ - .color = { 120, 120, 120, 255 }, - .cornerRadius = CLAY_CORNER_RADIUS(8), - }) - ) { - CLAY_TEXT(document.title, CLAY_TEXT_CONFIG({ - .fontId = FONT_ID_BODY_16, - .fontSize = 20, - .textColor = { 255, 255, 255, 255 } - })); - } - } else { - CLAY( - CLAY_LAYOUT(sidebarButtonLayout), - Clay_OnHover(HandleSidebarInteraction, i), - Clay_Hovered() - ? CLAY_RECTANGLE({ - .color = { 120, 120, 120, 120 }, - .cornerRadius = CLAY_CORNER_RADIUS(8) - }) - : 0 - ) { - CLAY_TEXT(document.title, CLAY_TEXT_CONFIG({ - .fontId = FONT_ID_BODY_16, - .fontSize = 20, - .textColor = { 255, 255, 255, 255 } - })); - } - } - } - } - - CLAY( - CLAY_ID("MainContent"), - CLAY_RECTANGLE(contentBackgroundConfig), - CLAY_SCROLL({ .vertical = true }), - CLAY_LAYOUT({ - .layoutDirection = CLAY_TOP_TO_BOTTOM, - .childGap = 16, - .padding = CLAY_PADDING_ALL(16), - .sizing = layoutExpand - }) - ) { - Document selectedDocument = documents.documents[selectedDocumentIndex]; - CLAY_TEXT(selectedDocument.title, CLAY_TEXT_CONFIG({ - .fontId = FONT_ID_BODY_16, - .fontSize = 24, - .textColor = COLOR_WHITE - })); - CLAY_TEXT(selectedDocument.contents, CLAY_TEXT_CONFIG({ - .fontId = FONT_ID_BODY_16, - .fontSize = 24, - .textColor = COLOR_WHITE - })); - } - } - } - - Clay_RenderCommandArray renderCommands = Clay_EndLayout(); + Clay_RenderCommandArray renderCommands = ClayVideoDemo_CreateLayout(&data); BeginDrawing(); ClearBackground(BLACK); - Clay_Raylib_Render(renderCommands); + Clay_Raylib_Render(renderCommands, fonts); EndDrawing(); } } diff --git a/examples/raylib-multi-context/CMakeLists.txt b/examples/raylib-multi-context/CMakeLists.txt index 9179ec1..24853b5 100644 --- a/examples/raylib-multi-context/CMakeLists.txt +++ b/examples/raylib-multi-context/CMakeLists.txt @@ -26,7 +26,7 @@ target_include_directories(clay_examples_raylib_multi_context PUBLIC .) target_link_libraries(clay_examples_raylib_multi_context PUBLIC raylib) set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") -set(CMAKE_C_FLAGS_RELEASE "-O3") +set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") add_custom_command( TARGET clay_examples_raylib_multi_context POST_BUILD diff --git a/examples/raylib-multi-context/main.c b/examples/raylib-multi-context/main.c index 1d3925a..b2163ba 100644 --- a/examples/raylib-multi-context/main.c +++ b/examples/raylib-multi-context/main.c @@ -1,87 +1,13 @@ #define CLAY_IMPLEMENTATION #include "../../clay.h" #include "../../renderers/raylib/clay_renderer_raylib.c" +#include "../shared-layouts/clay-video-demo.c" -const int FONT_ID_BODY_16 = 0; -Clay_Color COLOR_WHITE = { 255, 255, 255, 255}; - -void RenderHeaderButton(Clay_String text) { - CLAY( - CLAY_LAYOUT({ .padding = { 16, 16, 8, 8 }}), - CLAY_RECTANGLE({ - .color = { 140, 140, 140, 255 }, - .cornerRadius = CLAY_CORNER_RADIUS(5) - }) - ) { - CLAY_TEXT(text, CLAY_TEXT_CONFIG({ - .fontId = FONT_ID_BODY_16, - .fontSize = 16, - .textColor = { 255, 255, 255, 255 } - })); - } -} - -void RenderDropdownMenuItem(Clay_String text) { - CLAY(CLAY_LAYOUT({ .padding = CLAY_PADDING_ALL(16)})) { - CLAY_TEXT(text, CLAY_TEXT_CONFIG({ - .fontId = FONT_ID_BODY_16, - .fontSize = 16, - .textColor = { 255, 255, 255, 255 } - })); - } -} - -typedef struct { - Clay_String title; - Clay_String contents; -} Document; - -typedef struct { - Document *documents; - int32_t length; -} DocumentArray; - -DocumentArray documents = { - .documents = NULL, // TODO figure out if it's possible to const init this list - .length = 5 -}; - -int32_t selectedDocumentIndexTop = 0; -int32_t selectedDocumentIndexBottom = 0; - -typedef struct { - int32_t requestedDocumentIndex; - int32_t* selectedDocumentIndex; -} SidebarClickData; - -void HandleSidebarInteraction( - Clay_ElementId elementId, - Clay_PointerData pointerData, - intptr_t userData -) { - SidebarClickData *clickData = (SidebarClickData*)userData; - // If this button was clicked - if (pointerData.state == CLAY_POINTER_DATA_PRESSED_THIS_FRAME) { - if (clickData->requestedDocumentIndex >= 0 && clickData->requestedDocumentIndex < documents.length) { - // Select the corresponding document - *clickData->selectedDocumentIndex = clickData->requestedDocumentIndex; - } - } -} - -// This function is new since the video was published void HandleClayErrors(Clay_ErrorData errorData) { printf("%s", errorData.errorText.chars); } -typedef struct { - intptr_t next; - intptr_t memory; -} Arena; - -Arena frameArena = {0}; - -Clay_RenderCommandArray CreateLayout(Clay_Context* context, float yOffset, int32_t* documentIndex) { +Clay_RenderCommandArray CreateLayout(Clay_Context* context, ClayVideoDemo_Data *data) { Clay_SetCurrentContext(context); Clay_SetDebugModeEnabled(true); // Run once per frame @@ -89,141 +15,22 @@ Clay_RenderCommandArray CreateLayout(Clay_Context* context, float yOffset, int32 .width = GetScreenWidth(), .height = GetScreenHeight() / 2 }); - Vector2 mousePosition = GetMousePosition(); - mousePosition.y -= yOffset; + mousePosition.y -= data->yOffset; Vector2 scrollDelta = GetMouseWheelMoveV(); Clay_SetPointerState( - (Clay_Vector2) { mousePosition.x, mousePosition.y }, - IsMouseButtonDown(0) + (Clay_Vector2) { mousePosition.x, mousePosition.y }, + IsMouseButtonDown(0) ); Clay_UpdateScrollContainers( - true, - (Clay_Vector2) { scrollDelta.x, scrollDelta.y }, - GetFrameTime() + true, + (Clay_Vector2) { scrollDelta.x, scrollDelta.y }, + GetFrameTime() ); - - Clay_Sizing layoutExpand = { - .width = CLAY_SIZING_GROW(0), - .height = CLAY_SIZING_GROW(0) - }; - - Clay_RectangleElementConfig contentBackgroundConfig = { - .color = { 90, 90, 90, 255 }, - .cornerRadius = CLAY_CORNER_RADIUS(8) - }; - - Clay_BeginLayout(); - // Build UI here - CLAY( - CLAY_ID("OuterContainer"), - CLAY_RECTANGLE({ .color = { 43, 41, 51, 255 } }), - CLAY_LAYOUT({ - .layoutDirection = CLAY_TOP_TO_BOTTOM, - .sizing = layoutExpand, - .padding = CLAY_PADDING_ALL(16), - .childGap = 16 - }) - ) { - CLAY( - CLAY_ID("LowerContent"), - CLAY_LAYOUT({ .sizing = layoutExpand, .childGap = 16 }) - ) { - CLAY( - CLAY_ID("Sidebar"), - CLAY_RECTANGLE(contentBackgroundConfig), - CLAY_LAYOUT({ - .layoutDirection = CLAY_TOP_TO_BOTTOM, - .padding = CLAY_PADDING_ALL(16), - .childGap = 8, - .sizing = { - .width = CLAY_SIZING_FIXED(250), - .height = CLAY_SIZING_GROW(0) - } - }) - ) { - for (int i = 0; i < documents.length; i++) { - Document document = documents.documents[i]; - Clay_LayoutConfig sidebarButtonLayout = { - .sizing = { .width = CLAY_SIZING_GROW(0) }, - .padding = CLAY_PADDING_ALL(16) - }; - - if (i == *documentIndex) { - CLAY( - CLAY_LAYOUT(sidebarButtonLayout), - CLAY_RECTANGLE({ - .color = { 120, 120, 120, 255 }, - .cornerRadius = CLAY_CORNER_RADIUS(8), - }) - ) { - CLAY_TEXT(document.title, CLAY_TEXT_CONFIG({ - .fontId = FONT_ID_BODY_16, - .fontSize = 20, - .textColor = { 255, 255, 255, 255 } - })); - } - } else { - SidebarClickData *clickData = (SidebarClickData *)frameArena.next; - *clickData = (SidebarClickData) { .requestedDocumentIndex = i, .selectedDocumentIndex = documentIndex }; - frameArena.next += sizeof(SidebarClickData); - CLAY( - CLAY_LAYOUT(sidebarButtonLayout), - Clay_OnHover(HandleSidebarInteraction, (intptr_t)clickData), - Clay_Hovered() - ? CLAY_RECTANGLE({ - .color = { 120, 120, 120, 120 }, - .cornerRadius = CLAY_CORNER_RADIUS(8) - }) - : (void)0 - ) { - CLAY_TEXT(document.title, CLAY_TEXT_CONFIG({ - .fontId = FONT_ID_BODY_16, - .fontSize = 20, - .textColor = { 255, 255, 255, 255 } - })); - } - } - } - } - - CLAY( - CLAY_ID("MainContent"), - CLAY_RECTANGLE(contentBackgroundConfig), - CLAY_SCROLL({ .vertical = true }), - CLAY_LAYOUT({ - .layoutDirection = CLAY_TOP_TO_BOTTOM, - .childGap = 16, - .padding = CLAY_PADDING_ALL(16), - .sizing = layoutExpand - }) - ) { - Document selectedDocument = documents.documents[*documentIndex]; - CLAY_TEXT(selectedDocument.title, CLAY_TEXT_CONFIG({ - .fontId = FONT_ID_BODY_16, - .fontSize = 24, - .textColor = COLOR_WHITE - })); - CLAY_TEXT(selectedDocument.contents, CLAY_TEXT_CONFIG({ - .fontId = FONT_ID_BODY_16, - .fontSize = 24, - .textColor = COLOR_WHITE - })); - } - } - } - - Clay_RenderCommandArray renderCommands = Clay_EndLayout(); - for (int i = 0; i < renderCommands.length; ++i) { - Clay_RenderCommandArray_Get(&renderCommands,i)->boundingBox.y += yOffset; - } - return renderCommands; + return ClayVideoDemo_CreateLayout(data); } - int main(void) { - frameArena = (Arena) { .memory = (intptr_t)malloc(1024) }; - frameArena.next = frameArena.memory; documents.documents = (Document[]) { { .title = CLAY_STRING("Squirrels"), .contents = CLAY_STRING("The Secret Life of Squirrels: Nature's Clever Acrobats\n""Squirrels are often overlooked creatures, dismissed as mere park inhabitants or backyard nuisances. Yet, beneath their fluffy tails and twitching noses lies an intricate world of cunning, agility, and survival tactics that are nothing short of fascinating. As one of the most common mammals in North America, squirrels have adapted to a wide range of environments from bustling urban centers to tranquil forests and have developed a variety of unique behaviors that continue to intrigue scientists and nature enthusiasts alike.\n""\n""Master Tree Climbers\n""At the heart of a squirrel's skill set is its impressive ability to navigate trees with ease. Whether they're darting from branch to branch or leaping across wide gaps, squirrels possess an innate talent for acrobatics. Their powerful hind legs, which are longer than their front legs, give them remarkable jumping power. With a tail that acts as a counterbalance, squirrels can leap distances of up to ten times the length of their body, making them some of the best aerial acrobats in the animal kingdom.\n""But it's not just their agility that makes them exceptional climbers. Squirrels' sharp, curved claws allow them to grip tree bark with precision, while the soft pads on their feet provide traction on slippery surfaces. Their ability to run at high speeds and scale vertical trunks with ease is a testament to the evolutionary adaptations that have made them so successful in their arboreal habitats.\n""\n""Food Hoarders Extraordinaire\n""Squirrels are often seen frantically gathering nuts, seeds, and even fungi in preparation for winter. While this behavior may seem like instinctual hoarding, it is actually a survival strategy that has been honed over millions of years. Known as \"scatter hoarding,\" squirrels store their food in a variety of hidden locations, often burying it deep in the soil or stashing it in hollowed-out tree trunks.\n""Interestingly, squirrels have an incredible memory for the locations of their caches. Research has shown that they can remember thousands of hiding spots, often returning to them months later when food is scarce. However, they don't always recover every stash some forgotten caches eventually sprout into new trees, contributing to forest regeneration. This unintentional role as forest gardeners highlights the ecological importance of squirrels in their ecosystems.\n""\n""The Great Squirrel Debate: Urban vs. Wild\n""While squirrels are most commonly associated with rural or wooded areas, their adaptability has allowed them to thrive in urban environments as well. In cities, squirrels have become adept at finding food sources in places like parks, streets, and even garbage cans. However, their urban counterparts face unique challenges, including traffic, predators, and the lack of natural shelters. Despite these obstacles, squirrels in urban areas are often observed using human infrastructure such as buildings, bridges, and power lines as highways for their acrobatic escapades.\n""There is, however, a growing concern regarding the impact of urban life on squirrel populations. Pollution, deforestation, and the loss of natural habitats are making it more difficult for squirrels to find adequate food and shelter. As a result, conservationists are focusing on creating squirrel-friendly spaces within cities, with the goal of ensuring these resourceful creatures continue to thrive in both rural and urban landscapes.\n""\n""A Symbol of Resilience\n""In many cultures, squirrels are symbols of resourcefulness, adaptability, and preparation. Their ability to thrive in a variety of environments while navigating challenges with agility and grace serves as a reminder of the resilience inherent in nature. Whether you encounter them in a quiet forest, a city park, or your own backyard, squirrels are creatures that never fail to amaze with their endless energy and ingenuity.\n""In the end, squirrels may be small, but they are mighty in their ability to survive and thrive in a world that is constantly changing. So next time you spot one hopping across a branch or darting across your lawn, take a moment to appreciate the remarkable acrobat at work a true marvel of the natural world.\n") }, { .title = CLAY_STRING("Lorem Ipsum"), .contents = CLAY_STRING("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.") }, @@ -233,6 +40,10 @@ int main(void) { }; Clay_Raylib_Initialize(1024, 768, "Introducing Clay Demo", FLAG_WINDOW_RESIZABLE | FLAG_WINDOW_HIGHDPI | FLAG_MSAA_4X_HINT | FLAG_VSYNC_HINT); // Extra parameters to this function are new since the video was published + Font fonts[1]; + fonts[FONT_ID_BODY_16] = LoadFontEx("resources/Roboto-Regular.ttf", 48, 0, 400); + SetTextureFilter(fonts[FONT_ID_BODY_16].texture, TEXTURE_FILTER_BILINEAR); + uint64_t clayRequiredMemory = Clay_MinMemorySize(); Clay_Arena clayMemoryTop = Clay_CreateArenaWithCapacityAndMemory(clayRequiredMemory, malloc(clayRequiredMemory)); @@ -240,28 +51,25 @@ int main(void) { .width = GetScreenWidth(), .height = GetScreenHeight() / 2 }, (Clay_ErrorHandler) { HandleClayErrors }); // This final argument is new since the video was published + ClayVideoDemo_Data dataTop = ClayVideoDemo_Initialize(); + Clay_SetMeasureTextFunction(Raylib_MeasureText, fonts); Clay_Arena clayMemoryBottom = Clay_CreateArenaWithCapacityAndMemory(clayRequiredMemory, malloc(clayRequiredMemory)); Clay_Context *clayContextBottom = Clay_Initialize(clayMemoryBottom, (Clay_Dimensions) { .width = GetScreenWidth(), .height = GetScreenHeight() / 2 }, (Clay_ErrorHandler) { HandleClayErrors }); // This final argument is new since the video was published - - Clay_SetMeasureTextFunction(Raylib_MeasureText, 0); - Raylib_fonts[FONT_ID_BODY_16] = (Raylib_Font) { - .font = LoadFontEx("resources/Roboto-Regular.ttf", 48, 0, 400), - .fontId = FONT_ID_BODY_16 - }; - SetTextureFilter(Raylib_fonts[FONT_ID_BODY_16].font.texture, TEXTURE_FILTER_BILINEAR); + ClayVideoDemo_Data dataBottom = ClayVideoDemo_Initialize(); + Clay_SetMeasureTextFunction(Raylib_MeasureText, fonts); while (!WindowShouldClose()) { - frameArena.next = frameArena.memory; - Clay_RenderCommandArray renderCommandsTop = CreateLayout(clayContextTop, 0, &selectedDocumentIndexTop); - Clay_RenderCommandArray renderCommandsBottom = CreateLayout(clayContextBottom, GetScreenHeight() / 2, &selectedDocumentIndexBottom); + dataBottom.yOffset = GetScreenHeight() / 2; + Clay_RenderCommandArray renderCommandsTop = CreateLayout(clayContextTop, &dataTop); + Clay_RenderCommandArray renderCommandsBottom = CreateLayout(clayContextBottom, &dataBottom); BeginDrawing(); ClearBackground(BLACK); - Clay_Raylib_Render(renderCommandsTop); - Clay_Raylib_Render(renderCommandsBottom); + Clay_Raylib_Render(renderCommandsTop, fonts); + Clay_Raylib_Render(renderCommandsBottom, fonts); EndDrawing(); } } diff --git a/examples/raylib-sidebar-scrolling-container/CMakeLists.txt b/examples/raylib-sidebar-scrolling-container/CMakeLists.txt index 94ee26b..a8072f6 100644 --- a/examples/raylib-sidebar-scrolling-container/CMakeLists.txt +++ b/examples/raylib-sidebar-scrolling-container/CMakeLists.txt @@ -25,10 +25,10 @@ target_include_directories(clay_examples_raylib_sidebar_scrolling_container PUBL target_link_libraries(clay_examples_raylib_sidebar_scrolling_container PUBLIC raylib) if(MSVC) - set(CMAKE_C_FLAGS_DEBUG "/D CLAY_DEBUG") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") else() set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") endif() add_custom_command( diff --git a/examples/raylib-sidebar-scrolling-container/main.c b/examples/raylib-sidebar-scrolling-container/main.c index 1b486d7..b1b75c7 100644 --- a/examples/raylib-sidebar-scrolling-container/main.c +++ b/examples/raylib-sidebar-scrolling-container/main.c @@ -19,66 +19,71 @@ void HandleHeaderButtonInteraction(Clay_ElementId elementId, Clay_PointerData po } } +Clay_ElementDeclaration HeaderButtonStyle(bool hovered) { + return (Clay_ElementDeclaration) { + .layout = {.padding = {16, 16, 8, 8}}, + .backgroundColor = hovered ? COLOR_ORANGE : COLOR_BLUE, + }; +} + // Examples of re-usable "Components" void RenderHeaderButton(Clay_String text) { - CLAY(CLAY_LAYOUT({ .padding = {16, 16, 8, 8} }), - CLAY_RECTANGLE({ .color = Clay_Hovered() ? COLOR_BLUE : COLOR_ORANGE }), - Clay_OnHover(HandleHeaderButtonInteraction, 1)) { + CLAY(HeaderButtonStyle(Clay_Hovered())) { CLAY_TEXT(text, CLAY_TEXT_CONFIG(headerTextConfig)); } } Clay_LayoutConfig dropdownTextItemLayout = { .padding = {8, 8, 4, 4} }; -Clay_RectangleElementConfig dropdownRectangleConfig = { .color = {180, 180, 180, 255} }; Clay_TextElementConfig dropdownTextElementConfig = { .fontSize = 24, .textColor = {255,255,255,255} }; void RenderDropdownTextItem(int index) { - CLAY(CLAY_IDI("ScrollContainerItem", index), CLAY_LAYOUT(dropdownTextItemLayout), CLAY_RECTANGLE(dropdownRectangleConfig)) { + CLAY({ .layout = dropdownTextItemLayout, .backgroundColor = {180, 180, 180, 255} }) { CLAY_TEXT(CLAY_STRING("I'm a text field in a scroll container."), &dropdownTextElementConfig); } } -Clay_RenderCommandArray CreateLayout() { +Clay_RenderCommandArray CreateLayout(void) { Clay_BeginLayout(); - CLAY(CLAY_ID("OuterContainer"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_GROW(0) }, .padding = { 16, 16, 16, 16 }, .childGap = 16 }), CLAY_RECTANGLE({ .color = {200, 200, 200, 255} })) { - CLAY(CLAY_ID("SideBar"), CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { .width = CLAY_SIZING_FIXED(300), .height = CLAY_SIZING_GROW(0) }, .padding = {16, 16, 16, 16 }, .childGap = 16 }), CLAY_RECTANGLE({ .color = {150, 150, 255, 255} })) { - CLAY(CLAY_ID("ProfilePictureOuter"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_GROW(0) }, .padding = { 8, 8, 8, 8 }, .childGap = 8, .childAlignment = { .y = CLAY_ALIGN_Y_CENTER } }), CLAY_RECTANGLE({ .color = {130, 130, 255, 255} })) { - CLAY(CLAY_ID("ProfilePicture"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_FIXED(60), .height = CLAY_SIZING_FIXED(60) } }), CLAY_IMAGE({ .imageData = &profilePicture, .sourceDimensions = {60, 60} })) {} + CLAY({ .id = CLAY_ID("OuterContainer"), .layout = { .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_GROW(0) }, .padding = { 16, 16, 16, 16 }, .childGap = 16 }, .backgroundColor = {200, 200, 200, 255} }) { + CLAY({ .id = CLAY_ID("SideBar"), .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { .width = CLAY_SIZING_FIXED(300), .height = CLAY_SIZING_GROW(0) }, .padding = {16, 16, 16, 16 }, .childGap = 16 }, .backgroundColor = {150, 150, 255, 255} }) { + CLAY({ .id = CLAY_ID("ProfilePictureOuter"), .layout = { .sizing = { .width = CLAY_SIZING_GROW(0) }, .padding = { 8, 8, 8, 8 }, .childGap = 8, .childAlignment = { .y = CLAY_ALIGN_Y_CENTER } }, .backgroundColor = {130, 130, 255, 255} }) { + CLAY({ .id = CLAY_ID("ProfilePicture"), .layout = { .sizing = { .width = CLAY_SIZING_FIXED(60), .height = CLAY_SIZING_FIXED(60) } }, .image = { .imageData = &profilePicture, .sourceDimensions = {60, 60} }}) {} CLAY_TEXT(profileText, CLAY_TEXT_CONFIG({ .fontSize = 24, .textColor = {0, 0, 0, 255} })); } - CLAY(CLAY_ID("SidebarBlob1"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(50) }}), CLAY_RECTANGLE({ .color = {110, 110, 255, 255} })) {} - CLAY(CLAY_ID("SidebarBlob2"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(50) }}), CLAY_RECTANGLE({ .color = {110, 110, 255, 255} })) {} - CLAY(CLAY_ID("SidebarBlob3"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(50) }}), CLAY_RECTANGLE({ .color = {110, 110, 255, 255} })) {} - CLAY(CLAY_ID("SidebarBlob4"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(50) }}), CLAY_RECTANGLE({ .color = {110, 110, 255, 255} })) {} + CLAY({ .id = CLAY_ID("SidebarBlob1"), .layout = { .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(50) }}, .backgroundColor = {110, 110, 255, 255} }) {} + CLAY({ .id = CLAY_ID("SidebarBlob2"), .layout = { .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(50) }}, .backgroundColor = {110, 110, 255, 255} }) {} + CLAY({ .id = CLAY_ID("SidebarBlob3"), .layout = { .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(50) }}, .backgroundColor = {110, 110, 255, 255} }) {} + CLAY({ .id = CLAY_ID("SidebarBlob4"), .layout = { .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIXED(50) }}, .backgroundColor = {110, 110, 255, 255} }) {} } - CLAY(CLAY_ID("RightPanel"), CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_GROW(0) }, .childGap = 16 })) { - CLAY(CLAY_ID("HeaderBar"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_GROW(0) }, .childAlignment = { .x = CLAY_ALIGN_X_RIGHT }, .padding = {8, 8, 8, 8 }, .childGap = 8 }), CLAY_RECTANGLE({ .color = {180, 180, 180, 255} })) { + CLAY({ .id = CLAY_ID("RightPanel"), .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .sizing = { .width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_GROW(0) }, .childGap = 16 }}) { + CLAY({ .layout = { .sizing = { .width = CLAY_SIZING_GROW(0) }, .childAlignment = { .x = CLAY_ALIGN_X_RIGHT }, .padding = {8, 8, 8, 8 }, .childGap = 8 }, .backgroundColor = {180, 180, 180, 255} }) { RenderHeaderButton(CLAY_STRING("Header Item 1")); RenderHeaderButton(CLAY_STRING("Header Item 2")); RenderHeaderButton(CLAY_STRING("Header Item 3")); } - CLAY(CLAY_ID("MainContent"), - CLAY_SCROLL({ .vertical = true }), - CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM, .padding = {16, 16, 16, 16}, .childGap = 16, .sizing = { CLAY_SIZING_GROW(0) } }), - CLAY_RECTANGLE({ .color = {200, 200, 255, 255} })) + CLAY({.id = CLAY_ID("MainContent"), + .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM, .padding = {16, 16, 16, 16}, .childGap = 16, .sizing = { CLAY_SIZING_GROW(0) } }, + .backgroundColor = {200, 200, 255, 255}, + .scroll = { .vertical = true }, + }) { - CLAY(CLAY_ID("FloatingContainer"), - CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_FIXED(300), .height = CLAY_SIZING_FIXED(300) }, .padding = { 16, 16, 16, 16 }}), - CLAY_FLOATING({ .zIndex = 1, .attachment = { CLAY_ATTACH_POINT_CENTER_TOP, CLAY_ATTACH_POINT_CENTER_TOP }, .offset = {0, 0} }), - CLAY_BORDER_OUTSIDE({ .color = {80, 80, 80, 255}, .width = 2 }), - CLAY_RECTANGLE({ .color = {140,80, 200, 200 }}) - ) { + CLAY({ .id = CLAY_ID("FloatingContainer"), + .layout = { .sizing = { .width = CLAY_SIZING_FIXED(300), .height = CLAY_SIZING_FIXED(300) }, .padding = { 16, 16, 16, 16 }}, + .backgroundColor = { 140, 80, 200, 200 }, + .floating = { .attachTo = CLAY_ATTACH_TO_PARENT, .zIndex = 1, .attachPoints = { CLAY_ATTACH_POINT_CENTER_TOP, CLAY_ATTACH_POINT_CENTER_TOP }, .offset = {0, 0} }, + .border = { .width = CLAY_BORDER_OUTSIDE(2), .color = {80, 80, 80, 255} }, + }) { CLAY_TEXT(CLAY_STRING("I'm an inline floating container."), CLAY_TEXT_CONFIG({ .fontSize = 24, .textColor = {255,255,255,255} })); } CLAY_TEXT(CLAY_STRING("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt."), CLAY_TEXT_CONFIG({ .fontId = FONT_ID_BODY_24, .fontSize = 24, .textColor = {0,0,0,255} })); - CLAY(CLAY_ID("Photos2"), CLAY_LAYOUT({ .childGap = 16, .padding = { 16, 16, 16, 16 }}), CLAY_RECTANGLE({ .color = {180, 180, 220, 255} })) { - CLAY(CLAY_ID("Picture4"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_FIXED(120), .height = CLAY_SIZING_FIXED(120) }}), CLAY_IMAGE({ .imageData = &profilePicture, .sourceDimensions = {120, 120} })) {} - CLAY(CLAY_ID("Picture5"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_FIXED(120), .height = CLAY_SIZING_FIXED(120) }}), CLAY_IMAGE({ .imageData = &profilePicture, .sourceDimensions = {120, 120} })) {} - CLAY(CLAY_ID("Picture6"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_FIXED(120), .height = CLAY_SIZING_FIXED(120) }}), CLAY_IMAGE({ .imageData = &profilePicture, .sourceDimensions = {120, 120} })) {} + CLAY({ .id = CLAY_ID("Photos2"), .layout = { .childGap = 16, .padding = { 16, 16, 16, 16 }}, .backgroundColor = {180, 180, 220, 255} }) { + CLAY({ .id = CLAY_ID("Picture4"), .layout = { .sizing = { .width = CLAY_SIZING_FIXED(120), .height = CLAY_SIZING_FIXED(120) }}, .image = { .imageData = &profilePicture, .sourceDimensions = {120, 120} }}) {} + CLAY({ .id = CLAY_ID("Picture5"), .layout = { .sizing = { .width = CLAY_SIZING_FIXED(120), .height = CLAY_SIZING_FIXED(120) }}, .image = { .imageData = &profilePicture, .sourceDimensions = {120, 120} }}) {} + CLAY({ .id = CLAY_ID("Picture6"), .layout = { .sizing = { .width = CLAY_SIZING_FIXED(120), .height = CLAY_SIZING_FIXED(120) }}, .image = { .imageData = &profilePicture, .sourceDimensions = {120, 120} }}) {} } CLAY_TEXT(CLAY_STRING("Faucibus purus in massa tempor nec. Nec ullamcorper sit amet risus nullam eget felis eget nunc. Diam vulputate ut pharetra sit amet aliquam id diam. Lacus suspendisse faucibus interdum posuere lorem. A diam sollicitudin tempor id. Amet massa vitae tortor condimentum lacinia. Aliquet nibh praesent tristique magna."), @@ -87,13 +92,13 @@ Clay_RenderCommandArray CreateLayout() { CLAY_TEXT(CLAY_STRING("Suspendisse in est ante in nibh. Amet venenatis urna cursus eget nunc scelerisque viverra. Elementum sagittis vitae et leo duis ut diam quam nulla. Enim nulla aliquet porttitor lacus. Pellentesque habitant morbi tristique senectus et. Facilisi nullam vehicula ipsum a arcu cursus vitae.\nSem fringilla ut morbi tincidunt. Euismod quis viverra nibh cras pulvinar mattis nunc sed. Velit sed ullamcorper morbi tincidunt ornare massa. Varius quam quisque id diam vel quam. Nulla pellentesque dignissim enim sit amet venenatis. Enim lobortis scelerisque fermentum dui faucibus in. Pretium viverra suspendisse potenti nullam ac tortor vitae. Lectus vestibulum mattis ullamcorper velit sed. Eget mauris pharetra et ultrices neque ornare aenean euismod elementum. Habitant morbi tristique senectus et. Integer vitae justo eget magna fermentum iaculis eu. Semper quis lectus nulla at volutpat diam. Enim praesent elementum facilisis leo. Massa vitae tortor condimentum lacinia quis vel."), CLAY_TEXT_CONFIG({ .fontSize = 24, .textColor = {0,0,0,255} })); - CLAY(CLAY_ID("Photos"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_GROW(0) }, .childAlignment = { .x = CLAY_ALIGN_X_CENTER, .y = CLAY_ALIGN_Y_CENTER }, .childGap = 16, .padding = {16, 16, 16, 16} }), CLAY_RECTANGLE({ .color = {180, 180, 220, 255} })) { - CLAY(CLAY_ID("Picture2"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_FIXED(120), .height = CLAY_SIZING_FIXED(120) }}), CLAY_IMAGE({ .imageData = &profilePicture, .sourceDimensions = {120, 120} })) {} - CLAY(CLAY_ID("Picture1"), CLAY_LAYOUT({ .childAlignment = { .x = CLAY_ALIGN_X_CENTER }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .padding = {8, 8, 8, 8} }), CLAY_RECTANGLE({ .color = {170, 170, 220, 255} })) { - CLAY(CLAY_ID("ProfilePicture2"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_FIXED(60), .height = CLAY_SIZING_FIXED(60) }}), CLAY_IMAGE({ .imageData = &profilePicture, .sourceDimensions = {60, 60} })) {} + CLAY({ .id = CLAY_ID("Photos"), .layout = { .sizing = { .width = CLAY_SIZING_GROW(0) }, .childAlignment = { .x = CLAY_ALIGN_X_CENTER, .y = CLAY_ALIGN_Y_CENTER }, .childGap = 16, .padding = {16, 16, 16, 16} }, .backgroundColor = {180, 180, 220, 255} }) { + CLAY({ .id = CLAY_ID("Picture2"), .layout = { .sizing = { .width = CLAY_SIZING_FIXED(120), .height = CLAY_SIZING_FIXED(120) }}, .image = { .imageData = &profilePicture, .sourceDimensions = {120, 120} }}) {} + CLAY({ .id = CLAY_ID("Picture1"), .layout = { .childAlignment = { .x = CLAY_ALIGN_X_CENTER }, .layoutDirection = CLAY_TOP_TO_BOTTOM, .padding = {8, 8, 8, 8} }, .backgroundColor = {170, 170, 220, 255} }) { + CLAY({ .id = CLAY_ID("ProfilePicture2"), .layout = { .sizing = { .width = CLAY_SIZING_FIXED(60), .height = CLAY_SIZING_FIXED(60) }}, .image = { .imageData = &profilePicture, .sourceDimensions = {60, 60} }}) {} CLAY_TEXT(CLAY_STRING("Image caption below"), CLAY_TEXT_CONFIG({ .fontSize = 24, .textColor = {0,0,0,255} })); } - CLAY(CLAY_ID("Picture3"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_FIXED(120), .height = CLAY_SIZING_FIXED(120) }}), CLAY_IMAGE({ .imageData = &profilePicture, .sourceDimensions = {120, 120} })) {} + CLAY({ .id = CLAY_ID("Picture3"), .layout = { .sizing = { .width = CLAY_SIZING_FIXED(120), .height = CLAY_SIZING_FIXED(120) }}, .image = { .imageData = &profilePicture, .sourceDimensions = {120, 120} }}) {} } CLAY_TEXT(CLAY_STRING("Amet cursus sit amet dictum sit amet justo donec. Et malesuada fames ac turpis egestas maecenas. A lacus vestibulum sed arcu non odio euismod lacinia. Gravida neque convallis a cras. Dui nunc mattis enim ut tellus elementum sagittis vitae et. Orci sagittis eu volutpat odio facilisis mauris. Neque gravida in fermentum et sollicitudin ac orci. Ultrices dui sapien eget mi proin sed libero. Euismod quis viverra nibh cras pulvinar mattis. Diam volutpat commodo sed egestas egestas. In fermentum posuere urna nec tincidunt praesent semper. Integer eget aliquet nibh praesent tristique magna.\nId cursus metus aliquam eleifend mi in. Sed pulvinar proin gravida hendrerit lectus a. Etiam tempor orci eu lobortis elementum nibh tellus. Nullam vehicula ipsum a arcu cursus vitae. Elit scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus. Condimentum lacinia quis vel eros donec ac odio. Mattis pellentesque id nibh tortor id aliquet lectus. Turpis egestas integer eget aliquet nibh praesent tristique. Porttitor massa id neque aliquam vestibulum morbi. Mauris commodo quis imperdiet massa tincidunt nunc pulvinar sapien et. Nunc scelerisque viverra mauris in aliquam sem fringilla. Suspendisse ultrices gravida dictum fusce ut placerat orci nulla.\nLacus laoreet non curabitur gravida arcu ac tortor dignissim. Urna nec tincidunt praesent semper feugiat nibh sed pulvinar. Tristique senectus et netus et malesuada fames ac. Nunc aliquet bibendum enim facilisis gravida. Egestas maecenas pharetra convallis posuere morbi leo urna molestie. Sapien nec sagittis aliquam malesuada bibendum arcu vitae elementum curabitur. Ac turpis egestas maecenas pharetra convallis posuere morbi leo urna. Viverra vitae congue eu consequat. Aliquet enim tortor at auctor urna. Ornare massa eget egestas purus viverra accumsan in nisl nisi. Elit pellentesque habitant morbi tristique senectus et netus et malesuada.\nSuspendisse ultrices gravida dictum fusce ut placerat orci nulla pellentesque. Lobortis feugiat vivamus at augue eget arcu. Vitae justo eget magna fermentum iaculis eu. Gravida rutrum quisque non tellus orci. Ipsum faucibus vitae aliquet nec. Nullam non nisi est sit amet. Nunc consequat interdum varius sit amet mattis vulputate enim. Sem fringilla ut morbi tincidunt augue interdum. Vitae purus faucibus ornare suspendisse. Massa tincidunt nunc pulvinar sapien et. Fringilla ut morbi tincidunt augue interdum velit euismod in. Donec massa sapien faucibus et. Est placerat in egestas erat imperdiet. Gravida rutrum quisque non tellus. Morbi non arcu risus quis varius quam quisque id diam. Habitant morbi tristique senectus et netus et malesuada fames ac. Eget lorem dolor sed viverra.\nOrnare massa eget egestas purus viverra. Varius vel pharetra vel turpis nunc eget lorem. Consectetur purus ut faucibus pulvinar elementum. Placerat in egestas erat imperdiet sed euismod nisi. Interdum velit euismod in pellentesque massa placerat duis ultricies lacus. Aliquam nulla facilisi cras fermentum odio eu. Est pellentesque elit ullamcorper dignissim cras tincidunt. Nunc sed id semper risus in hendrerit gravida rutrum. A pellentesque sit amet porttitor eget dolor morbi. Pellentesque habitant morbi tristique senectus et netus et malesuada fames. Nisl nunc mi ipsum faucibus vitae aliquet nec ullamcorper. Sed id semper risus in hendrerit gravida. Tincidunt praesent semper feugiat nibh. Aliquet lectus proin nibh nisl condimentum id venenatis a. Enim sit amet venenatis urna cursus eget. In egestas erat imperdiet sed euismod nisi porta lorem mollis. Lacinia quis vel eros donec ac odio tempor orci. Donec pretium vulputate sapien nec sagittis aliquam malesuada bibendum arcu. Erat pellentesque adipiscing commodo elit at.\nEgestas sed sed risus pretium quam vulputate. Vitae congue mauris rhoncus aenean vel elit scelerisque mauris pellentesque. Aliquam malesuada bibendum arcu vitae elementum. Congue mauris rhoncus aenean vel elit scelerisque mauris. Pellentesque dignissim enim sit amet venenatis urna cursus. Et malesuada fames ac turpis egestas sed tempus urna. Vel fringilla est ullamcorper eget nulla facilisi etiam dignissim. Nibh cras pulvinar mattis nunc sed blandit libero. Fringilla est ullamcorper eget nulla facilisi etiam dignissim. Aenean euismod elementum nisi quis eleifend quam adipiscing vitae proin. Mauris pharetra et ultrices neque ornare aenean euismod elementum. Ornare quam viverra orci sagittis eu. Odio ut sem nulla pharetra diam sit amet nisl suscipit. Ornare lectus sit amet est. Ullamcorper sit amet risus nullam eget. Tincidunt lobortis feugiat vivamus at augue eget arcu dictum.\nUrna nec tincidunt praesent semper feugiat nibh. Ut venenatis tellus in metus vulputate eu scelerisque felis. Cursus risus at ultrices mi tempus. In pellentesque massa placerat duis ultricies lacus sed turpis. Platea dictumst quisque sagittis purus. Cras adipiscing enim eu turpis egestas. Egestas sed tempus urna et pharetra pharetra. Netus et malesuada fames ac turpis egestas integer eget aliquet. Ac turpis egestas sed tempus. Sed lectus vestibulum mattis ullamcorper velit sed. Ante metus dictum at tempor commodo ullamcorper a. Augue neque gravida in fermentum et sollicitudin ac. Praesent semper feugiat nibh sed pulvinar proin gravida. Metus aliquam eleifend mi in nulla posuere sollicitudin aliquam ultrices. Neque gravida in fermentum et sollicitudin ac orci phasellus egestas.\nRidiculus mus mauris vitae ultricies. Morbi quis commodo odio aenean. Duis ultricies lacus sed turpis. Non pulvinar neque laoreet suspendisse interdum consectetur. Scelerisque eleifend donec pretium vulputate sapien nec sagittis aliquam. Volutpat est velit egestas dui id ornare arcu odio ut. Viverra tellus in hac habitasse platea dictumst vestibulum rhoncus est. Vestibulum lectus mauris ultrices eros. Sed blandit libero volutpat sed cras ornare. Id leo in vitae turpis massa sed elementum tempus. Gravida dictum fusce ut placerat orci nulla pellentesque. Pretium quam vulputate dignissim suspendisse in. Nisl suscipit adipiscing bibendum est ultricies integer quis auctor. Risus viverra adipiscing at in tellus. Turpis nunc eget lorem dolor sed viverra ipsum. Senectus et netus et malesuada fames ac. Habitasse platea dictumst vestibulum rhoncus est. Nunc sed id semper risus in hendrerit gravida. Felis eget velit aliquet sagittis id. Eget felis eget nunc lobortis.\nMaecenas pharetra convallis posuere morbi leo. Maecenas volutpat blandit aliquam etiam. A condimentum vitae sapien pellentesque habitant morbi tristique senectus et. Pulvinar mattis nunc sed blandit libero volutpat sed. Feugiat in ante metus dictum at tempor commodo ullamcorper. Vel pharetra vel turpis nunc eget lorem dolor. Est placerat in egestas erat imperdiet sed euismod. Quisque non tellus orci ac auctor augue mauris augue. Placerat vestibulum lectus mauris ultrices eros in cursus turpis. Enim nunc faucibus a pellentesque sit. Adipiscing vitae proin sagittis nisl. Iaculis at erat pellentesque adipiscing commodo elit at imperdiet. Aliquam sem fringilla ut morbi.\nArcu odio ut sem nulla pharetra diam sit amet nisl. Non diam phasellus vestibulum lorem sed. At erat pellentesque adipiscing commodo elit at. Lacus luctus accumsan tortor posuere ac ut consequat. Et malesuada fames ac turpis egestas integer. Tristique magna sit amet purus. A condimentum vitae sapien pellentesque habitant. Quis varius quam quisque id diam vel quam. Est ullamcorper eget nulla facilisi etiam dignissim diam quis. Augue interdum velit euismod in pellentesque massa. Elit scelerisque mauris pellentesque pulvinar pellentesque habitant. Vulputate eu scelerisque felis imperdiet. Nibh tellus molestie nunc non blandit massa. Velit euismod in pellentesque massa placerat. Sed cras ornare arcu dui. Ut sem viverra aliquet eget sit. Eu lobortis elementum nibh tellus molestie nunc non. Blandit libero volutpat sed cras ornare arcu dui vivamus.\nSit amet aliquam id diam maecenas. Amet risus nullam eget felis eget nunc lobortis mattis aliquam. Magna sit amet purus gravida. Egestas purus viverra accumsan in nisl nisi. Leo duis ut diam quam. Ante metus dictum at tempor commodo ullamcorper. Ac turpis egestas integer eget. Fames ac turpis egestas integer eget aliquet nibh. Sem integer vitae justo eget magna fermentum. Semper auctor neque vitae tempus quam pellentesque nec nam aliquam. Vestibulum mattis ullamcorper velit sed. Consectetur adipiscing elit duis tristique sollicitudin nibh. Massa id neque aliquam vestibulum morbi blandit cursus risus.\nCursus sit amet dictum sit amet justo donec enim diam. Egestas erat imperdiet sed euismod. Nullam vehicula ipsum a arcu cursus vitae congue mauris. Habitasse platea dictumst vestibulum rhoncus est pellentesque elit. Duis ultricies lacus sed turpis tincidunt id aliquet risus feugiat. Faucibus ornare suspendisse sed nisi lacus sed viverra. Pretium fusce id velit ut tortor pretium viverra. Fermentum odio eu feugiat pretium nibh ipsum consequat nisl vel. Senectus et netus et malesuada. Tellus pellentesque eu tincidunt tortor aliquam. Aenean sed adipiscing diam donec adipiscing tristique risus nec feugiat. Quis vel eros donec ac odio. Id interdum velit laoreet id donec ultrices tincidunt.\nMassa id neque aliquam vestibulum morbi blandit cursus risus at. Enim tortor at auctor urna nunc id cursus metus. Lorem ipsum dolor sit amet consectetur. At quis risus sed vulputate odio. Facilisis mauris sit amet massa vitae tortor condimentum lacinia quis. Et malesuada fames ac turpis egestas maecenas. Bibendum arcu vitae elementum curabitur vitae nunc sed velit dignissim. Viverra orci sagittis eu volutpat odio facilisis mauris. Adipiscing bibendum est ultricies integer quis auctor elit sed. Neque viverra justo nec ultrices dui sapien. Elementum nibh tellus molestie nunc non blandit massa enim. Euismod elementum nisi quis eleifend quam adipiscing vitae proin sagittis. Faucibus ornare suspendisse sed nisi. Quis viverra nibh cras pulvinar mattis nunc sed blandit. Tristique senectus et netus et. Magnis dis parturient montes nascetur ridiculus mus.\nDolor magna eget est lorem ipsum dolor. Nibh sit amet commodo nulla. Donec pretium vulputate sapien nec sagittis aliquam malesuada. Cras adipiscing enim eu turpis egestas pretium. Cras ornare arcu dui vivamus arcu felis bibendum ut tristique. Mus mauris vitae ultricies leo integer. In nulla posuere sollicitudin aliquam ultrices sagittis orci. Quis hendrerit dolor magna eget. Nisl tincidunt eget nullam non. Vitae congue eu consequat ac felis donec et odio. Vivamus at augue eget arcu dictum varius duis at. Ornare quam viverra orci sagittis.\nErat nam at lectus urna duis convallis. Massa placerat duis ultricies lacus sed turpis tincidunt id aliquet. Est ullamcorper eget nulla facilisi etiam dignissim diam. Arcu vitae elementum curabitur vitae nunc sed velit dignissim sodales. Tortor vitae purus faucibus ornare suspendisse sed nisi lacus. Neque viverra justo nec ultrices dui sapien eget mi proin. Viverra accumsan in nisl nisi scelerisque eu ultrices. Consequat interdum varius sit amet mattis. In aliquam sem fringilla ut morbi. Eget arcu dictum varius duis at. Nulla aliquet porttitor lacus luctus accumsan tortor posuere. Arcu bibendum at varius vel pharetra vel turpis. Hac habitasse platea dictumst quisque sagittis purus sit amet. Sapien eget mi proin sed libero enim sed. Quam elementum pulvinar etiam non quam lacus suspendisse faucibus interdum. Semper viverra nam libero justo. Fusce ut placerat orci nulla pellentesque dignissim enim sit amet. Et malesuada fames ac turpis egestas maecenas pharetra convallis posuere.\nTurpis egestas sed tempus urna et pharetra pharetra massa. Gravida in fermentum et sollicitudin ac orci phasellus. Ornare suspendisse sed nisi lacus sed viverra tellus in. Fames ac turpis egestas maecenas pharetra convallis posuere. Mi proin sed libero enim sed faucibus turpis. Sit amet mauris commodo quis imperdiet massa tincidunt nunc. Ut etiam sit amet nisl purus in mollis nunc. Habitasse platea dictumst quisque sagittis purus sit amet volutpat consequat. Eget aliquet nibh praesent tristique magna. Sit amet est placerat in egestas erat. Commodo sed egestas egestas fringilla. Enim nulla aliquet porttitor lacus luctus accumsan tortor posuere ac. Et molestie ac feugiat sed lectus vestibulum mattis ullamcorper. Dignissim convallis aenean et tortor at risus viverra. Morbi blandit cursus risus at ultrices mi. Ac turpis egestas integer eget aliquet nibh praesent tristique magna.\nVolutpat sed cras ornare arcu dui. Egestas erat imperdiet sed euismod nisi porta lorem mollis aliquam. Viverra justo nec ultrices dui sapien. Amet risus nullam eget felis eget nunc lobortis. Metus aliquam eleifend mi in. Ut eu sem integer vitae. Auctor elit sed vulputate mi sit amet. Nisl nisi scelerisque eu ultrices. Dictum fusce ut placerat orci nulla. Pellentesque habitant morbi tristique senectus et. Auctor elit sed vulputate mi sit. Tincidunt arcu non sodales neque. Mi in nulla posuere sollicitudin aliquam. Morbi non arcu risus quis varius quam quisque id diam. Cras adipiscing enim eu turpis egestas pretium aenean pharetra magna. At auctor urna nunc id cursus metus aliquam. Mauris a diam maecenas sed enim ut sem viverra. Nunc scelerisque viverra mauris in. In iaculis nunc sed augue lacus viverra vitae congue eu. Volutpat blandit aliquam etiam erat velit scelerisque in dictum non."), @@ -101,14 +106,14 @@ Clay_RenderCommandArray CreateLayout() { } } - CLAY(CLAY_ID("Blob4Floating2"), CLAY_FLOATING({ .zIndex = 1, .parentId = Clay_GetElementId(CLAY_STRING("SidebarBlob4")).id })) { - CLAY(CLAY_ID("ScrollContainer"), CLAY_LAYOUT({ .sizing = { .height = CLAY_SIZING_FIXED(200) }, .childGap = 2 }), CLAY_SCROLL({ .vertical = true })) { - CLAY(CLAY_ID("FloatingContainer2"), CLAY_LAYOUT({ }), CLAY_FLOATING({ .zIndex = 1 })) { - CLAY(CLAY_ID("FloatingContainerInner"), CLAY_LAYOUT({ .sizing = { .width = CLAY_SIZING_FIXED(300), .height = CLAY_SIZING_FIXED(300) }, .padding = {16, 16, 16, 16} }), CLAY_RECTANGLE({ .color = {140,80, 200, 200} })) { + CLAY({ .id = CLAY_ID("Blob4Floating2"), .floating = { .attachTo = CLAY_ATTACH_TO_ELEMENT_WITH_ID, .zIndex = 1, .parentId = Clay_GetElementId(CLAY_STRING("SidebarBlob4")).id } }) { + CLAY({ .id = CLAY_ID("ScrollContainer"), .layout = { .sizing = { .height = CLAY_SIZING_FIXED(200) }, .childGap = 2 }, .scroll = { .vertical = true } }) { + CLAY({ .id = CLAY_ID("FloatingContainer2"), .floating = { .attachTo = CLAY_ATTACH_TO_PARENT, .zIndex = 1 } }) { + CLAY({ .id = CLAY_ID("FloatingContainerInner"), .layout = { .sizing = { .width = CLAY_SIZING_FIXED(300), .height = CLAY_SIZING_FIXED(300) }, .padding = {16, 16, 16, 16} }, .backgroundColor = {140,80, 200, 200} }) { CLAY_TEXT(CLAY_STRING("I'm an inline floating container."), CLAY_TEXT_CONFIG({ .fontSize = 24, .textColor = {255,255,255,255} })); } } - CLAY(CLAY_ID("ScrollContainerInner"), CLAY_LAYOUT({ .layoutDirection = CLAY_TOP_TO_BOTTOM }), CLAY_RECTANGLE({ .color = {160, 160, 160, 255} })) { + CLAY({ .id = CLAY_ID("ScrollContainerInner"), .layout = { .layoutDirection = CLAY_TOP_TO_BOTTOM }, .backgroundColor = {160, 160, 160, 255} }) { for (int i = 0; i < 100; i++) { RenderDropdownTextItem(i); } @@ -117,18 +122,20 @@ Clay_RenderCommandArray CreateLayout() { } Clay_ScrollContainerData scrollData = Clay_GetScrollContainerData(Clay_GetElementId(CLAY_STRING("MainContent"))); if (scrollData.found) { - CLAY(CLAY_ID("ScrollBar"), - CLAY_FLOATING({ + CLAY({ .id = CLAY_ID("ScrollBar"), + .floating = { + .attachTo = CLAY_ATTACH_TO_ELEMENT_WITH_ID, .offset = { .y = -(scrollData.scrollPosition->y / scrollData.contentDimensions.height) * scrollData.scrollContainerDimensions.height }, .zIndex = 1, .parentId = Clay_GetElementId(CLAY_STRING("MainContent")).id, - .attachment = {.element = CLAY_ATTACH_POINT_RIGHT_TOP, .parent = CLAY_ATTACH_POINT_RIGHT_TOP} - }) - ) { - CLAY(CLAY_ID("ScrollBarButton"), - CLAY_LAYOUT({ .sizing = {CLAY_SIZING_FIXED(12), CLAY_SIZING_FIXED((scrollData.scrollContainerDimensions.height / scrollData.contentDimensions.height) * scrollData.scrollContainerDimensions.height) }}), - CLAY_RECTANGLE({ .cornerRadius = {6}, .color = Clay_PointerOver(Clay__HashString(CLAY_STRING("ScrollBar"), 0, 0)) ? (Clay_Color){100, 100, 140, 150} : (Clay_Color){120, 120, 160, 150} }) - ) {} + .attachPoints = { .element = CLAY_ATTACH_POINT_RIGHT_TOP, .parent = CLAY_ATTACH_POINT_RIGHT_TOP } + } + }) { + CLAY({ .id = CLAY_ID("ScrollBarButton"), + .layout = { .sizing = {CLAY_SIZING_FIXED(12), CLAY_SIZING_FIXED((scrollData.scrollContainerDimensions.height / scrollData.contentDimensions.height) * scrollData.scrollContainerDimensions.height) }}, + .backgroundColor = Clay_PointerOver(Clay__HashString(CLAY_STRING("ScrollBar"), 0, 0)) ? (Clay_Color){100, 100, 140, 150} : (Clay_Color){120, 120, 160, 150} , + .cornerRadius = CLAY_CORNER_RADIUS(6) + }) {} } } } @@ -142,11 +149,11 @@ typedef struct bool mouseDown; } ScrollbarData; -ScrollbarData scrollbarData = {}; +ScrollbarData scrollbarData = {0}; bool debugEnabled = false; -void UpdateDrawFrame(void) +void UpdateDrawFrame(Font* fonts) { Vector2 mouseWheelDelta = GetMouseWheelMoveV(); float mouseWheelX = mouseWheelDelta.x; @@ -195,7 +202,7 @@ void UpdateDrawFrame(void) // currentTime = GetTime(); BeginDrawing(); ClearBackground(BLACK); - Clay_Raylib_Render(renderCommands); + Clay_Raylib_Render(renderCommands, fonts); EndDrawing(); // printf("render time: %f ms\n", (GetTime() - currentTime) * 1000); @@ -219,20 +226,15 @@ int main(void) { uint64_t totalMemorySize = Clay_MinMemorySize(); Clay_Arena clayMemory = Clay_CreateArenaWithCapacityAndMemory(totalMemorySize, malloc(totalMemorySize)); Clay_Initialize(clayMemory, (Clay_Dimensions) { (float)GetScreenWidth(), (float)GetScreenHeight() }, (Clay_ErrorHandler) { HandleClayErrors }); - Clay_SetMeasureTextFunction(Raylib_MeasureText, 0); Clay_Raylib_Initialize(1024, 768, "Clay - Raylib Renderer Example", FLAG_VSYNC_HINT | FLAG_WINDOW_RESIZABLE | FLAG_WINDOW_HIGHDPI | FLAG_MSAA_4X_HINT); profilePicture = LoadTextureFromImage(LoadImage("resources/profile-picture.png")); - Raylib_fonts[FONT_ID_BODY_24] = (Raylib_Font) { - .font = LoadFontEx("resources/Roboto-Regular.ttf", 48, 0, 400), - .fontId = FONT_ID_BODY_24, - }; - SetTextureFilter(Raylib_fonts[FONT_ID_BODY_24].font.texture, TEXTURE_FILTER_BILINEAR); - Raylib_fonts[FONT_ID_BODY_16] = (Raylib_Font) { - .font = LoadFontEx("resources/Roboto-Regular.ttf", 32, 0, 400), - .fontId = FONT_ID_BODY_16, - }; - SetTextureFilter(Raylib_fonts[FONT_ID_BODY_16].font.texture, TEXTURE_FILTER_BILINEAR); + Font fonts[2]; + fonts[FONT_ID_BODY_24] = LoadFontEx("resources/Roboto-Regular.ttf", 48, 0, 400); + SetTextureFilter(fonts[FONT_ID_BODY_24].texture, TEXTURE_FILTER_BILINEAR); + fonts[FONT_ID_BODY_16] = LoadFontEx("resources/Roboto-Regular.ttf", 32, 0, 400); + SetTextureFilter(fonts[FONT_ID_BODY_16].texture, TEXTURE_FILTER_BILINEAR); + Clay_SetMeasureTextFunction(Raylib_MeasureText, fonts); //-------------------------------------------------------------------------------------- @@ -246,7 +248,7 @@ int main(void) { Clay_Initialize(clayMemory, (Clay_Dimensions) { (float)GetScreenWidth(), (float)GetScreenHeight() }, (Clay_ErrorHandler) { HandleClayErrors }); reinitializeClay = false; } - UpdateDrawFrame(); + UpdateDrawFrame(fonts); } return 0; } diff --git a/examples/raylib-sidebar-scrolling-container/multi-compilation-unit.c b/examples/raylib-sidebar-scrolling-container/multi-compilation-unit.c index 2c1a473..5255d45 100644 --- a/examples/raylib-sidebar-scrolling-container/multi-compilation-unit.c +++ b/examples/raylib-sidebar-scrolling-container/multi-compilation-unit.c @@ -2,8 +2,8 @@ // NOTE: This file only exists to make sure that clay works when included in multiple translation units. -void SatisfyCompiler() { - CLAY(CLAY_ID("SatisfyCompiler"), CLAY_LAYOUT({})) { +void SatisfyCompiler(void) { + CLAY({ .id = CLAY_ID("SatisfyCompiler") }) { CLAY_TEXT(CLAY_STRING("Test"), CLAY_TEXT_CONFIG({ .fontId = 0, .fontSize = 24 })); } -} \ No newline at end of file +} diff --git a/examples/shared-layouts/clay-video-demo.c b/examples/shared-layouts/clay-video-demo.c new file mode 100644 index 0000000..e7400a3 --- /dev/null +++ b/examples/shared-layouts/clay-video-demo.c @@ -0,0 +1,266 @@ +#include "../../clay.h" +#include + +const int FONT_ID_BODY_16 = 0; +Clay_Color COLOR_WHITE = { 255, 255, 255, 255}; + +void RenderHeaderButton(Clay_String text) { + CLAY({ + .layout = { .padding = { 16, 16, 8, 8 }}, + .backgroundColor = { 140, 140, 140, 255 }, + .cornerRadius = CLAY_CORNER_RADIUS(5) + }) { + CLAY_TEXT(text, CLAY_TEXT_CONFIG({ + .fontId = FONT_ID_BODY_16, + .fontSize = 16, + .textColor = { 255, 255, 255, 255 } + })); + } +} + +void RenderDropdownMenuItem(Clay_String text) { + CLAY({.layout = { .padding = CLAY_PADDING_ALL(16)}}) { + CLAY_TEXT(text, CLAY_TEXT_CONFIG({ + .fontId = FONT_ID_BODY_16, + .fontSize = 16, + .textColor = { 255, 255, 255, 255 } + })); + } +} + +typedef struct { + Clay_String title; + Clay_String contents; +} Document; + +typedef struct { + Document *documents; + uint32_t length; +} DocumentArray; + +Document documentsRaw[5]; + +DocumentArray documents = { + .length = 5, + .documents = documentsRaw +}; + +typedef struct { + intptr_t offset; + intptr_t memory; +} ClayVideoDemo_Arena; + +typedef struct { + int32_t selectedDocumentIndex; + float yOffset; + ClayVideoDemo_Arena frameArena; +} ClayVideoDemo_Data; + +typedef struct { + int32_t requestedDocumentIndex; + int32_t* selectedDocumentIndex; +} SidebarClickData; + +void HandleSidebarInteraction( + Clay_ElementId elementId, + Clay_PointerData pointerData, + intptr_t userData +) { + SidebarClickData *clickData = (SidebarClickData*)userData; + // If this button was clicked + if (pointerData.state == CLAY_POINTER_DATA_PRESSED_THIS_FRAME) { + if (clickData->requestedDocumentIndex >= 0 && clickData->requestedDocumentIndex < documents.length) { + // Select the corresponding document + *clickData->selectedDocumentIndex = clickData->requestedDocumentIndex; + } + } +} + +ClayVideoDemo_Data ClayVideoDemo_Initialize() { + documents.documents[0] = (Document){ .title = CLAY_STRING("Squirrels"), .contents = CLAY_STRING("The Secret Life of Squirrels: Nature's Clever Acrobats\n""Squirrels are often overlooked creatures, dismissed as mere park inhabitants or backyard nuisances. Yet, beneath their fluffy tails and twitching noses lies an intricate world of cunning, agility, and survival tactics that are nothing short of fascinating. As one of the most common mammals in North America, squirrels have adapted to a wide range of environments from bustling urban centers to tranquil forests and have developed a variety of unique behaviors that continue to intrigue scientists and nature enthusiasts alike.\n""\n""Master Tree Climbers\n""At the heart of a squirrel's skill set is its impressive ability to navigate trees with ease. Whether they're darting from branch to branch or leaping across wide gaps, squirrels possess an innate talent for acrobatics. Their powerful hind legs, which are longer than their front legs, give them remarkable jumping power. With a tail that acts as a counterbalance, squirrels can leap distances of up to ten times the length of their body, making them some of the best aerial acrobats in the animal kingdom.\n""But it's not just their agility that makes them exceptional climbers. Squirrels' sharp, curved claws allow them to grip tree bark with precision, while the soft pads on their feet provide traction on slippery surfaces. Their ability to run at high speeds and scale vertical trunks with ease is a testament to the evolutionary adaptations that have made them so successful in their arboreal habitats.\n""\n""Food Hoarders Extraordinaire\n""Squirrels are often seen frantically gathering nuts, seeds, and even fungi in preparation for winter. While this behavior may seem like instinctual hoarding, it is actually a survival strategy that has been honed over millions of years. Known as \"scatter hoarding,\" squirrels store their food in a variety of hidden locations, often burying it deep in the soil or stashing it in hollowed-out tree trunks.\n""Interestingly, squirrels have an incredible memory for the locations of their caches. Research has shown that they can remember thousands of hiding spots, often returning to them months later when food is scarce. However, they don't always recover every stash some forgotten caches eventually sprout into new trees, contributing to forest regeneration. This unintentional role as forest gardeners highlights the ecological importance of squirrels in their ecosystems.\n""\n""The Great Squirrel Debate: Urban vs. Wild\n""While squirrels are most commonly associated with rural or wooded areas, their adaptability has allowed them to thrive in urban environments as well. In cities, squirrels have become adept at finding food sources in places like parks, streets, and even garbage cans. However, their urban counterparts face unique challenges, including traffic, predators, and the lack of natural shelters. Despite these obstacles, squirrels in urban areas are often observed using human infrastructure such as buildings, bridges, and power lines as highways for their acrobatic escapades.\n""There is, however, a growing concern regarding the impact of urban life on squirrel populations. Pollution, deforestation, and the loss of natural habitats are making it more difficult for squirrels to find adequate food and shelter. As a result, conservationists are focusing on creating squirrel-friendly spaces within cities, with the goal of ensuring these resourceful creatures continue to thrive in both rural and urban landscapes.\n""\n""A Symbol of Resilience\n""In many cultures, squirrels are symbols of resourcefulness, adaptability, and preparation. Their ability to thrive in a variety of environments while navigating challenges with agility and grace serves as a reminder of the resilience inherent in nature. Whether you encounter them in a quiet forest, a city park, or your own backyard, squirrels are creatures that never fail to amaze with their endless energy and ingenuity.\n""In the end, squirrels may be small, but they are mighty in their ability to survive and thrive in a world that is constantly changing. So next time you spot one hopping across a branch or darting across your lawn, take a moment to appreciate the remarkable acrobat at work a true marvel of the natural world.\n") }; + documents.documents[1] = (Document){ .title = CLAY_STRING("Lorem Ipsum"), .contents = CLAY_STRING("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.") }; + documents.documents[2] = (Document){ .title = CLAY_STRING("Vacuum Instructions"), .contents = CLAY_STRING("Chapter 3: Getting Started - Unpacking and Setup\n""\n""Congratulations on your new SuperClean Pro 5000 vacuum cleaner! In this section, we will guide you through the simple steps to get your vacuum up and running. Before you begin, please ensure that you have all the components listed in the \"Package Contents\" section on page 2.\n""\n""1. Unboxing Your Vacuum\n""Carefully remove the vacuum cleaner from the box. Avoid using sharp objects that could damage the product. Once removed, place the unit on a flat, stable surface to proceed with the setup. Inside the box, you should find:\n""\n"" The main vacuum unit\n"" A telescoping extension wand\n"" A set of specialized cleaning tools (crevice tool, upholstery brush, etc.)\n"" A reusable dust bag (if applicable)\n"" A power cord with a 3-prong plug\n"" A set of quick-start instructions\n""\n""2. Assembling Your Vacuum\n""Begin by attaching the extension wand to the main body of the vacuum cleaner. Line up the connectors and twist the wand into place until you hear a click. Next, select the desired cleaning tool and firmly attach it to the wand's end, ensuring it is securely locked in.\n""\n""For models that require a dust bag, slide the bag into the compartment at the back of the vacuum, making sure it is properly aligned with the internal mechanism. If your vacuum uses a bagless system, ensure the dust container is correctly seated and locked in place before use.\n""\n""3. Powering On\n""To start the vacuum, plug the power cord into a grounded electrical outlet. Once plugged in, locate the power switch, usually positioned on the side of the handle or body of the unit, depending on your model. Press the switch to the \"On\" position, and you should hear the motor begin to hum. If the vacuum does not power on, check that the power cord is securely plugged in, and ensure there are no blockages in the power switch.\n""\n""Note: Before first use, ensure that the vacuum filter (if your model has one) is properly installed. If unsure, refer to \"Section 5: Maintenance\" for filter installation instructions.") }; + documents.documents[3] = (Document){ .title = CLAY_STRING("Article 4"), .contents = CLAY_STRING("Article 4") }; + documents.documents[4] = (Document){ .title = CLAY_STRING("Article 5"), .contents = CLAY_STRING("Article 5") }; + + ClayVideoDemo_Data data = { + .frameArena = { .memory = (intptr_t)malloc(1024) } + }; + return data; +} + +Clay_RenderCommandArray ClayVideoDemo_CreateLayout(ClayVideoDemo_Data *data) { + data->frameArena.offset = 0; + + Clay_BeginLayout(); + + Clay_Sizing layoutExpand = { + .width = CLAY_SIZING_GROW(0), + .height = CLAY_SIZING_GROW(0) + }; + + Clay_Color contentBackgroundColor = { 90, 90, 90, 255 }; + + // Build UI here + CLAY({ .id = CLAY_ID("OuterContainer"), + .backgroundColor = {43, 41, 51, 255 }, + .layout = { + .layoutDirection = CLAY_TOP_TO_BOTTOM, + .sizing = layoutExpand, + .padding = CLAY_PADDING_ALL(16), + .childGap = 16 + } + }) { + // Child elements go inside braces + CLAY({ .id = CLAY_ID("HeaderBar"), + .layout = { + .sizing = { + .height = CLAY_SIZING_FIXED(60), + .width = CLAY_SIZING_GROW(0) + }, + .padding = { 16, 16, 0, 0 }, + .childGap = 16, + .childAlignment = { + .y = CLAY_ALIGN_Y_CENTER + } + }, + .backgroundColor = contentBackgroundColor, + .cornerRadius = CLAY_CORNER_RADIUS(8) + }) { + // Header buttons go here + CLAY({ .id = CLAY_ID("FileButton"), + .layout = { .padding = { 16, 16, 8, 8 }}, + .backgroundColor = {140, 140, 140, 255 }, + .cornerRadius = CLAY_CORNER_RADIUS(5) + }) { + CLAY_TEXT(CLAY_STRING("File"), CLAY_TEXT_CONFIG({ + .fontId = FONT_ID_BODY_16, + .fontSize = 16, + .textColor = { 255, 255, 255, 255 } + })); + + bool fileMenuVisible = + Clay_PointerOver(Clay_GetElementId(CLAY_STRING("FileButton"))) + || + Clay_PointerOver(Clay_GetElementId(CLAY_STRING("FileMenu"))); + + if (fileMenuVisible) { // Below has been changed slightly to fix the small bug where the menu would dismiss when mousing over the top gap + CLAY({ .id = CLAY_ID("FileMenu"), + .floating = { + .attachTo = CLAY_ATTACH_TO_PARENT, + .attachPoints = { + .parent = CLAY_ATTACH_POINT_LEFT_BOTTOM + }, + }, + .layout = { + .padding = {0, 0, 8, 8 } + } + }) { + CLAY({ + .layout = { + .layoutDirection = CLAY_TOP_TO_BOTTOM, + .sizing = { + .width = CLAY_SIZING_FIXED(200) + }, + }, + .backgroundColor = {40, 40, 40, 255 }, + .cornerRadius = CLAY_CORNER_RADIUS(8) + }) { + // Render dropdown items here + RenderDropdownMenuItem(CLAY_STRING("New")); + RenderDropdownMenuItem(CLAY_STRING("Open")); + RenderDropdownMenuItem(CLAY_STRING("Close")); + } + } + } + } + RenderHeaderButton(CLAY_STRING("Edit")); + CLAY({ .layout = { .sizing = { CLAY_SIZING_GROW(0) }}}) {} + RenderHeaderButton(CLAY_STRING("Upload")); + RenderHeaderButton(CLAY_STRING("Media")); + RenderHeaderButton(CLAY_STRING("Support")); + } + + CLAY({ + .id = CLAY_ID("LowerContent"), + .layout = { .sizing = layoutExpand, .childGap = 16 } + }) { + CLAY({ + .id = CLAY_ID("Sidebar"), + .backgroundColor = contentBackgroundColor, + .layout = { + .layoutDirection = CLAY_TOP_TO_BOTTOM, + .padding = CLAY_PADDING_ALL(16), + .childGap = 8, + .sizing = { + .width = CLAY_SIZING_FIXED(250), + .height = CLAY_SIZING_GROW(0) + } + } + }) { + for (int i = 0; i < documents.length; i++) { + Document document = documents.documents[i]; + Clay_LayoutConfig sidebarButtonLayout = { + .sizing = { .width = CLAY_SIZING_GROW(0) }, + .padding = CLAY_PADDING_ALL(16) + }; + + if (i == data->selectedDocumentIndex) { + CLAY({ + .layout = sidebarButtonLayout, + .backgroundColor = {120, 120, 120, 255 }, + .cornerRadius = CLAY_CORNER_RADIUS(8) + }) { + CLAY_TEXT(document.title, CLAY_TEXT_CONFIG({ + .fontId = FONT_ID_BODY_16, + .fontSize = 20, + .textColor = { 255, 255, 255, 255 } + })); + } + } else { + SidebarClickData *clickData = (SidebarClickData *)(data->frameArena.memory + data->frameArena.offset); + *clickData = (SidebarClickData) { .requestedDocumentIndex = i, .selectedDocumentIndex = &data->selectedDocumentIndex }; + data->frameArena.offset += sizeof(SidebarClickData); + CLAY({ .layout = sidebarButtonLayout, .backgroundColor = (Clay_Color) { 120, 120, 120, Clay_Hovered() ? 120 : 0 }, .cornerRadius = CLAY_CORNER_RADIUS(8) }) { + Clay_OnHover(HandleSidebarInteraction, (intptr_t)clickData); + CLAY_TEXT(document.title, CLAY_TEXT_CONFIG({ + .fontId = FONT_ID_BODY_16, + .fontSize = 20, + .textColor = { 255, 255, 255, 255 } + })); + } + } + } + } + + CLAY({ .id = CLAY_ID("MainContent"), + .backgroundColor = contentBackgroundColor, + .scroll = { .vertical = true }, + .layout = { + .layoutDirection = CLAY_TOP_TO_BOTTOM, + .childGap = 16, + .padding = CLAY_PADDING_ALL(16), + .sizing = layoutExpand + } + }) { + Document selectedDocument = documents.documents[data->selectedDocumentIndex]; + CLAY_TEXT(selectedDocument.title, CLAY_TEXT_CONFIG({ + .fontId = FONT_ID_BODY_16, + .fontSize = 24, + .textColor = COLOR_WHITE + })); + CLAY_TEXT(selectedDocument.contents, CLAY_TEXT_CONFIG({ + .fontId = FONT_ID_BODY_16, + .fontSize = 24, + .textColor = COLOR_WHITE + })); + } + } + } + + Clay_RenderCommandArray renderCommands = Clay_EndLayout(); + for (int32_t i = 0; i < renderCommands.length; i++) { + Clay_RenderCommandArray_Get(&renderCommands, i)->boundingBox.y += data->yOffset; + } + return renderCommands; +} \ No newline at end of file diff --git a/renderers/SDL2/clay_renderer_SDL2.c b/renderers/SDL2/clay_renderer_SDL2.c index bb4059e..811c6ef 100644 --- a/renderers/SDL2/clay_renderer_SDL2.c +++ b/renderers/SDL2/clay_renderer_SDL2.c @@ -13,7 +13,7 @@ typedef struct } SDL2_Font; -static Clay_Dimensions SDL2_MeasureText(Clay_StringSlice text, Clay_TextElementConfig *config, uintptr_t userData) +static Clay_Dimensions SDL2_MeasureText(Clay_StringSlice text, Clay_TextElementConfig *config, void *userData) { SDL2_Font *fonts = (SDL2_Font*)userData; @@ -44,8 +44,8 @@ static void Clay_SDL2_Render(SDL_Renderer *renderer, Clay_RenderCommandArray ren switch (renderCommand->commandType) { case CLAY_RENDER_COMMAND_TYPE_RECTANGLE: { - Clay_RectangleElementConfig *config = renderCommand->config.rectangleElementConfig; - Clay_Color color = config->color; + Clay_RectangleRenderData *config = &renderCommand->renderData.rectangle; + Clay_Color color = config->backgroundColor; SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, color.a); SDL_FRect rect = (SDL_FRect) { .x = boundingBox.x, @@ -57,10 +57,9 @@ static void Clay_SDL2_Render(SDL_Renderer *renderer, Clay_RenderCommandArray ren break; } case CLAY_RENDER_COMMAND_TYPE_TEXT: { - Clay_TextElementConfig *config = renderCommand->config.textElementConfig; - Clay_StringSlice text = renderCommand->text; - char *cloned = (char *)calloc(text.length + 1, 1); - memcpy(cloned, text.chars, text.length); + Clay_TextRenderData *config = &renderCommand->renderData.text; + char *cloned = (char *)calloc(config->stringContents.length + 1, 1); + memcpy(cloned, config->stringContents.chars, config->stringContents.length); TTF_Font* font = fonts[config->fontId].font; SDL_Surface *surface = TTF_RenderUTF8_Blended(font, cloned, (SDL_Color) { .r = (Uint8)config->textColor.r, @@ -98,9 +97,9 @@ static void Clay_SDL2_Render(SDL_Renderer *renderer, Clay_RenderCommandArray ren break; } case CLAY_RENDER_COMMAND_TYPE_IMAGE: { - SDL_Surface *image = (SDL_Surface *)renderCommand->config.imageElementConfig->imageData; + Clay_ImageRenderData *config = &renderCommand->renderData.image; - SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, image); + SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, config->imageData); SDL_Rect destination = (SDL_Rect){ .x = boundingBox.x, @@ -110,38 +109,40 @@ static void Clay_SDL2_Render(SDL_Renderer *renderer, Clay_RenderCommandArray ren }; SDL_RenderCopy(renderer, texture, NULL, &destination); + + SDL_DestroyTexture(texture); break; } case CLAY_RENDER_COMMAND_TYPE_BORDER: { - Clay_BorderElementConfig *config = renderCommand->config.borderElementConfig; + Clay_BorderRenderData *config = &renderCommand->renderData.border; - if (config->left.width > 0) { - SDL_SetRenderDrawColor(renderer, CLAY_COLOR_TO_SDL_COLOR_ARGS(config->left.color)); - SDL_FRect rect = { boundingBox.x, boundingBox.y + config->cornerRadius.topLeft, config->left.width, boundingBox.height - config->cornerRadius.topLeft - config->cornerRadius.bottomLeft }; + if (config->width.left > 0) { + SDL_SetRenderDrawColor(renderer, CLAY_COLOR_TO_SDL_COLOR_ARGS(config->color)); + SDL_FRect rect = { boundingBox.x, boundingBox.y + config->cornerRadius.topLeft, config->width.left, boundingBox.height - config->cornerRadius.topLeft - config->cornerRadius.bottomLeft }; SDL_RenderFillRectF(renderer, &rect); } - if (config->right.width > 0) { - SDL_SetRenderDrawColor(renderer, CLAY_COLOR_TO_SDL_COLOR_ARGS(config->right.color)); - SDL_FRect rect = { boundingBox.x + boundingBox.width - config->right.width, boundingBox.y + config->cornerRadius.topRight, config->right.width, boundingBox.height - config->cornerRadius.topRight - config->cornerRadius.bottomRight }; + if (config->width.right > 0) { + SDL_SetRenderDrawColor(renderer, CLAY_COLOR_TO_SDL_COLOR_ARGS(config->color)); + SDL_FRect rect = { boundingBox.x + boundingBox.width - config->width.right, boundingBox.y + config->cornerRadius.topRight, config->width.right, boundingBox.height - config->cornerRadius.topRight - config->cornerRadius.bottomRight }; SDL_RenderFillRectF(renderer, &rect); } - if (config->right.width > 0) { - SDL_SetRenderDrawColor(renderer, CLAY_COLOR_TO_SDL_COLOR_ARGS(config->right.color)); - SDL_FRect rect = { boundingBox.x + boundingBox.width - config->right.width, boundingBox.y + config->cornerRadius.topRight, config->right.width, boundingBox.height - config->cornerRadius.topRight - config->cornerRadius.bottomRight }; + if (config->width.right > 0) { + SDL_SetRenderDrawColor(renderer, CLAY_COLOR_TO_SDL_COLOR_ARGS(config->color)); + SDL_FRect rect = { boundingBox.x + boundingBox.width - config->width.right, boundingBox.y + config->cornerRadius.topRight, config->width.right, boundingBox.height - config->cornerRadius.topRight - config->cornerRadius.bottomRight }; SDL_RenderFillRectF(renderer, &rect); } - if (config->top.width > 0) { - SDL_SetRenderDrawColor(renderer, CLAY_COLOR_TO_SDL_COLOR_ARGS(config->right.color)); - SDL_FRect rect = { boundingBox.x + config->cornerRadius.topLeft, boundingBox.y, boundingBox.width - config->cornerRadius.topLeft - config->cornerRadius.topRight, config->top.width }; + if (config->width.top > 0) { + SDL_SetRenderDrawColor(renderer, CLAY_COLOR_TO_SDL_COLOR_ARGS(config->color)); + SDL_FRect rect = { boundingBox.x + config->cornerRadius.topLeft, boundingBox.y, boundingBox.width - config->cornerRadius.topLeft - config->cornerRadius.topRight, config->width.top }; SDL_RenderFillRectF(renderer, &rect); } - if (config->bottom.width > 0) { - SDL_SetRenderDrawColor(renderer, CLAY_COLOR_TO_SDL_COLOR_ARGS(config->bottom.color)); - SDL_FRect rect = { boundingBox.x + config->cornerRadius.bottomLeft, boundingBox.y + boundingBox.height - config->bottom.width, boundingBox.width - config->cornerRadius.bottomLeft - config->cornerRadius.bottomRight, config->bottom.width }; + if (config->width.bottom > 0) { + SDL_SetRenderDrawColor(renderer, CLAY_COLOR_TO_SDL_COLOR_ARGS(config->color)); + SDL_FRect rect = { boundingBox.x + config->cornerRadius.bottomLeft, boundingBox.y + boundingBox.height - config->width.bottom, boundingBox.width - config->cornerRadius.bottomLeft - config->cornerRadius.bottomRight, config->width.bottom }; SDL_RenderFillRectF(renderer, &rect); } diff --git a/renderers/SDL3/clay_renderer_SDL3.c b/renderers/SDL3/clay_renderer_SDL3.c index 583c238..f8d23e8 100644 --- a/renderers/SDL3/clay_renderer_SDL3.c +++ b/renderers/SDL3/clay_renderer_SDL3.c @@ -146,23 +146,20 @@ static void SDL_RenderClayCommands(SDL_Renderer *renderer, Clay_RenderCommandArr switch (rcmd->commandType) { case CLAY_RENDER_COMMAND_TYPE_RECTANGLE: { - const Clay_RectangleElementConfig *config = rcmd->config.rectangleElementConfig; - const Clay_Color color = config->color; - - SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, color.a); + Clay_RectangleRenderData *config = &rcmd->renderData.rectangle; + SDL_SetRenderDrawColor(renderer, config->backgroundColor.r, config->backgroundColor.g, config->backgroundColor.b, config->backgroundColor.a); if (config->cornerRadius.topLeft > 0) { - SDL_RenderFillRoundedRect(renderer, rect, config->cornerRadius.topLeft, color); + SDL_RenderFillRoundedRect(renderer, rect, config->cornerRadius.topLeft, config->backgroundColor); } else { SDL_RenderFillRect(renderer, &rect); } } break; case CLAY_RENDER_COMMAND_TYPE_TEXT: { - const Clay_TextElementConfig *config = rcmd->config.textElementConfig; - const Clay_StringSlice *text = &rcmd->text; + Clay_TextRenderData *config = &rcmd->renderData.text; const 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_Surface *surface = TTF_RenderText_Blended(font, config->stringContents.chars, config->stringContents.length, color); SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, surface); SDL_RenderTexture(renderer, texture, NULL, &rect); @@ -170,7 +167,7 @@ static void SDL_RenderClayCommands(SDL_Renderer *renderer, Clay_RenderCommandArr SDL_DestroyTexture(texture); } break; case CLAY_RENDER_COMMAND_TYPE_BORDER: { - const Clay_BorderElementConfig *config = rcmd->config.borderElementConfig; + Clay_BorderRenderData *config = &rcmd->renderData.border; const float minRadius = SDL_min(rect.w, rect.h) / 2.0f; const Clay_CornerRadius clampedRadii = { @@ -180,32 +177,32 @@ static void SDL_RenderClayCommands(SDL_Renderer *renderer, Clay_RenderCommandArr .bottomRight = SDL_min(config->cornerRadius.bottomRight, minRadius) }; //edges - SDL_SetRenderDrawColor(renderer, config->left.color.r, config->left.color.g, config->left.color.b, config->left.color.a); - if (config->left.width > 0) { + SDL_SetRenderDrawColor(renderer, config->color.r, config->color.g, config->color.b, config->color.a); + if (config->width.left > 0) { const float starting_y = rect.y + clampedRadii.topLeft; const float length = rect.h - clampedRadii.topLeft - clampedRadii.bottomLeft; - SDL_FRect line = { rect.x, starting_y, config->left.width, length }; + SDL_FRect line = { rect.x, starting_y, config->width.left, length }; SDL_RenderFillRect(renderer, &line); } - if (config->right.width > 0) { - const float starting_x = rect.x + rect.w - (float)config->right.width; + if (config->width.right > 0) { + const float starting_x = rect.x + rect.w - (float)config->width.right; const float starting_y = rect.y + clampedRadii.topRight; const float length = rect.h - clampedRadii.topRight - clampedRadii.bottomRight; - SDL_FRect line = { starting_x, starting_y, config->right.width, length }; + SDL_FRect line = { starting_x, starting_y, config->width.right, length }; SDL_RenderFillRect(renderer, &line); } - if (config->top.width > 0) { + if (config->width.top > 0) { const float starting_x = rect.x + clampedRadii.topLeft; const float length = rect.w - clampedRadii.topLeft - clampedRadii.topRight; - SDL_FRect line = { starting_x, rect.y, length, config->top.width }; + SDL_FRect line = { starting_x, rect.y, length, config->width.top }; SDL_RenderFillRect(renderer, &line); } - if (config->bottom.width > 0) { + if (config->width.bottom > 0) { const float starting_x = rect.x + clampedRadii.bottomLeft; - const float starting_y = rect.y + rect.h - (float)config->bottom.width; + const float starting_y = rect.y + rect.h - (float)config->width.bottom; const float length = rect.w - clampedRadii.bottomLeft - clampedRadii.bottomRight; - SDL_FRect line = { starting_x, starting_y, length, config->bottom.width }; - SDL_SetRenderDrawColor(renderer, config->bottom.color.r, config->bottom.color.g, config->bottom.color.b, config->bottom.color.a); + SDL_FRect line = { starting_x, starting_y, length, config->width.bottom }; + SDL_SetRenderDrawColor(renderer, config->color.r, config->color.g, config->color.b, config->color.a); SDL_RenderFillRect(renderer, &line); } //corners @@ -213,25 +210,25 @@ static void SDL_RenderClayCommands(SDL_Renderer *renderer, Clay_RenderCommandArr const float centerX = rect.x + clampedRadii.topLeft -1; const float centerY = rect.y + clampedRadii.topLeft; SDL_RenderArc(renderer, (SDL_FPoint){centerX, centerY}, clampedRadii.topLeft, - 180.0f, 270.0f, config->top.width, config->top.color); + 180.0f, 270.0f, config->width.top, config->color); } if (config->cornerRadius.topRight > 0) { const float centerX = rect.x + rect.w - clampedRadii.topRight -1; const float centerY = rect.y + clampedRadii.topRight; SDL_RenderArc(renderer, (SDL_FPoint){centerX, centerY}, clampedRadii.topRight, - 270.0f, 360.0f, config->top.width, config->top.color); + 270.0f, 360.0f, config->width.top, config->color); } if (config->cornerRadius.bottomLeft > 0) { const float centerX = rect.x + clampedRadii.bottomLeft -1; const float centerY = rect.y + rect.h - clampedRadii.bottomLeft -1; SDL_RenderArc(renderer, (SDL_FPoint){centerX, centerY}, clampedRadii.bottomLeft, - 90.0f, 180.0f, config->bottom.width, config->bottom.color); + 90.0f, 180.0f, config->width.bottom, config->color); } if (config->cornerRadius.bottomRight > 0) { const float centerX = rect.x + rect.w - clampedRadii.bottomRight -1; //TODO: why need to -1 in all calculations??? const float centerY = rect.y + rect.h - clampedRadii.bottomRight -1; SDL_RenderArc(renderer, (SDL_FPoint){centerX, centerY}, clampedRadii.bottomRight, - 0.0f, 90.0f, config->bottom.width, config->bottom.color); + 0.0f, 90.0f, config->width.bottom, config->color); } } break; diff --git a/renderers/cairo/clay_renderer_cairo.c b/renderers/cairo/clay_renderer_cairo.c index c8e3c16..229ca4f 100644 --- a/renderers/cairo/clay_renderer_cairo.c +++ b/renderers/cairo/clay_renderer_cairo.c @@ -26,14 +26,6 @@ #include #include -// TODO: Regarding image support, currently this renderer only -// supports PNG images, this is due to cairo having just PNG as it's -// main file format. We maybe should introduce stb_image to load them -// as bitmaps and feed cairo that way. -#define CLAY_EXTEND_CONFIG_IMAGE Clay_String path; // Filesystem path - -// TODO: We should use the given `uint16_t fontId` instead of doing this. -#define CLAY_EXTEND_CONFIG_TEXT Clay_String fontFamily; // Font family #define CLAY_IMPLEMENTATION #include "../../clay.h" @@ -50,7 +42,7 @@ void Clay_Cairo_Initialize(cairo_t *cairo); // Render the command queue to the `cairo_t*` instance you called // `Clay_Cairo_Initialize` on. -void Clay_Cairo_Render(Clay_RenderCommandArray commands); +void Clay_Cairo_Render(Clay_RenderCommandArray commands, char** fonts); //////////////////////////////// @@ -83,12 +75,13 @@ static inline char *Clay_Cairo__NullTerminate(Clay_String *str) { } // Measure text using cairo's *toy* text API. -static inline Clay_Dimensions Clay_Cairo_MeasureText(Clay_String *str, Clay_TextElementConfig *config, uintptr_t userData) { +static inline Clay_Dimensions Clay_Cairo_MeasureText(Clay_StringSlice str, Clay_TextElementConfig *config, uintptr_t userData) { // Edge case: Clay computes the width of a whitespace character // once. Cairo does not factor in whitespaces when computing text // extents, this edge-case serves as a short-circuit to introduce // (somewhat) sensible values into Clay. - if(str->length == 1 && str->chars[0] == ' ') { + char** fonts = (char**)userData; + if(str.length == 1 && str.chars[0] == ' ') { cairo_text_extents_t te; cairo_text_extents(Clay__Cairo, " ", &te); return (Clay_Dimensions) { @@ -102,8 +95,9 @@ static inline Clay_Dimensions Clay_Cairo_MeasureText(Clay_String *str, Clay_Text } // Ensure string is null-terminated for Cairo - char *text = Clay_Cairo__NullTerminate(str); - char *font_family = Clay_Cairo__NullTerminate(&config->fontFamily); + Clay_String toTerminate = (Clay_String){ str.length, str.chars }; + char *text = Clay_Cairo__NullTerminate(&toTerminate); + char *font_family = fonts[config->fontId]; // Save and reset the Cairo context to avoid unwanted transformations cairo_save(Clay__Cairo); @@ -119,7 +113,6 @@ static inline Clay_Dimensions Clay_Cairo_MeasureText(Clay_String *str, Clay_Text fprintf(stderr, "Failed to get scaled font\n"); cairo_restore(Clay__Cairo); free(text); - free(font_family); return (Clay_Dimensions){0, 0}; } @@ -133,7 +126,6 @@ static inline Clay_Dimensions Clay_Cairo_MeasureText(Clay_String *str, Clay_Text fprintf(stderr, "Failed to generate glyphs: %s\n", cairo_status_to_string(status)); cairo_restore(Clay__Cairo); free(text); - free(font_family); return (Clay_Dimensions){0, 0}; } @@ -149,7 +141,6 @@ static inline Clay_Dimensions Clay_Cairo_MeasureText(Clay_String *str, Clay_Text // Free temporary strings free(text); - free(font_family); // Return dimensions return (Clay_Dimensions){ @@ -191,18 +182,17 @@ void Clay_Cairo__Blit_Surface(cairo_surface_t *src_surface, cairo_surface_t *des cairo_destroy(cr); } -void Clay_Cairo_Render(Clay_RenderCommandArray commands) { +void Clay_Cairo_Render(Clay_RenderCommandArray commands, char** fonts) { cairo_t *cr = Clay__Cairo; for(size_t i = 0; i < commands.length; i++) { Clay_RenderCommand *command = Clay_RenderCommandArray_Get(&commands, i); switch(command->commandType) { case CLAY_RENDER_COMMAND_TYPE_RECTANGLE: { - Clay_RectangleElementConfig *config = command->config.rectangleElementConfig; - Clay_Color color = config->color; + Clay_RectangleRenderData *config = &command->renderData.rectangle; Clay_BoundingBox bb = command->boundingBox; - cairo_set_source_rgba(cr, CLAY_TO_CAIRO(color)); + cairo_set_source_rgba(cr, CLAY_TO_CAIRO(config->backgroundColor)); cairo_new_sub_path(cr); cairo_arc(cr, bb.x + config->cornerRadius.topLeft, @@ -229,14 +219,16 @@ void Clay_Cairo_Render(Clay_RenderCommandArray commands) { case CLAY_RENDER_COMMAND_TYPE_TEXT: { // Cairo expects null terminated strings, we need to clone // to temporarily introduce one. - char *text = Clay_Cairo__NullTerminate(&command->text); - char *font_family = Clay_Cairo__NullTerminate(&command->config.textElementConfig->fontFamily); + Clay_TextRenderData *config = &command->renderData.text; + Clay_String toTerminate = (Clay_String){ config->stringContents.length, config->stringContents.chars }; + char *text = Clay_Cairo__NullTerminate(&toTerminate); + char *font_family = fonts[config->fontId]; Clay_BoundingBox bb = command->boundingBox; - Clay_Color color = command->config.textElementConfig->textColor; + Clay_Color color = config->textColor; cairo_select_font_face(Clay__Cairo, font_family, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); - cairo_set_font_size(cr, command->config.textElementConfig->fontSize); + cairo_set_font_size(cr, config->fontSize); cairo_move_to(cr, bb.x, bb.y + bb.height); @@ -245,11 +237,10 @@ void Clay_Cairo_Render(Clay_RenderCommandArray commands) { cairo_close_path(cr); free(text); - free(font_family); break; } case CLAY_RENDER_COMMAND_TYPE_BORDER: { - Clay_BorderElementConfig *config = command->config.borderElementConfig; + Clay_BorderRenderData *config = &command->renderData.border; Clay_BoundingBox bb = command->boundingBox; double top_left_radius = config->cornerRadius.topLeft / 2.0; @@ -258,9 +249,9 @@ void Clay_Cairo_Render(Clay_RenderCommandArray commands) { double bottom_left_radius = config->cornerRadius.bottomLeft / 2.0; // Draw the top border - if (config->top.width > 0) { - cairo_set_line_width(cr, config->top.width); - cairo_set_source_rgba(cr, CLAY_TO_CAIRO(config->top.color)); + if (config->width.top > 0) { + cairo_set_line_width(cr, config->width.top); + cairo_set_source_rgba(cr, CLAY_TO_CAIRO(config->color)); cairo_new_sub_path(cr); @@ -277,9 +268,9 @@ void Clay_Cairo_Render(Clay_RenderCommandArray commands) { } // Draw the right border - if (config->right.width > 0) { - cairo_set_line_width(cr, config->right.width); - cairo_set_source_rgba(cr, CLAY_TO_CAIRO(config->right.color)); + if (config->width.right > 0) { + cairo_set_line_width(cr, config->width.right); + cairo_set_source_rgba(cr, CLAY_TO_CAIRO(config->color)); cairo_new_sub_path(cr); @@ -296,9 +287,9 @@ void Clay_Cairo_Render(Clay_RenderCommandArray commands) { } // Draw the bottom border - if (config->bottom.width > 0) { - cairo_set_line_width(cr, config->bottom.width); - cairo_set_source_rgba(cr, CLAY_TO_CAIRO(config->bottom.color)); + if (config->width.bottom > 0) { + cairo_set_line_width(cr, config->width.bottom); + cairo_set_source_rgba(cr, CLAY_TO_CAIRO(config->color)); cairo_new_sub_path(cr); @@ -315,9 +306,9 @@ void Clay_Cairo_Render(Clay_RenderCommandArray commands) { } // Draw the left border - if (config->left.width > 0) { - cairo_set_line_width(cr, config->left.width); - cairo_set_source_rgba(cr, CLAY_TO_CAIRO(config->left.color)); + if (config->width.left > 0) { + cairo_set_line_width(cr, config->width.left); + cairo_set_source_rgba(cr, CLAY_TO_CAIRO(config->color)); cairo_new_sub_path(cr); @@ -335,10 +326,10 @@ void Clay_Cairo_Render(Clay_RenderCommandArray commands) { break; } case CLAY_RENDER_COMMAND_TYPE_IMAGE: { - Clay_ImageElementConfig *config = command->config.imageElementConfig; + Clay_ImageRenderData *config = &command->renderData.image; Clay_BoundingBox bb = command->boundingBox; - char *path = Clay_Cairo__NullTerminate(&config->path); + char *path = config->imageData; cairo_surface_t *surf = cairo_image_surface_create_from_png(path), *origin = cairo_get_target(cr); @@ -369,7 +360,6 @@ void Clay_Cairo_Render(Clay_RenderCommandArray commands) { // Clean up the source surface cairo_surface_destroy(surf); - free(path); break; } case CLAY_RENDER_COMMAND_TYPE_CUSTOM: { diff --git a/renderers/raylib/clay_renderer_raylib.c b/renderers/raylib/clay_renderer_raylib.c index 0c3ac59..0dbc163 100644 --- a/renderers/raylib/clay_renderer_raylib.c +++ b/renderers/raylib/clay_renderer_raylib.c @@ -8,13 +8,6 @@ #define CLAY_RECTANGLE_TO_RAYLIB_RECTANGLE(rectangle) (Rectangle) { .x = rectangle.x, .y = rectangle.y, .width = rectangle.width, .height = rectangle.height } #define CLAY_COLOR_TO_RAYLIB_COLOR(color) (Color) { .r = (unsigned char)roundf(color.r), .g = (unsigned char)roundf(color.g), .b = (unsigned char)roundf(color.b), .a = (unsigned char)roundf(color.a) } -typedef struct -{ - uint32_t fontId; - Font font; -} Raylib_Font; - -Raylib_Font Raylib_fonts[10]; Camera Raylib_camera; typedef enum @@ -88,7 +81,7 @@ Ray GetScreenToWorldPointWithZDistance(Vector2 position, Camera camera, int scre } -static inline Clay_Dimensions Raylib_MeasureText(Clay_StringSlice text, Clay_TextElementConfig *config, uintptr_t userData) { +static inline Clay_Dimensions Raylib_MeasureText(Clay_StringSlice text, Clay_TextElementConfig *config, void *userData) { // Measure string size for Font Clay_Dimensions textSize = { 0 }; @@ -96,7 +89,8 @@ static inline Clay_Dimensions Raylib_MeasureText(Clay_StringSlice text, Clay_Tex float lineTextWidth = 0; float textHeight = config->fontSize; - Font fontToUse = Raylib_fonts[config->fontId].font; + Font* fonts = (Font*)userData; + Font fontToUse = fonts[config->fontId]; // Font failed to load, likely the fonts are in the wrong place relative to the execution dir if (!fontToUse.glyphs) return textSize; @@ -128,7 +122,7 @@ void Clay_Raylib_Initialize(int width, int height, const char *title, unsigned i // EnableEventWaiting(); } -void Clay_Raylib_Render(Clay_RenderCommandArray renderCommands) +void Clay_Raylib_Render(Clay_RenderCommandArray renderCommands, Font* fonts) { for (int j = 0; j < renderCommands.length; j++) { @@ -138,23 +132,27 @@ void Clay_Raylib_Render(Clay_RenderCommandArray renderCommands) { case CLAY_RENDER_COMMAND_TYPE_TEXT: { // Raylib uses standard C strings so isn't compatible with cheap slices, we need to clone the string to append null terminator - Clay_StringSlice text = renderCommand->text; - char *cloned = (char *)malloc(text.length + 1); - memcpy(cloned, text.chars, text.length); - cloned[text.length] = '\0'; - Font fontToUse = Raylib_fonts[renderCommand->config.textElementConfig->fontId].font; - DrawTextEx(fontToUse, cloned, (Vector2){boundingBox.x, boundingBox.y}, (float)renderCommand->config.textElementConfig->fontSize, (float)renderCommand->config.textElementConfig->letterSpacing, CLAY_COLOR_TO_RAYLIB_COLOR(renderCommand->config.textElementConfig->textColor)); + Clay_TextRenderData *textData = &renderCommand->renderData.text; + char *cloned = (char *)malloc(textData->stringContents.length + 1); + memcpy(cloned, textData->stringContents.chars, textData->stringContents.length); + cloned[textData->stringContents.length] = '\0'; + Font fontToUse = fonts[textData->fontId]; + DrawTextEx(fontToUse, cloned, (Vector2){boundingBox.x, boundingBox.y}, (float)textData->fontSize, (float)textData->letterSpacing, CLAY_COLOR_TO_RAYLIB_COLOR(textData->textColor)); free(cloned); break; } case CLAY_RENDER_COMMAND_TYPE_IMAGE: { - Texture2D imageTexture = *(Texture2D *)renderCommand->config.imageElementConfig->imageData; + Texture2D imageTexture = *(Texture2D *)renderCommand->renderData.image.imageData; + Clay_Color tintColor = renderCommand->renderData.image.backgroundColor; + if (tintColor.r == 0 && tintColor.g == 0 || tintColor.b == 0 || tintColor.a == 0) { + tintColor = (Clay_Color) { 255, 255, 255, 255 }; + } DrawTextureEx( - imageTexture, - (Vector2){boundingBox.x, boundingBox.y}, - 0, - boundingBox.width / (float)imageTexture.width, - WHITE); + imageTexture, + (Vector2){boundingBox.x, boundingBox.y}, + 0, + boundingBox.width / (float)imageTexture.width, + CLAY_COLOR_TO_RAYLIB_COLOR(tintColor)); break; } case CLAY_RENDER_COMMAND_TYPE_SCISSOR_START: { @@ -166,49 +164,50 @@ void Clay_Raylib_Render(Clay_RenderCommandArray renderCommands) break; } case CLAY_RENDER_COMMAND_TYPE_RECTANGLE: { - Clay_RectangleElementConfig *config = renderCommand->config.rectangleElementConfig; + Clay_RectangleRenderData *config = &renderCommand->renderData.rectangle; if (config->cornerRadius.topLeft > 0) { float radius = (config->cornerRadius.topLeft * 2) / (float)((boundingBox.width > boundingBox.height) ? boundingBox.height : boundingBox.width); - DrawRectangleRounded((Rectangle) { boundingBox.x, boundingBox.y, boundingBox.width, boundingBox.height }, radius, 8, CLAY_COLOR_TO_RAYLIB_COLOR(config->color)); + DrawRectangleRounded((Rectangle) { boundingBox.x, boundingBox.y, boundingBox.width, boundingBox.height }, radius, 8, CLAY_COLOR_TO_RAYLIB_COLOR(config->backgroundColor)); } else { - DrawRectangle(boundingBox.x, boundingBox.y, boundingBox.width, boundingBox.height, CLAY_COLOR_TO_RAYLIB_COLOR(config->color)); + DrawRectangle(boundingBox.x, boundingBox.y, boundingBox.width, boundingBox.height, CLAY_COLOR_TO_RAYLIB_COLOR(config->backgroundColor)); } break; } case CLAY_RENDER_COMMAND_TYPE_BORDER: { - Clay_BorderElementConfig *config = renderCommand->config.borderElementConfig; + Clay_BorderRenderData *config = &renderCommand->renderData.border; // Left border - if (config->left.width > 0) { - DrawRectangle((int)roundf(boundingBox.x), (int)roundf(boundingBox.y + config->cornerRadius.topLeft), (int)config->left.width, (int)roundf(boundingBox.height - config->cornerRadius.topLeft - config->cornerRadius.bottomLeft), CLAY_COLOR_TO_RAYLIB_COLOR(config->left.color)); + if (config->width.left > 0) { + DrawRectangle((int)roundf(boundingBox.x), (int)roundf(boundingBox.y + config->cornerRadius.topLeft), (int)config->width.left, (int)roundf(boundingBox.height - config->cornerRadius.topLeft - config->cornerRadius.bottomLeft), CLAY_COLOR_TO_RAYLIB_COLOR(config->color)); } // Right border - if (config->right.width > 0) { - DrawRectangle((int)roundf(boundingBox.x + boundingBox.width - config->right.width), (int)roundf(boundingBox.y + config->cornerRadius.topRight), (int)config->right.width, (int)roundf(boundingBox.height - config->cornerRadius.topRight - config->cornerRadius.bottomRight), CLAY_COLOR_TO_RAYLIB_COLOR(config->right.color)); + if (config->width.right > 0) { + DrawRectangle((int)roundf(boundingBox.x + boundingBox.width - config->width.right), (int)roundf(boundingBox.y + config->cornerRadius.topRight), (int)config->width.right, (int)roundf(boundingBox.height - config->cornerRadius.topRight - config->cornerRadius.bottomRight), CLAY_COLOR_TO_RAYLIB_COLOR(config->color)); } // Top border - if (config->top.width > 0) { - DrawRectangle((int)roundf(boundingBox.x + config->cornerRadius.topLeft), (int)roundf(boundingBox.y), (int)roundf(boundingBox.width - config->cornerRadius.topLeft - config->cornerRadius.topRight), (int)config->top.width, CLAY_COLOR_TO_RAYLIB_COLOR(config->top.color)); + if (config->width.top > 0) { + DrawRectangle((int)roundf(boundingBox.x + config->cornerRadius.topLeft), (int)roundf(boundingBox.y), (int)roundf(boundingBox.width - config->cornerRadius.topLeft - config->cornerRadius.topRight), (int)config->width.top, CLAY_COLOR_TO_RAYLIB_COLOR(config->color)); } // Bottom border - if (config->bottom.width > 0) { - DrawRectangle((int)roundf(boundingBox.x + config->cornerRadius.bottomLeft), (int)roundf(boundingBox.y + boundingBox.height - config->bottom.width), (int)roundf(boundingBox.width - config->cornerRadius.bottomLeft - config->cornerRadius.bottomRight), (int)config->bottom.width, CLAY_COLOR_TO_RAYLIB_COLOR(config->bottom.color)); + if (config->width.bottom > 0) { + DrawRectangle((int)roundf(boundingBox.x + config->cornerRadius.bottomLeft), (int)roundf(boundingBox.y + boundingBox.height - config->width.bottom), (int)roundf(boundingBox.width - config->cornerRadius.bottomLeft - config->cornerRadius.bottomRight), (int)config->width.bottom, CLAY_COLOR_TO_RAYLIB_COLOR(config->color)); } if (config->cornerRadius.topLeft > 0) { - DrawRing((Vector2) { roundf(boundingBox.x + config->cornerRadius.topLeft), roundf(boundingBox.y + config->cornerRadius.topLeft) }, roundf(config->cornerRadius.topLeft - config->top.width), config->cornerRadius.topLeft, 180, 270, 10, CLAY_COLOR_TO_RAYLIB_COLOR(config->top.color)); + DrawRing((Vector2) { roundf(boundingBox.x + config->cornerRadius.topLeft), roundf(boundingBox.y + config->cornerRadius.topLeft) }, roundf(config->cornerRadius.topLeft - config->width.top), config->cornerRadius.topLeft, 180, 270, 10, CLAY_COLOR_TO_RAYLIB_COLOR(config->color)); } if (config->cornerRadius.topRight > 0) { - DrawRing((Vector2) { roundf(boundingBox.x + boundingBox.width - config->cornerRadius.topRight), roundf(boundingBox.y + config->cornerRadius.topRight) }, roundf(config->cornerRadius.topRight - config->top.width), config->cornerRadius.topRight, 270, 360, 10, CLAY_COLOR_TO_RAYLIB_COLOR(config->top.color)); + DrawRing((Vector2) { roundf(boundingBox.x + boundingBox.width - config->cornerRadius.topRight), roundf(boundingBox.y + config->cornerRadius.topRight) }, roundf(config->cornerRadius.topRight - config->width.top), config->cornerRadius.topRight, 270, 360, 10, CLAY_COLOR_TO_RAYLIB_COLOR(config->color)); } if (config->cornerRadius.bottomLeft > 0) { - DrawRing((Vector2) { roundf(boundingBox.x + config->cornerRadius.bottomLeft), roundf(boundingBox.y + boundingBox.height - config->cornerRadius.bottomLeft) }, roundf(config->cornerRadius.bottomLeft - config->top.width), config->cornerRadius.bottomLeft, 90, 180, 10, CLAY_COLOR_TO_RAYLIB_COLOR(config->bottom.color)); + DrawRing((Vector2) { roundf(boundingBox.x + config->cornerRadius.bottomLeft), roundf(boundingBox.y + boundingBox.height - config->cornerRadius.bottomLeft) }, roundf(config->cornerRadius.bottomLeft - config->width.top), config->cornerRadius.bottomLeft, 90, 180, 10, CLAY_COLOR_TO_RAYLIB_COLOR(config->color)); } if (config->cornerRadius.bottomRight > 0) { - DrawRing((Vector2) { roundf(boundingBox.x + boundingBox.width - config->cornerRadius.bottomRight), roundf(boundingBox.y + boundingBox.height - config->cornerRadius.bottomRight) }, roundf(config->cornerRadius.bottomRight - config->bottom.width), config->cornerRadius.bottomRight, 0.1, 90, 10, CLAY_COLOR_TO_RAYLIB_COLOR(config->bottom.color)); + DrawRing((Vector2) { roundf(boundingBox.x + boundingBox.width - config->cornerRadius.bottomRight), roundf(boundingBox.y + boundingBox.height - config->cornerRadius.bottomRight) }, roundf(config->cornerRadius.bottomRight - config->width.bottom), config->cornerRadius.bottomRight, 0.1, 90, 10, CLAY_COLOR_TO_RAYLIB_COLOR(config->color)); } break; } case CLAY_RENDER_COMMAND_TYPE_CUSTOM: { - CustomLayoutElement *customElement = (CustomLayoutElement *)renderCommand->config.customElementConfig->customData; + Clay_CustomRenderData *config = &renderCommand->renderData.custom; + CustomLayoutElement *customElement = (CustomLayoutElement *)config->customData; if (!customElement) continue; switch (customElement->type) { case CUSTOM_LAYOUT_ELEMENT_TYPE_3D_MODEL: {