summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorImre Deak <imre.deak@intel.com>2013-05-30 15:03:48 +0300
committerImre Deak <imre.deak@intel.com>2013-06-06 01:43:51 +0300
commit542a40c485361909a40830ffd2421082a0e85c89 (patch)
treeb89067b6ec3c23a7358e6c13dd46b9eeab696b82 /lib
parent3a2aed1f30ea0e4373fa93eab8cb33cd8dd98670 (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.c44
-rw-r--r--lib/drmtest.h13
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,