diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-09-17 09:28:12 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-09-17 10:28:49 -0400 |
commit | 52a849288793e7eede878798a88760c058266f60 (patch) | |
tree | 4def5ca80015f6aacb53a121a19f3d7182c63e29 /gtk | |
parent | 8c34dd58c0213b624f9ba3f4a8eeba76c2429573 (diff) | |
download | gtk+-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.c | 12 |
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, |