Start work on touchscreen support

This commit is contained in:
Yousef Khadadeh 2026-02-27 16:16:51 +03:00
parent 815737ce3e
commit ae88521b32
14 changed files with 171 additions and 76 deletions

View file

@ -494,7 +494,8 @@ void Toolbar::close_popup_gui() {
std::erase_if(closePopupData.worldsToClose, [](auto& wPair) {
return wPair.w.expired();
});
CLAY_AUTO_ID({
Clay_ElementId localId = CLAY_ID_LOCAL("INFINIPAINT CLOSE POPUP");
CLAY(localId, {
.layout = {
.sizing = {.width = CLAY_SIZING_FIT(0), .height = CLAY_SIZING_FIT(0, 600) },
.padding = CLAY_PADDING_ALL(io->theme->padding1),
@ -506,7 +507,7 @@ void Toolbar::close_popup_gui() {
.cornerRadius = CLAY_CORNER_RADIUS(io->theme->windowCorners1),
.floating = {.zIndex = 1, .attachPoints = {.element = CLAY_ATTACH_POINT_CENTER_CENTER, .parent = CLAY_ATTACH_POINT_CENTER_CENTER}, .attachTo = CLAY_ATTACH_TO_PARENT}
}) {
gui.obstructing_window();
gui.obstructing_window(localId);
gui.push_id("Close single file popup gui");
gui.text_label("Files may contain unsaved changes");
gui.scroll_bar_area("close file popup gui scroll area", false, [&](float, float, float &) {
@ -614,7 +615,8 @@ void Toolbar::paint_popup(Vector2f popupPos) {
}
void Toolbar::top_toolbar() {
CLAY_AUTO_ID({
Clay_ElementId localId = CLAY_ID_LOCAL("INFINIPAINT TOP TOOLBAR");
CLAY(localId, {
.layout = {
.sizing = {.width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIT(0) },
.padding = CLAY_PADDING_ALL(static_cast<uint16_t>(io->theme->padding1 / 2)),
@ -625,7 +627,7 @@ void Toolbar::top_toolbar() {
.backgroundColor = convert_vec4<Clay_Color>(io->theme->backColor1),
.cornerRadius = CLAY_CORNER_RADIUS(io->theme->windowCorners1)
}) {
gui.obstructing_window();
gui.obstructing_window(localId);
gui.push_id("menu top toolbar");
global_log();
bool menuPopUpJustOpen = false;
@ -701,7 +703,8 @@ void Toolbar::top_toolbar() {
layer_menu(layerMenuPopUpJustOpen);
}
if(menuPopUpOpen) {
CLAY_AUTO_ID({
Clay_ElementId menuPopupId = CLAY_ID_LOCAL("Menu Popup");
CLAY(menuPopupId, {
.layout = {
.sizing = {.width = CLAY_SIZING_FIT(100), .height = CLAY_SIZING_FIT(0) },
.padding = CLAY_PADDING_ALL(io->theme->padding1),
@ -713,7 +716,7 @@ void Toolbar::top_toolbar() {
.cornerRadius = CLAY_CORNER_RADIUS(io->theme->windowCorners1),
.floating = {.offset = {.x = 0, .y = static_cast<float>(io->theme->padding1)}, .attachPoints = {.element = CLAY_ATTACH_POINT_LEFT_TOP, .parent = CLAY_ATTACH_POINT_LEFT_BOTTOM}, .attachTo = CLAY_ATTACH_TO_PARENT}
}) {
gui.obstructing_window();
gui.obstructing_window(menuPopupId);
if(gui.text_button_left_transparent("new file local", "New File")) {
main.new_tab({
.isClient = false
@ -796,7 +799,8 @@ void Toolbar::top_toolbar() {
}
void Toolbar::web_version_welcome() {
CLAY_AUTO_ID({
Clay_ElementId localId = CLAY_ID_LOCAL("Web version welcome");
CLAY(localId, {
.layout = {
.sizing = {.width = CLAY_SIZING_FIXED(700), .height = CLAY_SIZING_FIT(0) },
.padding = CLAY_PADDING_ALL(io->theme->padding1),
@ -808,7 +812,7 @@ void Toolbar::web_version_welcome() {
.cornerRadius = CLAY_CORNER_RADIUS(io->theme->windowCorners1),
.floating = {.attachPoints = {.element = CLAY_ATTACH_POINT_CENTER_CENTER, .parent = CLAY_ATTACH_POINT_CENTER_CENTER}, .attachTo = CLAY_ATTACH_TO_PARENT}
}) {
gui.obstructing_window();
gui.obstructing_window(localId);
gui.push_id("web version welcome gui");
gui.text_label_centered("Welcome to the web version of InfiniPaint!");
gui.text_label(
@ -905,7 +909,8 @@ void Toolbar::update_notification_check() {
}
void Toolbar::update_notification_gui() {
CLAY_AUTO_ID({
Clay_ElementId localId = CLAY_ID_LOCAL("UPDATE NOTIFICATION GUI");
CLAY(localId, {
.layout = {
.sizing = {.width = CLAY_SIZING_FIXED(700), .height = CLAY_SIZING_FIT(0) },
.padding = CLAY_PADDING_ALL(io->theme->padding1),
@ -917,7 +922,7 @@ void Toolbar::update_notification_gui() {
.cornerRadius = CLAY_CORNER_RADIUS(io->theme->windowCorners1),
.floating = {.attachPoints = {.element = CLAY_ATTACH_POINT_CENTER_CENTER, .parent = CLAY_ATTACH_POINT_CENTER_CENTER}, .attachTo = CLAY_ATTACH_TO_PARENT}
}) {
gui.obstructing_window();
gui.obstructing_window(localId);
gui.push_id("update notification gui");
gui.text_label_centered("Update v" + updateCheckerData.newVersionStr + " available!");
if(gui.text_button_wide("download", "Open download page in web browser")) {
@ -938,7 +943,8 @@ void Toolbar::update_notification_gui() {
void Toolbar::grid_menu(bool justOpened) {
if(main.world->gridMan.grids) {
gui.push_id("grid menu");
CLAY_AUTO_ID({
Clay_ElementId localId = CLAY_ID_LOCAL("INFINIPAINT GRID MENU");
CLAY(localId, {
.layout = {
.sizing = {.width = CLAY_SIZING_FIT(300), .height = CLAY_SIZING_FIT(0, 600) },
.padding = CLAY_PADDING_ALL(io->theme->padding1),
@ -950,7 +956,7 @@ void Toolbar::grid_menu(bool justOpened) {
.cornerRadius = CLAY_CORNER_RADIUS(io->theme->windowCorners1),
.floating = {.offset = {.x = 0, .y = static_cast<float>(io->theme->padding1)}, .attachPoints = {.element = CLAY_ATTACH_POINT_RIGHT_TOP, .parent = CLAY_ATTACH_POINT_RIGHT_BOTTOM}, .attachTo = CLAY_ATTACH_TO_PARENT}
}) {
gui.obstructing_window();
gui.obstructing_window(localId);
gui.text_label_centered("Grids");
float entryHeight = 25.0f;
if(main.world->gridMan.grids->empty())
@ -1032,7 +1038,8 @@ void Toolbar::stop_displaying_grid_menu() {
void Toolbar::bookmark_menu(bool justOpened) {
gui.push_id("bookmark menu");
CLAY_AUTO_ID({
Clay_ElementId localId = CLAY_ID_LOCAL("INFINIPAINT BOOKMARK MENU");
CLAY(localId, {
.layout = {
.sizing = {.width = CLAY_SIZING_FIT(300), .height = CLAY_SIZING_FIT(0, 600) },
.padding = CLAY_PADDING_ALL(io->theme->padding1),
@ -1044,7 +1051,7 @@ void Toolbar::bookmark_menu(bool justOpened) {
.cornerRadius = CLAY_CORNER_RADIUS(io->theme->windowCorners1),
.floating = {.offset = {.x = 0, .y = static_cast<float>(io->theme->padding1)}, .attachPoints = {.element = CLAY_ATTACH_POINT_RIGHT_TOP, .parent = CLAY_ATTACH_POINT_RIGHT_BOTTOM}, .attachTo = CLAY_ATTACH_TO_PARENT}
}) {
gui.obstructing_window();
gui.obstructing_window(localId);
gui.text_label_centered("Bookmarks");
main.world->bMan.setup_list_gui("bookmark menu list");
if(io->mouse.leftClick && !Clay_Hovered() && !justOpened) {
@ -1057,7 +1064,8 @@ void Toolbar::bookmark_menu(bool justOpened) {
void Toolbar::layer_menu(bool justOpened) {
gui.push_id("layer menu");
CLAY_AUTO_ID({
Clay_ElementId localId = CLAY_ID_LOCAL("INFINIPAINT LAYER MENU");
CLAY(localId, {
.layout = {
.sizing = {.width = CLAY_SIZING_FIT(300), .height = CLAY_SIZING_FIT(0, 600) },
.padding = CLAY_PADDING_ALL(io->theme->padding1),
@ -1069,7 +1077,7 @@ void Toolbar::layer_menu(bool justOpened) {
.cornerRadius = CLAY_CORNER_RADIUS(io->theme->windowCorners1),
.floating = {.offset = {.x = 0, .y = static_cast<float>(io->theme->padding1)}, .attachPoints = {.element = CLAY_ATTACH_POINT_RIGHT_TOP, .parent = CLAY_ATTACH_POINT_RIGHT_BOTTOM}, .attachTo = CLAY_ATTACH_TO_PARENT}
}) {
gui.obstructing_window();
gui.obstructing_window(localId);
gui.text_label_centered("Layers");
bool hoveringOverDropdown = false;
main.world->drawProg.layerMan.listGUI.setup_list_gui("layer menu list", hoveringOverDropdown);
@ -1111,13 +1119,14 @@ std::unique_ptr<skia::textlayout::Paragraph> Toolbar::build_paragraph_from_chat_
void Toolbar::chat_box() {
constexpr float CHATBOX_WIDTH = 700;
if(main.world->netObjMan.is_connected()) {
CLAY_AUTO_ID({
Clay_ElementId localId = CLAY_ID_LOCAL("INFINIPAINT CHAT BOX OPEN BUTTON");
CLAY(localId, {
.layout = {
.layoutDirection = CLAY_LEFT_TO_RIGHT
},
.floating = {.offset = {static_cast<float>(io->theme->padding1), -static_cast<float>(io->theme->padding1)}, .attachPoints = {.element = CLAY_ATTACH_POINT_LEFT_BOTTOM, .parent = CLAY_ATTACH_POINT_LEFT_BOTTOM}, .attachTo = CLAY_ATTACH_TO_PARENT}
}) {
gui.obstructing_window();
gui.obstructing_window(localId);
gui.push_id("chat box open button");
if(gui.svg_icon_button("Chat Open Button", "data/icons/chat.svg", chatBoxState != CHATBOXSTATE_CLOSE)) {
if(chatBoxState == CHATBOXSTATE_CLOSE)
@ -1128,7 +1137,8 @@ void Toolbar::chat_box() {
gui.pop_id();
}
}
CLAY_AUTO_ID({
Clay_ElementId localId = CLAY_ID_LOCAL("INFINIPAINT CHAT BOX OPEN");
CLAY(localId, {
.layout = {
.sizing = {.width = CLAY_SIZING_FIXED(CHATBOX_WIDTH), .height = CLAY_SIZING_FIT(0) },
.childGap = 0,
@ -1137,7 +1147,7 @@ void Toolbar::chat_box() {
},
.floating = {.offset = {60 + static_cast<float>(io->theme->padding1), -static_cast<float>(io->theme->padding1)}, .attachPoints = {.element = CLAY_ATTACH_POINT_LEFT_BOTTOM, .parent = CLAY_ATTACH_POINT_LEFT_BOTTOM}, .attachTo = CLAY_ATTACH_TO_PARENT}
}) {
gui.obstructing_window();
gui.obstructing_window(localId);
gui.push_id("chat box");
if(chatBoxState == CHATBOXSTATE_JUSTOPEN || chatBoxState == CHATBOXSTATE_OPEN) {
gui.push_id("messages");
@ -1196,7 +1206,8 @@ void Toolbar::chat_box() {
chatMessage.time.update_time_since();
if(chatMessage.time < DISPLAY_TIME) {
float a = 1.0f - lerp_time<float>(chatMessage.time, DISPLAY_TIME, FADE_START_TIME);
CLAY_AUTO_ID({
Clay_ElementId elemId = CLAY_IDI_LOCAL("CHAT MESSAGE ID", id);
CLAY(elemId, {
.layout = {
.sizing = {.width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_FIT(0) },
.padding = CLAY_PADDING_ALL(0),
@ -1207,7 +1218,7 @@ void Toolbar::chat_box() {
.backgroundColor = convert_vec4<Clay_Color>(color_mul_alpha(io->theme->backColor1, a)),
}) {
gui.push_id(id);
gui.obstructing_window();
gui.obstructing_window(elemId);
gui.text_paragraph("text", build_paragraph_from_chat_message(chatMessage, a), CHATBOX_WIDTH);
gui.pop_id();
}
@ -1236,7 +1247,8 @@ void Toolbar::global_log() {
logM.time.update_time_since();
if(logM.time < DISPLAY_TIME) {
float a = 1.0f - lerp_time<float>(logM.time, DISPLAY_TIME, FADE_START_TIME);
CLAY_AUTO_ID({
Clay_ElementId elemId = CLAY_ID_LOCAL("GLOBAL LOG");
CLAY(elemId, {
.layout = {
.sizing = {.width = CLAY_SIZING_FIT(300), .height = CLAY_SIZING_FIT(0) },
.padding = CLAY_PADDING_ALL(io->theme->padding1),
@ -1247,7 +1259,7 @@ void Toolbar::global_log() {
.backgroundColor = convert_vec4<Clay_Color>(color_mul_alpha(io->theme->backColor1, a)),
.cornerRadius = CLAY_CORNER_RADIUS(io->theme->windowCorners1)
}) {
gui.obstructing_window();
gui.obstructing_window(elemId);
SkColor4f c{0, 0, 0, 0};
switch(logM.color) {
case LogMessage::COLOR_NORMAL:
@ -1283,7 +1295,8 @@ void Toolbar::drawing_program_gui() {
.padding = {.top = 40, .bottom = 40}
}
}) {
CLAY_AUTO_ID({
auto localId = CLAY_ID_LOCAL("Drawing program gui color picker left");
CLAY(localId, {
.layout = {
.sizing = {.width = CLAY_SIZING_FIT(300), .height = CLAY_SIZING_FIT(0)},
.padding = CLAY_PADDING_ALL(io->theme->padding1),
@ -1294,7 +1307,7 @@ void Toolbar::drawing_program_gui() {
.backgroundColor = convert_vec4<Clay_Color>(io->theme->backColor1),
.cornerRadius = CLAY_CORNER_RADIUS(io->theme->windowCorners1)
}) {
gui.obstructing_window();
gui.obstructing_window(localId);
isUpdatingColorLeft |= gui.color_picker_items("colorpickerleft", colorLeft, true, 300.0f - io->theme->padding1 * 2.0f);
bool hoveringOnDropdown = false;
isUpdatingColorLeft |= color_palette("colorpickerleftpalette", colorLeft, hoveringOnDropdown);
@ -1314,7 +1327,8 @@ void Toolbar::drawing_program_gui() {
.padding = {.top = 40, .bottom = 40}
}
}) {
CLAY_AUTO_ID({
auto localID = CLAY_ID_LOCAL("Drawing program gui color picker right");
CLAY(localID, {
.layout = {
.sizing = {.width = CLAY_SIZING_FIT(300), .height = CLAY_SIZING_FIT(0)},
.padding = CLAY_PADDING_ALL(io->theme->padding1),
@ -1325,7 +1339,7 @@ void Toolbar::drawing_program_gui() {
.backgroundColor = convert_vec4<Clay_Color>(io->theme->backColor1),
.cornerRadius = CLAY_CORNER_RADIUS(io->theme->windowCorners1)
}) {
gui.obstructing_window();
gui.obstructing_window(localID);
isUpdatingColorRight |= gui.color_picker_items("colorpickerright", colorRight, true, 300.0f - io->theme->padding1 * 2.0f);
bool hoveringOnDropdown = false;
isUpdatingColorRight |= color_palette("colorpickerrightpalette", colorRight, hoveringOnDropdown);
@ -1506,7 +1520,8 @@ void Toolbar::performance_metrics() {
}
void Toolbar::player_list() {
CLAY_AUTO_ID({
Clay_ElementId elemId = CLAY_ID_LOCAL("INFINIPAINT PLAYER LIST");
CLAY(elemId, {
.layout = {
.sizing = {.width = CLAY_SIZING_FIT(500), .height = CLAY_SIZING_FIT(0) },
.padding = CLAY_PADDING_ALL(io->theme->padding1),
@ -1518,7 +1533,7 @@ void Toolbar::player_list() {
.cornerRadius = CLAY_CORNER_RADIUS(io->theme->windowCorners1),
.floating = {.attachPoints = {.element = CLAY_ATTACH_POINT_CENTER_CENTER, .parent = CLAY_ATTACH_POINT_CENTER_CENTER}, .attachTo = CLAY_ATTACH_TO_PARENT}
}) {
gui.obstructing_window();
gui.obstructing_window(elemId);
gui.push_id("client list");
gui.text_label_centered("Player List");
if(!main.world->clientStillConnecting) {
@ -1599,7 +1614,8 @@ void Toolbar::options_menu() {
switch(optionsMenuType) {
case HOST_MENU:
case CONNECT_MENU: {
CLAY_AUTO_ID({
Clay_ElementId elemId = CLAY_ID_LOCAL("INFINIPAINT CONNECT MENU");
CLAY(elemId, {
.layout = {
.sizing = {.width = CLAY_SIZING_FIT(650), .height = CLAY_SIZING_FIT(0) },
.padding = CLAY_PADDING_ALL(io->theme->padding1),
@ -1611,7 +1627,7 @@ void Toolbar::options_menu() {
.cornerRadius = CLAY_CORNER_RADIUS(io->theme->windowCorners1),
.floating = {.attachPoints = {.element = CLAY_ATTACH_POINT_CENTER_CENTER, .parent = CLAY_ATTACH_POINT_CENTER_CENTER}, .attachTo = CLAY_ATTACH_TO_PARENT}
}) {
gui.obstructing_window();
gui.obstructing_window(elemId);
if(optionsMenuType == HOST_MENU) {
gui.push_id("host menu");
std::string oldS = serverToConnectTo;
@ -1666,7 +1682,8 @@ void Toolbar::options_menu() {
.floating = {.attachPoints = {.element = CLAY_ATTACH_POINT_CENTER_CENTER, .parent = CLAY_ATTACH_POINT_CENTER_CENTER}, .attachTo = CLAY_ATTACH_TO_PARENT}
}) {
gui.push_id("gsettings");
CLAY_AUTO_ID({
Clay_ElementId elemId = CLAY_ID_LOCAL("INFINIPAINT GENERAL SETTINGS MENU");
CLAY(elemId, {
.layout = {
.sizing = {.width = CLAY_SIZING_GROW(0), .height = CLAY_SIZING_GROW(0)},
.padding = CLAY_PADDING_ALL(io->theme->padding1),
@ -1675,7 +1692,7 @@ void Toolbar::options_menu() {
.layoutDirection = CLAY_LEFT_TO_RIGHT
}
}) {
gui.obstructing_window();
gui.obstructing_window(elemId);
CLAY_AUTO_ID({
.layout = {
.sizing = {.width = CLAY_SIZING_FIT(150), .height = CLAY_SIZING_GROW(0) },
@ -1913,7 +1930,8 @@ void Toolbar::options_menu() {
break;
}
case LOBBY_INFO_MENU: {
CLAY_AUTO_ID({
Clay_ElementId elemId = CLAY_ID_LOCAL("INFINIPAINT LOBBY INFO MENU");
CLAY(elemId, {
.layout = {
.sizing = {.width = CLAY_SIZING_FIT(650), .height = CLAY_SIZING_FIT(0) },
.padding = CLAY_PADDING_ALL(io->theme->padding1),
@ -1926,7 +1944,7 @@ void Toolbar::options_menu() {
.floating = {.attachPoints = {.element = CLAY_ATTACH_POINT_CENTER_CENTER, .parent = CLAY_ATTACH_POINT_CENTER_CENTER}, .attachTo = CLAY_ATTACH_TO_PARENT}
}) {
gui.push_id("lobby info menu");
gui.obstructing_window();
gui.obstructing_window(elemId);
if(!main.world || !main.world->netObjMan.is_connected())
optionsMenuOpen = false;
else {
@ -1945,7 +1963,8 @@ void Toolbar::options_menu() {
break;
}
case CANVAS_SETTINGS_MENU: {
CLAY_AUTO_ID({
Clay_ElementId elemId = CLAY_ID_LOCAL("INFINIPAINT CANVAS SETTINGS MENU");
CLAY(elemId, {
.layout = {
.sizing = {.width = CLAY_SIZING_FIT(500), .height = CLAY_SIZING_FIT(0) },
.padding = CLAY_PADDING_ALL(io->theme->padding1),
@ -1958,7 +1977,7 @@ void Toolbar::options_menu() {
.floating = {.attachPoints = {.element = CLAY_ATTACH_POINT_CENTER_CENTER, .parent = CLAY_ATTACH_POINT_CENTER_CENTER}, .attachTo = CLAY_ATTACH_TO_PARENT}
}) {
gui.push_id("canvas settings menu");
gui.obstructing_window();
gui.obstructing_window(elemId);
SkColor4f newColorToSet = main.world->canvasTheme.get_back_color();
gui.color_picker_button_field("canvasColor", "Canvas Color", &newColorToSet, false);
main.world->canvasTheme.set_back_color(convert_vec3<Vector3f>(newColorToSet));
@ -1969,7 +1988,8 @@ void Toolbar::options_menu() {
break;
}
case SET_DOWNLOAD_NAME: {
CLAY_AUTO_ID({
Clay_ElementId elemId = CLAY_ID_LOCAL("INFINIPAINT DOWNLOAD NAME MENU");
CLAY(elemId, {
.layout = {
.sizing = {.width = CLAY_SIZING_FIT(500), .height = CLAY_SIZING_FIT(0) },
.padding = CLAY_PADDING_ALL(io->theme->padding1),
@ -1982,7 +2002,7 @@ void Toolbar::options_menu() {
.floating = {.attachPoints = {.element = CLAY_ATTACH_POINT_CENTER_CENTER, .parent = CLAY_ATTACH_POINT_CENTER_CENTER}, .attachTo = CLAY_ATTACH_TO_PARENT}
}) {
gui.push_id("set download name menu");
gui.obstructing_window();
gui.obstructing_window(elemId);
if(!main.world)
optionsMenuOpen = false;
gui.input_text_field("file name", "File Name", &downloadNameSet);
@ -2006,7 +2026,8 @@ void Toolbar::options_menu() {
}
void Toolbar::about_menu_gui() {
CLAY_AUTO_ID({
Clay_ElementId elemId = CLAY_ID_LOCAL("INFINIPAINT ABOUT MENU");
CLAY(elemId, {
.layout = {
.sizing = {.width = CLAY_SIZING_FIXED(700), .height = CLAY_SIZING_FIXED(600) },
.padding = CLAY_PADDING_ALL(io->theme->padding1),
@ -2019,7 +2040,7 @@ void Toolbar::about_menu_gui() {
.floating = {.attachPoints = {.element = CLAY_ATTACH_POINT_CENTER_CENTER, .parent = CLAY_ATTACH_POINT_CENTER_CENTER}, .attachTo = CLAY_ATTACH_TO_PARENT}
}) {
gui.push_id("about menu popup");
gui.obstructing_window();
gui.obstructing_window(elemId);
gui.left_to_right_line_layout([&]() {
gui.push_id("Menu Selector");
CLAY_AUTO_ID({
@ -2088,8 +2109,9 @@ void Toolbar::reload_theme_list() {
void Toolbar::file_picker_gui() {
gui.push_id("filepicker");
Clay_ElementId elemId = CLAY_ID_LOCAL("INFINIPAINT FILE PICKER MENU");
bool isDoneByDoubleClick = false;
CLAY_AUTO_ID({
CLAY(elemId, {
.layout = {
.sizing = {.width = CLAY_SIZING_FIXED(700), .height = CLAY_SIZING_FIXED(500) },
.padding = CLAY_PADDING_ALL(io->theme->padding1),
@ -2101,7 +2123,7 @@ void Toolbar::file_picker_gui() {
.cornerRadius = CLAY_CORNER_RADIUS(io->theme->windowCorners1),
.floating = {.attachPoints = {.element = CLAY_ATTACH_POINT_CENTER_CENTER, .parent = CLAY_ATTACH_POINT_CENTER_CENTER}, .attachTo = CLAY_ATTACH_TO_PARENT}
}) {
gui.obstructing_window();
gui.obstructing_window(elemId);
gui.text_label_centered(filePicker.filePickerWindowName);
gui.left_to_right_line_layout([&]() {
if(gui.svg_icon_button("file picker back button", "data/icons/backarrow.svg", false, 30.0f)) {
@ -2274,6 +2296,8 @@ void Toolbar::start_gui() {
}
gui.io = io;
io->hoverObstructed = false;
io->hoverObstructingAABBs.clear();
io->hoverObstructingCircles.clear();
gui.begin();
}