From 499cef1bb00b9e4d0b4cffed5ef3e6e951bc2e5e Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Mon, 5 Aug 2013 16:11:18 +0200 Subject: [PATCH] css: Inherit device scale in _gtk_css_image_get_surface To handle hidpi support we need to make sure we don't downscale scaled css images. Note: If cairo_surface_create_similar starts doing this by itself we need to back this out. --- gtk/gtkcssimage.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/gtk/gtkcssimage.c b/gtk/gtkcssimage.c index a79b3e1398..33c85f2abf 100644 --- a/gtk/gtkcssimage.c +++ b/gtk/gtkcssimage.c @@ -389,16 +389,30 @@ _gtk_css_image_get_surface (GtkCssImage *image, { cairo_surface_t *result; cairo_t *cr; + double sx, sy; g_return_val_if_fail (GTK_IS_CSS_IMAGE (image), NULL); g_return_val_if_fail (surface_width > 0, NULL); g_return_val_if_fail (surface_height > 0, NULL); + if (target) - result = cairo_surface_create_similar (target, - CAIRO_CONTENT_COLOR_ALPHA, - surface_width, - surface_height); + { +#ifdef HAVE_CAIRO_SURFACE_SET_DEVICE_SCALE + cairo_surface_get_device_scale (target, &sx, &sy); +#else + sx = sy = 1; +#endif + + result = cairo_surface_create_similar (target, + CAIRO_CONTENT_COLOR_ALPHA, + surface_width*sx, + surface_height*sy); + +#ifdef HAVE_CAIRO_SURFACE_SET_DEVICE_SCALE + cairo_surface_set_device_scale (result, sx, sy); +#endif + } else result = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, surface_width,