|
@@ -4276,6 +4276,7 @@ ImGuiWindow::ImGuiWindow(ImGuiContext* ctx, const char* name) : DrawListInst(NUL
|
|
|
SetWindowPosVal = SetWindowPosPivot = ImVec2(FLT_MAX, FLT_MAX);
|
|
|
LastFrameActive = -1;
|
|
|
LastTimeActive = -1.0f;
|
|
|
+ FontRefSize = 0.0f;
|
|
|
FontWindowScale = FontWindowScaleParents = 1.0f;
|
|
|
SettingsOffset = -1;
|
|
|
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->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->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.
|
|
|
// 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);
|
|
|
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);
|
|
|
g.WheelingWindowScrolledFrame = g.FrameCount;
|
|
|
}
|
|
@@ -9657,7 +9659,7 @@ void ImGui::UpdateMouseWheel()
|
|
|
{
|
|
|
LockWheelingWindow(window, wheel.y);
|
|
|
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);
|
|
|
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
|
|
|
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;
|
|
|
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]))
|
|
|
{
|
|
|
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_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_x = ImMin(inner_rect_rel.GetWidth(), window->FontRefSize * 0.5f);
|
|
|
+ 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.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;
|
|
@@ -13436,7 +13438,7 @@ static float ImGui::NavUpdatePageUpPageDown()
|
|
|
else
|
|
|
{
|
|
|
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;
|
|
|
if (IsKeyPressed(ImGuiKey_PageUp, true))
|
|
|
{
|