shell-util: Fix capturing scaled views
libmutter-clutter fixed stage capturing when views are scaled, and for that to work properly when compositing the screenshot, we need to deal with the cairo device scale here too. https://bugzilla.gnome.org/show_bug.cgi?id=765011
This commit is contained in:
parent
5962be3904
commit
b099e9a69c
@ -456,27 +456,32 @@ shell_util_composite_capture_images (ClutterCapture *captures,
|
|||||||
int height)
|
int height)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
double target_scale;
|
||||||
cairo_format_t format;
|
cairo_format_t format;
|
||||||
cairo_surface_t *image;
|
cairo_surface_t *image;
|
||||||
cairo_t *cr;
|
cairo_t *cr;
|
||||||
|
|
||||||
|
target_scale = 0.0;
|
||||||
|
for (i = 0; i < n_captures; i++)
|
||||||
|
{
|
||||||
|
ClutterCapture *capture = &captures[i];
|
||||||
|
double capture_scale = 1.0;
|
||||||
|
|
||||||
|
cairo_surface_get_device_scale (capture->image, &capture_scale, NULL);
|
||||||
|
target_scale = MAX (target_scale, capture_scale);
|
||||||
|
}
|
||||||
|
|
||||||
format = cairo_image_surface_get_format (captures[0].image);
|
format = cairo_image_surface_get_format (captures[0].image);
|
||||||
image = cairo_image_surface_create (format, width, height);
|
image = cairo_image_surface_create (format,
|
||||||
|
width * target_scale,
|
||||||
|
height * target_scale);
|
||||||
|
cairo_surface_set_device_scale (image, target_scale, target_scale);
|
||||||
|
|
||||||
cr = cairo_create (image);
|
cr = cairo_create (image);
|
||||||
|
|
||||||
for (i = 0; i < n_captures; i++)
|
for (i = 0; i < n_captures; i++)
|
||||||
{
|
{
|
||||||
ClutterCapture *capture = &captures[i];
|
ClutterCapture *capture = &captures[i];
|
||||||
double capture_scale = 1.0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Ignore capture regions with scale other than 1 for now; mutter can't
|
|
||||||
* produce them yet, so there is no way to test them.
|
|
||||||
*/
|
|
||||||
cairo_surface_get_device_scale (capture->image, &capture_scale, NULL);
|
|
||||||
if ((int) capture_scale != 1)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
cairo_save (cr);
|
cairo_save (cr);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user