diff options
Diffstat (limited to 'libview/ev-view.c')
-rw-r--r-- | libview/ev-view.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/libview/ev-view.c b/libview/ev-view.c index b513fcbe..31aa613f 100644 --- a/libview/ev-view.c +++ b/libview/ev-view.c @@ -5690,10 +5690,14 @@ draw_surface (cairo_t *cr, gint target_width, gint target_height) { - gint width, height; + gdouble width, height; + gdouble device_scale_x = 1, device_scale_y = 1; - width = cairo_image_surface_get_width (surface); - height = cairo_image_surface_get_height (surface); +#ifdef HAVE_HIDPI_SUPPORT + cairo_surface_get_device_scale (surface, &device_scale_x, &device_scale_y); +#endif + width = cairo_image_surface_get_width (surface) / device_scale_x; + height = cairo_image_surface_get_height (surface) / device_scale_y; cairo_save (cr); cairo_translate (cr, x, y); @@ -5712,8 +5716,8 @@ draw_surface (cairo_t *cr, } cairo_surface_set_device_offset (surface, - offset_x, - offset_y); + offset_x * device_scale_x, + offset_y * device_scale_y); cairo_set_source_surface (cr, surface, 0, 0); cairo_paint (cr); cairo_restore (cr); @@ -5848,9 +5852,18 @@ draw_one_page (EvView *view, if (region) { double scale_x, scale_y; GdkRGBA color; + double device_scale_x = 1, device_scale_y = 1; scale_x = (gdouble)width / cairo_image_surface_get_width (page_surface); scale_y = (gdouble)height / cairo_image_surface_get_height (page_surface); + +#ifdef HAVE_HIDPI_SUPPORT + cairo_surface_get_device_scale (page_surface, &device_scale_x, &device_scale_y); +#endif + + scale_x *= device_scale_x; + scale_y *= device_scale_y; + _ev_view_get_selection_colors (view, &color, NULL); draw_selection_region (cr, region, &color, real_page_area.x, real_page_area.y, scale_x, scale_y); |