[gtk+] gl renderer: Fix hidpi cairo node rendering



commit 684624005a3c1d62521f7837f71ffb3b7aae1b94
Author: Timm Bäder <mail baedert org>
Date:   Sat Jan 27 11:02:07 2018 +0100

    gl renderer: Fix hidpi cairo node rendering
    
    We can't just unconditionally create a larger texture here, since the
    incoming cairo surface might have a device scale that doesn't fit our
    scale_factor. Instead, look up the surface device scale and use that.

 gsk/gl/gskglrenderer.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)
---
diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c
index dc97ebf..00dc364 100644
--- a/gsk/gl/gskglrenderer.c
+++ b/gsk/gl/gskglrenderer.c
@@ -638,15 +638,18 @@ render_cairo_node (GskGLRenderer       *self,
   const cairo_surface_t *surface = gsk_cairo_node_peek_surface (node);
   int gl_min_filter = GL_NEAREST, gl_mag_filter = GL_NEAREST;
   int texture_id;
+  double scale_x, scale_y;
 
   if (surface == NULL)
     return;
 
   get_gl_scaling_filters (node, &gl_min_filter, &gl_mag_filter);
 
+
+  cairo_surface_get_device_scale ((cairo_surface_t *)surface, &scale_x, &scale_y);
   texture_id = gsk_gl_driver_create_texture (self->gl_driver,
-                                             node->bounds.size.width * self->scale_factor,
-                                             node->bounds.size.height * self->scale_factor);
+                                             node->bounds.size.width * scale_x,
+                                             node->bounds.size.height * scale_y);
   gsk_gl_driver_bind_source_texture (self->gl_driver, texture_id);
   gsk_gl_driver_init_texture_with_surface (self->gl_driver,
                                            texture_id,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]