diff options
author | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2020-09-12 19:03:33 +0300 |
---|---|---|
committer | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2020-09-12 19:03:33 +0300 |
commit | 44036c93a778cf4e9ae83a4bb47ee95b63fa1517 (patch) | |
tree | aeb7648f359bb80140371849cc77fb7bf4eecfa6 | |
parent | caf2c1d6836b109e52e926458f9f05e050eead88 (diff) | |
download | metacity-44036c93a778cf4e9ae83a4bb47ee95b63fa1517.tar.gz |
compositor-xrender: move root buffer creation to vfunc
-rw-r--r-- | src/compositor/meta-compositor-xrender.c | 66 | ||||
-rw-r--r-- | 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); @@ -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, |