feat(ui): Improve text rendering clarity with 3x font oversampling

This commit is contained in:
2026-03-09 00:13:57 -04:00
parent fde0f29e72
commit 5446a2407c
6 changed files with 277 additions and 40 deletions

View File

@@ -23,6 +23,7 @@ from src import models
from src import app_controller
from src import mcp_client
from src import markdown_helper
from src import bg_shader
import re
from pydantic import BaseModel
@@ -287,6 +288,12 @@ class App:
imgui.end_menu()
def _gui_func(self) -> None:
# Render background shader
bg = bg_shader.get_bg()
if bg.enabled:
ws = imgui.get_io().display_size
bg.render(ws.x, ws.y)
pushed_prior_tint = False
if self.perf_profiling_enabled: self.perf_monitor.start_component("_gui_func")
if self.is_viewing_prior_session:
@@ -2780,6 +2787,8 @@ def hello():
for p in theme.get_palette_names():
if imgui.selectable(p, p == cp)[0]:
theme.apply(p)
self._flush_to_config()
models.save_config(self.config)
imgui.end_combo()
imgui.separator()
@@ -2815,7 +2824,33 @@ def hello():
imgui.separator()
imgui.text("UI Scale (DPI)")
ch, scale = imgui.slider_float("##scale", theme.get_current_scale(), 0.5, 3.0, "%.2f")
if ch: theme.set_scale(scale)
if ch:
theme.set_scale(scale)
self._flush_to_config()
models.save_config(self.config)
imgui.text("Panel Transparency")
ch_t, trans = imgui.slider_float("##trans", theme.get_transparency(), 0.1, 1.0, "%.2f")
if ch_t:
theme.set_transparency(trans)
self._flush_to_config()
models.save_config(self.config)
imgui.text("Panel Item Transparency")
ch_ct, ctrans = imgui.slider_float("##ctrans", theme.get_child_transparency(), 0.1, 1.0, "%.2f")
if ch_ct:
theme.set_child_transparency(ctrans)
self._flush_to_config()
models.save_config(self.config)
imgui.separator()
bg = bg_shader.get_bg()
ch_bg, bg.enabled = imgui.checkbox("Animated Background Shader", bg.enabled)
if ch_bg:
gui_cfg = self.config.setdefault("gui", {})
gui_cfg["bg_shader_enabled"] = bg.enabled
self._flush_to_config()
models.save_config(self.config)
imgui.end()
if self.perf_profiling_enabled: self.perf_monitor.end_component("_render_theme_panel")
@@ -2825,12 +2860,17 @@ def hello():
if assets_dir.exists():
hello_imgui.set_assets_folder(str(assets_dir.absolute()))
# Improved font rendering with oversampling
config = imgui.ImFontConfig()
config.oversample_h = 3
config.oversample_v = 3
font_path, font_size = theme.get_font_loading_params()
if font_path:
# Just try loading it directly; hello_imgui will look in the assets folder
try:
self.main_font = hello_imgui.load_font_ttf_with_font_awesome_icons(font_path, font_size)
self.main_font = hello_imgui.load_font_ttf_with_font_awesome_icons(font_path, font_size, config)
except Exception as e:
print(f"Failed to load main font {font_path}: {e}")
self.main_font = None
@@ -2838,7 +2878,8 @@ def hello():
self.main_font = None
try:
self.mono_font = hello_imgui.load_font("fonts/MapleMono-Regular.ttf", font_size)
params = hello_imgui.FontLoadingParams(font_config=config)
self.mono_font = hello_imgui.load_font("fonts/MapleMono-Regular.ttf", font_size, params)
except Exception as e:
print(f"Failed to load mono font: {e}")
self.mono_font = None
@@ -2862,7 +2903,13 @@ def hello():
self.runner_params.app_window_params.window_title = "manual slop"
self.runner_params.app_window_params.window_geometry.size = (1680, 1200)
self.runner_params.imgui_window_params.enable_viewports = getattr(self, "ui_multi_viewport", False)
self.runner_params.imgui_window_params.remember_theme = True
self.runner_params.imgui_window_params.tweaked_theme = theme.get_tweaked_theme()
self.runner_params.imgui_window_params.default_imgui_window_type = hello_imgui.DefaultImGuiWindowType.provide_full_screen_dock_space
# Enforce DPI Awareness and User Scale
user_scale = theme.get_current_scale()
self.runner_params.dpi_aware_params.dpi_window_size_factor = user_scale
# Detect Monitor Refresh Rate for capping
fps_cap = 60.0
@@ -2879,11 +2926,13 @@ def hello():
self.runner_params.fps_idling.fps_idle = fps_cap
self.runner_params.imgui_window_params.show_menu_bar = True
self.runner_params.imgui_window_params.show_menu_view_themes = True
self.runner_params.ini_folder_type = hello_imgui.IniFolderType.current_folder
self.runner_params.ini_filename = "manualslop_layout.ini"
self.runner_params.callbacks.show_gui = self._gui_func
self.runner_params.callbacks.show_menus = self._show_menus
self.runner_params.callbacks.load_additional_fonts = self._load_fonts
self.runner_params.callbacks.setup_imgui_style = theme.apply_current
self.runner_params.callbacks.post_init = self._post_init
self._fetch_models(self.current_provider)
md_options = markdown_helper.get_renderer().options