mirror of
https://github.com/nicbarker/clay.git
synced 2026-02-06 12:48:49 +00:00
SetMesureText and SetQueryScrollOffset takes userData (#212)
This commit is contained in:
parent
8e7e30dda6
commit
e8025cc254
12 changed files with 44 additions and 31 deletions
32
clay.h
32
clay.h
|
|
@ -1,4 +1,4 @@
|
|||
// VERSION: 0.11
|
||||
// VERSION: 0.12
|
||||
|
||||
/*
|
||||
NOTE: In order to use this library you must define
|
||||
|
|
@ -527,8 +527,8 @@ 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_String *text, Clay_TextElementConfig *config));
|
||||
void Clay_SetQueryScrollOffsetFunction(Clay_Vector2 (*queryScrollOffsetFunction)(uint32_t elementId));
|
||||
void Clay_SetMeasureTextFunction(Clay_Dimensions (*measureTextFunction)(Clay_String *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_RenderCommand * Clay_RenderCommandArray_Get(Clay_RenderCommandArray* array, int32_t index);
|
||||
void Clay_SetDebugModeEnabled(bool enabled);
|
||||
bool Clay_IsDebugModeEnabled(void);
|
||||
|
|
@ -1407,6 +1407,8 @@ struct Clay_Context {
|
|||
uint32_t debugSelectedElementId;
|
||||
uint32_t generation;
|
||||
uintptr_t arenaResetOffset;
|
||||
uintptr_t mesureTextUserData;
|
||||
uintptr_t queryScrollOffsetUserData;
|
||||
Clay_Arena internalArena;
|
||||
// Layout Elements / Render Commands
|
||||
Clay_LayoutElementArray layoutElements;
|
||||
|
|
@ -1480,11 +1482,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_String *text, Clay_TextElementConfig *config);
|
||||
__attribute__((import_module("clay"), import_name("queryScrollOffsetFunction"))) Clay_Vector2 Clay__QueryScrollOffset(uint32_t elementId);
|
||||
__attribute__((import_module("clay"), import_name("measureTextFunction"))) Clay_Dimensions Clay__MeasureText(Clay_String *text, Clay_TextElementConfig *config, uintptr_t userData);
|
||||
__attribute__((import_module("clay"), import_name("queryScrollOffsetFunction"))) Clay_Vector2 Clay__QueryScrollOffset(uint32_t elementId, uintptr_t userData);
|
||||
#else
|
||||
Clay_Dimensions (*Clay__MeasureText)(Clay_String *text, Clay_TextElementConfig *config);
|
||||
Clay_Vector2 (*Clay__QueryScrollOffset)(uint32_t elementId);
|
||||
Clay_Dimensions (*Clay__MeasureText)(Clay_String *text, Clay_TextElementConfig *config, uintptr_t userData);
|
||||
Clay_Vector2 (*Clay__QueryScrollOffset)(uint32_t elementId, uintptr_t userData);
|
||||
#endif
|
||||
|
||||
Clay_LayoutElement* Clay__GetOpenLayoutElement(void) {
|
||||
|
|
@ -1699,7 +1701,7 @@ Clay__MeasureTextCacheItem *Clay__MeasureTextCached(Clay_String *text, Clay_Text
|
|||
float lineWidth = 0;
|
||||
float measuredWidth = 0;
|
||||
float measuredHeight = 0;
|
||||
float spaceWidth = Clay__MeasureText(&CLAY__SPACECHAR, config).width;
|
||||
float spaceWidth = Clay__MeasureText(&CLAY__SPACECHAR, config, context->mesureTextUserData).width;
|
||||
Clay__MeasuredWord tempWord = { .next = -1 };
|
||||
Clay__MeasuredWord *previousWord = &tempWord;
|
||||
while (end < text->length) {
|
||||
|
|
@ -1717,7 +1719,7 @@ Clay__MeasureTextCacheItem *Clay__MeasureTextCached(Clay_String *text, Clay_Text
|
|||
if (current == ' ' || current == '\n') {
|
||||
int32_t length = end - start;
|
||||
Clay_String word = { .length = length, .chars = &text->chars[start] };
|
||||
Clay_Dimensions dimensions = Clay__MeasureText(&word, config);
|
||||
Clay_Dimensions dimensions = Clay__MeasureText(&word, config, context->mesureTextUserData);
|
||||
measuredHeight = CLAY__MAX(measuredHeight, dimensions.height);
|
||||
if (current == ' ') {
|
||||
dimensions.width += spaceWidth;
|
||||
|
|
@ -1740,7 +1742,7 @@ Clay__MeasureTextCacheItem *Clay__MeasureTextCached(Clay_String *text, Clay_Text
|
|||
}
|
||||
if (end - start > 0) {
|
||||
Clay_String lastWord = { .length = end - start, .chars = &text->chars[start] };
|
||||
Clay_Dimensions dimensions = Clay__MeasureText(&lastWord, config);
|
||||
Clay_Dimensions dimensions = Clay__MeasureText(&lastWord, config, context->mesureTextUserData);
|
||||
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);
|
||||
|
|
@ -1902,7 +1904,7 @@ void Clay__ElementPostConfiguration(void) {
|
|||
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);
|
||||
scrollOffset->scrollPosition = Clay__QueryScrollOffset(scrollOffset->elementId, context->queryScrollOffsetUserData);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -3678,11 +3680,15 @@ Clay_Arena Clay_CreateArenaWithCapacityAndMemory(uint32_t capacity, void *offset
|
|||
}
|
||||
|
||||
#ifndef CLAY_WASM
|
||||
void Clay_SetMeasureTextFunction(Clay_Dimensions (*measureTextFunction)(Clay_String *text, Clay_TextElementConfig *config)) {
|
||||
void Clay_SetMeasureTextFunction(Clay_Dimensions (*measureTextFunction)(Clay_String *text, Clay_TextElementConfig *config, uintptr_t userData), uintptr_t userData) {
|
||||
Clay_Context* context = Clay_GetCurrentContext();
|
||||
Clay__MeasureText = measureTextFunction;
|
||||
context->mesureTextUserData = userData;
|
||||
}
|
||||
void Clay_SetQueryScrollOffsetFunction(Clay_Vector2 (*queryScrollOffsetFunction)(uint32_t elementId)) {
|
||||
void Clay_SetQueryScrollOffsetFunction(Clay_Vector2 (*queryScrollOffsetFunction)(uint32_t elementId, uintptr_t userData), uintptr_t userData) {
|
||||
Clay_Context* context = Clay_GetCurrentContext();
|
||||
Clay__QueryScrollOffset = queryScrollOffsetFunction;
|
||||
context->queryScrollOffsetUserData = userData;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue