diff --git a/bindings/odin/clay-odin/clay.odin b/bindings/odin/clay-odin/clay.odin index a93a0db..b84ebe8 100644 --- a/bindings/odin/clay-odin/clay.odin +++ b/bindings/odin/clay-odin/clay.odin @@ -111,12 +111,13 @@ TextWrapMode :: enum EnumBackingType { } TextElementConfig :: struct { - textColor: Color, - fontId: u16, - fontSize: u16, - letterSpacing: u16, - lineHeight: u16, - wrapMode: TextWrapMode, + textColor: Color, + fontId: u16, + fontSize: u16, + letterSpacing: u16, + lineHeight: u16, + wrapMode: TextWrapMode, + hashStringContents: bool, } ImageElementConfig :: struct { diff --git a/bindings/odin/clay-odin/linux/clay.a b/bindings/odin/clay-odin/linux/clay.a index 95f86f8..02437d8 100644 Binary files a/bindings/odin/clay-odin/linux/clay.a and b/bindings/odin/clay-odin/linux/clay.a differ diff --git a/bindings/odin/clay-odin/macos-arm64/clay.a b/bindings/odin/clay-odin/macos-arm64/clay.a index a79379e..6d539ea 100644 Binary files a/bindings/odin/clay-odin/macos-arm64/clay.a and b/bindings/odin/clay-odin/macos-arm64/clay.a differ diff --git a/bindings/odin/clay-odin/macos/clay.a b/bindings/odin/clay-odin/macos/clay.a index 4d461bc..20c6124 100644 Binary files a/bindings/odin/clay-odin/macos/clay.a and b/bindings/odin/clay-odin/macos/clay.a differ diff --git a/bindings/odin/clay-odin/wasm/clay.o b/bindings/odin/clay-odin/wasm/clay.o index 86a7e93..bf4f8db 100644 Binary files a/bindings/odin/clay-odin/wasm/clay.o and b/bindings/odin/clay-odin/wasm/clay.o differ diff --git a/bindings/odin/clay-odin/windows/clay.lib b/bindings/odin/clay-odin/windows/clay.lib index f5c0dd4..45e430e 100644 Binary files a/bindings/odin/clay-odin/windows/clay.lib and b/bindings/odin/clay-odin/windows/clay.lib differ diff --git a/clay.h b/clay.h index b7d7ae5..ff42f5c 100644 --- a/clay.h +++ b/clay.h @@ -324,6 +324,7 @@ typedef struct { uint16_t letterSpacing; uint16_t lineHeight; Clay_TextElementConfigWrapMode wrapMode; + bool hashStringContents; #ifdef CLAY_EXTEND_CONFIG_TEXT CLAY_EXTEND_CONFIG_TEXT #endif @@ -987,9 +988,18 @@ uint32_t Clay__HashTextWithConfig(Clay_String *text, Clay_TextElementConfig *con uint32_t hash = 0; uintptr_t pointerAsNumber = (uintptr_t)text->chars; - hash += pointerAsNumber; - hash += (hash << 10); - hash ^= (hash >> 6); + if (config->hashStringContents) { + uint32_t maxLengthToHash = CLAY__MIN(text->length, 256); + for (int i = 0; i < maxLengthToHash; i++) { + hash += text->chars[i]; + hash += (hash << 10); + hash ^= (hash >> 6); + } + } else { + hash += pointerAsNumber; + hash += (hash << 10); + hash ^= (hash >> 6); + } hash += text->length; hash += (hash << 10); diff --git a/examples/clay-official-website/build/clay/index.wasm b/examples/clay-official-website/build/clay/index.wasm index 1e11080..3435138 100755 Binary files a/examples/clay-official-website/build/clay/index.wasm and b/examples/clay-official-website/build/clay/index.wasm differ