summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan Pablo Ugarte <ugarte@endlessm.com>2018-03-05 14:47:00 -0300
committerJuan Pablo Ugarte <ugarte@endlessm.com>2018-03-05 14:47:00 -0300
commite36b629c367fa11e6e544ff8b8203bcf29ec73ee (patch)
tree2f3b8c00a6c9800daa806026ff6a0ce591526361
parentfa47667df96ed52259ce77e30af05f76a7be3465 (diff)
downloadgtk+-e36b629c367fa11e6e544ff8b8203bcf29ec73ee.tar.gz
Closes #63
-rw-r--r--gtk/gtkcssimagesurface.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/gtk/gtkcssimagesurface.c b/gtk/gtkcssimagesurface.c
index 8c439c9a52..f6f694aff7 100644
--- a/gtk/gtkcssimagesurface.c
+++ b/gtk/gtkcssimagesurface.c
@@ -60,8 +60,14 @@ gtk_css_image_surface_draw (GtkCssImage *image,
ABS (width - surface->width) > 0.001 ||
ABS (height - surface->height) > 0.001)
{
+ double xscale, yscale;
cairo_t *cache;
+ /* We need the device scale (HiDPI mode) to calculate the proper size in
+ * pixels for the image surface and set the cache device scale
+ */
+ cairo_surface_get_device_scale (cairo_get_target (cr), &xscale, &yscale);
+
/* Save original size to preserve precision */
surface->width = width;
surface->height = height;
@@ -72,8 +78,9 @@ gtk_css_image_surface_draw (GtkCssImage *image,
/* Image big enough to contain scaled image with subpixel precision */
surface->cache = cairo_surface_create_similar_image (surface->surface,
CAIRO_FORMAT_ARGB32,
- ceil (width),
- ceil (height));
+ ceil (width*xscale),
+ ceil (height*yscale));
+ cairo_surface_set_device_scale (surface->cache, xscale, yscale);
cache = cairo_create (surface->cache);
cairo_rectangle (cache, 0, 0, width, height);
cairo_scale (cache, width / image_width, height / image_height);