]> git.cworth.org Git - acre/commitdiff
Add function to create a pango layout with a printf-style format string
authorCarl Worth <cworth@cworth.org>
Tue, 27 Jan 2009 08:30:37 +0000 (00:30 -0800)
committerCarl Worth <cworth@cworth.org>
Thu, 16 Apr 2009 19:04:52 +0000 (12:04 -0700)
This eliminates a tiny bit of redundant code now, and then more in
the future.

acre.c

diff --git a/acre.c b/acre.c
index 1b238fdb33babc5471f818e886b9b708ca9790f0..0851902c51d3b8e4bd029b81fd9c34c7b4a5594a 100644 (file)
--- a/acre.c
+++ b/acre.c
@@ -25,6 +25,7 @@
 #include "xmalloc.h"
 
 #include <string.h>
+#include <stdarg.h>
 #include <math.h>
 
 typedef struct _acre_data_point_2d {
@@ -171,6 +172,42 @@ _create_layout (acre_t *acre, const char *text)
     return layout;
 }
 
+#define PRINTF_FORMAT(fmt_index, va_index) __attribute__ ((__format__(__printf__, fmt_index, va_index)))
+
+static PangoLayout *
+_create_layout_vprintf (acre_t *acre, const char *fmt, va_list ap)
+{
+    PangoLayout *layout;
+    char *text;
+
+    vasprintf (&text, fmt, ap);
+
+    layout = _create_layout (acre, text);
+
+    free (text);
+
+    return layout;
+}
+
+static PangoLayout *
+_create_layout_printf (acre_t *acre, const char *fmt, ...)
+    PRINTF_FORMAT (2, 3);
+
+static PangoLayout *
+_create_layout_printf (acre_t *acre, const char *fmt, ...)
+{
+    va_list ap;
+    PangoLayout *layout;
+
+    va_start (ap, fmt);
+
+    layout = _create_layout_vprintf (acre, fmt, ap);
+
+    va_end (ap);
+
+    return layout;
+}
+
 static void
 _destroy_layout (PangoLayout *layout)
 {
@@ -477,11 +514,8 @@ _draw_frame_and_ticks (acre_t *acre)
                cairo_save (cr);
                {
                    PangoLayout *layout;
-                   char *label;
                    int width, height;
-                   asprintf (&label, "%g", x);
-                   layout = _create_layout (acre, label);
-                   free (label);
+                   layout = _create_layout_printf (acre, "%g", x);
                    cairo_move_to (cr, x, acre->y_axis.min);
                    cairo_identity_matrix (cr);
                    pango_layout_get_pixel_size (layout, &width, &height);
@@ -515,11 +549,8 @@ _draw_frame_and_ticks (acre_t *acre)
                cairo_save (cr);
                {
                    PangoLayout *layout;
-                   char *label;
                    int width, height;
-                   asprintf (&label, "%g", y);
-                   layout = _create_layout (acre, label);
-                   free (label);
+                   layout = _create_layout_printf (acre, "%g", y);
                    cairo_move_to (cr, acre->x_axis.min, y);
                    cairo_identity_matrix (cr);
                    pango_layout_get_pixel_size (layout, &width, &height);