Merge branch 'broadway-display-scale' into 'master'
broadway: Add a setter for display scale Closes #3934 See merge request GNOME/gtk!3538
This commit is contained in:
@@ -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__ */
|
||||
|
||||
@@ -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);
|
||||
@@ -112,7 +114,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)
|
||||
@@ -327,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)
|
||||
{
|
||||
|
||||
@@ -57,6 +57,7 @@ struct _GdkBroadwayDisplay
|
||||
GListStore *monitors;
|
||||
GdkMonitor *monitor;
|
||||
int scale_factor;
|
||||
gboolean fixed_scale;
|
||||
|
||||
GHashTable *texture_cache;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user