X-Git-Url: https://git.octo.it/?p=rrdtool.git;a=blobdiff_plain;f=src%2Frrd_graph.h;h=5c97b80a15805ee43b7d219377f72923647263b1;hp=22523be540a5f4ffb31feec6630bc24c4624e91b;hb=96b0f4aace0deef034a792a08dc2d426cd2b61a4;hpb=2a6a270edfda89b04722b42b57992907f871c671 diff --git a/src/rrd_graph.h b/src/rrd_graph.h index 22523be..5c97b80 100644 --- a/src/rrd_graph.h +++ b/src/rrd_graph.h @@ -1,12 +1,33 @@ #ifndef _RRD_GRAPH_H #define _RRD_GRAPH_H +#define y0 cairo_y0 +#define y1 cairo_y1 +#define index cairo_index + +/* this may configure __EXTENSIONS__ without which pango will fail to compile + so load this early */ +#ifdef HAVE_CONFIG_H +#include "../rrd_config.h" +#elif defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__) +#include "../win32/config.h" +#endif + +#include +#include +#include +#include + +#include + + #include "rrd_tool.h" #include "rrd_rpncalc.h" -#include "rrd_gfx.h" -#define MAX_VNAME_LEN 255 -#define DEF_NAM_FMT "%255[-_A-Za-z0-9]" +#ifdef WIN32 +# include +# define MAXPATH MAX_PATH +#endif #define ALTYGRID 0x01 /* use alternative y grid algorithm */ #define ALTAUTOSCALE 0x02 /* use alternative algorithm to find lower and upper bounds */ @@ -20,6 +41,9 @@ #define FORCE_UNITS 0x100 /* mask for all FORCE_UNITS_* flags */ #define FORCE_UNITS_SI 0x100 /* force use of SI units in Y axis (no effect in linear graph, SI instead of E in log graph) */ +#define FULL_SIZE_MODE 0x200 /* -width and -height indicate the total size of the image */ +#define NO_RRDTOOL_TAG 0x400 /* disable the rrdtool tag */ + enum tmt_en { TMT_SECOND = 0, TMT_MINUTE, TMT_HOUR, TMT_DAY, TMT_WEEK, TMT_MONTH, TMT_YEAR }; @@ -32,18 +56,18 @@ enum grc_en { GRC_CANVAS = 0, GRC_BACK, GRC_SHADEA, GRC_SHADEB, #define GRIDWIDTH 0.4 enum gf_en { GF_PRINT = 0, GF_GPRINT, GF_COMMENT, GF_HRULE, GF_VRULE, GF_LINE, - GF_AREA, GF_STACK, GF_TICK, + GF_AREA,GF_GRAD, GF_STACK, GF_TICK, GF_TEXTALIGN, GF_DEF, GF_CDEF, GF_VDEF, GF_SHIFT, -#ifdef WITH_PIECHART - GF_PART, -#endif GF_XPORT }; +enum txa_en { TXA_LEFT = 0, TXA_RIGHT, TXA_CENTER, TXA_JUSTIFIED }; + enum vdef_op_en { VDEF_MAXIMUM = 0 /* like the MAX in (G)PRINT */ , VDEF_MINIMUM /* like the MIN in (G)PRINT */ , VDEF_AVERAGE /* like the AVERAGE in (G)PRINT */ + , VDEF_STDEV /* the standard deviation */ , VDEF_PERCENT /* Nth percentile */ , VDEF_TOTAL /* average multiplied by time */ , VDEF_FIRST /* first non-unknown value and time */ @@ -51,18 +75,39 @@ enum vdef_op_en { , VDEF_LSLSLOPE /* least squares line slope */ , VDEF_LSLINT /* least squares line y_intercept */ , VDEF_LSLCORREL /* least squares line correlation coefficient */ + , VDEF_PERCENTNAN /* Nth percentile ignoring NAN*/ }; -enum text_prop_en { TEXT_PROP_DEFAULT = 0, /* default settings */ +enum text_prop_en { + TEXT_PROP_DEFAULT = 0, /* default settings */ TEXT_PROP_TITLE, /* properties for the title */ TEXT_PROP_AXIS, /* for the numbers next to the axis */ TEXT_PROP_UNIT, /* for the vertical unit description */ - TEXT_PROP_LEGEND, /* fot the legend below the graph */ + TEXT_PROP_LEGEND, /* for the legend below the graph */ + TEXT_PROP_WATERMARK, /* for the little text to the side of the graph */ TEXT_PROP_LAST }; +enum legend_pos{ NORTH = 0, WEST, SOUTH, EAST }; +enum legend_direction { TOP_DOWN = 0, BOTTOM_UP }; + +enum gfx_if_en { IF_PNG = 0, IF_SVG, IF_EPS, IF_PDF }; +enum gfx_en { GFX_LINE = 0, GFX_AREA, GFX_TEXT }; +enum gfx_h_align_en { GFX_H_NULL = 0, GFX_H_LEFT, GFX_H_RIGHT, GFX_H_CENTER }; +enum gfx_v_align_en { GFX_V_NULL = 0, GFX_V_TOP, GFX_V_BOTTOM, GFX_V_CENTER }; + +/* cairo color components */ +typedef struct gfx_color_t { + double red; + double green; + double blue; + double alpha; +} gfx_color_t; + + typedef struct text_prop_t { double size; char font[1024]; + PangoFontDescription *font_desc; } text_prop_t; @@ -71,6 +116,7 @@ typedef struct vdef_t { double param; /* parameter for function, if applicable */ double val; /* resulting value */ time_t when; /* timestamp, if applicable */ + int never; /* boolean, indicate that when value mean never */ } vdef_t; typedef struct xlab_t { @@ -99,7 +145,6 @@ typedef struct ylab_t { int lfac[4]; /* associated label spacing */ } ylab_t; - /* this structure describes the elements which can make up a graph. because they are quite diverse, not all elements will use all the possible parts of the structure. */ @@ -118,9 +163,11 @@ typedef struct graph_desc_t { char rrd[1024]; /* name of the rrd_file containing data */ char ds_nam[DS_NAM_SIZE]; /* data source name */ long ds; /* data source number */ + char daemon[256]; enum cf_en cf; /* consolidation function */ enum cf_en cf_reduce; /* consolidation function for reduce_data() */ - gfx_color_t col; /* graph color */ + struct gfx_color_t col, col2; /* graph color */ + double gradheight; char format[FMT_LEG_LEN + 5]; /* format for PRINT AND GPRINT */ char legend[FMT_LEG_LEN + 5]; /* legend */ int strftm; /* should the VDEF legend be formated with strftime */ @@ -146,6 +193,14 @@ typedef struct graph_desc_t { rrd_value_t *data; /* the raw data drawn from the rrd */ rrd_value_t *p_data; /* processed data, xsize elments */ double linewidth; /* linewideth */ + + /* dashed line stuff */ + int dash; /* boolean, draw dashed line? */ + double *p_dashes; /* pointer do dash array which keeps the lengths of dashes */ + int ndash; /* number of dash segments */ + double offset; /* dash offset along the line */ + + enum txa_en txtalign; /* change default alignment strategy for text */ } graph_desc_t; typedef struct image_desc_t { @@ -153,21 +208,23 @@ typedef struct image_desc_t { /* configuration of graph */ char graphfile[MAXPATH]; /* filename for graphic */ - FILE *graphhandle; /* FILE to use if filename is "-" */ long xsize, ysize; /* graph area size in pixels */ -#ifdef WITH_PIECHART - long piesize; /* size of the piechart */ -#endif - gfx_color_t graph_col[__GRC_END__]; /* real colors for the graph */ + struct gfx_color_t graph_col[__GRC_END__]; /* real colors for the graph */ text_prop_t text_prop[TEXT_PROP_LAST]; /* text properties */ char ylegend[210]; /* legend along the yaxis */ char title[210]; /* title for graph */ char watermark[110]; /* watermark for graph */ int draw_x_grid; /* no x-grid at all */ - int draw_y_grid; /* no x-grid at all */ + int draw_y_grid; /* no y-grid at all */ + unsigned int draw_3d_border; /* size of border in pixels, 0 for off */ + unsigned int dynamic_labels; /* pick the label shape according to the line drawn */ double grid_dash_on, grid_dash_off; xlab_t xlab_user; /* user defined labeling for xaxis */ char xlab_form[210]; /* format for the label on the xaxis */ + double second_axis_scale; /* relative to the first axis (0 to disable) */ + double second_axis_shift; /* how much is it shifted vs the first axis */ + char second_axis_legend[210]; /* label to put on the seond axis */ + char second_axis_format[210]; /* format for the numbers on the scond axis */ double ygridstep; /* user defined step for y grid */ int ylabfact; /* every how many y grid shall a label be written ? */ @@ -182,19 +239,29 @@ typedef struct image_desc_t { grindlines falls in integer pixel values */ char *imginfo; /* construct an 0: + * gradient starts at top and goes down a fixed number of pixels (fire style) + * height < 0: + * gradient starts at bottom and goes up a fixed number of pixels (constant style) + * height == 0: + * gradient is stretched between two points + */ +void gfx_add_rect_fadey( + image_desc_t *im, + double x1,double y1, + double x2,double y2, + double py, + gfx_color_t color1, + gfx_color_t color2, + double height); + + + +/* close current path so it ends at the same point as it started */ +void gfx_close_path( + image_desc_t *im); + + +/* create a text node */ +void gfx_text( + image_desc_t *im, + double x, + double y, + gfx_color_t color, + PangoFontDescription *font_desc, + double tabwidth, + double angle, + enum gfx_h_align_en h_align, + enum gfx_v_align_en v_align, + const char *text); + +/* measure width of a text string */ +double gfx_get_text_width( + image_desc_t *im, + double start, + PangoFontDescription *font_desc, + double tabwidth, + char *text); + + +/* convert color */ +gfx_color_t gfx_hex_to_col( + long unsigned int); + +void gfx_line_fit( + image_desc_t *im, + double *x, + double *y); + +void gfx_area_fit( + image_desc_t *im, + double *x, + double *y); #endif + +void grinfo_push( + image_desc_t *im, + char *key, + rrd_info_type_t type, rrd_infoval_t value); + +