summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-09-17 09:28:12 -0400
committerMatthias Clasen <mclasen@redhat.com>2021-09-17 10:28:49 -0400
commit52a849288793e7eede878798a88760c058266f60 (patch)
tree4def5ca80015f6aacb53a121a19f3d7182c63e29 /gtk
parent8c34dd58c0213b624f9ba3f4a8eeba76c2429573 (diff)
downloadgtk+-52a849288793e7eede878798a88760c058266f60.tar.gz
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.
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkrendernodepaintable.c12
1 files changed, 12 insertions, 0 deletions
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,