瀏覽代碼

Combo() uses Selectable()

ocornut 10 年之前
父節點
當前提交
5d31430785
共有 1 個文件被更改,包括 11 次插入28 次删除
  1. 11 28
      imgui.cpp

+ 11 - 28
imgui.cpp

@@ -5673,50 +5673,33 @@ bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(voi
 
         const ImGuiWindowFlags flags = ImGuiWindowFlags_ComboBox | ((window->Flags & ImGuiWindowFlags_ShowBorders) ? ImGuiWindowFlags_ShowBorders : 0);
         ImGui::BeginChild("#ComboBox", popup_aabb.GetSize(), false, flags);
-        ImGuiWindow* child_window = GetCurrentWindow();
         ImGui::Spacing();
 
         bool combo_item_active = false;
-        combo_item_active |= (g.ActiveId == child_window->GetID("#SCROLLY"));
+        combo_item_active |= (g.ActiveId == GetCurrentWindow()->GetID("#SCROLLY"));
 
         // Display items
         for (int item_idx = 0; item_idx < items_count; item_idx++)
         {
-            const float item_h = child_window->FontSize();
-            const float spacing_up = (float)(int)(style.ItemSpacing.y/2);
-            const float spacing_dn = style.ItemSpacing.y - spacing_up;
-            const ImGuiAabb item_aabb(ImVec2(popup_aabb.Min.x, child_window->DC.CursorPos.y - spacing_up), ImVec2(popup_aabb.Max.x, child_window->DC.CursorPos.y + item_h + spacing_dn));
-            const ImGuiID item_id = child_window->GetID((void*)(intptr_t)item_idx);
-
-            bool item_hovered, item_held;
-            bool item_pressed = ButtonBehaviour(item_aabb, item_id, &item_hovered, &item_held, true);
-            bool item_selected = (item_idx == *current_item);
-
-            if (item_hovered || item_selected)
-            {
-                const ImU32 col = window->Color((item_held && item_hovered) ? ImGuiCol_HeaderActive : item_hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header);
-                RenderFrame(item_aabb.Min, item_aabb.Max, col, false);
-            }
-
+            ImGui::PushID((void*)(intptr_t)item_idx);
+            const bool item_selected = (item_idx == *current_item);
             const char* item_text;
             if (!items_getter(data, item_idx, &item_text))
                 item_text = "*Unknown item*";
-            ImGui::TextUnformatted(item_text);
-            
-            if (item_selected)
-            {
-                if (menu_toggled)
-                    ImGui::SetScrollPosHere();
-            }
-            if (item_pressed)
+            if (ImGui::Selectable(item_text, item_selected))
             {
                 SetActiveId(0);
                 g.ActiveComboID = 0;
                 value_changed = true;
                 *current_item = item_idx;
             }
-
-            combo_item_active |= (g.ActiveId == item_id);
+            if (item_selected)
+            {
+                if (menu_toggled)
+                    ImGui::SetScrollPosHere();
+            }
+            combo_item_active |= ImGui::IsItemActive();
+            ImGui::PopID();
         }
         ImGui::EndChild();
         ImGui::SetCursorPos(backup_pos);