From f4add84a136ecaae07ecc5ff2816bc22a1ba797c Mon Sep 17 00:00:00 2001 From: Bruno Herbelin Date: Wed, 12 Apr 2023 22:51:53 +0200 Subject: [PATCH] BugFix color picker dialog Also blocks UI until color dialog is closed --- src/DisplaysView.cpp | 21 ++++++++++----------- src/UserInterfaceManager.cpp | 10 ++++++++++ 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/DisplaysView.cpp b/src/DisplaysView.cpp index e945ea7..219a2a8 100644 --- a/src/DisplaysView.cpp +++ b/src/DisplaysView.cpp @@ -299,6 +299,9 @@ int DisplaysView::size () void DisplaysView::draw() { + // White ballance color button + static DialogToolkit::ColorPickerDialog whitebalancedialog; + // draw all windows int i = 0; for (; i < Settings::application.num_output_windows; ++i) { @@ -477,9 +480,6 @@ void DisplaysView::draw() ImGui::SameLine(0, g.Style.FramePadding.x); ImGuiToolkit::ButtonIconToggle(11,1,11,1, &Settings::application.windows[1+current_window_].show_pattern, "Test pattern"); - // White ballance color button - static DialogToolkit::ColorPickerDialog whitebalancedialog; - ImGui::SameLine(0, 1.5f * g.Style.FramePadding.x); ImGuiToolkit::PushFont(ImGuiToolkit::FONT_DEFAULT); ImGuiWindow* window = ImGui::GetCurrentWindow(); @@ -501,14 +501,6 @@ void DisplaysView::draw() } ImGui::PopFont(); - // get icked color if dialog finished - if (whitebalancedialog.closed()){ - std::tuple c = whitebalancedialog.RGB(); - Settings::application.windows[1+current_window_].whitebalance.x = std::get<0>(c); - Settings::application.windows[1+current_window_].whitebalance.y = std::get<1>(c); - Settings::application.windows[1+current_window_].whitebalance.z = std::get<2>(c); - } - // White ballance temperature ImGui::SameLine(); window->DC.CursorPos.y -= g.Style.FramePadding.y; @@ -549,6 +541,13 @@ void DisplaysView::draw() } ImGui::PopFont(); + // get picked color if dialog finished + if (whitebalancedialog.closed()){ + std::tuple c = whitebalancedialog.RGB(); + Settings::application.windows[1+current_window_].whitebalance.x = std::get<0>(c); + Settings::application.windows[1+current_window_].whitebalance.y = std::get<1>(c); + Settings::application.windows[1+current_window_].whitebalance.z = std::get<2>(c); + } // display popup menu if (show_window_menu_ && current_window_ > -1) { diff --git a/src/UserInterfaceManager.cpp b/src/UserInterfaceManager.cpp index b84f1de..d1a8550 100644 --- a/src/UserInterfaceManager.cpp +++ b/src/UserInterfaceManager.cpp @@ -792,6 +792,16 @@ void UserInterface::NewFrame() } } + // overlay to ensure file color dialog is closed after use + if (DialogToolkit::ColorPickerDialog::busy()){ + if (!ImGui::IsPopupOpen("##Color")) + ImGui::OpenPopup("##Color"); + if (ImGui::BeginPopup("##Color")) { + ImGui::Text("Validate color dialog to return to vimix."); + ImGui::EndPopup(); + } + } + // popup to inform to save before close if (pending_save_on_exit) { if (!ImGui::IsPopupOpen(MENU_SAVE_ON_EXIT))