From: Matthias Clasen Date: Fri, 17 Sep 2021 13:28:12 +0000 (-0400) Subject: rendernodepaintable: Provide accurate aspect ratio X-Git-Tag: archive/raspbian/4.6.5+ds-1+rpi1~1^2~19^2~5^2~338^2~4 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=52a849288793e7eede878798a88760c058266f60;p=gtk4.git 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. --- 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,