1
0
Fork 0
mirror of https://github.com/ocornut/imgui.git synced 2026-01-11 00:04:24 +00:00

Fonts: internals: renamed g.FontScale to g.FontBakedScale for clarity. Comments.

This commit is contained in:
ocornut 2025-06-05 14:40:37 +02:00
parent d85e22d205
commit 3c27c643a9
5 changed files with 23 additions and 22 deletions

View file

@ -3979,7 +3979,7 @@ ImGuiContext::ImGuiContext(ImFontAtlas* shared_font_atlas)
Initialized = false; Initialized = false;
Font = NULL; Font = NULL;
FontBaked = NULL; FontBaked = NULL;
FontSize = FontSizeBeforeScaling = FontScale = CurrentDpiScale = 0.0f; FontSize = FontSizeBeforeScaling = FontBakedScale = CurrentDpiScale = 0.0f;
FontRasterizerDensity = 1.0f; FontRasterizerDensity = 1.0f;
IO.Fonts = shared_font_atlas ? shared_font_atlas : IM_NEW(ImFontAtlas)(); IO.Fonts = shared_font_atlas ? shared_font_atlas : IM_NEW(ImFontAtlas)();
if (shared_font_atlas == NULL) if (shared_font_atlas == NULL)
@ -8773,9 +8773,9 @@ void ImGui::UpdateCurrentFontSize(float restore_font_size_after_scaling)
g.Font->CurrentRasterizerDensity = g.FontRasterizerDensity; g.Font->CurrentRasterizerDensity = g.FontRasterizerDensity;
g.FontSize = final_size; g.FontSize = final_size;
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.FontScale = (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.FontSize = g.FontSize;
g.DrawListSharedData.FontScale = g.FontScale; g.DrawListSharedData.FontScale = g.FontBakedScale;
} }
// Exposed in case user may want to override setting density. // Exposed in case user may want to override setting density.
@ -8793,20 +8793,20 @@ void ImGui::SetFontRasterizerDensity(float rasterizer_density)
// If you want to scale an existing font size: // If you want to scale an existing font size:
// - Use e.g. PushFontSize(style.FontSizeBase * factor) (= value before external scale factors applied). // - Use e.g. PushFontSize(style.FontSizeBase * factor) (= value before external scale factors applied).
// - Do NOT use PushFontSize(GetFontSize() * factor) (= value after external scale factors applied). // - Do NOT use PushFontSize(GetFontSize() * factor) (= value after external scale factors applied).
void ImGui::PushFont(ImFont* font, float font_size) void ImGui::PushFont(ImFont* font, float font_size_base)
{ {
ImGuiContext& g = *GImGui; ImGuiContext& g = *GImGui;
g.FontStack.push_back({ g.Font, g.FontSizeBeforeScaling, g.FontSize }); g.FontStack.push_back({ g.Font, g.FontSizeBeforeScaling, g.FontSize });
if (font == NULL) if (font == NULL)
font = GetDefaultFont(); font = GetDefaultFont();
if (font_size <= 0.0f) if (font_size_base <= 0.0f)
{ {
if (font->Flags & ImFontFlags_DefaultToLegacySize) if (font->Flags & ImFontFlags_DefaultToLegacySize)
font_size = font->LegacySize; // Legacy: use AddFont() specified font size. Same as doing PushFont(font, font->LegacySize) font_size_base = font->LegacySize; // Legacy: use AddFont() specified font size. Same as doing PushFont(font, font->LegacySize)
else else
font_size = g.FontSizeBeforeScaling; // Keep current font size font_size_base = g.FontSizeBeforeScaling; // Keep current font size
} }
SetCurrentFont(font, font_size, 0.0f); SetCurrentFont(font, font_size_base, 0.0f);
} }
void ImGui::PopFont() void ImGui::PopFont()
@ -8822,10 +8822,10 @@ void ImGui::PopFont()
g.FontStack.pop_back(); g.FontStack.pop_back();
} }
void ImGui::PushFontSize(float font_size) void ImGui::PushFontSize(float font_size_base)
{ {
ImGuiContext& g = *GImGui; ImGuiContext& g = *GImGui;
PushFont(g.Font, font_size); PushFont(g.Font, font_size_base);
} }
void ImGui::PopFontSize() void ImGui::PopFontSize()

11
imgui.h
View file

@ -500,12 +500,13 @@ namespace ImGui
// - To use old behavior (single size font, size specified in AddFontXXX() call: // - To use old behavior (single size font, size specified in AddFontXXX() call:
// - Use 'PushFont(font, font->LegacySize)' at call site // - Use 'PushFont(font, font->LegacySize)' at call site
// - Or set 'ImFontConfig::Flags |= ImFontFlags_DefaultToLegacySize' before calling AddFont(), and then 'PushFont(font)' will use this size. // - Or set 'ImFontConfig::Flags |= ImFontFlags_DefaultToLegacySize' before calling AddFont(), and then 'PushFont(font)' will use this size.
// - External scale factors are applied over the provided value.
// *IMPORTANT* If you want to scale an existing font size: // *IMPORTANT* If you want to scale an existing font size:
// - OK: PushFontSize(style.FontSizeBase * factor) (= value before external scale factors applied). // - OK: PushFontSize(style.FontSizeBase * factor) (= value before external scale factors applied).
// - KO: PushFontSize(GetFontSize() * factor) (= value after external scale factors applied. external scale factors are style.FontScaleMain + per-viewport scales.). // - KO: PushFontSize(GetFontSize() * factor) (= value after external scale factors applied. external scale factors are style.FontScaleMain + per-viewport scales.).
IMGUI_API void PushFont(ImFont* font, float font_size = -1); // use NULL as a shortcut to push default font. Use <0.0f to keep current font size. IMGUI_API void PushFont(ImFont* font, float font_size_base = -1); // use NULL as a shortcut to push default font. Use <0.0f to keep current font size.
IMGUI_API void PopFont(); IMGUI_API void PopFont();
IMGUI_API void PushFontSize(float font_size); IMGUI_API void PushFontSize(float font_size_base);
IMGUI_API void PopFontSize(); IMGUI_API void PopFontSize();
// Parameters stacks (shared) // Parameters stacks (shared)
@ -2226,9 +2227,9 @@ IM_MSVC_RUNTIME_CHECKS_RESTORE
struct ImGuiStyle struct ImGuiStyle
{ {
float FontSizeBase; // Current base font size (scaling applied). Use PushFont()/PushFontSize() to modify. Use ImGui::GetFontSize() to obtain scaled value. float FontSizeBase; // Current base font size before external scaling factors are applied. Use PushFont()/PushFontSize() to modify. Use ImGui::GetFontSize() to obtain scaled value. Final FontSize = FontSizeBase * (FontScaleBase * FontScaleDpi * other_factors)
float FontScaleMain; // Main global scale factor. Other scale factors may apply. float FontScaleMain; // Main scale factor. May be set by application once, or exposed to end-user.
float FontScaleDpi; // Scale factor from viewport/monitor. When io.ConfigDpiScaleFonts is enabled, this is automatically overwritten when changing monitor. float FontScaleDpi; // Scale factor from viewport/monitor contents scale. When io.ConfigDpiScaleFonts is enabled, this is automatically overwritten when changing monitor.
float Alpha; // Global alpha applies to everything in Dear ImGui. float Alpha; // Global alpha applies to everything in Dear ImGui.
float DisabledAlpha; // Additional alpha multiplier applied by BeginDisabled(). Multiply over current value of Alpha. float DisabledAlpha; // Additional alpha multiplier applied by BeginDisabled(). Multiply over current value of Alpha.

View file

@ -871,8 +871,8 @@ struct ImDrawDataBuilder
struct ImFontStackData struct ImFontStackData
{ {
ImFont* Font; ImFont* Font;
float FontSizeBeforeScaling; float FontSizeBeforeScaling; // ~~ style.FontSizeBase
float FontSizeAfterScaling; float FontSizeAfterScaling; // ~~ g.FontSize
}; };
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -2140,8 +2140,8 @@ struct ImGuiContext
ImFont* Font; // Currently bound font. (== FontStack.back().Font) ImFont* Font; // Currently bound font. (== FontStack.back().Font)
ImFontBaked* FontBaked; // Currently bound font at currently bound size. (== Font->GetFontBaked(FontSize)) ImFontBaked* FontBaked; // Currently bound font at currently bound size. (== Font->GetFontBaked(FontSize))
float FontSize; // Currently bound font size == line height (== FontSizeBeforeScaling + externals scales applied in the UpdateCurrentFontSize() function). float FontSize; // Currently bound font size == line height (== FontSizeBeforeScaling + externals scales applied in the UpdateCurrentFontSize() function).
float FontSizeBeforeScaling; // == value passed to PushFont() / PushFontSize() when specified. float FontSizeBeforeScaling; // Font size before scaling == style.FontSizeBase == value passed to PushFont() / PushFontSize() when specified.
float FontScale; // == FontBaked->Size / Font->FontSize. Scale factor over baked size. float FontBakedScale; // == FontBaked->Size / FontSize. Scale factor over baked size. Rarely used nowadays, very often == 1.0f.
float FontRasterizerDensity; // Current font density. Used by all calls to GetFontBaked(). float FontRasterizerDensity; // Current font density. Used by all calls to GetFontBaked().
float CurrentDpiScale; // Current window/viewport DpiScale == CurrentViewport->DpiScale float CurrentDpiScale; // Current window/viewport DpiScale == CurrentViewport->DpiScale
ImDrawListSharedData DrawListSharedData; ImDrawListSharedData DrawListSharedData;

View file

@ -3375,7 +3375,7 @@ void ImGui::TableAngledHeadersRowEx(ImGuiID row_id, float angle, float max_label
ButtonBehavior(row_r, row_id, NULL, NULL); ButtonBehavior(row_r, row_id, NULL, NULL);
KeepAliveID(row_id); KeepAliveID(row_id);
const float ascent_scaled = g.FontBaked->Ascent * g.FontScale; // FIXME: Standardize those scaling factors better const float ascent_scaled = g.FontBaked->Ascent * g.FontBakedScale; // FIXME: Standardize those scaling factors better
const float line_off_for_ascent_x = (ImMax((g.FontSize - ascent_scaled) * 0.5f, 0.0f) / -sin_a) * (flip_label ? -1.0f : 1.0f); const float line_off_for_ascent_x = (ImMax((g.FontSize - ascent_scaled) * 0.5f, 0.0f) / -sin_a) * (flip_label ? -1.0f : 1.0f);
const ImVec2 padding = g.Style.CellPadding; // We will always use swapped component const ImVec2 padding = g.Style.CellPadding; // We will always use swapped component
const ImVec2 align = g.Style.TableAngledHeadersTextAlign; const ImVec2 align = g.Style.TableAngledHeadersTextAlign;

View file

@ -1518,7 +1518,7 @@ bool ImGui::TextLink(const char* label)
ColorConvertHSVtoRGB(h, s, v, line_colf.x, line_colf.y, line_colf.z); ColorConvertHSVtoRGB(h, s, v, line_colf.x, line_colf.y, line_colf.z);
} }
float line_y = bb.Max.y + ImFloor(g.FontBaked->Descent * g.FontScale * 0.20f); float line_y = bb.Max.y + ImFloor(g.FontBaked->Descent * g.FontBakedScale * 0.20f);
window->DrawList->AddLine(ImVec2(bb.Min.x, line_y), ImVec2(bb.Max.x, line_y), GetColorU32(line_colf)); // FIXME-TEXT: Underline mode // FIXME-DPI window->DrawList->AddLine(ImVec2(bb.Min.x, line_y), ImVec2(bb.Max.x, line_y), GetColorU32(line_colf)); // FIXME-TEXT: Underline mode // FIXME-DPI
PushStyleColor(ImGuiCol_Text, GetColorU32(text_colf)); PushStyleColor(ImGuiCol_Text, GetColorU32(text_colf));
@ -4012,7 +4012,7 @@ namespace ImStb
{ {
static int STB_TEXTEDIT_STRINGLEN(const ImGuiInputTextState* obj) { return obj->TextLen; } static int STB_TEXTEDIT_STRINGLEN(const ImGuiInputTextState* obj) { return obj->TextLen; }
static char STB_TEXTEDIT_GETCHAR(const ImGuiInputTextState* obj, int idx) { IM_ASSERT(idx <= obj->TextLen); return obj->TextSrc[idx]; } static char STB_TEXTEDIT_GETCHAR(const ImGuiInputTextState* obj, int idx) { IM_ASSERT(idx <= obj->TextLen); return obj->TextSrc[idx]; }
static float STB_TEXTEDIT_GETWIDTH(ImGuiInputTextState* obj, int line_start_idx, int char_idx) { unsigned int c; ImTextCharFromUtf8(&c, obj->TextSrc + line_start_idx + char_idx, obj->TextSrc + obj->TextLen); if ((ImWchar)c == '\n') return IMSTB_TEXTEDIT_GETWIDTH_NEWLINE; ImGuiContext& g = *obj->Ctx; return g.FontBaked->GetCharAdvance((ImWchar)c) * g.FontScale; } static float STB_TEXTEDIT_GETWIDTH(ImGuiInputTextState* obj, int line_start_idx, int char_idx) { unsigned int c; ImTextCharFromUtf8(&c, obj->TextSrc + line_start_idx + char_idx, obj->TextSrc + obj->TextLen); if ((ImWchar)c == '\n') return IMSTB_TEXTEDIT_GETWIDTH_NEWLINE; ImGuiContext& g = *obj->Ctx; return g.FontBaked->GetCharAdvance((ImWchar)c) * g.FontBakedScale; }
static char STB_TEXTEDIT_NEWLINE = '\n'; static char STB_TEXTEDIT_NEWLINE = '\n';
static void STB_TEXTEDIT_LAYOUTROW(StbTexteditRow* r, ImGuiInputTextState* obj, int line_start_idx) static void STB_TEXTEDIT_LAYOUTROW(StbTexteditRow* r, ImGuiInputTextState* obj, int line_start_idx)
{ {