From 374225ae6a72f0ec65f4b444bb8d24c1044f83cb Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 9 May 2021 19:32:36 -0400 Subject: [PATCH 1/3] Cosmetics --- gdk/broadway/gdkdisplay-broadway.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gdk/broadway/gdkdisplay-broadway.c b/gdk/broadway/gdkdisplay-broadway.c index 3f881426eb..86e299d13a 100644 --- a/gdk/broadway/gdkdisplay-broadway.c +++ b/gdk/broadway/gdkdisplay-broadway.c @@ -112,7 +112,8 @@ _gdk_broadway_display_size_changed (GdkDisplay *display, gdk_broadway_surface_move_resize (GDK_SURFACE (toplevel), 0, 0, msg->width, msg->height); - }} + } +} static GdkDevice * create_core_pointer (GdkDisplay *display) From 7745f675834debe1128d2edf2cba43da16493d85 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 9 May 2021 19:42:42 -0400 Subject: [PATCH 2/3] broadway: Add a setter for display scale This is useful when using Broadway as a headless display server. Fixes: #3934 --- gdk/broadway/gdkbroadwaydisplay.h | 4 ++++ gdk/broadway/gdkdisplay-broadway.c | 37 ++++++++++++++++++++++++++++-- gdk/broadway/gdkdisplay-broadway.h | 1 + 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/gdk/broadway/gdkbroadwaydisplay.h b/gdk/broadway/gdkbroadwaydisplay.h index b7293dc932..79e78c9a62 100644 --- a/gdk/broadway/gdkbroadwaydisplay.h +++ b/gdk/broadway/gdkbroadwaydisplay.h @@ -48,6 +48,10 @@ void gdk_broadway_display_show_keyboard (GdkBroadwayDis GDK_AVAILABLE_IN_ALL void gdk_broadway_display_hide_keyboard (GdkBroadwayDisplay *display); +GDK_AVAILABLE_IN_4_4 +void gdk_broadway_display_set_surface_scale (GdkDisplay *display, + int scale); + G_END_DECLS #endif /* __GDK_BROADWAY_DISPLAY_H__ */ diff --git a/gdk/broadway/gdkdisplay-broadway.c b/gdk/broadway/gdkdisplay-broadway.c index 86e299d13a..29f2256323 100644 --- a/gdk/broadway/gdkdisplay-broadway.c +++ b/gdk/broadway/gdkdisplay-broadway.c @@ -94,10 +94,12 @@ _gdk_broadway_display_size_changed (GdkDisplay *display, if (msg->width == current_size.width && msg->height == current_size.height && - msg->scale == broadway_display->scale_factor) + (msg->scale == broadway_display->scale_factor || + broadway_display->fixed_scale)) return; - broadway_display->scale_factor = msg->scale; + if (!broadway_display->fixed_scale) + broadway_display->scale_factor = msg->scale; gdk_monitor_set_geometry (monitor, &(GdkRectangle) { 0, 0, msg->width, msg->height }); gdk_monitor_set_scale_factor (monitor, msg->scale); @@ -328,6 +330,37 @@ gdk_broadway_display_hide_keyboard (GdkBroadwayDisplay *display) _gdk_broadway_server_set_show_keyboard (display->server, FALSE); } +/** + * gdk_broadway_display_set_surface_scale: + * @display: (type GdkBroadwayDisplay): the display + * @scale: The new scale value, as an integer >= 1 + * + * Forces a specific window scale for all windows on this display, + * instead of using the default or user configured scale. This + * is can be used to disable scaling support by setting @scale to + * 1, or to programmatically set the window scale. + * + * Once the scale is set by this call it will not change in + * response to later user configuration changes. + * + * Since: 4.4 + */ +void +gdk_broadway_display_set_surface_scale (GdkDisplay *display, + int scale) +{ + GdkBroadwayDisplay *self; + + g_return_if_fail (GDK_IS_BROADWAY_DISPLAY (display)); + g_return_if_fail (scale > 0); + + self = GDK_BROADWAY_DISPLAY (display); + + self->scale_factor = scale; + self->fixed_scale = TRUE; + gdk_monitor_set_scale_factor (self->monitor, scale); +} + static GListModel * gdk_broadway_display_get_monitors (GdkDisplay *display) { diff --git a/gdk/broadway/gdkdisplay-broadway.h b/gdk/broadway/gdkdisplay-broadway.h index 78dfce9a06..1747f2cb0b 100644 --- a/gdk/broadway/gdkdisplay-broadway.h +++ b/gdk/broadway/gdkdisplay-broadway.h @@ -57,6 +57,7 @@ struct _GdkBroadwayDisplay GListStore *monitors; GdkMonitor *monitor; int scale_factor; + gboolean fixed_scale; GHashTable *texture_cache; From b13c2e17f138215fce055a33e1aff4dfaa4eab2e Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 10 May 2021 10:55:41 -0400 Subject: [PATCH 3/3] inspector: Support scale changes on Broadway --- gtk/inspector/visual.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/gtk/inspector/visual.c b/gtk/inspector/visual.c index f3cb4695ac..a328b81c6d 100644 --- a/gtk/inspector/visual.c +++ b/gtk/inspector/visual.c @@ -55,6 +55,9 @@ #ifdef GDK_WINDOWING_MACOS #include "macos/gdkmacos.h" #endif +#ifdef GDK_WINDOWING_BROADWAY +#include "broadway/gdkbroadway.h" +#endif #include "gdk/gdk-private.h" @@ -796,14 +799,21 @@ init_font_scale (GtkInspectorVisual *vis) G_CALLBACK (font_scale_entry_activated), vis); } -#if defined (GDK_WINDOWING_X11) +#if defined (GDK_WINDOWING_X11) || defined (GDK_WINDOWING_BROADWAY) static void scale_changed (GtkAdjustment *adjustment, GtkInspectorVisual *vis) { int scale; scale = gtk_adjustment_get_value (adjustment); - gdk_x11_display_set_surface_scale (vis->display, scale); +#if defined (GDK_WINDOWING_X11) + if (GDK_IS_X11_DISPLAY (vis->display)) + gdk_x11_display_set_surface_scale (vis->display, scale); +#endif +#if defined (GDK_WINDOWING_BROADWAY) + if (GDK_IS_BROADWAY_DISPLAY (vis->display)) + gdk_broadway_display_set_surface_scale (vis->display, scale); +#endif } #endif @@ -821,6 +831,18 @@ init_scale (GtkInspectorVisual *vis) G_CALLBACK (scale_changed), vis); } else +#endif +#if defined (GDK_WINDOWING_BROADWAY) + if (GDK_IS_BROADWAY_DISPLAY (vis->display)) + { + double scale; + + scale = gdk_monitor_get_scale_factor (gdk_x11_display_get_primary_monitor (vis->display)); + gtk_adjustment_set_value (vis->scale_adjustment, scale); + g_signal_connect (vis->scale_adjustment, "value-changed", + G_CALLBACK (scale_changed), vis); + } + else #endif { GtkWidget *row;