Button() closes active popup (#126) unsure about that

docking
ocornut 10 years ago
parent e6ac9e88aa
commit f26de46350

@ -963,10 +963,11 @@ enum ImGuiLayoutType_
enum ImGuiButtonFlags_ enum ImGuiButtonFlags_
{ {
ImGuiButtonFlags_Repeat = (1 << 0), ImGuiButtonFlags_Repeat = (1 << 0),
ImGuiButtonFlags_PressedOnClick = (1 << 1), ImGuiButtonFlags_PressedOnClick = (1 << 1),
ImGuiButtonFlags_FlattenChilds = (1 << 2), ImGuiButtonFlags_FlattenChilds = (1 << 2),
ImGuiButtonFlags_Disabled = (1 << 3) ImGuiButtonFlags_DontClosePopups = (1 << 3),
ImGuiButtonFlags_Disabled = (1 << 4)
}; };
enum ImGuiSelectableFlags_ enum ImGuiSelectableFlags_
@ -4891,6 +4892,10 @@ static bool ButtonEx(const char* label, const ImVec2& size_arg, ImGuiButtonFlags
const ImVec2 off = ImVec2(ImMax(0.0f, size.x - label_size.x) * 0.5f, ImMax(0.0f, size.y - label_size.y) * 0.5f); // Center (only applies if we explicitly gave a size bigger than the text size, which isn't the common path) const ImVec2 off = ImVec2(ImMax(0.0f, size.x - label_size.x) * 0.5f, ImMax(0.0f, size.y - label_size.y) * 0.5f); // Center (only applies if we explicitly gave a size bigger than the text size, which isn't the common path)
RenderTextClipped(bb.Min + off, label, NULL, &label_size, bb.Max); // Render clip (only applies if we explicitly gave a size smaller than the text size, which isn't common) RenderTextClipped(bb.Min + off, label, NULL, &label_size, bb.Max); // Render clip (only applies if we explicitly gave a size smaller than the text size, which isn't common)
// Automatically close popups
if (pressed && !(flags & ImGuiButtonFlags_DontClosePopups) && (window->Flags & ImGuiWindowFlags_Popup))
ImGui::CloseCurrentPopup();
return pressed; return pressed;
} }
@ -6611,13 +6616,13 @@ bool ImGui::InputFloat(const char* label, float *v, float step, float step_fast,
{ {
ImGui::PopItemWidth(); ImGui::PopItemWidth();
ImGui::SameLine(0, (int)style.ItemInnerSpacing.x); ImGui::SameLine(0, (int)style.ItemInnerSpacing.x);
if (ImGui::Button("-", button_sz, true)) if (ButtonEx("-", button_sz, ImGuiButtonFlags_Repeat | ImGuiButtonFlags_DontClosePopups))
{ {
*v -= g.IO.KeyCtrl && step_fast > 0.0f ? step_fast : step; *v -= g.IO.KeyCtrl && step_fast > 0.0f ? step_fast : step;
value_changed = true; value_changed = true;
} }
ImGui::SameLine(0, (int)style.ItemInnerSpacing.x); ImGui::SameLine(0, (int)style.ItemInnerSpacing.x);
if (ImGui::Button("+", button_sz, true)) if (ButtonEx("+", button_sz, ImGuiButtonFlags_Repeat | ImGuiButtonFlags_DontClosePopups))
{ {
*v += g.IO.KeyCtrl && step_fast > 0.0f ? step_fast : step; *v += g.IO.KeyCtrl && step_fast > 0.0f ? step_fast : step;
value_changed = true; value_changed = true;
@ -7834,7 +7839,7 @@ bool ImGui::ColorEdit4(const char* label, float col[4], bool alpha)
{ {
ImGui::SameLine(0, (int)style.ItemInnerSpacing.x); ImGui::SameLine(0, (int)style.ItemInnerSpacing.x);
const char* button_titles[3] = { "RGB", "HSV", "HEX" }; const char* button_titles[3] = { "RGB", "HSV", "HEX" };
if (ImGui::Button(button_titles[edit_mode])) if (ButtonEx(button_titles[edit_mode], ImVec2(0,0), ImGuiButtonFlags_DontClosePopups))
g.ColorEditModeStorage.SetInt(id, (edit_mode + 1) % 3); // Don't set local copy of 'edit_mode' right away! g.ColorEditModeStorage.SetInt(id, (edit_mode + 1) % 3); // Don't set local copy of 'edit_mode' right away!
ImGui::SameLine(); ImGui::SameLine();
} }
@ -11432,6 +11437,8 @@ static void ShowExampleMenuFile()
ImGui::EndChild(); ImGui::EndChild();
static float f = 0.5f; static float f = 0.5f;
ImGui::SliderFloat("Value", &f, 0.0f, 1.0f); ImGui::SliderFloat("Value", &f, 0.0f, 1.0f);
ImGui::InputFloat("Input", &f, 0.1f);
ImGui::Button("Button");
ImGui::EndMenu(); ImGui::EndMenu();
} }
if (ImGui::BeginMenu("Colors")) if (ImGui::BeginMenu("Colors"))

Loading…
Cancel
Save