From 685526f71efae0cde4c2d40bb3847b24c5a74e6b Mon Sep 17 00:00:00 2001 From: elmfrain Date: Sat, 5 Jul 2025 02:13:13 -0500 Subject: [PATCH] Fix Clay_Hovered() not working with floating elements --- clay.h | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/clay.h b/clay.h index 7adf9ea..e11943f 100644 --- a/clay.h +++ b/clay.h @@ -1141,6 +1141,7 @@ typedef struct { Clay__LayoutElementChildren children; Clay__TextElementData *textElementData; } childrenOrTextContent; + uint16_t floatingChildrenCount; Clay_Dimensions dimensions; Clay_Dimensions minDimensions; Clay_LayoutConfig *layoutConfig; @@ -1776,7 +1777,8 @@ Clay_LayoutElementHashMapItem *Clay__GetHashMapItem(uint32_t id) { Clay_ElementId Clay__GenerateIdForAnonymousElement(Clay_LayoutElement *openLayoutElement) { Clay_Context* context = Clay_GetCurrentContext(); Clay_LayoutElement *parentElement = Clay_LayoutElementArray_Get(&context->layoutElements, Clay__int32_tArray_GetValue(&context->openLayoutElementStack, context->openLayoutElementStack.length - 2)); - Clay_ElementId elementId = Clay__HashNumber(parentElement->childrenOrTextContent.children.length, parentElement->id); + uint32_t offset = parentElement->childrenOrTextContent.children.length + parentElement->floatingChildrenCount; + Clay_ElementId elementId = Clay__HashNumber(offset, parentElement->id); openLayoutElement->id = elementId.id; Clay__AddHashMapItem(elementId, openLayoutElement); Clay__StringArray_Add(&context->layoutElementIdStrings, elementId.stringId); @@ -1917,9 +1919,15 @@ void Clay__CloseElement(void) { // Close the currently open element int32_t closingElementIndex = Clay__int32_tArray_RemoveSwapback(&context->openLayoutElementStack, (int)context->openLayoutElementStack.length - 1); + + // Get the currently open parent openLayoutElement = Clay__GetOpenLayoutElement(); - if (!elementIsFloating && context->openLayoutElementStack.length > 1) { + if (context->openLayoutElementStack.length > 1) { + if(elementIsFloating) { + openLayoutElement->floatingChildrenCount++; + return; + } openLayoutElement->childrenOrTextContent.children.length++; Clay__int32_tArray_Add(&context->layoutElementChildrenBuffer, closingElementIndex); } @@ -4410,7 +4418,7 @@ void Clay_ResetMeasureTextCache(void) { context->measureTextHashMap.length = 0; context->measuredWords.length = 0; context->measuredWordsFreeList.length = 0; - + for (int32_t i = 0; i < context->measureTextHashMap.capacity; ++i) { context->measureTextHashMap.internalArray[i] = 0; } @@ -4444,3 +4452,4 @@ freely, subject to the following restrictions: 3. This notice may not be removed or altered from any source distribution. */ +