Browse Source

Merge pull request #71 from MicroJoe/master

Added an auto-maximum feature to graphs
Martin Duquesnoy 11 years ago
parent
commit
ecb0f82058
1 changed files with 16 additions and 1 deletions
  1. 16 1
      src/status.c

+ 16 - 1
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(gc->datas[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);
           }