1 /****************************************************************************
2 * RRDtool 1.1.x Copyright Tobias Oetiker, 1997 - 2001
3 ****************************************************************************
4 * rrd_gfx.h generic graphics adapter library
5 ****************************************************************************/
7 #ifndef RRD_GFX_H
8 #define RRD_GFX_H
9 #define LIBART_COMPILATION
10 #include <libart.h>
12 enum gfx_if_en {IF_PNG=0,IF_SVG,IF_EPS};
13 enum gfx_en { GFX_LINE=0,GFX_AREA,GFX_TEXT };
14 enum gfx_h_align_en { GFX_H_NULL=0, GFX_H_LEFT, GFX_H_RIGHT, GFX_H_CENTER };
15 enum gfx_v_align_en { GFX_V_NULL=0, GFX_V_TOP, GFX_V_BOTTOM, GFX_V_CENTER };
16 typedef unsigned long gfx_color_t;
18 typedef struct gfx_node_t {
19 enum gfx_en type; /* type of graph element */
20 gfx_color_t color; /* color of element 0xRRGGBBAA alpha 0xff is solid*/
21 double size; /* font size, line width */
22 double dash_on, dash_off; /* dash line fragments lengths */
23 ArtVpath *path; /* path */
24 int closed_path;
25 int points;
26 int points_max;
27 ArtSVP *svp; /* svp */
28 char *filename; /* font or image filename */
29 char *text;
30 double x,y; /* position */
31 double angle; /* text angle */
32 enum gfx_h_align_en halign; /* text alignement */
33 enum gfx_v_align_en valign; /* text alignement */
34 double tabwidth;
35 struct gfx_node_t *next;
36 } gfx_node_t;
39 typedef struct gfx_canvas_t
40 {
41 struct gfx_node_t *firstnode;
42 struct gfx_node_t *lastnode;
43 enum gfx_if_en imgformat; /* image format */
44 int interlaced; /* will the graph be interlaced? */
45 double zoom; /* zoom for graph */
46 } gfx_canvas_t;
49 gfx_canvas_t *gfx_new_canvas (void);
51 /* create a new line */
52 gfx_node_t *gfx_new_line (gfx_canvas_t *canvas,
53 double X0, double Y0,
54 double X1, double Y1,
55 double width, gfx_color_t color);
57 gfx_node_t *gfx_new_dashed_line (gfx_canvas_t *canvas,
58 double X0, double Y0,
59 double X1, double Y1,
60 double width, gfx_color_t color,
61 double dash_on, double dash_off);
63 /* create a new area */
64 gfx_node_t *gfx_new_area (gfx_canvas_t *canvas,
65 double X0, double Y0,
66 double X1, double Y1,
67 double X2, double Y2,
68 gfx_color_t color);
70 /* add a point to a line or to an area */
71 int gfx_add_point (gfx_node_t *node, double x, double y);
73 /* close current path so it ends at the same point as it started */
74 void gfx_close_path (gfx_node_t *node);
77 /* create a text node */
78 gfx_node_t *gfx_new_text (gfx_canvas_t *canvas,
79 double x, double y, gfx_color_t color,
80 char* font, double size,
81 double tabwidth, double angle,
82 enum gfx_h_align_en h_align,
83 enum gfx_v_align_en v_align,
84 char* text);
86 /* measure width of a text string */
87 double gfx_get_text_width ( gfx_canvas_t *canvas,
88 double start, char* font, double size,
89 double tabwidth, char* text);
91 /* save image to file */
92 int gfx_render (gfx_canvas_t *canvas,
93 art_u32 width, art_u32 height,
94 gfx_color_t background, FILE *fo);
96 /* free memory used by nodes this will also remove memory required for
97 node chain and associated material */
98 int gfx_destroy (gfx_canvas_t *canvas);
101 /* PNG support*/
102 int gfx_render_png (gfx_canvas_t *canvas,
103 art_u32 width, art_u32 height,
104 gfx_color_t background, FILE *fo);
105 double gfx_get_text_width_libart ( gfx_canvas_t *canvas,
106 double start, char* font, double size,
107 double tabwidth, char* text);
109 /* SVG support */
110 int gfx_render_svg (gfx_canvas_t *canvas,
111 art_u32 width, art_u32 height,
112 gfx_color_t background, FILE *fo);
114 /* EPS support */
115 int gfx_render_eps (gfx_canvas_t *canvas,
116 art_u32 width, art_u32 height,
117 gfx_color_t background, FILE *fo);
119 #endif