@@ -231,6 +231,8 @@ static void igt_plot_ctx_init(igt_plot_ctx_t *ctx)
memset(ctx, 0, sizeof(*ctx));
ctx->line_width = 1.5;
+ ctx->r = ctx->g = ctx->b = 0.0;
+ ctx->a = 1.0;
}
static void igt_plot_ctx_fini(igt_plot_ctx_t *ctx)
@@ -287,6 +289,27 @@ void igt_plot_fini(igt_plot_t *plot)
}
/**
+ * igt_plot_set_color:
+ * @plot: An #igt_plot_t instance
+ * @r: Red component in the [0, 1] range
+ * @g: Green component in the [0, 1] range
+ * @b: Blue component in the [0, 1] range
+ * @a: Alpha component in the [0, 1] range
+ *
+ * Set the color to use when drawing plots.
+ */
+void igt_plot_set_color(igt_plot_t *plot,
+ double r, double g, double b, double a)
+{
+ igt_plot_ctx_t *ctx = plot->ctx;
+
+ ctx->r = r;
+ ctx->g = g;
+ ctx->b = b;
+ ctx->a = a;
+}
+
+/*
* igt_plot_set_line_width:
* @plot: An #igt_plot_t instance
* @width: The new line width to use
@@ -442,6 +465,7 @@ igt_plot_draw_one(igt_plot_t *plot, igt_plot_ctx_t *ctx, flush_t *flush)
cairo_line_to(plot->cr,
fit(x->values[i], area->x1, x_range, x_scale),
fit(y->values[i], area->y2, y_range, -y_scale));
+ cairo_set_source_rgba(plot->cr, ctx->r, ctx->g, ctx->b, ctx->a);
cairo_set_line_cap(plot->cr, CAIRO_LINE_CAP_BUTT);
cairo_set_line_width(plot->cr, ctx->line_width);
cairo_stroke(plot->cr);
@@ -76,6 +76,7 @@ typedef struct {
igt_vector_t *x, *y;
double x_range, y_range;
double line_width;
+ double r, g, b, a;
} igt_plot_ctx_t;
/**
@@ -115,6 +116,8 @@ typedef enum {
void igt_plot_init(igt_plot_t *plot, unsigned int width, unsigned int height);
void igt_plot_fini(igt_plot_t *plot);
+void igt_plot_set_color(igt_plot_t *plot,
+ double r, double g, double b, double a);
void igt_plot_set_line_width(igt_plot_t *plot, double width);
void igt_plot_draw(igt_plot_t *plot, igt_vector_t *x, igt_vector_t *y);
void igt_plot_write(igt_plot_t *plot, const char *filename);
@@ -82,6 +82,7 @@ static void test_simple_plot(void)
y->values[i] = sin(2 * M_PI * x->values[i]);
igt_plot_init(&plot, 800, 600);
+ igt_plot_set_color(&plot, 0.0, 0.0, 1.0, 1.0);
igt_plot_draw(&plot, x, y);
igt_plot_write(&plot, "test_simple_plot.png");
It can look pretty and allows to differenciate between several plots drawn on the same canvas. Signed-off-by: Damien Lespiau <damien.lespiau@intel.com> --- lib/igt_plot.c | 24 ++++++++++++++++++++++++ lib/igt_plot.h | 3 +++ lib/tests/igt_plot.c | 1 + 3 files changed, 28 insertions(+)