aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWeifeng Liu <weifeng.liu.z@gmail.com>2025-05-11 15:33:13 +0800
committerMarc-André Lureau <marcandre.lureau@redhat.com>2025-05-24 17:03:07 +0200
commita19665448156f17b52b7f33e7960d57efcfca067 (patch)
tree7c254f4d58c6977fb7c3e5ab93303f31fe97b117
parent3a6b314409b42fe7c46c2bd80cfc2a6744d414fe (diff)
downloadqemu-a19665448156f17b52b7f33e7960d57efcfca067.zip
qemu-a19665448156f17b52b7f33e7960d57efcfca067.tar.gz
qemu-a19665448156f17b52b7f33e7960d57efcfca067.tar.bz2
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>
-rw-r--r--include/ui/gtk.h2
-rw-r--r--ui/gtk.c30
2 files changed, 21 insertions, 11 deletions
diff --git a/include/ui/gtk.h b/include/ui/gtk.h
index aa3d637..d394404 100644
--- a/include/ui/gtk.h
+++ b/include/ui/gtk.h
@@ -224,4 +224,6 @@ int gd_gl_area_make_current(DisplayGLCtx *dgc,
/* gtk-clipboard.c */
void gd_clipboard_init(GtkDisplayState *gd);
+void gd_update_scale(VirtualConsole *vc, int ww, int wh, int fbw, int fbh);
+
#endif /* UI_GTK_H */
diff --git a/ui/gtk.c b/ui/gtk.c
index 8f5bb4b..47af49e 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -801,6 +801,24 @@ void gd_update_monitor_refresh_rate(VirtualConsole *vc, GtkWidget *widget)
#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.
*
@@ -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));
wh_widget = gdk_window_get_height(gtk_widget_get_window(widget));
- if (s->full_screen) {
- 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);
- }
+ gd_update_scale(vc, ww_widget, wh_widget, fbw, fbh);
ww_surface = fbw * vc->gfx.scale_x;
wh_surface = fbh * vc->gfx.scale_y;