Removed references to GIF
[rrdtool.git] / src / rrd_gfx.h
1 /****************************************************************************
2  * RRDtool 1.1.x  Copyright Tobias Oetiker, 1997 - 2001
3  ****************************************************************************
4  * rrd_gfx.h generic graphics adapter library
5  ****************************************************************************/
6
7 #ifndef  RRD_GFX_H
8 #define RRD_GFX_H
9 #define LIBART_COMPILATION
10 #include <libart.h>
11
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;
17
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;
37
38
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;
47
48
49 gfx_canvas_t *gfx_new_canvas (void);
50
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);
56
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);
62
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);
69
70 /* add a point to a line or to an area */
71 int           gfx_add_point  (gfx_node_t *node, double x, double y);
72
73 /* close current path so it ends at the same point as it started */
74 void          gfx_close_path  (gfx_node_t *node);
75
76
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);
85
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);
90
91
92
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);
100                                                                                           
101 int       gfx_render (gfx_canvas_t *canvas,
102                               art_u32 width, art_u32 height,
103                               gfx_color_t background, FILE *fo);
104                                                                                          
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); 
108
109 #endif
110
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);
115
116