From 021102c67a600af605e689f75fb382eacf340d2b Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Sat, 25 May 2019 22:49:59 -0500 Subject: [PATCH] Oh man, The Cheat. This is gonna be bro-awesome. --- examples/Makefile | 2 +- examples/cluster.c | 148 ++++++++++++++++++++++++++------------------- 2 files changed, 86 insertions(+), 64 deletions(-) diff --git a/examples/Makefile b/examples/Makefile index 4fc4daa..3f10185 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -18,7 +18,7 @@ $(EXAMPLES): %: %.c $(STATIC) $(CC) $(CFLAGS) $< -o $@ $(STATIC) cluster: cluster.c $(STATIC) - $(CC) $(CFLAGS) $< -o $@ $(STATIC) $(shell pkg-config --cflags --libs cairo x11) + $(CC) $(CFLAGS) $< -o $@ $(STATIC) $(shell pkg-config --cflags --libs cairo x11) -lm view: view.c $(STATIC) $(CC) $(CFLAGS) $< -o $@ $(STATIC) -lncurses diff --git a/examples/cluster.c b/examples/cluster.c index 06eace0..4fc97b0 100644 --- a/examples/cluster.c +++ b/examples/cluster.c @@ -28,79 +28,102 @@ static void draw_needle(cairo_t *cr, cairo_stroke(cr); } -static void redraw(cairo_t *ctx) { - /* - * Paint canvas black - */ - cairo_set_source_rgb(ctx, 0, 0, 0); - cairo_paint(ctx); +static void draw_face_number(cairo_t *cr, + double x, + double y, + double r, + double min_angle, + double max_angle, + double value, + const char *text) { + double angle = min_angle + ((max_angle - min_angle) * value) - 95; - /* - * Draw two identical circles - */ - cairo_set_source_rgb(ctx, 1, 1, 1); - cairo_arc(ctx, 208, 240, 192, 0, 360); - cairo_stroke(ctx); + cairo_set_source_rgb(cr, 1, 1, 1); - /* - * Draw a gauge needle - */ - draw_needle(ctx, 208, 240, 176, 232, 502, 0.0); + cairo_move_to(cr, + x + r * cos((M_PI/180.0) * angle), + y + r * sin((M_PI/180.0) * angle)); - /* - * Draw another circle - */ - cairo_set_source_rgb(ctx, 1, 1, 1); - cairo_arc(ctx, 816, 240, 192, 0, 360); - cairo_stroke(ctx); - - /* - * Draw two smaller circles - */ - cairo_arc(ctx, 442, 368, 64, 0, 360 * (M_PI/180)); - cairo_stroke(ctx); - - cairo_arc(ctx, 582, 368, 64, 0, 360 * (M_PI/180)); - cairo_stroke(ctx); - - /* - * Draw a rectangle - */ - cairo_move_to(ctx, 432, 48); - cairo_line_to(ctx, 592, 48); - cairo_line_to(ctx, 592, 288); - cairo_line_to(ctx, 432, 288); - cairo_line_to(ctx, 432, 48); - cairo_set_source_rgb(ctx, 0.75, 0, 0); - cairo_fill(ctx); - - cairo_move_to(ctx, 432, 48); - cairo_line_to(ctx, 592, 48); - cairo_line_to(ctx, 592, 288); - cairo_line_to(ctx, 432, 288); - cairo_line_to(ctx, 432, 48); - cairo_set_source_rgb(ctx, 1, 1, 1); - cairo_stroke(ctx); + cairo_save(cr); + cairo_rotate(cr, (M_PI/180.0) * (angle + 95)); + cairo_show_text(cr, text); + cairo_restore(cr); } -static void draw_text(cairo_t *cr) { +static void redraw(cairo_t *cr) { + int i; + + /* + * Set up text + */ cairo_select_font_face(cr, "Helvetica", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); - cairo_set_font_size(cr, 13); + cairo_set_font_size(cr, 24); - cairo_move_to(cr, 208 + 192, 240); - cairo_save(cr); - cairo_rotate(cr, 45.0 * (M_PI/180)); - cairo_show_text(cr, "10"); - cairo_restore(cr); + /* + * Paint canvas black + */ + cairo_set_source_rgb(cr, 0, 0, 0); + cairo_paint(cr); - cairo_move_to(cr, 208, 240 + 192); - cairo_save(cr); - cairo_rotate(cr, 90.0 * (M_PI/180)); - cairo_show_text(cr, "20"); - cairo_restore(cr); + /* + * Draw two identical circles + */ + cairo_set_source_rgb(cr, 1, 1, 1); + cairo_arc(cr, 208, 240, 192, 0, 360); + cairo_stroke(cr); + + /* + * Draw a face number + */ + for (i=0; i<=80; i+=10) { + char text[4]; + + snprintf(text, 3, "%02d", i); + draw_face_number(cr, 208, 240, 162, 232, 488, i / 80.0, text); + } + + /* + * Draw a gauge needle + */ + draw_needle(cr, 208, 240, 148, 232, 488, 0.0); + + /* + * Draw another circle + */ + cairo_set_source_rgb(cr, 1, 1, 1); + cairo_arc(cr, 816, 240, 192, 0, 360); + cairo_stroke(cr); + + /* + * Draw two smaller circles + */ + cairo_arc(cr, 442, 368, 64, 0, 360 * (M_PI/180)); + cairo_stroke(cr); + + cairo_arc(cr, 582, 368, 64, 0, 360 * (M_PI/180)); + cairo_stroke(cr); + + /* + * Draw a rectangle + */ + cairo_move_to(cr, 432, 48); + cairo_line_to(cr, 592, 48); + cairo_line_to(cr, 592, 288); + cairo_line_to(cr, 432, 288); + cairo_line_to(cr, 432, 48); + cairo_set_source_rgb(cr, 0.75, 0, 0); + cairo_fill(cr); + + cairo_move_to(cr, 432, 48); + cairo_line_to(cr, 592, 48); + cairo_line_to(cr, 592, 288); + cairo_line_to(cr, 432, 288); + cairo_line_to(cr, 432, 48); + cairo_set_source_rgb(cr, 1, 1, 1); + cairo_stroke(cr); } int main(int argc, char **argv) { @@ -139,7 +162,6 @@ int main(int argc, char **argv) { ctx = cairo_create(sfc); redraw(ctx); - draw_text(ctx); while (1) { XExposeEvent *expose;