fixes for html renderer

This commit is contained in:
Nic Barker 2024-12-26 19:40:44 +13:00
parent f335ad09e2
commit 2603add03c
2 changed files with 23 additions and 21 deletions

9
clay.h
View File

@ -1569,6 +1569,7 @@ Clay__MeasuredWord *Clay__AddMeasuredWord(Clay__MeasuredWord word, Clay__Measure
} }
Clay__MeasureTextCacheItem *Clay__MeasureTextCached(Clay_String *text, Clay_TextElementConfig *config) { Clay__MeasureTextCacheItem *Clay__MeasureTextCached(Clay_String *text, Clay_TextElementConfig *config) {
#ifndef CLAY_WASM
if (!Clay__MeasureText) { if (!Clay__MeasureText) {
Clay__errorHandler.errorHandlerFunction(CLAY__INIT(Clay_ErrorData) { Clay__errorHandler.errorHandlerFunction(CLAY__INIT(Clay_ErrorData) {
.errorType = CLAY_ERROR_TYPE_TEXT_MEASUREMENT_FUNCTION_NOT_PROVIDED, .errorType = CLAY_ERROR_TYPE_TEXT_MEASUREMENT_FUNCTION_NOT_PROVIDED,
@ -1576,8 +1577,9 @@ Clay__MeasureTextCacheItem *Clay__MeasureTextCached(Clay_String *text, Clay_Text
.userData = Clay__errorHandler.userData }); .userData = Clay__errorHandler.userData });
return NULL; return NULL;
} }
#endif
uint32_t id = Clay__HashTextWithConfig(text, config); uint32_t id = Clay__HashTextWithConfig(text, config);
uint32_t hashBucket = id % (Clay__maxMeasureTextCacheWordCount / 8); uint32_t hashBucket = id % (Clay__maxMeasureTextCacheWordCount / 32);
int32_t elementIndexPrevious = 0; int32_t elementIndexPrevious = 0;
int32_t elementIndex = Clay__measureTextHashMap.internalArray[hashBucket]; int32_t elementIndex = Clay__measureTextHashMap.internalArray[hashBucket];
while (elementIndex != 0) { while (elementIndex != 0) {
@ -3474,7 +3476,7 @@ void Clay__RenderDebugView() {
CLAY_WASM_EXPORT("Clay_MinMemorySize") CLAY_WASM_EXPORT("Clay_MinMemorySize")
uint32_t Clay_MinMemorySize() { uint32_t Clay_MinMemorySize() {
Clay_Arena fakeArena = CLAY__INIT(Clay_Arena) { .capacity = INT64_MAX }; Clay_Arena fakeArena = CLAY__INIT(Clay_Arena) { .capacity = SIZE_MAX };
Clay__InitializePersistentMemory(&fakeArena); Clay__InitializePersistentMemory(&fakeArena);
Clay__InitializeEphemeralMemory(&fakeArena); Clay__InitializeEphemeralMemory(&fakeArena);
return fakeArena.nextAllocation; return fakeArena.nextAllocation;
@ -3493,9 +3495,6 @@ Clay_Arena Clay_CreateArenaWithCapacityAndMemory(uint32_t capacity, void *offset
void Clay_SetMeasureTextFunction(Clay_Dimensions (*measureTextFunction)(Clay_String *text, Clay_TextElementConfig *config)) { void Clay_SetMeasureTextFunction(Clay_Dimensions (*measureTextFunction)(Clay_String *text, Clay_TextElementConfig *config)) {
Clay__MeasureText = measureTextFunction; Clay__MeasureText = measureTextFunction;
} }
#endif
#ifndef CLAY_WASM
void Clay_SetQueryScrollOffsetFunction(Clay_Vector2 (*queryScrollOffsetFunction)(uint32_t elementId)) { void Clay_SetQueryScrollOffsetFunction(Clay_Vector2 (*queryScrollOffsetFunction)(uint32_t elementId)) {
Clay__QueryScrollOffset = queryScrollOffsetFunction; Clay__QueryScrollOffset = queryScrollOffsetFunction;
} }

View File

@ -311,7 +311,9 @@
}); });
const importObject = { const importObject = {
clay: { measureTextFunction: (addressOfDimensions, textToMeasure, addressOfConfig) => { clay: {
measureTextFunction: (addressOfDimensions, textToMeasure, addressOfConfig) => {
let stringLength = memoryDataView.getUint32(textToMeasure, true); let stringLength = memoryDataView.getUint32(textToMeasure, true);
let pointerToString = memoryDataView.getUint32(textToMeasure + 4, true); let pointerToString = memoryDataView.getUint32(textToMeasure + 4, true);
let textConfig = readStructAtAddress(addressOfConfig, textConfigDefinition); let textConfig = readStructAtAddress(addressOfConfig, textConfigDefinition);
@ -327,7 +329,8 @@
memoryDataView.setFloat32(addressOfOffset, -container.scrollLeft, true); memoryDataView.setFloat32(addressOfOffset, -container.scrollLeft, true);
memoryDataView.setFloat32(addressOfOffset + 4, -container.scrollTop, true); memoryDataView.setFloat32(addressOfOffset + 4, -container.scrollTop, true);
} }
}}, }
},
}; };
const { instance } = await WebAssembly.instantiateStreaming( const { instance } = await WebAssembly.instantiateStreaming(
fetch("/clay/index.wasm"), importObject fetch("/clay/index.wasm"), importObject