d2cb97d5eb732ed9dd5c3f89ea8ac37395494c9c
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};
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);
93 /* turn graph into a png image */
94 int gfx_render_png (gfx_canvas_t *canvas,
95 art_u32 width, art_u32 height,
96 gfx_color_t background, FILE *fo);
97 double gfx_get_text_width_libart ( gfx_canvas_t *canvas,
98 double start, char* font, double size,
99 double tabwidth, char* text);
101 int gfx_render (gfx_canvas_t *canvas,
102 art_u32 width, art_u32 height,
103 gfx_color_t background, FILE *fo);
105 /* free memory used by nodes this will also remove memory required for
106 node chain and associated material */
107 int gfx_destroy (gfx_canvas_t *canvas);
109 #endif
111 /* turn graph into an svg image */
112 int gfx_render_svg (gfx_canvas_t *canvas,
113 art_u32 width, art_u32 height,
114 gfx_color_t background, FILE *fo);