mirror of
https://github.com/ocornut/imgui.git
synced 2024-11-28 01:20:55 +01:00
Tables: Fixed PopItemWidth() or multi-components items not restoring per-colum ItemWidth correctly. (#3760) rework local stacks to facilitate modifying current value without altering the stack.
May consider doing the same for ItemFlags and moving to g.ItemFlags...
This commit is contained in:
parent
3867c6c5f0
commit
e28b51786e
@ -43,6 +43,7 @@ Breaking Changes:
|
|||||||
|
|
||||||
Other Changes:
|
Other Changes:
|
||||||
|
|
||||||
|
- Tables: Fixed PopItemWidth() or multi-components items not restoring per-colum ItemWidth correctly. (#3760)
|
||||||
- Window: Fixed minor title bar text clipping issue when FramePadding is small/zero and there are no
|
- Window: Fixed minor title bar text clipping issue when FramePadding is small/zero and there are no
|
||||||
close button in the window. (#3731)
|
close button in the window. (#3731)
|
||||||
- imgui_freetype: Facilitated using FreeType integration: [@Xipiryon, @ocornut]
|
- imgui_freetype: Facilitated using FreeType integration: [@Xipiryon, @ocornut]
|
||||||
|
14
imgui.cpp
14
imgui.cpp
@ -6428,15 +6428,15 @@ void ImGui::PopButtonRepeat()
|
|||||||
void ImGui::PushTextWrapPos(float wrap_pos_x)
|
void ImGui::PushTextWrapPos(float wrap_pos_x)
|
||||||
{
|
{
|
||||||
ImGuiWindow* window = GetCurrentWindow();
|
ImGuiWindow* window = GetCurrentWindow();
|
||||||
|
window->DC.TextWrapPosStack.push_back(window->DC.TextWrapPos);
|
||||||
window->DC.TextWrapPos = wrap_pos_x;
|
window->DC.TextWrapPos = wrap_pos_x;
|
||||||
window->DC.TextWrapPosStack.push_back(wrap_pos_x);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui::PopTextWrapPos()
|
void ImGui::PopTextWrapPos()
|
||||||
{
|
{
|
||||||
ImGuiWindow* window = GetCurrentWindow();
|
ImGuiWindow* window = GetCurrentWindow();
|
||||||
|
window->DC.TextWrapPos = window->DC.TextWrapPosStack.back();
|
||||||
window->DC.TextWrapPosStack.pop_back();
|
window->DC.TextWrapPosStack.pop_back();
|
||||||
window->DC.TextWrapPos = window->DC.TextWrapPosStack.empty() ? -1.0f : window->DC.TextWrapPosStack.back();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ImGui::IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent)
|
bool ImGui::IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent)
|
||||||
@ -7393,12 +7393,13 @@ void ImGui::SetNextItemWidth(float item_width)
|
|||||||
g.NextItemData.Width = item_width;
|
g.NextItemData.Width = item_width;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME: Remove the == 0.0f behavior?
|
||||||
void ImGui::PushItemWidth(float item_width)
|
void ImGui::PushItemWidth(float item_width)
|
||||||
{
|
{
|
||||||
ImGuiContext& g = *GImGui;
|
ImGuiContext& g = *GImGui;
|
||||||
ImGuiWindow* window = g.CurrentWindow;
|
ImGuiWindow* window = g.CurrentWindow;
|
||||||
|
window->DC.ItemWidthStack.push_back(window->DC.ItemWidth); // Backup current width
|
||||||
window->DC.ItemWidth = (item_width == 0.0f ? window->ItemWidthDefault : item_width);
|
window->DC.ItemWidth = (item_width == 0.0f ? window->ItemWidthDefault : item_width);
|
||||||
window->DC.ItemWidthStack.push_back(window->DC.ItemWidth);
|
|
||||||
g.NextItemData.Flags &= ~ImGuiNextItemDataFlags_HasWidth;
|
g.NextItemData.Flags &= ~ImGuiNextItemDataFlags_HasWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7409,18 +7410,19 @@ void ImGui::PushMultiItemsWidths(int components, float w_full)
|
|||||||
const ImGuiStyle& style = g.Style;
|
const ImGuiStyle& style = g.Style;
|
||||||
const float w_item_one = ImMax(1.0f, IM_FLOOR((w_full - (style.ItemInnerSpacing.x) * (components - 1)) / (float)components));
|
const float w_item_one = ImMax(1.0f, IM_FLOOR((w_full - (style.ItemInnerSpacing.x) * (components - 1)) / (float)components));
|
||||||
const float w_item_last = ImMax(1.0f, IM_FLOOR(w_full - (w_item_one + style.ItemInnerSpacing.x) * (components - 1)));
|
const float w_item_last = ImMax(1.0f, IM_FLOOR(w_full - (w_item_one + style.ItemInnerSpacing.x) * (components - 1)));
|
||||||
|
window->DC.ItemWidthStack.push_back(window->DC.ItemWidth); // Backup current width
|
||||||
window->DC.ItemWidthStack.push_back(w_item_last);
|
window->DC.ItemWidthStack.push_back(w_item_last);
|
||||||
for (int i = 0; i < components - 1; i++)
|
for (int i = 0; i < components - 2; i++)
|
||||||
window->DC.ItemWidthStack.push_back(w_item_one);
|
window->DC.ItemWidthStack.push_back(w_item_one);
|
||||||
window->DC.ItemWidth = window->DC.ItemWidthStack.back();
|
window->DC.ItemWidth = (components == 1) ? w_item_last : w_item_one;
|
||||||
g.NextItemData.Flags &= ~ImGuiNextItemDataFlags_HasWidth;
|
g.NextItemData.Flags &= ~ImGuiNextItemDataFlags_HasWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImGui::PopItemWidth()
|
void ImGui::PopItemWidth()
|
||||||
{
|
{
|
||||||
ImGuiWindow* window = GetCurrentWindow();
|
ImGuiWindow* window = GetCurrentWindow();
|
||||||
|
window->DC.ItemWidth = window->DC.ItemWidthStack.back();
|
||||||
window->DC.ItemWidthStack.pop_back();
|
window->DC.ItemWidthStack.pop_back();
|
||||||
window->DC.ItemWidth = window->DC.ItemWidthStack.empty() ? window->ItemWidthDefault : window->DC.ItemWidthStack.back();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate default item width given value passed to PushItemWidth() or SetNextItemWidth().
|
// Calculate default item width given value passed to PushItemWidth() or SetNextItemWidth().
|
||||||
|
4
imgui.h
4
imgui.h
@ -59,7 +59,7 @@ Index of this file:
|
|||||||
// Version
|
// Version
|
||||||
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY99 then bounce up to XYY00, XYY01 etc. when release tagging happens)
|
// (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY99 then bounce up to XYY00, XYY01 etc. when release tagging happens)
|
||||||
#define IMGUI_VERSION "1.81 WIP"
|
#define IMGUI_VERSION "1.81 WIP"
|
||||||
#define IMGUI_VERSION_NUM 18001
|
#define IMGUI_VERSION_NUM 18002
|
||||||
#define IMGUI_CHECKVERSION() ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx))
|
#define IMGUI_CHECKVERSION() ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx))
|
||||||
#define IMGUI_HAS_TABLE
|
#define IMGUI_HAS_TABLE
|
||||||
|
|
||||||
@ -375,7 +375,7 @@ namespace ImGui
|
|||||||
IMGUI_API void PopButtonRepeat();
|
IMGUI_API void PopButtonRepeat();
|
||||||
|
|
||||||
// Parameters stacks (current window)
|
// Parameters stacks (current window)
|
||||||
IMGUI_API void PushItemWidth(float item_width); // push width of items for common large "item+label" widgets. >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -FLT_MIN always align width to the right side). 0.0f = default to ~2/3 of windows width,
|
IMGUI_API void PushItemWidth(float item_width); // push width of items for common large "item+label" widgets. >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -FLT_MIN always align width to the right side).
|
||||||
IMGUI_API void PopItemWidth();
|
IMGUI_API void PopItemWidth();
|
||||||
IMGUI_API void SetNextItemWidth(float item_width); // set width of the _next_ common large "item+label" widget. >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -FLT_MIN always align width to the right side)
|
IMGUI_API void SetNextItemWidth(float item_width); // set width of the _next_ common large "item+label" widget. >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -FLT_MIN always align width to the right side)
|
||||||
IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position. NOT necessarily the width of last item unlike most 'Item' functions.
|
IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position. NOT necessarily the width of last item unlike most 'Item' functions.
|
||||||
|
@ -1692,10 +1692,10 @@ struct IMGUI_API ImGuiWindowTempData
|
|||||||
// Local parameters stacks
|
// Local parameters stacks
|
||||||
// We store the current settings outside of the vectors to increase memory locality (reduce cache misses). The vectors are rarely modified. Also it allows us to not heap allocate for short-lived windows which are not using those settings.
|
// We store the current settings outside of the vectors to increase memory locality (reduce cache misses). The vectors are rarely modified. Also it allows us to not heap allocate for short-lived windows which are not using those settings.
|
||||||
ImGuiItemFlags ItemFlags; // == g.ItemFlagsStack.back()
|
ImGuiItemFlags ItemFlags; // == g.ItemFlagsStack.back()
|
||||||
float ItemWidth; // == ItemWidthStack.back(). 0.0: default, >0.0: width in pixels, <0.0: align xx pixels to the right of window
|
float ItemWidth; // Current item width (>0.0: width in pixels, <0.0: align xx pixels to the right of window).
|
||||||
float TextWrapPos; // == TextWrapPosStack.back() [empty == -1.0f]
|
float TextWrapPos; // Current text wrap pos.
|
||||||
ImVector<float> ItemWidthStack;
|
ImVector<float> ItemWidthStack; // Store item widths to restore (attention: .back() is not == ItemWidth)
|
||||||
ImVector<float> TextWrapPosStack;
|
ImVector<float> TextWrapPosStack; // Store text wrap pos to restore (attention: .back() is not == TextWrapPos)
|
||||||
ImGuiStackSizes StackSizesOnBegin; // Store size of various stacks for asserting
|
ImGuiStackSizes StackSizesOnBegin; // Store size of various stacks for asserting
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user