gtk/ui: Introduce helper gd_update_scale

The code snippet updating scale_x/scale_y is general and will be used in
next patch. Make it a function.

Signed-off-by: Weifeng Liu <weifeng.liu.z@gmail.com>
Message-ID: <20250511073337.876650-4-weifeng.liu.z@gmail.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit is contained in:
Weifeng Liu 2025-05-11 15:33:13 +08:00 committed by Marc-André Lureau
parent 3a6b314409
commit a196654481
2 changed files with 21 additions and 11 deletions

View file

@ -224,4 +224,6 @@ int gd_gl_area_make_current(DisplayGLCtx *dgc,
/* gtk-clipboard.c */ /* gtk-clipboard.c */
void gd_clipboard_init(GtkDisplayState *gd); void gd_clipboard_init(GtkDisplayState *gd);
void gd_update_scale(VirtualConsole *vc, int ww, int wh, int fbw, int fbh);
#endif /* UI_GTK_H */ #endif /* UI_GTK_H */

View file

@ -801,6 +801,24 @@ void gd_update_monitor_refresh_rate(VirtualConsole *vc, GtkWidget *widget)
#endif #endif
} }
void gd_update_scale(VirtualConsole *vc, int ww, int wh, int fbw, int fbh)
{
if (!vc) {
return;
}
if (vc->s->full_screen) {
vc->gfx.scale_x = (double)ww / fbw;
vc->gfx.scale_y = (double)wh / fbh;
} else if (vc->s->free_scale) {
double sx, sy;
sx = (double)ww / fbw;
sy = (double)wh / fbh;
vc->gfx.scale_x = vc->gfx.scale_y = MIN(sx, sy);
}
}
/** /**
* DOC: Coordinate handling. * DOC: Coordinate handling.
* *
@ -908,17 +926,7 @@ static gboolean gd_draw_event(GtkWidget *widget, cairo_t *cr, void *opaque)
ww_widget = gdk_window_get_width(gtk_widget_get_window(widget)); ww_widget = gdk_window_get_width(gtk_widget_get_window(widget));
wh_widget = gdk_window_get_height(gtk_widget_get_window(widget)); wh_widget = gdk_window_get_height(gtk_widget_get_window(widget));
if (s->full_screen) { gd_update_scale(vc, ww_widget, wh_widget, fbw, fbh);
vc->gfx.scale_x = (double)ww_widget / fbw;
vc->gfx.scale_y = (double)wh_widget / fbh;
} else if (s->free_scale) {
double sx, sy;
sx = (double)ww_widget / fbw;
sy = (double)wh_widget / fbh;
vc->gfx.scale_x = vc->gfx.scale_y = MIN(sx, sy);
}
ww_surface = fbw * vc->gfx.scale_x; ww_surface = fbw * vc->gfx.scale_x;
wh_surface = fbh * vc->gfx.scale_y; wh_surface = fbh * vc->gfx.scale_y;