Merge branch 'scale-factor-cleanup' into 'main'

wayland: Be more careful about scale-factor

See merge request GNOME/gtk!5775
This commit is contained in:
Matthias Clasen 2023-04-02 18:09:26 +00:00
commit def6a78c88
2 changed files with 16 additions and 6 deletions

View File

@ -572,6 +572,9 @@ gdk_surface_class_init (GdkSurfaceClass *klass)
* GdkSurface:scale-factor: (attributes org.gtk.Property.get=gdk_surface_get_scale_factor)
*
* The scale factor of the surface.
*
* The scale factor is the next larger integer,
* compared to [property@Gdk.Surface:scale].
*/
properties[PROP_SCALE_FACTOR] =
g_param_spec_int ("scale-factor", NULL, NULL,
@ -2622,7 +2625,7 @@ gdk_surface_get_frame_clock (GdkSurface *surface)
* pixel-based data the scale value can be used to determine whether to
* use a pixel resource with higher resolution data.
*
* The scale may change during the lifetime of the surface.
* The scale factor may change during the lifetime of the surface.
*
* Returns: the scale factor
*/
@ -2641,6 +2644,13 @@ gdk_surface_get_scale_factor (GdkSurface *surface)
* Returns the internal scale that maps from surface coordinates
* to the actual device pixels.
*
* When the scale is bigger than 1, the windowing system prefers to get
* buffers with a resolution that is bigger than the surface size (e.g.
* to show the surface on a high-resolution display, or in a magnifier).
*
* Compare with [method@Gdk.Surface.get_scale_factor], which returns the
* next larger integer.
*
* The scale may change during the lifetime of the surface.
*
* Returns: the scale

View File

@ -261,11 +261,12 @@ gdk_wayland_surface_update_size (GdkSurface *surface,
const GdkFractionalScale *scale)
{
GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface);
gboolean width_changed, height_changed, scale_changed;
gboolean width_changed, height_changed, scale_changed, scale_factor_changed;
width_changed = surface->width != width;
height_changed = surface->height != height;
scale_changed = !gdk_fractional_scale_equal (&impl->scale, scale);
scale_factor_changed = gdk_fractional_scale_to_int (&impl->scale) != gdk_fractional_scale_to_int (scale);
if (!width_changed && !height_changed && !scale_changed)
return;
@ -295,10 +296,9 @@ gdk_wayland_surface_update_size (GdkSurface *surface,
if (height_changed)
g_object_notify (G_OBJECT (surface), "height");
if (scale_changed)
{
g_object_notify (G_OBJECT (surface), "scale-factor");
g_object_notify (G_OBJECT (surface), "scale");
}
g_object_notify (G_OBJECT (surface), "scale");
if (scale_factor_changed)
g_object_notify (G_OBJECT (surface), "scale-factor");
_gdk_surface_update_size (surface);
}