ImGuiFullscreen: Add LayoutUnscale()

This commit is contained in:
Stenzek 2024-01-13 14:41:18 +10:00
parent eae4f73f94
commit 5042460264
No known key found for this signature in database
2 changed files with 29 additions and 12 deletions

View file

@ -64,6 +64,7 @@ ImFont* g_large_font = nullptr;
ImFont* g_icon_font = nullptr; ImFont* g_icon_font = nullptr;
float g_layout_scale = 1.0f; float g_layout_scale = 1.0f;
float g_rcp_layout_scale = 1.0f;
float g_layout_padding_left = 0.0f; float g_layout_padding_left = 0.0f;
float g_layout_padding_top = 0.0f; float g_layout_padding_top = 0.0f;
@ -430,6 +431,8 @@ bool ImGuiFullscreen::UpdateLayoutScale()
g_layout_padding_left = 0.0f; g_layout_padding_left = 0.0f;
} }
g_rcp_layout_scale = 1.0f / g_layout_scale;
return g_layout_scale != old_scale; return g_layout_scale != old_scale;
} }

View file

@ -37,6 +37,7 @@ extern ImFont* g_medium_font;
extern ImFont* g_large_font; extern ImFont* g_large_font;
extern float g_layout_scale; extern float g_layout_scale;
extern float g_rcp_layout_scale;
extern float g_layout_padding_left; extern float g_layout_padding_left;
extern float g_layout_padding_top; extern float g_layout_padding_top;
@ -56,63 +57,76 @@ extern ImVec4 UISecondaryWeakColor; // Not currently used.
extern ImVec4 UISecondaryStrongColor; extern ImVec4 UISecondaryStrongColor;
extern ImVec4 UISecondaryTextColor; extern ImVec4 UISecondaryTextColor;
static ALWAYS_INLINE float DPIScale(float v) ALWAYS_INLINE static float DPIScale(float v)
{ {
return ImGui::GetIO().DisplayFramebufferScale.x * v; return ImGui::GetIO().DisplayFramebufferScale.x * v;
} }
static ALWAYS_INLINE float DPIScale(int v) ALWAYS_INLINE static float DPIScale(int v)
{ {
return ImGui::GetIO().DisplayFramebufferScale.x * static_cast<float>(v); return ImGui::GetIO().DisplayFramebufferScale.x * static_cast<float>(v);
} }
static ALWAYS_INLINE ImVec2 DPIScale(const ImVec2& v) ALWAYS_INLINE static ImVec2 DPIScale(const ImVec2& v)
{ {
const ImVec2& fbs = ImGui::GetIO().DisplayFramebufferScale; const ImVec2& fbs = ImGui::GetIO().DisplayFramebufferScale;
return ImVec2(v.x * fbs.x, v.y * fbs.y); return ImVec2(v.x * fbs.x, v.y * fbs.y);
} }
static ALWAYS_INLINE float WindowWidthScale(float v) ALWAYS_INLINE static float WindowWidthScale(float v)
{ {
return ImGui::GetWindowWidth() * v; return ImGui::GetWindowWidth() * v;
} }
static ALWAYS_INLINE float WindowHeightScale(float v) ALWAYS_INLINE static float WindowHeightScale(float v)
{ {
return ImGui::GetWindowHeight() * v; return ImGui::GetWindowHeight() * v;
} }
static ALWAYS_INLINE float LayoutScale(float v) ALWAYS_INLINE static float LayoutScale(float v)
{ {
return g_layout_scale * v; return g_layout_scale * v;
} }
static ALWAYS_INLINE ImVec2 LayoutScale(const ImVec2& v) ALWAYS_INLINE static ImVec2 LayoutScale(const ImVec2& v)
{ {
return ImVec2(v.x * g_layout_scale, v.y * g_layout_scale); return ImVec2(v.x * g_layout_scale, v.y * g_layout_scale);
} }
static ALWAYS_INLINE ImVec2 LayoutScale(float x, float y) ALWAYS_INLINE static ImVec2 LayoutScale(float x, float y)
{ {
return ImVec2(x * g_layout_scale, y * g_layout_scale); return ImVec2(x * g_layout_scale, y * g_layout_scale);
} }
static ALWAYS_INLINE ImVec2 LayoutScaleAndOffset(float x, float y) ALWAYS_INLINE static ImVec2 LayoutScaleAndOffset(float x, float y)
{ {
return ImVec2(g_layout_padding_left + x * g_layout_scale, g_layout_padding_top + y * g_layout_scale); return ImVec2(g_layout_padding_left + x * g_layout_scale, g_layout_padding_top + y * g_layout_scale);
} }
static ALWAYS_INLINE ImVec4 ModAlpha(const ImVec4& v, float a) ALWAYS_INLINE static float LayoutUnscale(float v)
{
return g_rcp_layout_scale * v;
}
ALWAYS_INLINE static ImVec2 LayoutUnscale(const ImVec2& v)
{
return ImVec2(v.x * g_rcp_layout_scale, v.y * g_rcp_layout_scale);
}
ALWAYS_INLINE static ImVec2 LayoutUnscale(float x, float y)
{
return ImVec2(x * g_rcp_layout_scale, y * g_rcp_layout_scale);
}
ALWAYS_INLINE static ImVec4 ModAlpha(const ImVec4& v, float a)
{ {
return ImVec4(v.x, v.y, v.z, a); return ImVec4(v.x, v.y, v.z, a);
} }
static ALWAYS_INLINE ImVec4 MulAlpha(const ImVec4& v, float a) ALWAYS_INLINE static ImVec4 MulAlpha(const ImVec4& v, float a)
{ {
return ImVec4(v.x, v.y, v.z, v.w * a); return ImVec4(v.x, v.y, v.z, v.w * a);
} }
static ALWAYS_INLINE std::string_view RemoveHash(const std::string_view& s) ALWAYS_INLINE static std::string_view RemoveHash(const std::string_view& s)
{ {
const std::string_view::size_type pos = s.find('#'); const std::string_view::size_type pos = s.find('#');
return (pos != std::string_view::npos) ? s.substr(0, pos) : s; return (pos != std::string_view::npos) ? s.substr(0, pos) : s;