diff options
Diffstat (limited to 'unix/utils/get_label_text_dimensions.c')
-rw-r--r-- | unix/utils/get_label_text_dimensions.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/unix/utils/get_label_text_dimensions.c b/unix/utils/get_label_text_dimensions.c new file mode 100644 index 00000000..fe1c13af --- /dev/null +++ b/unix/utils/get_label_text_dimensions.c @@ -0,0 +1,42 @@ +/* + * Determine the dimensions of a piece of text in the standard + * font used in GTK interface elements like labels. We do this by + * instantiating an actual GtkLabel, and then querying its size. + */ + +#include <gtk/gtk.h> +#include "putty.h" +#include "gtkcompat.h" +#include "gtkmisc.h" + +void get_label_text_dimensions(const char *text, int *width, int *height) +{ + GtkWidget *label = gtk_label_new(text); + + /* + * GTK2 and GTK3 require us to query the size completely + * differently. I'm sure there ought to be an easier approach than + * the way I'm doing this in GTK3, too! + */ +#if GTK_CHECK_VERSION(3,0,0) + PangoLayout *layout = gtk_label_get_layout(GTK_LABEL(label)); + PangoRectangle logrect; + pango_layout_get_extents(layout, NULL, &logrect); + if (width) + *width = logrect.width / PANGO_SCALE; + if (height) + *height = logrect.height / PANGO_SCALE; +#else + GtkRequisition req; + gtk_widget_size_request(label, &req); + if (width) + *width = req.width; + if (height) + *height = req.height; +#endif + + g_object_ref_sink(G_OBJECT(label)); +#if GTK_CHECK_VERSION(2,10,0) + g_object_unref(label); +#endif +} |