diff options
author | rbuj <[email protected]> | 2020-12-09 10:24:58 +0100 |
---|---|---|
committer | Luke from DC <[email protected]> | 2020-12-11 01:03:04 +0000 |
commit | 08146a80fc1727cde7a6d02d8436f2c86c159b8c (patch) | |
tree | 54a9560355245950293b3ae93f7418411745159f /applets/wncklet/window-list.c | |
parent | 4769aeb889e7b5075aa0538940955be4c9eaff88 (diff) | |
download | mate-panel-08146a80fc1727cde7a6d02d8436f2c86c159b8c.tar.bz2 mate-panel-08146a80fc1727cde7a6d02d8436f2c86c159b8c.tar.xz |
window-list: remove intermediate steps to get scaled thumbnail
Diffstat (limited to 'applets/wncklet/window-list.c')
-rw-r--r-- | applets/wncklet/window-list.c | 38 |
1 files changed, 6 insertions, 32 deletions
diff --git a/applets/wncklet/window-list.c b/applets/wncklet/window-list.c index 86373d19..e7acd7d6 100644 --- a/applets/wncklet/window-list.c +++ b/applets/wncklet/window-list.c @@ -245,7 +245,6 @@ preview_window_thumbnail (WnckWindow *wnck_window, int *thumbnail_scale) { GdkWindow *window; - cairo_surface_t *screenshot; cairo_surface_t *thumbnail; cairo_t *cr; double ratio; @@ -260,29 +259,6 @@ preview_window_thumbnail (WnckWindow *wnck_window, width = gdk_window_get_width (window) * scale; height = gdk_window_get_height (window) * scale; - /* Get reference to GdkWindow surface */ - cairo_t *win_cr = gdk_cairo_create (window); - cairo_surface_t *win_surface = cairo_get_target (win_cr); - /* Flush to ensure all writing to the image was done */ - cairo_surface_flush (win_surface); - cairo_destroy (win_cr); - - /* Create screenshot surface with the GdkWindow as its source */ - screenshot = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); - cairo_surface_set_device_scale (screenshot, scale, scale); - cr = cairo_create (screenshot); - cairo_set_source_surface (cr, win_surface, 0, 0); - cairo_paint (cr); - - /* Mark the image dirty so Cairo clears its caches */ - cairo_surface_mark_dirty (win_surface); - - cairo_destroy (cr); - g_object_unref (window); - - if (screenshot == NULL) - return NULL; - /* Scale to configured size while maintaining aspect ratio */ if (width > height) { @@ -299,18 +275,16 @@ preview_window_thumbnail (WnckWindow *wnck_window, *thumbnail_width = (int) ((double) width * ratio); } - thumbnail = cairo_surface_create_similar (screenshot, - cairo_surface_get_content (screenshot), - *thumbnail_width, - *thumbnail_height); - + thumbnail = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, + *thumbnail_width, + *thumbnail_height); + cairo_surface_set_device_scale (thumbnail, scale, scale); cr = cairo_create (thumbnail); cairo_scale (cr, ratio, ratio); - cairo_set_source_surface (cr, screenshot, 0, 0); + gdk_cairo_set_source_window (cr, window, 0, 0); cairo_paint (cr); - cairo_destroy (cr); - cairo_surface_destroy (screenshot); + g_object_unref (window); return thumbnail; } |