Add workaround for modifying max element counts before initial context creation

This commit is contained in:
Nic Barker 2025-01-09 19:58:08 +13:00
parent 24501f5380
commit 7f7dd08dd7

18
clay.h
View File

@ -566,6 +566,9 @@ extern uint32_t Clay__debugViewWidth;
#endif #endif
Clay_Context *Clay__currentContext; Clay_Context *Clay__currentContext;
int32_t Clay__defaultMaxElementCount = 8192;
int32_t Clay__defaultMaxMeasureTextWordCacheCount = 16384;
void Clay__ErrorHandlerFunctionDefault(Clay_ErrorData errorText) { void Clay__ErrorHandlerFunctionDefault(Clay_ErrorData errorText) {
(void) errorText; (void) errorText;
} }
@ -3580,8 +3583,8 @@ bool Clay__Array_AddCapacityCheck(int32_t length, int32_t capacity)
CLAY_WASM_EXPORT("Clay_MinMemorySize") CLAY_WASM_EXPORT("Clay_MinMemorySize")
uint32_t Clay_MinMemorySize(void) { uint32_t Clay_MinMemorySize(void) {
Clay_Context fakeContext = { Clay_Context fakeContext = {
.maxElementCount = 8192, .maxElementCount = Clay__defaultMaxElementCount,
.maxMeasureTextCacheWordCount = 16384, .maxMeasureTextCacheWordCount = Clay__defaultMaxMeasureTextWordCacheCount,
.internalArena = { .internalArena = {
.capacity = SIZE_MAX, .capacity = SIZE_MAX,
.memory = (char*)&fakeContext, .memory = (char*)&fakeContext,
@ -3696,7 +3699,7 @@ Clay_Context* Clay_Initialize(Clay_Arena arena, Clay_Dimensions layoutDimensions
Clay_Context* context = Clay__Context_Allocate_Arena(&arena); Clay_Context* context = Clay__Context_Allocate_Arena(&arena);
if (context == NULL) return NULL; if (context == NULL) return NULL;
// DEFAULTS // DEFAULTS
context->maxElementCount = 8192; context->maxElementCount = Clay__defaultMaxElementCount;
context->maxMeasureTextCacheWordCount = context->maxElementCount * 2; context->maxMeasureTextCacheWordCount = context->maxElementCount * 2;
context->errorHandler = CLAY__INIT(Clay_ErrorHandler) { Clay__ErrorHandlerFunctionDefault }; context->errorHandler = CLAY__INIT(Clay_ErrorHandler) { Clay__ErrorHandlerFunctionDefault };
Clay_SetCurrentContext(context); Clay_SetCurrentContext(context);
@ -3986,7 +3989,11 @@ int32_t Clay_GetMaxElementCount(void) {
CLAY_WASM_EXPORT("Clay_SetMaxElementCount") CLAY_WASM_EXPORT("Clay_SetMaxElementCount")
void Clay_SetMaxElementCount(int32_t maxElementCount) { void Clay_SetMaxElementCount(int32_t maxElementCount) {
Clay_Context* context = Clay_GetCurrentContext(); Clay_Context* context = Clay_GetCurrentContext();
if (context) {
context->maxElementCount = maxElementCount; context->maxElementCount = maxElementCount;
} else {
Clay__defaultMaxElementCount = maxElementCount; // TODO: Fix this
}
} }
CLAY_WASM_EXPORT("Clay_GetMaxMeasureTextCacheWordCount") CLAY_WASM_EXPORT("Clay_GetMaxMeasureTextCacheWordCount")
@ -3997,7 +4004,12 @@ int32_t Clay_GetMaxMeasureTextCacheWordCount(void) {
CLAY_WASM_EXPORT("Clay_SetMaxMeasureTextCacheWordCount") CLAY_WASM_EXPORT("Clay_SetMaxMeasureTextCacheWordCount")
void Clay_SetMaxMeasureTextCacheWordCount(int32_t maxMeasureTextCacheWordCount) { void Clay_SetMaxMeasureTextCacheWordCount(int32_t maxMeasureTextCacheWordCount) {
Clay_Context* context = Clay_GetCurrentContext();
if (context) {
Clay__currentContext->maxMeasureTextCacheWordCount = maxMeasureTextCacheWordCount; Clay__currentContext->maxMeasureTextCacheWordCount = maxMeasureTextCacheWordCount;
} else {
Clay__defaultMaxMeasureTextWordCacheCount = maxMeasureTextCacheWordCount; // TODO: Fix this
}
} }
#endif // CLAY_IMPLEMENTATION #endif // CLAY_IMPLEMENTATION