summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2020-09-12 19:03:33 +0300
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2020-09-12 19:03:33 +0300
commit44036c93a778cf4e9ae83a4bb47ee95b63fa1517 (patch)
treeaeb7648f359bb80140371849cc77fb7bf4eecfa6
parentcaf2c1d6836b109e52e926458f9f05e050eead88 (diff)
downloadmetacity-44036c93a778cf4e9ae83a4bb47ee95b63fa1517.tar.gz
compositor-xrender: move root buffer creation to vfunc
-rw-r--r--src/compositor/meta-compositor-xrender.c66
-rw-r--r--src/compositor/meta-compositor-xrender.h3
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);
@@ -1204,6 +1182,41 @@ meta_compositor_xrender_redraw (MetaCompositor *compositor,
}
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)
{
GObjectClass *object_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,