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]
|
has already been rendered. (#9162) [@ocornut, @cyfewlp]
|
||||||
- Removed ImFontConfig::PixelSnapV added in 1.92 which turns out is unnecessary
|
- Removed ImFontConfig::PixelSnapV added in 1.92 which turns out is unnecessary
|
||||||
(and misdocumented). Post-rescale GlyphOffset is always rounded.
|
(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
|
- Popups: changed compile-time 'ImGuiPopupFlags popup_flags = 1' default value to be '= 0' for
|
||||||
BeginPopupContextItem(), BeginPopupContextWindow(), BeginPopupContextVoid(), OpenPopupOnItemClick().
|
BeginPopupContextItem(), BeginPopupContextWindow(), BeginPopupContextVoid(), OpenPopupOnItemClick().
|
||||||
The default value has same meaning before and after. (#9157, #9146)
|
The default value has same meaning before and after. (#9157, #9146)
|
||||||
|
|||||||
@@ -4566,13 +4566,13 @@ static void SetCurrentWindow(ImGuiWindow* window)
|
|||||||
g.CurrentDpiScale = 1.0f; // FIXME-DPI: WIP this is modified in docking
|
g.CurrentDpiScale = 1.0f; // FIXME-DPI: WIP this is modified in docking
|
||||||
if (window)
|
if (window)
|
||||||
{
|
{
|
||||||
bool backup_skip_items = window->SkipItems;
|
|
||||||
window->SkipItems = false;
|
|
||||||
if (g.IO.BackendFlags & ImGuiBackendFlags_RendererHasTextures)
|
if (g.IO.BackendFlags & ImGuiBackendFlags_RendererHasTextures)
|
||||||
{
|
{
|
||||||
ImGuiViewport* viewport = window->Viewport;
|
ImGuiViewport* viewport = window->Viewport;
|
||||||
g.FontRasterizerDensity = (viewport->FramebufferScale.x != 0.0f) ? viewport->FramebufferScale.x : g.IO.DisplayFramebufferScale.x; // == SetFontRasterizerDensity()
|
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);
|
ImGui::UpdateCurrentFontSize(0.0f);
|
||||||
window->SkipItems = backup_skip_items;
|
window->SkipItems = backup_skip_items;
|
||||||
ImGui::NavUpdateCurrentWindowIsScrollPushableX();
|
ImGui::NavUpdateCurrentWindowIsScrollPushableX();
|
||||||
@@ -9000,16 +9000,6 @@ void ImGui::UpdateCurrentFontSize(float restore_font_size_after_scaling)
|
|||||||
|
|
||||||
g.Style.FontSizeBase = g.FontSizeBase;
|
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()
|
// 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;
|
float final_size = (restore_font_size_after_scaling > 0.0f) ? restore_font_size_after_scaling : 0.0f;
|
||||||
if (final_size == 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);
|
final_size = ImClamp(final_size, 1.0f, IMGUI_FONT_SIZE_MAX);
|
||||||
if (g.Font != NULL && (g.IO.BackendFlags & ImGuiBackendFlags_RendererHasTextures))
|
if (g.Font != NULL && (g.IO.BackendFlags & ImGuiBackendFlags_RendererHasTextures))
|
||||||
g.Font->CurrentRasterizerDensity = g.FontRasterizerDensity;
|
g.Font->CurrentRasterizerDensity = g.FontRasterizerDensity;
|
||||||
|
|
||||||
g.FontSize = final_size;
|
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.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.FontBakedScale = (g.Font != NULL && window != NULL) ? (g.FontSize / g.FontBaked->Size) : 0.0f;
|
||||||
g.DrawListSharedData.FontSize = g.FontSize;
|
|
||||||
g.DrawListSharedData.FontScale = g.FontBakedScale;
|
g.DrawListSharedData.FontScale = g.FontBakedScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user