make transparent backgrounds work propperly
[rrdtool.git] / src / rrd_graph.c
index da0b9d0..a399491 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * RRDtool 1.2.5  Copyright by Tobi Oetiker, 1997-2005
+ * RRDtool 1.2.6  Copyright by Tobi Oetiker, 1997-2005
  ****************************************************************************
  * rrd__graph.c  produce graphs from data in rrdfiles
  ****************************************************************************/
@@ -9,7 +9,7 @@
 
 #include "rrd_tool.h"
 
-#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)
+#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)
 #include <io.h>
 #include <fcntl.h>
 #endif
@@ -151,9 +151,9 @@ ytr(image_desc_t *im, double value){
     if (! im->rigid) {
       /* keep yval as-is */
     } else if (yval > im->yorigin) {
-      yval = im->yorigin;
+      yval = im->yorigin +0.00001;
     } else if (yval < im->yorigin - im->ysize){
-      yval = im->yorigin - im->ysize;
+      yval = im->yorigin - im->ysize - 0.00001;
     } 
     return yval;
 }
@@ -2387,11 +2387,11 @@ graph_paint(image_desc_t *im, char ***calcpr)
   
   node=gfx_new_area ( im->canvas,
                       0, 0,
-                      im->ximg, 0,
-                      im->ximg, im->yimg,
+                      0, im->yimg,
+                     im->ximg, im->yimg,                      
                       im->graph_col[GRC_BACK]);
 
-  gfx_add_point(node,0, im->yimg);
+  gfx_add_point(node,im->ximg, 0);
 
 #ifdef WITH_PIECHART
   if (piechart != 2) {
@@ -2506,11 +2506,11 @@ graph_paint(image_desc_t *im, char ***calcpr)
 
           }
         } else {
-         float ybase0 = DNAN,ytop0=DNAN;
+         double ybase0 = DNAN,ytop0=DNAN;
           for(ii=0;ii<im->xsize;ii++){
            /* keep things simple for now, just draw these bars
               do not try to build a big and complex area */
-           float ybase,ytop;
+           double ybase,ytop;
            if ( im->slopemode == 0 && ii==0){
                continue;
            }
@@ -2531,7 +2531,7 @@ graph_paint(image_desc_t *im, char ***calcpr)
            /* every area has to be wound clock-wise,
               so we have to make sur base remains base  */             
            if (ybase > ytop){
-               float extra = ytop;
+               double extra = ytop;
                ytop = ybase;
                ybase = extra;
            }
@@ -2541,13 +2541,13 @@ graph_paint(image_desc_t *im, char ***calcpr)
            }
            if ( !isnan(ybase0) ){
                    node = gfx_new_area(im->canvas,
-                                ii-1+im->xorigin,ybase0,
-                                ii-1+im->xorigin,ytop0,
-                                ii+im->xorigin,ytop,                           
+                                (double)ii-1.2+(double)im->xorigin,ybase0-0.2,
+                                (double)ii-1.2+(double)im->xorigin,ytop0+0.2,
+                                (double)ii+0.2+(double)im->xorigin,ytop+0.2,
                                 im->gdes[i].col
                                );
                    gfx_add_point(node,
-                               ii+im->xorigin,ybase
+                               (double)ii+0.02+im->xorigin,ybase-0.2
                               );
             }
            ybase0=ybase;
@@ -2634,7 +2634,7 @@ graph_paint(image_desc_t *im, char ***calcpr)
   
   if (strcmp(im->graphfile,"-")==0) {
     fo = im->graphhandle ? im->graphhandle : stdout;
-#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)
+#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)
     /* Change translation mode for stdout to BINARY */
     _setmode( _fileno( fo ), O_BINARY );
 #endif
@@ -2645,7 +2645,7 @@ graph_paint(image_desc_t *im, char ***calcpr)
       return (-1);
     }
   }
-  gfx_render (im->canvas,im->ximg,im->yimg,0x0,fo);
+  gfx_render (im->canvas,im->ximg,im->yimg,0x00000000,fo);
   if (strcmp(im->graphfile,"-") != 0)
     fclose(fo);
   return 0;
@@ -2839,7 +2839,7 @@ rrd_graph_init(image_desc_t *im)
     for(i=0;i<DIM(graph_col);i++)
         im->graph_col[i]=graph_col[i];
 
-#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)
+#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__)
     {
             char *windir; 
            char rrd_win_default_font[1000];
@@ -3112,6 +3112,22 @@ rrd_graph_options(int argc, char *argv[],image_desc_t *im)
                 int ci;
                int col_len = col_end - col_start;
                switch (col_len){
+                       case 3:
+                               color = (
+                                       ((color & 0xF00) * 0x110000) |
+                                       ((color & 0x0F0) * 0x011000) |
+                                       ((color & 0x00F) * 0x001100) |
+                                       0x000000FF
+                                       );
+                               break;
+                       case 4:
+                               color = (
+                                       ((color & 0xF000) * 0x11000) |
+                                       ((color & 0x0F00) * 0x01100) |
+                                       ((color & 0x00F0) * 0x00110) |
+                                       ((color & 0x000F) * 0x00011)
+                                       );
+                               break;
                        case 6:
                                color = (color << 8) + 0xff /* shift left by 8 */;
                                break;