From 6f84f0cbbdff02494c3fec8b7c72f2d069219c85 Mon Sep 17 00:00:00 2001 From: Romain Porte Date: Tue, 7 Aug 2012 23:11:44 +0200 Subject: [PATCH] Added an auto-maximum feature to graphs --- src/status.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/status.c b/src/status.c index 7b98667..66623ff 100644 --- a/src/status.c +++ b/src/status.c @@ -71,10 +71,25 @@ status_free_ctx(struct status_ctx *ctx) static void status_graph_draw(struct status_ctx *ctx, struct status_seq *sq, struct status_gcache *gc) { + int max = 0; int i, j, y; float c; int ys = sq->geo.y + sq->geo.h - 1; + /* If invalid maximum, we have to compute it ourselves */ + if(sq->data[2] <= 0) + { + for(i = sq->geo.x + sq->geo.w - 1, j = gc->ndata - 1; + j >= 0 && i >= sq->geo.x; + --j, --i) + { + if(j > max) + max = gc->datas[j]; + } + } + else + max = sq->data[2]; + XSetForeground(W->dpy, W->gc, sq->color2); for(i = sq->geo.x + sq->geo.w - 1, j = gc->ndata - 1; @@ -84,7 +99,7 @@ status_graph_draw(struct status_ctx *ctx, struct status_seq *sq, struct status_g /* You divided by zero didn't you? */ if(gc->datas[j]) { - c = (float)sq->data[2] / (float)gc->datas[j]; + c = (float)max / (float)gc->datas[j]; y = ys - (sq->geo.h / (c > 1 ? c : 1)) + 1; draw_line(ctx->barwin->dr, i, y, i, ys); }