mirror of
https://github.com/ocornut/imgui.git
synced 2026-02-13 23:33:26 +00:00
Fonts: fixed an issue where using PushFont() from the implicit/fallback "Debug" window when its recorded state is collapsed would incorrectly early out. (#9210, #8865)
Amend0e769c5,ca31693,d8da97f,1bf41a0.
This commit is contained in:
@@ -78,6 +78,9 @@ Breaking Changes:
|
||||
has already been rendered. (#9162) [@ocornut, @cyfewlp]
|
||||
- Removed ImFontConfig::PixelSnapV added in 1.92 which turns out is unnecessary
|
||||
(and misdocumented). Post-rescale GlyphOffset is always rounded.
|
||||
- Fixed an issue where using PushFont() from the implicit/fallback "Debug" window when
|
||||
its recorded state is collapsed would incorrectly early out. This would break e.g. using
|
||||
direct draw-list calls such as GetForegroundDrawList() with current font. (#9210, #8865)
|
||||
- Popups: changed compile-time 'ImGuiPopupFlags popup_flags = 1' default value to be '= 0' for
|
||||
BeginPopupContextItem(), BeginPopupContextWindow(), BeginPopupContextVoid(), OpenPopupOnItemClick().
|
||||
The default value has same meaning before and after. (#9157, #9146)
|
||||
|
||||
30
imgui.cpp
30
imgui.cpp
@@ -4566,13 +4566,13 @@ static void SetCurrentWindow(ImGuiWindow* window)
|
||||
g.CurrentDpiScale = 1.0f; // FIXME-DPI: WIP this is modified in docking
|
||||
if (window)
|
||||
{
|
||||
bool backup_skip_items = window->SkipItems;
|
||||
window->SkipItems = false;
|
||||
if (g.IO.BackendFlags & ImGuiBackendFlags_RendererHasTextures)
|
||||
{
|
||||
ImGuiViewport* viewport = window->Viewport;
|
||||
g.FontRasterizerDensity = (viewport->FramebufferScale.x != 0.0f) ? viewport->FramebufferScale.x : g.IO.DisplayFramebufferScale.x; // == SetFontRasterizerDensity()
|
||||
}
|
||||
const bool backup_skip_items = window->SkipItems;
|
||||
window->SkipItems = false;
|
||||
ImGui::UpdateCurrentFontSize(0.0f);
|
||||
window->SkipItems = backup_skip_items;
|
||||
ImGui::NavUpdateCurrentWindowIsScrollPushableX();
|
||||
@@ -9000,16 +9000,6 @@ void ImGui::UpdateCurrentFontSize(float restore_font_size_after_scaling)
|
||||
|
||||
g.Style.FontSizeBase = g.FontSizeBase;
|
||||
|
||||
// Early out to avoid hidden window keeping bakes referenced and out of GC reach.
|
||||
// However this would leave a pretty subtle and damning error surface area if g.FontBaked was mismatching.
|
||||
// FIXME: perhaps g.FontSize should be updated?
|
||||
if (window != NULL && window->SkipItems)
|
||||
{
|
||||
ImGuiTable* table = g.CurrentTable;
|
||||
if (table == NULL || (table->CurrentColumn != -1 && table->Columns[table->CurrentColumn].IsSkipItems == false)) // See 8465#issuecomment-2951509561 and #8865. Ideally the SkipItems=true in tables would be amended with extra data.
|
||||
return;
|
||||
}
|
||||
|
||||
// Restoring is pretty much only used by PopFont()
|
||||
float final_size = (restore_font_size_after_scaling > 0.0f) ? restore_font_size_after_scaling : 0.0f;
|
||||
if (final_size == 0.0f)
|
||||
@@ -9039,10 +9029,24 @@ void ImGui::UpdateCurrentFontSize(float restore_font_size_after_scaling)
|
||||
final_size = ImClamp(final_size, 1.0f, IMGUI_FONT_SIZE_MAX);
|
||||
if (g.Font != NULL && (g.IO.BackendFlags & ImGuiBackendFlags_RendererHasTextures))
|
||||
g.Font->CurrentRasterizerDensity = g.FontRasterizerDensity;
|
||||
|
||||
g.FontSize = final_size;
|
||||
g.DrawListSharedData.FontSize = g.FontSize;
|
||||
|
||||
// Early out to avoid hidden window keeping bakes referenced and out of GC reach.
|
||||
// - However this leave a pretty subtle and damning error surface area if g.FontBaked was mismatching.
|
||||
// Probably needs to be reevaluated into e.g. setting g.FontBaked = nullptr to mark it as dirty.
|
||||
// - Note that 'PushFont(); Begin(); End(); PopFont()' from within any collapsed window is not compromised, because Begin() calls SetCurrentWindow()->...->UpdateCurrentSize()
|
||||
if (window != NULL && window->SkipItems)
|
||||
{
|
||||
ImGuiTable* table = g.CurrentTable;
|
||||
const bool allow_early_out = table == NULL || (table->CurrentColumn != -1 && table->Columns[table->CurrentColumn].IsSkipItems == false); // See 8465#issuecomment-2951509561 and #8865. Ideally the SkipItems=true in tables would be amended with extra data.
|
||||
if (allow_early_out)
|
||||
return;
|
||||
}
|
||||
|
||||
g.FontBaked = (g.Font != NULL && window != NULL) ? g.Font->GetFontBaked(final_size) : NULL;
|
||||
g.FontBakedScale = (g.Font != NULL && window != NULL) ? (g.FontSize / g.FontBaked->Size) : 0.0f;
|
||||
g.DrawListSharedData.FontSize = g.FontSize;
|
||||
g.DrawListSharedData.FontScale = g.FontBakedScale;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user