diff options
author | Imre Deak <imre.deak@intel.com> | 2013-05-30 15:03:48 +0300 |
---|---|---|
committer | Imre Deak <imre.deak@intel.com> | 2013-06-06 01:43:51 +0300 |
commit | 542a40c485361909a40830ffd2421082a0e85c89 (patch) | |
tree | b89067b6ec3c23a7358e6c13dd46b9eeab696b82 /lib | |
parent | 3a2aed1f30ea0e4373fa93eab8cb33cd8dd98670 (diff) |
lib: add kmstest_cairo_printf_line
Signed-off-by: Imre Deak <imre.deak@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@gmail.com>
[v3: fix mode printing in paint_output_info() botched by debugging leftover :/ ]
Diffstat (limited to 'lib')
-rw-r--r-- | lib/drmtest.c | 44 | ||||
-rw-r--r-- | lib/drmtest.h | 13 |
2 files changed, 57 insertions, 0 deletions
diff --git a/lib/drmtest.c b/lib/drmtest.c index 3c4812f0..71dd06b0 100644 --- a/lib/drmtest.c +++ b/lib/drmtest.c @@ -907,6 +907,50 @@ paint_test_patterns(cairo_t *cr, int width, int height) paint_color_gradient(cr, x, y, gr_width, gr_height, 1, 1, 1); } +int kmstest_cairo_printf_line(cairo_t *cr, enum kmstest_text_align align, + double yspacing, const char *fmt, ...) +{ + double x, y, xofs, yofs; + cairo_text_extents_t extents; + char *text; + va_list ap; + int ret; + + va_start(ap, fmt); + ret = vasprintf(&text, fmt, ap); + assert(ret >= 0); + va_end(ap); + + cairo_text_extents(cr, text, &extents); + + xofs = yofs = 0; + if (align & align_right) + xofs = -extents.width; + else if (align & align_hcenter) + xofs = -extents.width / 2; + + if (align & align_top) + yofs = extents.height; + else if (align & align_vcenter) + yofs = extents.height / 2; + + cairo_get_current_point(cr, &x, &y); + if (xofs || yofs) + cairo_rel_move_to(cr, xofs, yofs); + + cairo_text_path(cr, text); + cairo_set_source_rgb(cr, 0, 0, 0); + cairo_stroke_preserve(cr); + cairo_set_source_rgb(cr, 1, 1, 1); + cairo_fill(cr); + + cairo_move_to(cr, x, y + extents.height + yspacing); + + free(text); + + return extents.width; +} + enum corner { topleft, topright, diff --git a/lib/drmtest.h b/lib/drmtest.h index 38aeb9d3..3c1368db 100644 --- a/lib/drmtest.h +++ b/lib/drmtest.h @@ -109,6 +109,19 @@ struct kmstest_fb { unsigned size; }; +enum kmstest_text_align { + align_left, + align_bottom = align_left, + align_right = 0x01, + align_top = 0x02, + align_vcenter = 0x04, + align_hcenter = 0x08, +}; + +int kmstest_cairo_printf_line(cairo_t *cr, enum kmstest_text_align align, + double yspacing, const char *fmt, ...) + __attribute__((format (printf, 4, 5))); + typedef void (*kmstest_paint_func)(cairo_t *cr, int width, int height, void *priv); unsigned int kmstest_create_fb(int fd, int width, int height, int bpp, |