From a6a1ac6ee6614a9cde27164c6beb8907e02f46d9 Mon Sep 17 00:00:00 2001 From: FintasticMan Date: Sat, 28 Dec 2024 12:53:40 +0000 Subject: [PATCH 1/2] [Core] Simplify CLAY macro --- clay.h | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/clay.h b/clay.h index 02b84aa..34f592a 100644 --- a/clay.h +++ b/clay.h @@ -90,27 +90,16 @@ #define CLAY_STRING(string) (CLAY__INIT(Clay_String) { .length = CLAY__STRING_LENGTH(string), .chars = (string) }) -static int CLAY__ELEMENT_DEFINITION_LATCH = 0; +static uint8_t CLAY__ELEMENT_DEFINITION_LATCH; -#define CLAY__ELEMENT_INTERNAL(...) \ +// Publicly visible layout element macros ----------------------------------------------------- +#define CLAY(...) \ for (\ - CLAY__ELEMENT_DEFINITION_LATCH = (Clay__OpenElement(), __VA_ARGS__, Clay__ElementPostConfiguration(), 0); \ + CLAY__ELEMENT_DEFINITION_LATCH = (Clay__OpenElement(), ##__VA_ARGS__, Clay__ElementPostConfiguration(), 0); \ CLAY__ELEMENT_DEFINITION_LATCH < 1; \ ++CLAY__ELEMENT_DEFINITION_LATCH, Clay__CloseElement() \ ) -#define CLAY__6_ARGS(a, b, c, d, e, f) a, b, c, d, e, f -#define CLAY__5_ARGS(a, b, c, d, e) a, b, c, d, e -#define CLAY__4_ARGS(a, b, c, d) a, b, c, d -#define CLAY__3_ARGS(a, b, c) a, b, c -#define CLAY__2_ARGS(a, b) a, b -#define CLAY__1_ARGS(a) a -#define CLAY__0_ARGS() Clay__Noop() -#define CLAY__ARGS_OVERRIDE(_0, _1, _2, _3, _4, _5, _6, NAME, ...) NAME - -// Publicly visible layout element macros ----------------------------------------------------- -#define CLAY(...) CLAY__ELEMENT_INTERNAL(CLAY__ARGS_OVERRIDE("empty", ##__VA_ARGS__, CLAY__6_ARGS, CLAY__5_ARGS, CLAY__4_ARGS, CLAY__3_ARGS, CLAY__2_ARGS, CLAY__1_ARGS, CLAY__0_ARGS)(__VA_ARGS__)) - #define CLAY_TEXT(text, textConfig) Clay__OpenTextElement(text, textConfig) #ifdef __cplusplus @@ -502,7 +491,6 @@ Clay_CustomElementConfig * Clay__StoreCustomElementConfig(Clay_CustomElementConf Clay_ScrollElementConfig * Clay__StoreScrollElementConfig(Clay_ScrollElementConfig config); Clay_BorderElementConfig * Clay__StoreBorderElementConfig(Clay_BorderElementConfig config); Clay_ElementId Clay__HashString(Clay_String key, uint32_t offset, uint32_t seed); -void Clay__Noop(void); void Clay__OpenTextElement(Clay_String text, Clay_TextElementConfig *textConfig); extern Clay_Color Clay__debugViewHighlightColor; @@ -536,8 +524,6 @@ void Clay__ErrorHandlerFunctionDefault(Clay_ErrorData errorText) { } Clay_ErrorHandler Clay__errorHandler = { .errorHandlerFunction = Clay__ErrorHandlerFunctionDefault }; -void Clay__Noop(void) {} - Clay_String CLAY__SPACECHAR = { .length = 1, .chars = " " }; Clay_String CLAY__STRING_DEFAULT = { .length = 0, .chars = NULL }; From 46fb24f3d5f900d837de1ff11177c4109539751c Mon Sep 17 00:00:00 2001 From: FintasticMan Date: Mon, 30 Dec 2024 19:48:27 +0100 Subject: [PATCH 2/2] [Core] Add "strict" mode for strict C99 compliance This removes the ##__VA_ARGS__, at a slight reduction in usability. --- clay.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/clay.h b/clay.h index 34f592a..47ea5f5 100644 --- a/clay.h +++ b/clay.h @@ -64,6 +64,8 @@ #define CLAY_CORNER_RADIUS(radius) (CLAY__INIT(Clay_CornerRadius) { radius, radius, radius, radius }) +#ifndef CLAY_STRICT + #define CLAY__STRUCT_1_ARGS(a) a #define CLAY__STRUCT_0_ARGS() {0} #define CLAY__STRUCT_OVERRIDE(_0, _1, NAME, ...) NAME @@ -74,6 +76,13 @@ #define CLAY__SIZING_GROW_INTERNAL(...) (CLAY__INIT(Clay_SizingAxis) { .size = { .minMax = __VA_ARGS__ }, .type = CLAY__SIZING_TYPE_GROW }) #define CLAY_SIZING_GROW(...) CLAY__SIZING_GROW_INTERNAL(CLAY__STRUCT_OVERRIDE("empty", ##__VA_ARGS__, CLAY__STRUCT_1_ARGS, CLAY__STRUCT_0_ARGS)(__VA_ARGS__)) +#else + +#define CLAY_SIZING_FIT(...) (CLAY__INIT(Clay_SizingAxis) { .size = { .minMax = __VA_ARGS__ }, .type = CLAY__SIZING_TYPE_FIT }) +#define CLAY_SIZING_GROW(...) (CLAY__INIT(Clay_SizingAxis) { .size = { .minMax = __VA_ARGS__ }, .type = CLAY__SIZING_TYPE_GROW }) + +#endif // CLAY_STRICT + #define CLAY_SIZING_FIXED(fixedSize) (CLAY__INIT(Clay_SizingAxis) { .size = { .minMax = { fixedSize, fixedSize } }, .type = CLAY__SIZING_TYPE_FIXED }) #define CLAY_SIZING_PERCENT(percentOfParent) (CLAY__INIT(Clay_SizingAxis) { .size = { .percent = (percentOfParent) }, .type = CLAY__SIZING_TYPE_PERCENT }) @@ -93,12 +102,21 @@ static uint8_t CLAY__ELEMENT_DEFINITION_LATCH; // Publicly visible layout element macros ----------------------------------------------------- +#ifndef CLAY_STRICT #define CLAY(...) \ for (\ CLAY__ELEMENT_DEFINITION_LATCH = (Clay__OpenElement(), ##__VA_ARGS__, Clay__ElementPostConfiguration(), 0); \ CLAY__ELEMENT_DEFINITION_LATCH < 1; \ ++CLAY__ELEMENT_DEFINITION_LATCH, Clay__CloseElement() \ ) +#else +#define CLAY(...) \ + for (\ + CLAY__ELEMENT_DEFINITION_LATCH = (Clay__OpenElement(), __VA_ARGS__, Clay__ElementPostConfiguration(), 0); \ + CLAY__ELEMENT_DEFINITION_LATCH < 1; \ + ++CLAY__ELEMENT_DEFINITION_LATCH, Clay__CloseElement() \ + ) +#endif #define CLAY_TEXT(text, textConfig) Clay__OpenTextElement(text, textConfig)