Combo: amends for ImGuiComboFlags_WidthFitPreview. (#6881)
Amend 112d8fc
This commit is contained in:
parent
112d8fc41d
commit
feddcf3030
@ -118,6 +118,7 @@ Other changes:
|
|||||||
be accepted by the widget when navigation highlight is visible. (#6802, #3092, #5759, #787)
|
be accepted by the widget when navigation highlight is visible. (#6802, #3092, #5759, #787)
|
||||||
- BeginGroup(): Fixed a bug pushing line lower extent too far down when called after a call
|
- BeginGroup(): Fixed a bug pushing line lower extent too far down when called after a call
|
||||||
to SameLine() followed by manual cursor manipulation.
|
to SameLine() followed by manual cursor manipulation.
|
||||||
|
- BeginCombo(): Added ImGuiComboFlags_WidthFitPreview flag. (#6881) [@mpv-enjoyer]
|
||||||
- BeginListBox(): Fixed not consuming SetNextWindowXXX data when returning false.
|
- BeginListBox(): Fixed not consuming SetNextWindowXXX data when returning false.
|
||||||
- Menus: Fixed a bug where activating an item in a child-menu and dragging mouse over the
|
- Menus: Fixed a bug where activating an item in a child-menu and dragging mouse over the
|
||||||
parent-menu would erroneously close the child-menu. (Regression from 1.88). (#6869)
|
parent-menu would erroneously close the child-menu. (Regression from 1.88). (#6869)
|
||||||
|
2
imgui.h
2
imgui.h
@ -1115,7 +1115,7 @@ enum ImGuiComboFlags_
|
|||||||
ImGuiComboFlags_HeightLargest = 1 << 4, // As many fitting items as possible
|
ImGuiComboFlags_HeightLargest = 1 << 4, // As many fitting items as possible
|
||||||
ImGuiComboFlags_NoArrowButton = 1 << 5, // Display on the preview box without the square arrow button
|
ImGuiComboFlags_NoArrowButton = 1 << 5, // Display on the preview box without the square arrow button
|
||||||
ImGuiComboFlags_NoPreview = 1 << 6, // Display only a square arrow button
|
ImGuiComboFlags_NoPreview = 1 << 6, // Display only a square arrow button
|
||||||
ImGuiComboFlags_WidthFitPreview = 1 << 7, // Dynamic width depending on current selected element
|
ImGuiComboFlags_WidthFitPreview = 1 << 7, // Width dynamically calculated from preview contents
|
||||||
ImGuiComboFlags_HeightMask_ = ImGuiComboFlags_HeightSmall | ImGuiComboFlags_HeightRegular | ImGuiComboFlags_HeightLarge | ImGuiComboFlags_HeightLargest,
|
ImGuiComboFlags_HeightMask_ = ImGuiComboFlags_HeightSmall | ImGuiComboFlags_HeightRegular | ImGuiComboFlags_HeightLarge | ImGuiComboFlags_HeightLargest,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1190,11 +1190,12 @@ static void ShowDemoWindowWidgets()
|
|||||||
static ImGuiComboFlags flags = 0;
|
static ImGuiComboFlags flags = 0;
|
||||||
ImGui::CheckboxFlags("ImGuiComboFlags_PopupAlignLeft", &flags, ImGuiComboFlags_PopupAlignLeft);
|
ImGui::CheckboxFlags("ImGuiComboFlags_PopupAlignLeft", &flags, ImGuiComboFlags_PopupAlignLeft);
|
||||||
ImGui::SameLine(); HelpMarker("Only makes a difference if the popup is larger than the combo");
|
ImGui::SameLine(); HelpMarker("Only makes a difference if the popup is larger than the combo");
|
||||||
ImGui::CheckboxFlags("ImGuiComboFlags_WidthFitPreview", &flags, ImGuiComboFlags_WidthFitPreview);
|
|
||||||
if (ImGui::CheckboxFlags("ImGuiComboFlags_NoArrowButton", &flags, ImGuiComboFlags_NoArrowButton))
|
if (ImGui::CheckboxFlags("ImGuiComboFlags_NoArrowButton", &flags, ImGuiComboFlags_NoArrowButton))
|
||||||
flags &= ~ImGuiComboFlags_NoPreview; // Clear the other flag, as we cannot combine both
|
flags &= ~ImGuiComboFlags_NoPreview; // Clear the other flag, as we cannot combine both
|
||||||
if (ImGui::CheckboxFlags("ImGuiComboFlags_NoPreview", &flags, ImGuiComboFlags_NoPreview))
|
if (ImGui::CheckboxFlags("ImGuiComboFlags_NoPreview", &flags, ImGuiComboFlags_NoPreview))
|
||||||
flags &= ~ImGuiComboFlags_NoArrowButton; // Clear the other flag, as we cannot combine both
|
flags &= ~(ImGuiComboFlags_NoArrowButton | ImGuiComboFlags_WidthFitPreview); // Clear the other flag, as we cannot combine both
|
||||||
|
if (ImGui::CheckboxFlags("ImGuiComboFlags_WidthFitPreview", &flags, ImGuiComboFlags_WidthFitPreview))
|
||||||
|
flags &= ~ImGuiComboFlags_NoPreview;
|
||||||
|
|
||||||
// Using the generic BeginCombo() API, you have full control over how to display the combo contents.
|
// Using the generic BeginCombo() API, you have full control over how to display the combo contents.
|
||||||
// (your selection data could be an index, a pointer to the object, an id for the object, a flag intrusively
|
// (your selection data could be an index, a pointer to the object, an id for the object, a flag intrusively
|
||||||
|
@ -1683,11 +1683,13 @@ bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboF
|
|||||||
const ImGuiStyle& style = g.Style;
|
const ImGuiStyle& style = g.Style;
|
||||||
const ImGuiID id = window->GetID(label);
|
const ImGuiID id = window->GetID(label);
|
||||||
IM_ASSERT((flags & (ImGuiComboFlags_NoArrowButton | ImGuiComboFlags_NoPreview)) != (ImGuiComboFlags_NoArrowButton | ImGuiComboFlags_NoPreview)); // Can't use both flags together
|
IM_ASSERT((flags & (ImGuiComboFlags_NoArrowButton | ImGuiComboFlags_NoPreview)) != (ImGuiComboFlags_NoArrowButton | ImGuiComboFlags_NoPreview)); // Can't use both flags together
|
||||||
|
if (flags & ImGuiComboFlags_WidthFitPreview)
|
||||||
|
IM_ASSERT((flags & (ImGuiComboFlags_NoPreview | ImGuiComboFlags_CustomPreview)) == 0);
|
||||||
|
|
||||||
const float arrow_size = (flags & ImGuiComboFlags_NoArrowButton) ? 0.0f : GetFrameHeight();
|
const float arrow_size = (flags & ImGuiComboFlags_NoArrowButton) ? 0.0f : GetFrameHeight();
|
||||||
const ImVec2 label_size = CalcTextSize(label, NULL, true);
|
const ImVec2 label_size = CalcTextSize(label, NULL, true);
|
||||||
const float preview_width = (preview_value != nullptr) ? CalcTextSize(preview_value, NULL, true).x : 0.0f;
|
const float preview_width = ((flags & ImGuiComboFlags_WidthFitPreview) && (preview_value != NULL)) ? CalcTextSize(preview_value, NULL, true).x : 0.0f;
|
||||||
const float w = (flags & ImGuiComboFlags_NoPreview) ? arrow_size : ((flags & ImGuiComboFlags_WidthFitPreview) ? arrow_size + preview_width + style.ItemInnerSpacing.x * 2.0f : CalcItemWidth());
|
const float w = (flags & ImGuiComboFlags_NoPreview) ? arrow_size : ((flags & ImGuiComboFlags_WidthFitPreview) ? (arrow_size + preview_width + style.FramePadding.x * 2.0f) : CalcItemWidth());
|
||||||
const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y * 2.0f));
|
const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y * 2.0f));
|
||||||
const ImRect total_bb(bb.Min, bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
|
const ImRect total_bb(bb.Min, bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
|
||||||
ItemSize(total_bb, style.FramePadding.y);
|
ItemSize(total_bb, style.FramePadding.y);
|
||||||
|
Loading…
Reference in New Issue
Block a user