/****************************************************************************
- * RRDtool 1.3rc5 Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3rc7 Copyright by Tobi Oetiker, 1997-2008
****************************************************************************
* rrd__graph.c produce graphs from data in rrdfiles
****************************************************************************/
int border = im->text_prop[TEXT_PROP_LEGEND].size * 2.0;
int fill = 0, fill_last;
int leg_c = 0;
- int leg_x = border, leg_y = im->yimg;
+ int leg_x = border;
+ int leg_y = im->yimg;
int leg_y_prev = im->yimg;
int leg_cc;
int glue = 0;
leg_y - im->text_prop[TEXT_PROP_LEGEND].size * 1.8;
}
} else {
- im->yimg = leg_y_prev;
- /* if we did place some legends we have to add vertical space */
- if (leg_y != im->yimg)
- im->yimg += im->text_prop[TEXT_PROP_LEGEND].size * 1.8;
+ im->yimg = leg_y - im->text_prop[TEXT_PROP_LEGEND].size * 1.8 + border * 0.6;
}
free(legspace);
}
/* the xaxis labels are determined from the number of seconds per pixel
in the requested graph */
-
-
int calc_horizontal_grid(
image_desc_t
*im)
if (im->ygrid_scale.gridstep == 0) /* range is one -> 0.1 is reasonable scale */
im->ygrid_scale.gridstep = 0.1;
/* should have at least 5 lines but no more then 15 */
- if (range / im->ygrid_scale.gridstep < 5)
+ if (range / im->ygrid_scale.gridstep < 5 && im->ygrid_scale.gridstep >= 30 )
im->ygrid_scale.gridstep /= 10;
if (range / im->ygrid_scale.gridstep > 15)
im->ygrid_scale.gridstep *= 10;
- if (range / im->ygrid_scale.gridstep > 5) {
+ if (range / im->ygrid_scale.gridstep > 5 ) {
im->ygrid_scale.labfact = 1;
- if (range / im->ygrid_scale.gridstep > 8)
+ if (range / im->ygrid_scale.gridstep > 8 || im->ygrid_scale.gridstep < 1.8 * im->text_prop[TEXT_PROP_AXIS].size )
im->ygrid_scale.labfact = 2;
} else {
im->ygrid_scale.gridstep /= 5;
sprintf(im->ygrid_scale.labfmt,
"%%%d.0f%s", len, (im->symbol != ' ' ? " %c" : ""));
}
- } else {
+ } else { /* classic rrd grid */
for (i = 0; ylab[i].grid > 0; i++) {
pixel = im->ysize / (scaledrange / ylab[i].grid);
gridind = i;
- if (pixel > 7)
+ if (pixel >= 5)
break;
}
for (i = 0; i < 4; i++) {
if (pixel * ylab[gridind].lfac[i] >=
- 2.5 * im->text_prop[TEXT_PROP_AXIS].size) {
+ 1.8 * im->text_prop[TEXT_PROP_AXIS].size) {
im->ygrid_scale.labfact = ylab[gridind].lfac[i];
break;
}
im->xsize,
im->yorigin - im->ysize, im->graph_col[GRC_CANVAS]);
gfx_add_point(im, im->xorigin, im->yorigin - im->ysize);
- gfx_close_path(im);
+ gfx_close_path(im);
+ cairo_rectangle(im->cr, im->xorigin, im->yorigin-im->ysize-1.0, im->xsize,im->ysize+2.0);
+ cairo_clip(im->cr);
if (im->minval > 0.0)
areazero = im->minval;
if (im->maxval < 0.0)
break;
} /* switch */
}
+ cairo_reset_clip(im->cr);
/* grid_paint also does the text */
if (!(im->extra_flags & ONLY_GRAPH))
graph_desc_t *src, *dst;
rrd_value_t *data;
long step, steps;
+ unsigned long end;
dst = &im->gdes[gdi];
src = &im->gdes[dst->vidx];
data = src->data + src->ds;
- steps = (src->end - src->start) / src->step;
+ end = src->end_orig % src->step == 0 ? src->end_orig : (src->end_orig + src->step - src->end_orig % src->step);
+
+ steps = (end - src->start) / src->step;
#if 0
printf
("DEBUG: start == %lu, end == %lu, %lu steps\n",
- src->start, src->end, steps);
+ src->start, src->end_orig, steps);
#endif
switch (dst->vf.op) {
case VDEF_PERCENT:{