Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mRemoteNG/PuTTYNG.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'unix/utils/get_label_text_dimensions.c')
-rw-r--r--unix/utils/get_label_text_dimensions.c42
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
+}