mirror of
https://github.com/ocornut/imgui.git
synced 2026-01-11 00:04:24 +00:00
Windows: latch FontRefSize at time of Begin(), consistent with e.g. TitleBarHeight, and to avoid calling CalcFontSize() on non-current window.
This commit is contained in:
parent
b7c27c5333
commit
f2262eb81a
2 changed files with 9 additions and 6 deletions
14
imgui.cpp
14
imgui.cpp
|
|
@ -4276,6 +4276,7 @@ ImGuiWindow::ImGuiWindow(ImGuiContext* ctx, const char* name) : DrawListInst(NUL
|
||||||
SetWindowPosVal = SetWindowPosPivot = ImVec2(FLT_MAX, FLT_MAX);
|
SetWindowPosVal = SetWindowPosPivot = ImVec2(FLT_MAX, FLT_MAX);
|
||||||
LastFrameActive = -1;
|
LastFrameActive = -1;
|
||||||
LastTimeActive = -1.0f;
|
LastTimeActive = -1.0f;
|
||||||
|
FontRefSize = 0.0f;
|
||||||
FontWindowScale = FontWindowScaleParents = 1.0f;
|
FontWindowScale = FontWindowScaleParents = 1.0f;
|
||||||
SettingsOffset = -1;
|
SettingsOffset = -1;
|
||||||
DrawList = &DrawListInst;
|
DrawList = &DrawListInst;
|
||||||
|
|
@ -7201,6 +7202,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
||||||
window->DC.MenuBarOffset.y = g.NextWindowData.MenuBarOffsetMinVal.y;
|
window->DC.MenuBarOffset.y = g.NextWindowData.MenuBarOffsetMinVal.y;
|
||||||
window->TitleBarHeight = (flags & ImGuiWindowFlags_NoTitleBar) ? 0.0f : g.FontSize + g.Style.FramePadding.y * 2.0f;
|
window->TitleBarHeight = (flags & ImGuiWindowFlags_NoTitleBar) ? 0.0f : g.FontSize + g.Style.FramePadding.y * 2.0f;
|
||||||
window->MenuBarHeight = (flags & ImGuiWindowFlags_MenuBar) ? window->DC.MenuBarOffset.y + g.FontSize + g.Style.FramePadding.y * 2.0f : 0.0f;
|
window->MenuBarHeight = (flags & ImGuiWindowFlags_MenuBar) ? window->DC.MenuBarOffset.y + g.FontSize + g.Style.FramePadding.y * 2.0f : 0.0f;
|
||||||
|
window->FontRefSize = g.FontSize; // Lock this to discourage calling window->CalcFontSize() outside of current window.
|
||||||
|
|
||||||
// Depending on condition we use previous or current window size to compare against contents size to decide if a scrollbar should be visible.
|
// Depending on condition we use previous or current window size to compare against contents size to decide if a scrollbar should be visible.
|
||||||
// Those flags will be altered further down in the function depending on more conditions.
|
// Those flags will be altered further down in the function depending on more conditions.
|
||||||
|
|
@ -9649,7 +9651,7 @@ void ImGui::UpdateMouseWheel()
|
||||||
{
|
{
|
||||||
LockWheelingWindow(window, wheel.x);
|
LockWheelingWindow(window, wheel.x);
|
||||||
float max_step = window->InnerRect.GetWidth() * 0.67f;
|
float max_step = window->InnerRect.GetWidth() * 0.67f;
|
||||||
float scroll_step = ImTrunc(ImMin(2 * window->CalcFontSize(), max_step));
|
float scroll_step = ImTrunc(ImMin(2 * window->FontRefSize, max_step));
|
||||||
SetScrollX(window, window->Scroll.x - wheel.x * scroll_step);
|
SetScrollX(window, window->Scroll.x - wheel.x * scroll_step);
|
||||||
g.WheelingWindowScrolledFrame = g.FrameCount;
|
g.WheelingWindowScrolledFrame = g.FrameCount;
|
||||||
}
|
}
|
||||||
|
|
@ -9657,7 +9659,7 @@ void ImGui::UpdateMouseWheel()
|
||||||
{
|
{
|
||||||
LockWheelingWindow(window, wheel.y);
|
LockWheelingWindow(window, wheel.y);
|
||||||
float max_step = window->InnerRect.GetHeight() * 0.67f;
|
float max_step = window->InnerRect.GetHeight() * 0.67f;
|
||||||
float scroll_step = ImTrunc(ImMin(5 * window->CalcFontSize(), max_step));
|
float scroll_step = ImTrunc(ImMin(5 * window->FontRefSize, max_step));
|
||||||
SetScrollY(window, window->Scroll.y - wheel.y * scroll_step);
|
SetScrollY(window, window->Scroll.y - wheel.y * scroll_step);
|
||||||
g.WheelingWindowScrolledFrame = g.FrameCount;
|
g.WheelingWindowScrolledFrame = g.FrameCount;
|
||||||
}
|
}
|
||||||
|
|
@ -12987,7 +12989,7 @@ static void ImGui::NavUpdate()
|
||||||
{
|
{
|
||||||
// *Fallback* manual-scroll with Nav directional keys when window has no navigable item
|
// *Fallback* manual-scroll with Nav directional keys when window has no navigable item
|
||||||
ImGuiWindow* window = g.NavWindow;
|
ImGuiWindow* window = g.NavWindow;
|
||||||
const float scroll_speed = IM_ROUND(window->CalcFontSize() * 100 * io.DeltaTime); // We need round the scrolling speed because sub-pixel scroll isn't reliably supported.
|
const float scroll_speed = IM_ROUND(window->FontRefSize * 100 * io.DeltaTime); // We need round the scrolling speed because sub-pixel scroll isn't reliably supported.
|
||||||
const ImGuiDir move_dir = g.NavMoveDir;
|
const ImGuiDir move_dir = g.NavMoveDir;
|
||||||
if (window->DC.NavLayersActiveMask == 0x00 && window->DC.NavWindowHasScrollY && move_dir != ImGuiDir_None)
|
if (window->DC.NavLayersActiveMask == 0x00 && window->DC.NavWindowHasScrollY && move_dir != ImGuiDir_None)
|
||||||
{
|
{
|
||||||
|
|
@ -13177,8 +13179,8 @@ void ImGui::NavUpdateCreateMoveRequest()
|
||||||
if ((clamp_x || clamp_y) && !inner_rect_rel.Contains(window->NavRectRel[g.NavLayer]))
|
if ((clamp_x || clamp_y) && !inner_rect_rel.Contains(window->NavRectRel[g.NavLayer]))
|
||||||
{
|
{
|
||||||
IMGUI_DEBUG_LOG_NAV("[nav] NavMoveRequest: clamp NavRectRel for gamepad move\n");
|
IMGUI_DEBUG_LOG_NAV("[nav] NavMoveRequest: clamp NavRectRel for gamepad move\n");
|
||||||
float pad_x = ImMin(inner_rect_rel.GetWidth(), window->CalcFontSize() * 0.5f);
|
float pad_x = ImMin(inner_rect_rel.GetWidth(), window->FontRefSize * 0.5f);
|
||||||
float pad_y = ImMin(inner_rect_rel.GetHeight(), window->CalcFontSize() * 0.5f); // Terrible approximation for the intent of starting navigation from first fully visible item
|
float pad_y = ImMin(inner_rect_rel.GetHeight(), window->FontRefSize * 0.5f); // Terrible approximation for the intent of starting navigation from first fully visible item
|
||||||
inner_rect_rel.Min.x = clamp_x ? (inner_rect_rel.Min.x + pad_x) : -FLT_MAX;
|
inner_rect_rel.Min.x = clamp_x ? (inner_rect_rel.Min.x + pad_x) : -FLT_MAX;
|
||||||
inner_rect_rel.Max.x = clamp_x ? (inner_rect_rel.Max.x - pad_x) : +FLT_MAX;
|
inner_rect_rel.Max.x = clamp_x ? (inner_rect_rel.Max.x - pad_x) : +FLT_MAX;
|
||||||
inner_rect_rel.Min.y = clamp_y ? (inner_rect_rel.Min.y + pad_y) : -FLT_MAX;
|
inner_rect_rel.Min.y = clamp_y ? (inner_rect_rel.Min.y + pad_y) : -FLT_MAX;
|
||||||
|
|
@ -13436,7 +13438,7 @@ static float ImGui::NavUpdatePageUpPageDown()
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ImRect& nav_rect_rel = window->NavRectRel[g.NavLayer];
|
ImRect& nav_rect_rel = window->NavRectRel[g.NavLayer];
|
||||||
const float page_offset_y = ImMax(0.0f, window->InnerRect.GetHeight() - window->CalcFontSize() * 1.0f + nav_rect_rel.GetHeight());
|
const float page_offset_y = ImMax(0.0f, window->InnerRect.GetHeight() - window->FontRefSize * 1.0f + nav_rect_rel.GetHeight());
|
||||||
float nav_scoring_rect_offset_y = 0.0f;
|
float nav_scoring_rect_offset_y = 0.0f;
|
||||||
if (IsKeyPressed(ImGuiKey_PageUp, true))
|
if (IsKeyPressed(ImGuiKey_PageUp, true))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2552,6 +2552,7 @@ struct IMGUI_API ImGuiWindow
|
||||||
ImVector<ImGuiOldColumns> ColumnsStorage;
|
ImVector<ImGuiOldColumns> ColumnsStorage;
|
||||||
float FontWindowScale; // User scale multiplier per-window, via SetWindowFontScale()
|
float FontWindowScale; // User scale multiplier per-window, via SetWindowFontScale()
|
||||||
float FontWindowScaleParents;
|
float FontWindowScaleParents;
|
||||||
|
float FontRefSize; // This is a copy of window->CalcFontSize() at the time of Begin(), trying to phase out CalcFontSize() especially as it may be called on non-current window.
|
||||||
int SettingsOffset; // Offset into SettingsWindows[] (offsets are always valid as we only grow the array from the back)
|
int SettingsOffset; // Offset into SettingsWindows[] (offsets are always valid as we only grow the array from the back)
|
||||||
|
|
||||||
ImDrawList* DrawList; // == &DrawListInst (for backward compatibility reason with code using imgui_internal.h we keep this a pointer)
|
ImDrawList* DrawList; // == &DrawListInst (for backward compatibility reason with code using imgui_internal.h we keep this a pointer)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue