Browse Source

Fix for using tooltips within popup #126 - will need to rewrite the sorting/layering system shortly.

ocornut 10 years ago
parent
commit
93c9777165
1 changed files with 13 additions and 2 deletions
  1. 13 2
      imgui.cpp

+ 13 - 2
imgui.cpp

@@ -2174,6 +2174,7 @@ void ImGui::Render()
         }
         }
 
 
         // Gather windows to render
         // Gather windows to render
+        // FIXME-OPT: Rework this in a more performance conscious way.
         g.RenderDrawLists.resize(0);
         g.RenderDrawLists.resize(0);
         for (size_t i = 0; i != g.Windows.size(); i++)
         for (size_t i = 0; i != g.Windows.size(); i++)
         {
         {
@@ -2184,7 +2185,13 @@ void ImGui::Render()
         for (size_t i = 0; i != g.Windows.size(); i++)
         for (size_t i = 0; i != g.Windows.size(); i++)
         {
         {
             ImGuiWindow* window = g.Windows[i];
             ImGuiWindow* window = g.Windows[i];
-            if (window->Visible && (window->Flags & (ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_Popup)))
+            if (window->Visible && (window->Flags & ImGuiWindowFlags_Popup) != 0)
+                AddWindowToRenderList(window);
+        }
+        for (size_t i = 0; i != g.Windows.size(); i++)
+        {
+            ImGuiWindow* window = g.Windows[i];
+            if (window->Visible && (window->Flags & ImGuiWindowFlags_Tooltip) != 0)
                 AddWindowToRenderList(window);
                 AddWindowToRenderList(window);
         }
         }
 
 
@@ -2992,7 +2999,8 @@ bool ImGui::Begin(const char* name, bool* p_opened, const ImVec2& size_on_first_
         window->Visible = true;
         window->Visible = true;
 
 
         // New windows appears in front
         // New windows appears in front
-        if (!(flags & ImGuiWindowFlags_ChildWindow))
+        if (!(flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Tooltip))
+        {
             if (window->LastFrameDrawn < current_frame - 1)
             if (window->LastFrameDrawn < current_frame - 1)
             {
             {
                 FocusWindow(window);
                 FocusWindow(window);
@@ -3004,6 +3012,7 @@ bool ImGui::Begin(const char* name, bool* p_opened, const ImVec2& size_on_first_
                         window->PosFloat = g.IO.MousePos;
                         window->PosFloat = g.IO.MousePos;
                 }
                 }
             }
             }
+        }
 
 
         window->LastFrameDrawn = current_frame;
         window->LastFrameDrawn = current_frame;
         window->ClipRectStack.resize(0);
         window->ClipRectStack.resize(0);
@@ -9461,11 +9470,13 @@ void ImGui::ShowTestWindow(bool* opened)
             {
             {
                 ImGui::BeginPopup(&popup_open);
                 ImGui::BeginPopup(&popup_open);
                 for (size_t i = 0; i < IM_ARRAYSIZE(fishes); i++)
                 for (size_t i = 0; i < IM_ARRAYSIZE(fishes); i++)
+                {
                     if (ImGui::Selectable(fishes[i], false))
                     if (ImGui::Selectable(fishes[i], false))
                     {
                     {
                         selected_fish = i;
                         selected_fish = i;
                         popup_open = false;
                         popup_open = false;
                     }
                     }
+                }
                 ImGui::EndPopup();
                 ImGui::EndPopup();
             }
             }
             ImGui::TreePop();
             ImGui::TreePop();