diff --git a/kitty/glfw.c b/kitty/glfw.c index fa79860f8..ea675d59a 100644 --- a/kitty/glfw.c +++ b/kitty/glfw.c @@ -137,10 +137,10 @@ update_os_window_viewport(OSWindow *window, bool notify_boss) { int w, h, fw, fh; glfwGetFramebufferSize(window->handle, &fw, &fh); glfwGetWindowSize(window->handle, &w, &h); - double xdpi = window->logical_dpi_x, ydpi = window->logical_dpi_y; + double xdpi = window->fonts_data->logical_dpi_x, ydpi = window->fonts_data->logical_dpi_y; set_os_window_dpi(window); - if (fw == window->viewport_width && fh == window->viewport_height && w == window->window_width && h == window->window_height && xdpi == window->logical_dpi_x && ydpi == window->logical_dpi_y) { + if (fw == window->viewport_width && fh == window->viewport_height && w == window->window_width && h == window->window_height && xdpi == window->fonts_data->logical_dpi_x && ydpi == window->fonts_data->logical_dpi_y) { return; // no change, ignore } int min_width, min_height; min_size_for_os_window(window, &min_width, &min_height); @@ -163,7 +163,7 @@ update_os_window_viewport(OSWindow *window, bool notify_boss) { double xr = window->viewport_x_ratio, yr = window->viewport_y_ratio; window->viewport_x_ratio = (double)window->viewport_width / (double)w; window->viewport_y_ratio = (double)window->viewport_height / (double)h; - bool dpi_changed = (xr != 0.0 && xr != window->viewport_x_ratio) || (yr != 0.0 && yr != window->viewport_y_ratio) || (xdpi != window->logical_dpi_x) || (ydpi != window->logical_dpi_y); + bool dpi_changed = (xr != 0.0 && xr != window->viewport_x_ratio) || (yr != 0.0 && yr != window->viewport_y_ratio) || (xdpi != window->fonts_data->logical_dpi_x) || (ydpi != window->fonts_data->logical_dpi_y); window->viewport_size_dirty = true; window->viewport_width = MAX(window->viewport_width, min_width); @@ -678,7 +678,7 @@ draw_text_callback(GLFWwindow *window, const char *text, uint32_t fg, uint32_t b if (!ensure_csd_title_render_ctx()) return false; double xdpi, ydpi; get_window_dpi(window, &xdpi, &ydpi); - unsigned px_sz = (unsigned)(global_state.callback_os_window->font_sz_in_pts * ydpi / 72.); + unsigned px_sz = (unsigned)(global_state.callback_os_window->fonts_data->font_sz_in_pts * ydpi / 72.); px_sz = MIN(px_sz, 3 * height / 4); static char title[2048]; snprintf(title, sizeof(title), "🐱 %s", text); @@ -854,7 +854,7 @@ get_os_window_content_scale(OSWindow *os_window, double *xdpi, double *ydpi, flo static void set_os_window_dpi(OSWindow *w) { - get_window_dpi(w->handle, &w->logical_dpi_x, &w->logical_dpi_y); + get_window_dpi(w->handle, &w->fonts_data->logical_dpi_x, &w->fonts_data->logical_dpi_y); } static bool @@ -1271,7 +1271,6 @@ create_os_window(PyObject UNUSED *self, PyObject *args, PyObject *kw) { q->is_focused = q == w ? true : false; } } - w->logical_dpi_x = xdpi; w->logical_dpi_y = ydpi; w->fonts_data = fonts_data; w->shown_once = true; w->last_focused_counter = ++focus_counter; @@ -1464,10 +1463,7 @@ glfw_init(PyObject UNUSED *self, PyObject *args) { #else glfwSetDrawTextFunction(draw_text_callback); #endif - OSWindow w = {0}; - set_os_window_dpi(&w); - global_state.default_dpi.x = w.logical_dpi_x; - global_state.default_dpi.y = w.logical_dpi_y; + get_window_dpi(NULL, &global_state.default_dpi.x, &global_state.default_dpi.y); } edge_spacing_func = edge_sf; Py_INCREF(edge_spacing_func); Py_INCREF(ans); diff --git a/kitty/state.c b/kitty/state.c index e0429ef80..6e744402c 100644 --- a/kitty/state.c +++ b/kitty/state.c @@ -63,7 +63,7 @@ GlobalState global_state = {{0}}; static double dpi_for_os_window(OSWindow *os_window) { - double dpi = (os_window->logical_dpi_x + os_window->logical_dpi_y) / 2.; + double dpi = (os_window->fonts_data->logical_dpi_x + os_window->fonts_data->logical_dpi_y) / 2.; if (dpi == 0) dpi = (global_state.default_dpi.x + global_state.default_dpi.y) / 2.; return dpi; } @@ -224,7 +224,6 @@ add_os_window(void) { } } - ans->font_sz_in_pts = OPT(font_size); END_WITH_OS_WINDOW_REFS return ans; } @@ -1020,9 +1019,8 @@ PYWRAP1(os_window_font_size) { double new_sz = -1; PA("K|dp", &os_window_id, &new_sz, &force); WITH_OS_WINDOW(os_window_id) - if (new_sz > 0 && (force || new_sz != os_window->font_sz_in_pts)) { - os_window->font_sz_in_pts = new_sz; - os_window->fonts_data = load_fonts_data(os_window->font_sz_in_pts, os_window->logical_dpi_x, os_window->logical_dpi_y); + if (new_sz > 0 && (force || new_sz != os_window->fonts_data->font_sz_in_pts)) { + os_window->fonts_data = load_fonts_data(new_sz, os_window->fonts_data->logical_dpi_x, os_window->fonts_data->logical_dpi_y); send_prerendered_sprites_for_window(os_window); resize_screen(os_window, os_window->tab_bar_render_data.screen, false); for (size_t ti = 0; ti < os_window->num_tabs; ti++) { @@ -1036,7 +1034,7 @@ PYWRAP1(os_window_font_size) { // On Wayland with CSD title needs to be re-rendered in a different font size if (os_window->window_title && global_state.is_wayland) set_os_window_title(os_window, NULL); } - return Py_BuildValue("d", os_window->font_sz_in_pts); + return Py_BuildValue("d", os_window->fonts_data->font_sz_in_pts); END_WITH_OS_WINDOW return Py_BuildValue("d", 0.0); } diff --git a/kitty/state.h b/kitty/state.h index f48af19e8..3b5204803 100644 --- a/kitty/state.h +++ b/kitty/state.h @@ -230,7 +230,6 @@ typedef struct { bool is_focused; monotonic_t cursor_blink_zero_time, last_mouse_activity_at; double mouse_x, mouse_y; - double logical_dpi_x, logical_dpi_y, font_sz_in_pts; bool mouse_button_pressed[32]; PyObject *window_title; bool disallow_title_changes, title_is_overriden;