[gtk/matthiasc/for-master] rendernodepaintable: Provide accurate aspect ratio



commit 52a849288793e7eede878798a88760c058266f60
Author: Matthias Clasen <mclasen redhat com>
Date:   Fri Sep 17 09:28:12 2021 -0400

    rendernodepaintable: Provide accurate aspect ratio
    
    Since we report width and height as integers, the
    default implementation of this introduces rounding
    errors. This shows up in the node-editor, as having
    uneven scale factors like sx=1.0 and sy=1.0035.
    Text nodes don't handle uneven scales like that well
    and overdraw.

 gtk/gtkrendernodepaintable.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)
---
diff --git a/gtk/gtkrendernodepaintable.c b/gtk/gtkrendernodepaintable.c
index a777187247..bbe9cc5b13 100644
--- a/gtk/gtkrendernodepaintable.c
+++ b/gtk/gtkrendernodepaintable.c
@@ -87,6 +87,17 @@ gtk_render_node_paintable_paintable_get_intrinsic_height (GdkPaintable *paintabl
   return ceilf (self->bounds.size.height);
 }
 
+static double
+gtk_render_node_paintable_paintable_get_intrinsic_aspect_ratio (GdkPaintable *paintable)
+{
+  GtkRenderNodePaintable *self = GTK_RENDER_NODE_PAINTABLE (paintable);
+
+  if (self->bounds.size.height != 0)
+    return self->bounds.size.width / self->bounds.size.height;
+
+  return 0;
+}
+
 static void
 gtk_render_node_paintable_paintable_init (GdkPaintableInterface *iface)
 {
@@ -94,6 +105,7 @@ gtk_render_node_paintable_paintable_init (GdkPaintableInterface *iface)
   iface->get_flags = gtk_render_node_paintable_paintable_get_flags;
   iface->get_intrinsic_width = gtk_render_node_paintable_paintable_get_intrinsic_width;
   iface->get_intrinsic_height = gtk_render_node_paintable_paintable_get_intrinsic_height;
+  iface->get_intrinsic_aspect_ratio = gtk_render_node_paintable_paintable_get_intrinsic_aspect_ratio;
 }
 
 G_DEFINE_TYPE_EXTENDED (GtkRenderNodePaintable, gtk_render_node_paintable, G_TYPE_OBJECT, 0,


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