X-Git-Url: https://git.octo.it/?p=rrdtool.git;a=blobdiff_plain;f=src%2Frrd_graph.h;h=3e65df10e7e2ad47d5478b6edfdf357dd518ff86;hp=dd036151712abf26e849c2a322803424f1f14e9a;hb=ea8c705cc27ef33dee2cc6561ed51e16ddc5d0a9;hpb=37de076da2c2a0a786a41366de07fb3e1c18cdc5 diff --git a/src/rrd_graph.h b/src/rrd_graph.h index dd03615..3e65df1 100644 --- a/src/rrd_graph.h +++ b/src/rrd_graph.h @@ -1,9 +1,18 @@ #ifndef _RRD_GRAPH_H #define _RRD_GRAPH_H +#define y0 cairo_y0 +#define y1 cairo_y1 +#define index cairo_index + +#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]" @@ -34,18 +43,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_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 */ @@ -62,6 +71,21 @@ enum text_prop_en { TEXT_PROP_DEFAULT = 0, /* default settings */ TEXT_PROP_LAST }; + +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]; @@ -147,6 +171,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 { @@ -154,11 +186,7 @@ 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 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 */ @@ -189,14 +217,14 @@ typedef struct image_desc_t { existing one is out of date */ int slopemode; /* connect the dots of the curve directly, not using a stair */ int logarithmic; /* scale the yaxis logarithmic */ + double force_scale_min; /* Force a scale--min */ + double force_scale_max; /* Force a scale--max */ /* status information */ long xorigin, yorigin; /* where is (0,0) of the graph */ -#ifdef WITH_PIECHART - long pie_x, pie_y; /* where is the centerpoint */ -#endif long ximg, yimg; /* total size of the image */ + size_t rendered_image_size; double zoom; double magfact; /* numerical magnitude */ long base; /* 1000 or 1024 depending on what we graph */ @@ -209,11 +237,17 @@ typedef struct image_desc_t { int extra_flags; /* flags for boolean options */ /* data elements */ + unsigned char *rendered_image; long prt_c; /* number of print elements */ long gdes_c; /* number of graphics elements */ graph_desc_t *gdes; /* points to an array of graph elements */ cairo_surface_t *surface; /* graphics library */ cairo_t *cr; /* drawin context */ + cairo_font_options_t *font_options; /* cairo font options */ + cairo_antialias_t graph_antialias; /* antialiasing for the graph */ + + info_t *grinfo; /* root pointer to extra graph info */ + info_t *grinfo_current; /* pointing to current entry */ } image_desc_t; /* Prototypes */ @@ -277,8 +311,7 @@ time_t find_next_time( enum tmt_en, long); int print_calc( - image_desc_t *, - char ***); + image_desc_t *); int leg_place( image_desc_t *, int *); @@ -297,34 +330,14 @@ void grid_paint( int lazy_check( image_desc_t *); int graph_paint( - image_desc_t *, - char ***); + image_desc_t *); -#ifdef WITH_PIECHART -void pie_part( - image_desc_t *, - gfx_color_t, - double, - double, - double, - double, - double); -#endif int gdes_alloc( image_desc_t *); int scan_for_col( const char *const, int, char *const); -int rrd_graph( - int, - char **, - char ***, - int *, - int *, - FILE *, - double *, - double *); void rrd_graph_init( image_desc_t *); void rrd_graph_options( @@ -354,11 +367,94 @@ int vdef_percent_compar( const void *); int graph_size_location( image_desc_t *, - int -#ifdef WITH_PIECHART - , - int -#endif - ); + int); + + +/* create a new line */ +void gfx_line( + image_desc_t *im, + double X0, + double Y0, + double X1, + double Y1, + double width, + gfx_color_t color); + +void gfx_dashed_line( + image_desc_t *im, + double X0, + double Y0, + double X1, + double Y1, + double width, + gfx_color_t color, + double dash_on, + double dash_off); + +/* create a new area */ +void gfx_new_area( + image_desc_t *im, + double X0, + double Y0, + double X1, + double Y1, + double X2, + double Y2, + gfx_color_t color); + +/* add a point to a line or to an area */ +void gfx_add_point( + image_desc_t *im, + double x, + double y); + +/* 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, + char *font, + double size, + 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, + char *font, + double size, + 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, + enum info_type type, + infoval value);