summaryrefslogtreecommitdiff
path: root/src/compositor
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2019-10-15 23:34:00 +0300
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2019-10-15 23:34:00 +0300
commitc85d68ecaa098a22641c497d2b7557855029b01b (patch)
tree7ebe6bd7ccd4c2b49a285ceb5b69bb4ae1718efb /src/compositor
parent5f37bfc9b59fb98dee3071bd70559320a17e4de8 (diff)
downloadmetacity-c85d68ecaa098a22641c497d2b7557855029b01b.tar.gz
surface-xrender: simplify code
Diffstat (limited to 'src/compositor')
-rw-r--r--src/compositor/meta-surface-xrender.c132
1 files changed, 55 insertions, 77 deletions
diff --git a/src/compositor/meta-surface-xrender.c b/src/compositor/meta-surface-xrender.c
index 0532e312..0f8acf93 100644
--- a/src/compositor/meta-surface-xrender.c
+++ b/src/compositor/meta-surface-xrender.c
@@ -31,12 +31,15 @@
struct _MetaSurfaceXRender
{
- MetaSurface parent;
+ MetaSurface parent;
- Picture picture;
+ MetaDisplay *display;
+ Display *xdisplay;
+
+ Picture picture;
- Pixmap mask_pixmap;
- Picture mask_picture;
+ Pixmap mask_pixmap;
+ Picture mask_picture;
};
G_DEFINE_TYPE (MetaSurfaceXRender, meta_surface_xrender, META_TYPE_SURFACE)
@@ -47,12 +50,11 @@ create_mask_pixmap (MetaSurfaceXRender *self,
{
MetaWindow *window;
MetaFrame *frame;
- MetaDisplay *display;
- Display *xdisplay;
int width;
int height;
XRenderPictFormat *format;
double opacity;
+ Screen *xscreen;
cairo_surface_t *surface;
cairo_t *cr;
Pixmap pixmap;
@@ -63,31 +65,29 @@ create_mask_pixmap (MetaSurfaceXRender *self,
if (frame == NULL && window->opacity == OPAQUE)
return None;
- display = meta_window_get_display (window);
- xdisplay = meta_display_get_xdisplay (display);
-
width = frame != NULL ? meta_surface_get_width (META_SURFACE (self)) : 1;
height = frame != NULL ? meta_surface_get_height (META_SURFACE (self)) : 1;
- format = XRenderFindStandardFormat (xdisplay, PictStandardA8);
+ format = XRenderFindStandardFormat (self->xdisplay, PictStandardA8);
- meta_error_trap_push (display);
- pixmap = XCreatePixmap (xdisplay,
- DefaultRootWindow (xdisplay),
+ meta_error_trap_push (self->display);
+ pixmap = XCreatePixmap (self->xdisplay,
+ DefaultRootWindow (self->xdisplay),
width,
height,
format->depth);
- if (meta_error_trap_pop_with_return (display) != 0)
+ if (meta_error_trap_pop_with_return (self->display) != 0)
return None;
opacity = 1.0;
if (with_opacity)
opacity = (double) window->opacity / OPAQUE;
- surface = cairo_xlib_surface_create_with_xrender_format (xdisplay,
+ xscreen = DefaultScreenOfDisplay (self->xdisplay);
+ surface = cairo_xlib_surface_create_with_xrender_format (self->xdisplay,
pixmap,
- DefaultScreenOfDisplay (xdisplay),
+ xscreen,
format,
width,
height);
@@ -155,57 +155,30 @@ create_mask_pixmap (MetaSurfaceXRender *self,
static void
free_picture (MetaSurfaceXRender *self)
{
- MetaWindow *window;
- MetaDisplay *display;
- Display *xdisplay;
-
if (self->picture == None)
return;
- window = meta_surface_get_window (META_SURFACE (self));
-
- display = meta_window_get_display (window);
- xdisplay = meta_display_get_xdisplay (display);
-
- XRenderFreePicture (xdisplay, self->picture);
+ XRenderFreePicture (self->xdisplay, self->picture);
self->picture = None;
}
static void
free_mask_pixmap (MetaSurfaceXRender *self)
{
- MetaWindow *window;
- MetaDisplay *display;
- Display *xdisplay;
-
if (self->mask_pixmap == None)
return;
- window = meta_surface_get_window (META_SURFACE (self));
-
- display = meta_window_get_display (window);
- xdisplay = meta_display_get_xdisplay (display);
-
- XFreePixmap (xdisplay, self->mask_pixmap);
+ XFreePixmap (self->xdisplay, self->mask_pixmap);
self->mask_pixmap = None;
}
static void
free_mask_picture (MetaSurfaceXRender *self)
{
- MetaWindow *window;
- MetaDisplay *display;
- Display *xdisplay;
-
if (self->mask_picture == None)
return;
- window = meta_surface_get_window (META_SURFACE (self));
-
- display = meta_window_get_display (window);
- xdisplay = meta_display_get_xdisplay (display);
-
- XRenderFreePicture (xdisplay, self->mask_picture);
+ XRenderFreePicture (self->xdisplay, self->mask_picture);
self->mask_picture = None;
}
@@ -213,8 +186,6 @@ static Picture
get_window_picture (MetaSurfaceXRender *self)
{
MetaWindow *window;
- MetaDisplay *display;
- Display *xdisplay;
Window xwindow;
Visual *xvisual;
XRenderPictFormat *format;
@@ -226,18 +197,15 @@ get_window_picture (MetaSurfaceXRender *self)
window = meta_surface_get_window (META_SURFACE (self));
- display = meta_window_get_display (window);
- xdisplay = meta_display_get_xdisplay (display);
-
xwindow = meta_window_get_toplevel_xwindow (window);
xvisual = meta_window_get_toplevel_xvisual (window);
- format = XRenderFindVisualFormat (xdisplay, xvisual);
+ format = XRenderFindVisualFormat (self->xdisplay, xvisual);
if (format == NULL)
{
- xvisual = DefaultVisual (xdisplay, DefaultScreen (xdisplay));
- format = XRenderFindVisualFormat (xdisplay, xvisual);
+ xvisual = DefaultVisual (self->xdisplay, DefaultScreen (self->xdisplay));
+ format = XRenderFindVisualFormat (self->xdisplay, xvisual);
}
if (format == NULL)
@@ -249,9 +217,9 @@ get_window_picture (MetaSurfaceXRender *self)
pa.subwindow_mode = IncludeInferiors;
pa_mask = CPSubwindowMode;
- meta_error_trap_push (display);
- picture = XRenderCreatePicture (xdisplay, drawable, format, pa_mask, &pa);
- meta_error_trap_pop (display);
+ meta_error_trap_push (self->display);
+ picture = XRenderCreatePicture (self->xdisplay, drawable, format, pa_mask, &pa);
+ meta_error_trap_pop (self->display);
return picture;
}
@@ -259,30 +227,44 @@ get_window_picture (MetaSurfaceXRender *self)
static Picture
get_window_mask_picture (MetaSurfaceXRender *self)
{
- MetaWindow *window;
- MetaDisplay *display;
- Display *xdisplay;
XRenderPictFormat *format;
Picture picture;
if (self->mask_pixmap == None)
return None;
- window = meta_surface_get_window (META_SURFACE (self));
+ format = XRenderFindStandardFormat (self->xdisplay, PictStandardA8);
- display = meta_window_get_display (window);
- xdisplay = meta_display_get_xdisplay (display);
+ meta_error_trap_push (self->display);
- format = XRenderFindStandardFormat (xdisplay, PictStandardA8);
+ picture = XRenderCreatePicture (self->xdisplay,
+ self->mask_pixmap,
+ format,
+ 0,
+ NULL);
- meta_error_trap_push (display);
- picture = XRenderCreatePicture (xdisplay, self->mask_pixmap, format, 0, NULL);
- meta_error_trap_pop (display);
+ meta_error_trap_pop (self->display);
return picture;
}
static void
+meta_surface_xrender_constructed (GObject *object)
+{
+ MetaSurfaceXRender *self;
+ MetaWindow *window;
+
+ self = META_SURFACE_XRENDER (object);
+
+ G_OBJECT_CLASS (meta_surface_xrender_parent_class)->constructed (object);
+
+ window = meta_surface_get_window (META_SURFACE (self));
+
+ self->display = meta_window_get_display (window);
+ self->xdisplay = meta_display_get_xdisplay (self->display);
+}
+
+static void
meta_surface_xrender_finalize (GObject *object)
{
MetaSurfaceXRender *self;
@@ -305,8 +287,6 @@ meta_surface_xrender_get_image (MetaSurface *surface)
MetaWindow *window;
Pixmap mask_pixmap;
gboolean free_pixmap;
- MetaDisplay *display;
- Display *xdisplay;
Visual *visual;
int width;
int height;
@@ -331,14 +311,11 @@ meta_surface_xrender_get_image (MetaSurface *surface)
free_pixmap = TRUE;
}
- display = meta_window_get_display (window);
- xdisplay = meta_display_get_xdisplay (display);
-
visual = meta_window_get_toplevel_xvisual (window);
width = meta_surface_get_width (surface);
height = meta_surface_get_height (surface);
- back_surface = cairo_xlib_surface_create (xdisplay,
+ back_surface = cairo_xlib_surface_create (self->xdisplay,
back_pixmap,
visual,
width,
@@ -363,14 +340,14 @@ meta_surface_xrender_get_image (MetaSurface *surface)
cairo_surface_t *mask;
cairo_pattern_t *pattern;
- xscreen = DefaultScreenOfDisplay (xdisplay);
- format = XRenderFindStandardFormat (xdisplay, PictStandardA8);
+ xscreen = DefaultScreenOfDisplay (self->xdisplay);
+ format = XRenderFindStandardFormat (self->xdisplay, PictStandardA8);
frame = meta_window_get_frame (window);
mask_width = frame != NULL ? width : 1;
mask_height = frame != NULL ? height : 1;
- mask = cairo_xlib_surface_create_with_xrender_format (xdisplay,
+ mask = cairo_xlib_surface_create_with_xrender_format (self->xdisplay,
mask_pixmap,
xscreen,
format,
@@ -396,7 +373,7 @@ meta_surface_xrender_get_image (MetaSurface *surface)
cairo_destroy (cr);
if (free_pixmap && mask_pixmap != None)
- XFreePixmap (xdisplay, mask_pixmap);
+ XFreePixmap (self->xdisplay, mask_pixmap);
return image;
}
@@ -481,6 +458,7 @@ meta_surface_xrender_class_init (MetaSurfaceXRenderClass *self_class)
object_class = G_OBJECT_CLASS (self_class);
surface_class = META_SURFACE_CLASS (self_class);
+ object_class->constructed = meta_surface_xrender_constructed;
object_class->finalize = meta_surface_xrender_finalize;
surface_class->get_image = meta_surface_xrender_get_image;