summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2020-09-12 18:51:18 +0300
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2020-09-12 18:51:18 +0300
commitcaf2c1d6836b109e52e926458f9f05e050eead88 (patch)
treee2158f104b45fd1e871b799db9f1d8dab7a9bb28
parentbdfe1717192547646789773303018139e80ca2a3 (diff)
downloadmetacity-caf2c1d6836b109e52e926458f9f05e050eead88.tar.gz
compositor-xrender: add meta_compositor_xrender_create_root_buffer
-rw-r--r--src/compositor/meta-compositor-xrender.c81
-rw-r--r--src/compositor/meta-compositor-xrender.h14
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