diff --git a/lib/libimhex/include/hex/ui/imgui_imhex_extensions.h b/lib/libimhex/include/hex/ui/imgui_imhex_extensions.h index e28fced23..c2a4e22a2 100644 --- a/lib/libimhex/include/hex/ui/imgui_imhex_extensions.h +++ b/lib/libimhex/include/hex/ui/imgui_imhex_extensions.h @@ -131,7 +131,7 @@ namespace ImGuiExt { bool DescriptionButton(const char *label, const char *description, const ImVec2 &size_arg = ImVec2(0, 0), ImGuiButtonFlags flags = 0); bool DescriptionButtonProgress(const char *label, const char *description, float fraction, const ImVec2 &size_arg = ImVec2(0, 0), ImGuiButtonFlags flags = 0); - void HelpHover(const char *text); + void HelpHover(const char *text, const char *icon = "(?)", ImU32 iconColor = ImGui::GetColorU32(ImGuiCol_ButtonActive)); void UnderlinedText(const char *label, ImColor color = ImGui::GetStyleColorVec4(ImGuiCol_Text), const ImVec2 &size_arg = ImVec2(0, 0)); diff --git a/lib/libimhex/source/ui/imgui_imhex_extensions.cpp b/lib/libimhex/source/ui/imgui_imhex_extensions.cpp index 525d0387f..b8a8f8459 100644 --- a/lib/libimhex/source/ui/imgui_imhex_extensions.cpp +++ b/lib/libimhex/source/ui/imgui_imhex_extensions.cpp @@ -503,9 +503,7 @@ namespace ImGuiExt { return pressed; } - void HelpHover(const char *text) { - const auto iconColor = GetStyleColorVec4(ImGuiCol_ButtonActive); - + void HelpHover(const char *text, const char *icon, ImU32 iconColor) { PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0)); PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0, 0, 0, 0)); PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0, 0, 0, 0)); @@ -513,7 +511,7 @@ namespace ImGuiExt { PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0F); PushStyleColor(ImGuiCol_Text, iconColor); - Button("(?)"); + Button(icon); PopStyleColor(); if (IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) { diff --git a/plugins/builtin/romfs/lang/en_US.json b/plugins/builtin/romfs/lang/en_US.json index 524b0dff8..1f3d31e87 100644 --- a/plugins/builtin/romfs/lang/en_US.json +++ b/plugins/builtin/romfs/lang/en_US.json @@ -486,6 +486,7 @@ "hex.builtin.setting.interface.multi_windows": "Enable Multi Window support", "hex.builtin.setting.interface.scaling_factor": "Scaling", "hex.builtin.setting.interface.scaling.native": "Native", + "hex.builtin.setting.interface.scaling.fractional_warning": "The default font does not support fractional scaling. For better results, select a custom font in the 'Font' tab.", "hex.builtin.setting.interface.show_header_command_palette": "Show Command Palette in Window Header", "hex.builtin.setting.interface.style": "Styling", "hex.builtin.setting.interface.window": "Window", diff --git a/plugins/builtin/source/content/init_tasks.cpp b/plugins/builtin/source/content/init_tasks.cpp index 2b7649f0a..116df4b0c 100644 --- a/plugins/builtin/source/content/init_tasks.cpp +++ b/plugins/builtin/source/content/init_tasks.cpp @@ -229,9 +229,8 @@ namespace hex::plugin::builtin { std::strncpy(defaultConfig.Name, fontName, sizeof(defaultConfig.Name) - 1); if (fontFile.empty()) { - fontSize = std::floor(ImHexApi::Fonts::getFontSize() / ImHexApi::Fonts::DefaultFontSize) * ImHexApi::Fonts::DefaultFontSize; defaultConfig.FontBuilderFlags |= ImGuiFreeTypeBuilderFlags_Monochrome | ImGuiFreeTypeBuilderFlags_MonoHinting; - defaultConfig.SizePixels = fontSize; + defaultConfig.SizePixels = std::floor(ImHexApi::Fonts::getFontSize() / ImHexApi::Fonts::DefaultFontSize) * ImHexApi::Fonts::DefaultFontSize; defaultFont = fonts->AddFontDefault(&defaultConfig); } else { defaultFont = fonts->AddFontFromFileTTF(wolv::util::toUTF8String(fontFile).c_str(), 0, &defaultConfig, defaultGlyphRanges.Data); @@ -284,6 +283,8 @@ namespace hex::plugin::builtin { if (font.defaultSize.has_value()) size = font.defaultSize.value() * std::floor(ImHexApi::Fonts::getFontSize() / ImHexApi::Fonts::DefaultFontSize); + size = std::max(1.0F, std::floor(size / ImHexApi::Fonts::DefaultFontSize)) * ImHexApi::Fonts::DefaultFontSize; + cfg.SizePixels = size; ON_SCOPE_EXIT { cfg.MergeMode = true; }; diff --git a/plugins/builtin/source/content/settings_entries.cpp b/plugins/builtin/source/content/settings_entries.cpp index f36e6ecd4..6ec58ad35 100644 --- a/plugins/builtin/source/content/settings_entries.cpp +++ b/plugins/builtin/source/content/settings_entries.cpp @@ -173,11 +173,14 @@ namespace hex::plugin::builtin { return "x%.1f"; }(); - if (ImGui::SliderFloat(name.data(), &m_value, 0, 10, format.c_str(), ImGuiSliderFlags_AlwaysClamp)) { - return true; + bool changed = ImGui::SliderFloat(name.data(), &m_value, 0, 10, format.c_str(), ImGuiSliderFlags_AlwaysClamp); + + if (ImHexApi::Fonts::getCustomFontPath().empty() && (u32(m_value * 10) % 10) != 0) { + ImGui::SameLine(); + ImGuiExt::HelpHover("hex.builtin.setting.interface.scaling.fractional_warning"_lang, ICON_VS_WARNING, ImGuiExt::GetCustomColorU32(ImGuiCustomCol_ToolbarRed)); } - return false; + return changed; } void load(const nlohmann::json &data) override {