X-Git-Url: https://git.octo.it/?p=rrdtool.git;a=blobdiff_plain;f=src%2Frrd_graph.c;h=8b8a962a5eb1a7ba74048094ef75357d02bd44b1;hp=76115eceef47bfe1f278c4acd5330c77ae97fd55;hb=0dc5d6d50c0d95ba4f04b656358b26518d4ce854;hpb=5db43283c08b014a01de198af64d4fdd7817c7c6 diff --git a/src/rrd_graph.c b/src/rrd_graph.c index 76115ec..8b8a962 100644 --- a/src/rrd_graph.c +++ b/src/rrd_graph.c @@ -1,5 +1,5 @@ /**************************************************************************** - * RRDtool 1.2.3 Copyright by Tobi Oetiker, 1997-2005 + * RRDtool 1.2.9 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 #include #endif @@ -100,8 +100,9 @@ gfx_color_t graph_col[] = /* default colors */ 0xE0505080, /* major grid */ 0x000000FF, /* font */ 0x802020FF, /* arrow */ - 0x202020FF /* axis */ -}; + 0x202020FF, /* axis */ + 0x000000FF /* frame */ +}; /* #define DEBUG */ @@ -151,9 +152,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; } @@ -222,6 +223,7 @@ enum grc_en grc_conv(char *string){ conv_if(FONT,GRC_FONT) conv_if(ARROW,GRC_ARROW) conv_if(AXIS,GRC_AXIS) + conv_if(FRAME,GRC_FRAME) return -1; } @@ -1582,14 +1584,14 @@ calc_horizontal_grid(image_desc_t *im) else { for(i=0;ylab[i].grid > 0;i++){ pixel = im->ysize / (scaledrange / ylab[i].grid); - if (pixel > 5) { + if (pixel > 7) { gridind = i; break; } } for(i=0; i<4;i++) { - if (pixel * ylab[gridind].lfac[i] >= 2 * im->text_prop[TEXT_PROP_AXIS].size) { + if (pixel * ylab[gridind].lfac[i] >= 2.5 * im->text_prop[TEXT_PROP_AXIS].size) { im->ygrid_scale.labfact = ylab[gridind].lfac[i]; break; } @@ -1614,14 +1616,16 @@ int draw_horizontal_grid(image_desc_t *im) int sgrid = (int)( im->minval / im->ygrid_scale.gridstep - 1); int egrid = (int)( im->maxval / im->ygrid_scale.gridstep + 1); + double MaxY; scaledstep = im->ygrid_scale.gridstep/im->magfact; + MaxY = scaledstep*(double)im->viewfactor*(double)egrid; for (i = sgrid; i <= egrid; i++){ double Y0=ytr(im,im->ygrid_scale.gridstep*i); if ( Y0 >= im->yorigin-im->ysize && Y0 <= im->yorigin){ if(i % im->ygrid_scale.labfact == 0){ if (i==0 || im->symbol == ' ') { - if(scaledstep < 1){ + if(MaxY < 10) { if(im->extra_flags & ALTYGRID) { sprintf(graph_label,im->ygrid_scale.labfmt,scaledstep*im->viewfactor*i); } @@ -1632,7 +1636,7 @@ int draw_horizontal_grid(image_desc_t *im) sprintf(graph_label,"%4.0f",scaledstep*im->viewfactor*i); } }else { - if(scaledstep < 1){ + if(MaxY < 10){ sprintf(graph_label,"%4.1f %c",scaledstep*im->viewfactor*i, im->symbol); } else { sprintf(graph_label,"%4.0f %c",scaledstep*im->viewfactor*i, im->symbol); @@ -1942,7 +1946,7 @@ grid_paint(image_desc_t *im) /* yaxis unit description */ gfx_new_text( im->canvas, - 12, (im->yorigin - im->ysize/2), + 10, (im->yorigin - im->ysize/2), im->graph_col[GRC_FONT], im->text_prop[TEXT_PROP_UNIT].font, im->text_prop[TEXT_PROP_UNIT].size, im->tabwidth, @@ -1961,7 +1965,7 @@ grid_paint(image_desc_t *im) /* rrdtool 'logo' */ gfx_new_text( im->canvas, im->ximg-7, 7, - ( im->graph_col[GRC_FONT] & 0xffffff00 ) | 0x00000066, + ( im->graph_col[GRC_FONT] & 0xffffff00 ) | 0x00000044, im->text_prop[TEXT_PROP_AXIS].font, 5.5, im->tabwidth, 270, GFX_H_RIGHT, GFX_V_TOP, @@ -1992,15 +1996,15 @@ grid_paint(image_desc_t *im) boxH = gfx_get_text_width(im->canvas, 0, im->text_prop[TEXT_PROP_LEGEND].font, im->text_prop[TEXT_PROP_LEGEND].size, - im->tabwidth,"M", 0)*1.2; - boxV = boxH; + im->tabwidth,"o", 0) * 1.2; + boxV = boxH*1.1; - /* make sure transparent colors show up all the same */ - node = gfx_new_area(im->canvas, + /* make sure transparent colors show up the same way as in the graph */ + node = gfx_new_area(im->canvas, X0,Y0-boxV, X0,Y0, X0+boxH,Y0, - im->graph_col[GRC_CANVAS]); + im->graph_col[GRC_BACK]); gfx_add_point ( node, X0+boxH, Y0-boxV ); node = gfx_new_area(im->canvas, @@ -2010,8 +2014,9 @@ grid_paint(image_desc_t *im) im->gdes[i].col); gfx_add_point ( node, X0+boxH, Y0-boxV ); node = gfx_new_line(im->canvas, - X0,Y0-boxV, X0,Y0, - 1,im->graph_col[GRC_FONT]); + X0,Y0-boxV, + X0,Y0, + 1.0,im->graph_col[GRC_FRAME]); gfx_add_point(node,X0+boxH,Y0); gfx_add_point(node,X0+boxH,Y0-boxV); gfx_close_path(node); @@ -2151,7 +2156,7 @@ graph_size_location(image_desc_t *im, int elements } if (im->ylegend[0] != '\0' ) { - Xvertical = im->text_prop[TEXT_PROP_UNIT].size *1.6; + Xvertical = im->text_prop[TEXT_PROP_UNIT].size *2; } @@ -2180,7 +2185,7 @@ graph_size_location(image_desc_t *im, int elements im->text_prop[TEXT_PROP_AXIS].font, im->text_prop[TEXT_PROP_AXIS].size, im->tabwidth, - "0", 0) * im->unitslength + Xspacing; + "0", 0) * im->unitslength; } } @@ -2377,11 +2382,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) { @@ -2496,11 +2501,11 @@ graph_paint(image_desc_t *im, char ***calcpr) } } else { - float ybase0 = DNAN,ytop0=DNAN; + double ybase0 = DNAN,ytop0=DNAN; for(ii=0;iixsize;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; } @@ -2521,7 +2526,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; } @@ -2531,13 +2536,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; @@ -2624,7 +2629,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 @@ -2635,7 +2640,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; @@ -2804,7 +2809,7 @@ rrd_graph_init(image_desc_t *im) im->minval = DNAN; im->maxval = DNAN; im->unitsexponent= 9999; - im->unitslength= 5; + im->unitslength= 6; im->symbol = ' '; im->viewfactor = 1.0; im->extra_flags= 0; @@ -2829,7 +2834,7 @@ rrd_graph_init(image_desc_t *im) for(i=0;igraph_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]; @@ -2916,6 +2921,7 @@ rrd_graph_options(int argc, char *argv[],image_desc_t *im) {"tabwidth", required_argument, 0, 'T'}, {"font-render-mode", required_argument, 0, 'R'}, {"font-smoothing-threshold", required_argument, 0, 'B'}, + {"alt-y-mrtg", no_argument, 0, 1000}, /* this has no effect it is just here to save old apps from crashing when they use it */ {0,0,0,0}}; int option_index = 0; int opt; @@ -3102,6 +3108,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;