diff --git a/gsk/gpu/gskgpurenderer.c b/gsk/gpu/gskgpurenderer.c index 4218fbcfc0..3b68b1abc2 100644 --- a/gsk/gpu/gskgpurenderer.c +++ b/gsk/gpu/gskgpurenderer.c @@ -55,11 +55,9 @@ get_render_region (GskGpuRenderer *self) GskGpuRendererPrivate *priv = gsk_gpu_renderer_get_instance_private (self); const cairo_region_t *damage; cairo_region_t *scaled_damage; - GdkSurface *surface; double scale; - surface = gdk_draw_context_get_surface (priv->context); - scale = gdk_surface_get_scale (surface); + scale = gsk_gpu_renderer_get_scale (self); damage = gdk_draw_context_get_frame_region (priv->context); scaled_damage = cairo_region_create (); @@ -360,6 +358,17 @@ gsk_gpu_renderer_render (GskRenderer *renderer, g_clear_pointer (&render_region, cairo_region_destroy); } +static double +gsk_gpu_renderer_real_get_scale (GskGpuRenderer *self) +{ + GskGpuRendererPrivate *priv = gsk_gpu_renderer_get_instance_private (self); + GdkSurface *surface; + + surface = gdk_draw_context_get_surface (priv->context); + + return gdk_surface_get_scale (surface); +} + static void gsk_gpu_renderer_class_init (GskGpuRendererClass *klass) { @@ -378,6 +387,7 @@ gsk_gpu_renderer_class_init (GskGpuRendererClass *klass) klass->optimizations &= ~gdk_parse_debug_var ("GSK_GPU_SKIP", gsk_gpu_optimization_keys, G_N_ELEMENTS (gsk_gpu_optimization_keys)); + klass->get_scale = gsk_gpu_renderer_real_get_scale; } static void @@ -404,3 +414,8 @@ gsk_gpu_renderer_get_device (GskGpuRenderer *self) return priv->device; } +double +gsk_gpu_renderer_get_scale (GskGpuRenderer *self) +{ + return GSK_GPU_RENDERER_GET_CLASS (self)->get_scale (self); +} diff --git a/gsk/gpu/gskgpurendererprivate.h b/gsk/gpu/gskgpurendererprivate.h index 8d2c73221a..17ba729f31 100644 --- a/gsk/gpu/gskgpurendererprivate.h +++ b/gsk/gpu/gskgpurendererprivate.h @@ -38,10 +38,13 @@ struct _GskGpuRendererClass void (* wait) (GskGpuRenderer *self, GskGpuFrame **frame, gsize n_frames); + + double (*get_scale) (GskGpuRenderer *self); }; GdkDrawContext * gsk_gpu_renderer_get_context (GskGpuRenderer *self); GskGpuDevice * gsk_gpu_renderer_get_device (GskGpuRenderer *self); +double gsk_gpu_renderer_get_scale (GskGpuRenderer *self); G_END_DECLS diff --git a/gsk/gpu/gsknglrenderer.c b/gsk/gpu/gsknglrenderer.c index a0b5478757..71beff87c9 100644 --- a/gsk/gpu/gsknglrenderer.c +++ b/gsk/gpu/gsknglrenderer.c @@ -73,11 +73,11 @@ gsk_ngl_renderer_get_backbuffer (GskGpuRenderer *renderer) GskNglRenderer *self = GSK_NGL_RENDERER (renderer); GdkDrawContext *context; GdkSurface *surface; - float scale; + double scale; context = gsk_gpu_renderer_get_context (renderer); surface = gdk_draw_context_get_surface (context); - scale = gdk_surface_get_scale (surface); + scale = gsk_gpu_renderer_get_scale (renderer); if (self->backbuffer == NULL || gsk_gpu_image_get_width (self->backbuffer) != ceil (gdk_surface_get_width (surface) * scale) || @@ -100,6 +100,14 @@ gsk_ngl_renderer_wait (GskGpuRenderer *self, { } +static double +gsk_ngl_renderer_get_scale (GskGpuRenderer *self) +{ + GdkDrawContext *context = gsk_gpu_renderer_get_context (self); + + return gdk_gl_context_get_scale (GDK_GL_CONTEXT (context)); +} + static void gsk_ngl_renderer_class_init (GskNglRendererClass *klass) { @@ -112,6 +120,7 @@ gsk_ngl_renderer_class_init (GskNglRendererClass *klass) gpu_renderer_class->make_current = gsk_ngl_renderer_make_current; gpu_renderer_class->get_backbuffer = gsk_ngl_renderer_get_backbuffer; gpu_renderer_class->wait = gsk_ngl_renderer_wait; + gpu_renderer_class->get_scale = gsk_ngl_renderer_get_scale; } static void