diff options
author | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2020-09-12 18:51:18 +0300 |
---|---|---|
committer | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2020-09-12 18:51:18 +0300 |
commit | caf2c1d6836b109e52e926458f9f05e050eead88 (patch) | |
tree | e2158f104b45fd1e871b799db9f1d8dab7a9bb28 /src | |
parent | bdfe1717192547646789773303018139e80ca2a3 (diff) | |
download | metacity-caf2c1d6836b109e52e926458f9f05e050eead88.tar.gz |
compositor-xrender: add meta_compositor_xrender_create_root_buffer
Diffstat (limited to 'src')
-rw-r--r-- | src/compositor/meta-compositor-xrender.c | 81 | ||||
-rw-r--r-- | src/compositor/meta-compositor-xrender.h | 14 |
2 files changed, 55 insertions, 40 deletions
diff --git a/src/compositor/meta-compositor-xrender.c b/src/compositor/meta-compositor-xrender.c index b9b8b18f..83a4c3eb 100644 --- a/src/compositor/meta-compositor-xrender.c +++ b/src/compositor/meta-compositor-xrender.c @@ -679,40 +679,6 @@ root_tile (MetaScreen *screen) return picture; } -static Picture -create_root_buffer (MetaCompositorXRender *self) -{ - MetaCompositorXRenderPrivate *priv; - Display *xdisplay; - Picture pict; - XRenderPictFormat *format; - Pixmap root_pixmap; - Visual *visual; - int depth, screen_width, screen_height, screen_number; - - priv = meta_compositor_xrender_get_instance_private (self); - - meta_screen_get_size (priv->screen, &screen_width, &screen_height); - - xdisplay = priv->xdisplay; - screen_number = meta_screen_get_screen_number (priv->screen); - visual = DefaultVisual (xdisplay, screen_number); - depth = DefaultDepth (xdisplay, screen_number); - - format = XRenderFindVisualFormat (xdisplay, visual); - g_return_val_if_fail (format != NULL, None); - - root_pixmap = XCreatePixmap (xdisplay, priv->overlay_window, - screen_width, screen_height, depth); - - g_return_val_if_fail (root_pixmap != None, None); - - pict = XRenderCreatePicture (xdisplay, root_pixmap, format, 0, NULL); - XFreePixmap (xdisplay, root_pixmap); - - return pict; -} - static void paint_root (MetaCompositorXRender *self, Picture root_buffer) @@ -1158,7 +1124,17 @@ meta_compositor_xrender_pre_paint (MetaCompositor *compositor) priv = meta_compositor_xrender_get_instance_private (self); if (priv->root_buffer == None) - priv->root_buffer = create_root_buffer (self); + { + 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); + } if (priv->root_tile == None) priv->root_tile = root_tile (priv->screen); @@ -1347,3 +1323,38 @@ meta_compositor_xrender_create_shadow (MetaCompositorXRender *self, return ret; } + +void +meta_compositor_xrender_create_root_buffer (MetaCompositorXRender *self, + Pixmap *pixmap, + Picture *buffer) +{ + MetaCompositorXRenderPrivate *priv; + int screen_width; + int screen_height; + int screen_number; + Visual *visual; + XRenderPictFormat *format; + + g_return_if_fail (pixmap == NULL || *pixmap == None); + g_return_if_fail (buffer == NULL || *buffer == None); + + priv = meta_compositor_xrender_get_instance_private (self); + + meta_screen_get_size (priv->screen, &screen_width, &screen_height); + + screen_number = meta_screen_get_screen_number (priv->screen); + visual = DefaultVisual (priv->xdisplay, screen_number); + format = XRenderFindVisualFormat (priv->xdisplay, visual); + g_return_if_fail (format != NULL); + + *pixmap = XCreatePixmap (priv->xdisplay, + priv->overlay_window, + screen_width, + screen_height, + DefaultDepth (priv->xdisplay, screen_number)); + + g_return_if_fail (*pixmap != None); + + *buffer = XRenderCreatePicture (priv->xdisplay, *pixmap, format, 0, NULL); +} diff --git a/src/compositor/meta-compositor-xrender.h b/src/compositor/meta-compositor-xrender.h index 9b3ad1ca..59ef1059 100644 --- a/src/compositor/meta-compositor-xrender.h +++ b/src/compositor/meta-compositor-xrender.h @@ -33,13 +33,17 @@ struct _MetaCompositorXRenderClass MetaCompositorClass parent_class; }; -MetaCompositor *meta_compositor_xrender_new (MetaDisplay *display, - GError **error); +MetaCompositor *meta_compositor_xrender_new (MetaDisplay *display, + GError **error); -gboolean meta_compositor_xrender_have_shadows (MetaCompositorXRender *self); +gboolean meta_compositor_xrender_have_shadows (MetaCompositorXRender *self); -MetaShadowXRender *meta_compositor_xrender_create_shadow (MetaCompositorXRender *self, - MetaSurface *surface); +MetaShadowXRender *meta_compositor_xrender_create_shadow (MetaCompositorXRender *self, + MetaSurface *surface); + +void meta_compositor_xrender_create_root_buffer (MetaCompositorXRender *self, + Pixmap *pixmap, + Picture *buffer); G_END_DECLS |