[metacity] compositor-xrender: move root buffer creation to vfunc



commit 44036c93a778cf4e9ae83a4bb47ee95b63fa1517
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Sat Sep 12 19:03:33 2020 +0300

    compositor-xrender: move root buffer creation to vfunc

 src/compositor/meta-compositor-xrender.c | 66 ++++++++++++++++++++------------
 src/compositor/meta-compositor-xrender.h |  3 ++
 2 files changed, 44 insertions(+), 25 deletions(-)
---
diff --git a/src/compositor/meta-compositor-xrender.c b/src/compositor/meta-compositor-xrender.c
index 83a4c3eb..9e909f0e 100644
--- a/src/compositor/meta-compositor-xrender.c
+++ b/src/compositor/meta-compositor-xrender.c
@@ -926,11 +926,7 @@ meta_compositor_xrender_finalize (GObject *object)
   if (priv->root_picture)
     XRenderFreePicture (xdisplay, priv->root_picture);
 
-  if (priv->root_buffer)
-    {
-      XRenderFreePicture (xdisplay, priv->root_buffer);
-      priv->root_buffer = None;
-    }
+  META_COMPOSITOR_XRENDER_GET_CLASS (self)->free_root_buffers (self);
 
   if (priv->root_tile)
     {
@@ -1100,17 +1096,10 @@ static void
 meta_compositor_xrender_sync_screen_size (MetaCompositor *compositor)
 {
   MetaCompositorXRender *self;
-  MetaCompositorXRenderPrivate *priv;
 
   self = META_COMPOSITOR_XRENDER (compositor);
-  priv = meta_compositor_xrender_get_instance_private (self);
-
-  if (priv->root_buffer)
-    {
-      XRenderFreePicture (priv->xdisplay, priv->root_buffer);
-      priv->root_buffer = None;
-    }
 
+  META_COMPOSITOR_XRENDER_GET_CLASS (self)->free_root_buffers (self);
   meta_compositor_damage_screen (compositor);
 }
 
@@ -1123,18 +1112,7 @@ meta_compositor_xrender_pre_paint (MetaCompositor *compositor)
   self = META_COMPOSITOR_XRENDER (compositor);
   priv = meta_compositor_xrender_get_instance_private (self);
 
-  if (priv->root_buffer == None)
-    {
-      Pixmap root_pixmap;
-
-      root_pixmap = None;
-      meta_compositor_xrender_create_root_buffer (self,
-                                                  &root_pixmap,
-                                                  &priv->root_buffer);
-
-      if (root_pixmap != None)
-        XFreePixmap (priv->xdisplay, root_pixmap);
-    }
+  META_COMPOSITOR_XRENDER_GET_CLASS (self)->ensure_root_buffers (self);
 
   if (priv->root_tile == None)
     priv->root_tile = root_tile (priv->screen);
@@ -1203,6 +1181,41 @@ meta_compositor_xrender_redraw (MetaCompositor *compositor,
                     screen_width, screen_height);
 }
 
+static void
+meta_compositor_xrender_ensure_root_buffers (MetaCompositorXRender *self)
+{
+  MetaCompositorXRenderPrivate *priv;
+
+  priv = meta_compositor_xrender_get_instance_private (self);
+
+  if (priv->root_buffer == None)
+    {
+      Pixmap root_pixmap;
+
+      root_pixmap = None;
+      meta_compositor_xrender_create_root_buffer (self,
+                                                  &root_pixmap,
+                                                  &priv->root_buffer);
+
+      if (root_pixmap != None)
+        XFreePixmap (priv->xdisplay, root_pixmap);
+    }
+}
+
+static void
+meta_compositor_xrender_free_root_buffers (MetaCompositorXRender *self)
+{
+  MetaCompositorXRenderPrivate *priv;
+
+  priv = meta_compositor_xrender_get_instance_private (self);
+
+  if (priv->root_buffer)
+    {
+      XRenderFreePicture (priv->xdisplay, priv->root_buffer);
+      priv->root_buffer = None;
+    }
+}
+
 static void
 meta_compositor_xrender_class_init (MetaCompositorXRenderClass *self_class)
 {
@@ -1221,6 +1234,9 @@ meta_compositor_xrender_class_init (MetaCompositorXRenderClass *self_class)
   compositor_class->sync_screen_size = meta_compositor_xrender_sync_screen_size;
   compositor_class->pre_paint = meta_compositor_xrender_pre_paint;
   compositor_class->redraw = meta_compositor_xrender_redraw;
+
+  self_class->ensure_root_buffers = meta_compositor_xrender_ensure_root_buffers;
+  self_class->free_root_buffers = meta_compositor_xrender_free_root_buffers;
 }
 
 static void
diff --git a/src/compositor/meta-compositor-xrender.h b/src/compositor/meta-compositor-xrender.h
index 59ef1059..98ab70e7 100644
--- a/src/compositor/meta-compositor-xrender.h
+++ b/src/compositor/meta-compositor-xrender.h
@@ -31,6 +31,9 @@ G_DECLARE_DERIVABLE_TYPE (MetaCompositorXRender, meta_compositor_xrender,
 struct _MetaCompositorXRenderClass
 {
   MetaCompositorClass parent_class;
+
+  void (* ensure_root_buffers) (MetaCompositorXRender *self);
+  void (* free_root_buffers)   (MetaCompositorXRender *self);
 };
 
 MetaCompositor    *meta_compositor_xrender_new                (MetaDisplay            *display,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]