diff --git a/src/ui/ui_widgets.cpp b/src/ui/ui_widgets.cpp index 19490af..d166e01 100644 --- a/src/ui/ui_widgets.cpp +++ b/src/ui/ui_widgets.cpp @@ -683,16 +683,26 @@ B32 ui_dropdown(const char *id, const char **options, S32 count, S32 *selected) } } - // Draw dropdown list if open + // Draw dropdown list if open (floating so it escapes modal/container clipping) if (is_open) { Clay_ElementId list_id = WIDI(id, 502); + float header_width = Clay_GetElementData(eid).boundingBox.width; CLAY(list_id, .layout = { - .sizing = { .width = CLAY_SIZING_GROW(), .height = CLAY_SIZING_FIT() }, + .sizing = { .width = CLAY_SIZING_FIT(.min = header_width), .height = CLAY_SIZING_FIT() }, .layoutDirection = CLAY_TOP_TO_BOTTOM, }, .backgroundColor = g_theme.bg_dark, - .border = { .color = g_theme.border, .width = { 1, 1, 1, 1 } } + .border = { .color = g_theme.border, .width = { 1, 1, 1, 1 } }, + .floating = { + .parentId = eid.id, + .zIndex = 2000, + .attachPoints = { + .element = CLAY_ATTACH_POINT_LEFT_TOP, + .parent = CLAY_ATTACH_POINT_LEFT_BOTTOM, + }, + .attachTo = CLAY_ATTACH_TO_ELEMENT_WITH_ID, + } ) { for (S32 i = 0; i < count; i++) { B32 is_item_selected = (*selected == i);