reflect dpi change events appropriately in font size / window pos & size

This commit is contained in:
Ryan Fleury
2025-10-20 17:42:34 -07:00
parent f2d28045fa
commit cf856524c1
2 changed files with 20 additions and 0 deletions
+7
View File
@@ -548,7 +548,14 @@ os_w32_wnd_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_DPICHANGED:
{
F32 new_dpi = (F32)(wParam & 0xffff);
RECT suggested_new_rect = *(RECT *)lParam;
window->dpi = new_dpi;
SetWindowPos(window->hwnd, 0,
suggested_new_rect.left,
suggested_new_rect.top,
suggested_new_rect.right - suggested_new_rect.left,
suggested_new_rect.bottom - suggested_new_rect.top,
0);
}break;
//- rjf: [file drop]
+13
View File
@@ -5176,6 +5176,19 @@ rd_window_frame(void)
cfg_node_release(rd_state->cfg, cfg_node_child_from_string(window, str8_lit("maximized")));
}
//- rjf: DPI changes -> xform font size / window size
F32 dpi = os_dpi_from_window(ws->os);
if(dpi != ws->last_dpi)
{
fnt_reset();
F32 current_font_size = rd_font_size();
F32 new_font_size = current_font_size * (dpi / ws->last_dpi);
new_font_size = Clamp(6.f, new_font_size, 72.f);
CFG_Node *font_size_cfg = cfg_node_child_from_string_or_alloc(rd_state->cfg, window, str8_lit("font_size"));
cfg_node_new_replacef(rd_state->cfg, font_size_cfg, "%I64u", (U64)new_font_size);
ws->last_dpi = dpi;
}
//- rjf: commit position
Rng2F32 window_rect = os_rect_from_window(ws->os);
if(!is_fullscreen && !is_maximized && !is_minimized)