[gtk/x11-damage-reporting] x11: Fix damage reporting
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/x11-damage-reporting] x11: Fix damage reporting
- Date: Sun, 14 Mar 2021 21:27:58 +0000 (UTC)
commit dd4293b67ab1b586ba49d52eb83b49412cefaabe
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Mar 14 17:25:55 2021 -0400
x11: Fix damage reporting
gdk/x11/gdksurface-x11.c | 44 +++++++++++++++++++++++++++-----------------
gdk/x11/gdksurface-x11.h | 1 -
2 files changed, 27 insertions(+), 18 deletions(-)
---
diff --git a/gdk/x11/gdksurface-x11.c b/gdk/x11/gdksurface-x11.c
index 92a0a23d6c..b7abd5135e 100644
--- a/gdk/x11/gdksurface-x11.c
+++ b/gdk/x11/gdksurface-x11.c
@@ -179,19 +179,29 @@ _gdk_x11_surface_get_toplevel (GdkSurface *surface)
/**
* _gdk_x11_surface_update_size:
- * @impl: a #GdkX11Surface.
- *
+ * @impl: a #GdkX11Surface
+ *
* Updates the state of the surface (in particular the drawable's
* cairo surface) when its size has changed.
**/
-void
-_gdk_x11_surface_update_size (GdkX11Surface *impl)
+static void
+_gdk_x11_surface_update_size (GdkX11Surface *impl,
+ int width,
+ int height)
{
+ GdkSurface *surface = GDK_SURFACE (impl);
+
+ if (surface->width == width && surface->height == height)
+ return;
+
+ surface->width = width;
+ surface->height = height;
+ _gdk_surface_update_size (surface);
+
if (impl->cairo_surface)
- {
- cairo_xlib_surface_set_size (impl->cairo_surface,
- impl->unscaled_width, impl->unscaled_height);
- }
+ cairo_xlib_surface_set_size (impl->cairo_surface,
+ impl->unscaled_width,
+ impl->unscaled_height);
}
static void
@@ -385,10 +395,9 @@ gdk_x11_surface_compute_size (GdkSurface *surface)
if (surface->resize_count == 0)
{
- surface->width = impl->next_layout.configured_width;
- surface->height = impl->next_layout.configured_height;
- _gdk_surface_update_size (surface);
- _gdk_x11_surface_update_size (impl);
+ _gdk_x11_surface_update_size (impl,
+ impl->next_layout.configured_width,
+ impl->next_layout.configured_height);
}
impl->next_layout.surface_geometry_dirty = FALSE;
@@ -396,11 +405,9 @@ gdk_x11_surface_compute_size (GdkSurface *surface)
}
else
{
- surface->width = impl->next_layout.configured_width;
- surface->height = impl->next_layout.configured_height;
-
- _gdk_surface_update_size (surface);
- _gdk_x11_surface_update_size (impl);
+ _gdk_x11_surface_update_size (impl,
+ impl->next_layout.configured_width,
+ impl->next_layout.configured_height);
impl->next_layout.surface_geometry_dirty = FALSE;
}
@@ -1991,6 +1998,9 @@ _gdk_x11_surface_set_surface_scale (GdkSurface *surface,
impl = GDK_X11_SURFACE (surface);
+ if (impl->surface_scale == scale)
+ return;
+
impl->surface_scale = scale;
if (impl->cairo_surface)
cairo_surface_set_device_scale (impl->cairo_surface, impl->surface_scale, impl->surface_scale);
diff --git a/gdk/x11/gdksurface-x11.h b/gdk/x11/gdksurface-x11.h
index 0830407dd0..89f4b12845 100644
--- a/gdk/x11/gdksurface-x11.h
+++ b/gdk/x11/gdksurface-x11.h
@@ -195,7 +195,6 @@ GdkToplevelX11 *_gdk_x11_surface_get_toplevel (GdkSurface *window);
GdkCursor *_gdk_x11_surface_get_cursor (GdkSurface *window);
-void _gdk_x11_surface_update_size (GdkX11Surface *impl);
void _gdk_x11_surface_set_surface_scale (GdkSurface *window,
int scale);
gboolean _gdk_x11_surface_syncs_frames (GdkSurface *surface);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]