[gtk+] gl renderer: Fix hidpi cairo node rendering
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] gl renderer: Fix hidpi cairo node rendering
- Date: Sat, 27 Jan 2018 11:22:08 +0000 (UTC)
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]