From df97f91d034186598ca0f4cb110c90fda4fef09a Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Tue, 27 Jan 2009 00:30:37 -0800 Subject: [PATCH] Add function to create a pango layout with a printf-style format string This eliminates a tiny bit of redundant code now, and then more in the future. --- acre.c | 47 +++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/acre.c b/acre.c index 1b238fd..0851902 100644 --- a/acre.c +++ b/acre.c @@ -25,6 +25,7 @@ #include "xmalloc.h" #include +#include #include 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); -- 2.43.0