Przeglądaj źródła

Demo: ShowStyleSelector(), ShowFontSelector(): remove ImGuiSelectableFlags_NoAutoClosePopups for now.

In this situation we kinda want keyboard Enter to select and close but ideally not click. We don't have separate options yet.
ocornut 2 dni temu
rodzic
commit
8eb22ea620
2 zmienionych plików z 8 dodań i 4 usunięć
  1. 1 1
      imgui.cpp
  2. 7 3
      imgui_demo.cpp

+ 1 - 1
imgui.cpp

@@ -17875,7 +17875,7 @@ void ImGui::ShowFontSelector(const char* label)
         for (ImFont* font : io.Fonts->Fonts)
         {
             PushID((void*)font);
-            if (Selectable(font->GetDebugName(), font == font_current, ImGuiSelectableFlags_SelectOnNav | ImGuiSelectableFlags_NoAutoClosePopups))
+            if (Selectable(font->GetDebugName(), font == font_current, ImGuiSelectableFlags_SelectOnNav))
                 io.FontDefault = font;
             if (font == font_current)
                 SetItemDefaultFocus();

+ 7 - 3
imgui_demo.cpp

@@ -8224,17 +8224,18 @@ void ImGui::ShowAboutWindow(bool* p_open)
 //-----------------------------------------------------------------------------
 
 // Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options.
-// Here we use the simplified Combo() api that packs items into a single literal string.
-// Useful for quick combo boxes where the choices are known locally.
 bool ImGui::ShowStyleSelector(const char* label)
 {
+    // FIXME: This is a bit tricky to get right as style are functions, they don't register a name nor the fact that one is active.
+    // So we keep track of last active one among our limited selection.
     static int style_idx = -1;
     const char* style_names[] = { "Dark", "Light", "Classic" };
     bool ret = false;
     if (ImGui::BeginCombo(label, (style_idx >= 0 && style_idx < IM_ARRAYSIZE(style_names)) ? style_names[style_idx] : ""))
     {
         for (int n = 0; n < IM_ARRAYSIZE(style_names); n++)
-            if (ImGui::Selectable(style_names[n], style_idx == n, ImGuiSelectableFlags_SelectOnNav | ImGuiSelectableFlags_NoAutoClosePopups))
+        {
+            if (ImGui::Selectable(style_names[n], style_idx == n, ImGuiSelectableFlags_SelectOnNav))
             {
                 style_idx = n;
                 ret = true;
@@ -8245,6 +8246,9 @@ bool ImGui::ShowStyleSelector(const char* label)
                 case 2: ImGui::StyleColorsClassic(); break;
                 }
             }
+            else if (style_idx == n)
+                ImGui::SetItemDefaultFocus();
+        }
         ImGui::EndCombo();
     }
     return ret;