prepare for the release of rrdtool-1.2.9
[rrdtool.git] / src / rrd_gfx.h
1 /****************************************************************************
2  * RRDtool 1.2.9  Copyright by Tobi Oetiker, 1997-2005
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
11 #define y0 libart_y0
12 #define y1 libart_y1
13 #define gamma libart_gamma
14 #include <libart_lgpl/libart.h>
15 #include <libart_lgpl/art_rgba.h>
16 #include "art_rgba_svp.h"
17 #undef gamma
18 #undef y0
19 #undef y1
20
21
22 enum gfx_if_en {IF_PNG=0,IF_SVG,IF_EPS,IF_PDF};
23 enum gfx_en { GFX_LINE=0,GFX_AREA,GFX_TEXT };
24 enum gfx_h_align_en { GFX_H_NULL=0, GFX_H_LEFT, GFX_H_RIGHT, GFX_H_CENTER };
25 enum gfx_v_align_en { GFX_V_NULL=0, GFX_V_TOP,  GFX_V_BOTTOM, GFX_V_CENTER };
26 enum gfx_aa_type_en {AA_NORMAL=0,AA_LIGHT,AA_NONE};
27 typedef unsigned long gfx_color_t;
28
29 typedef struct  gfx_node_t {
30   enum gfx_en   type;         /* type of graph element */
31   gfx_color_t   color;        /* color of element  0xRRGGBBAA  alpha 0xff is solid*/
32   double        size;         /* font size, line width */
33   double        dash_on, dash_off; /* dash line fragments lengths */
34   int           closed_path;
35   int           points;
36   int           points_max;
37   char *filename;             /* font or image filename */
38   char *text;
39   ArtVpath      *path;        /* path */
40   double        x,y;          /* position */
41   double        angle;        /* text angle */
42   enum gfx_h_align_en halign; /* text alignement */
43   enum gfx_v_align_en valign; /* text alignement */
44   double        tabwidth; 
45   struct gfx_node_t  *next; 
46 } gfx_node_t;
47
48
49 typedef struct gfx_canvas_t 
50 {
51     struct gfx_node_t *firstnode;
52     struct gfx_node_t *lastnode;
53     enum gfx_if_en imgformat;      /* image format */
54     int            interlaced;     /* will the graph be interlaced? */
55     double         zoom;           /* zoom for graph */
56     double         font_aa_threshold; /* no anti-aliasing for sizes <= */
57     enum gfx_aa_type_en aa_type;   /* anti-aliasing type (normal/light/none) */
58 } gfx_canvas_t;
59
60 gfx_canvas_t *gfx_new_canvas (void);
61
62 /* create a new line */
63 gfx_node_t   *gfx_new_line   (gfx_canvas_t *canvas, 
64                               double X0, double Y0, 
65                               double X1, double Y1,
66                               double width, gfx_color_t color);
67
68 gfx_node_t   *gfx_new_dashed_line   (gfx_canvas_t *canvas, 
69                               double X0, double Y0, 
70                               double X1, double Y1,
71                               double width, gfx_color_t color,
72                               double dash_on, double dash_off);
73
74 /* create a new area */
75 gfx_node_t   *gfx_new_area   (gfx_canvas_t *canvas, 
76                               double X0, double Y0,
77                               double X1, double Y1,
78                               double X2, double Y2,
79                               gfx_color_t  color);
80
81 /* add a point to a line or to an area */
82 int           gfx_add_point  (gfx_node_t *node, double x, double y);
83
84 /* close current path so it ends at the same point as it started */
85 void          gfx_close_path  (gfx_node_t *node);
86
87
88 /* create a text node */
89 gfx_node_t   *gfx_new_text   (gfx_canvas_t *canvas,  
90                               double x, double y, gfx_color_t color,
91                               char* font, double size,                        
92                               double tabwidth, double angle,
93                               enum gfx_h_align_en h_align,
94                               enum gfx_v_align_en v_align,
95                               char* text);
96
97 /* measure width of a text string */
98 double gfx_get_text_width ( gfx_canvas_t *canvas,
99                             double start, char* font, double size,
100                             double tabwidth, char* text, int rotation);
101
102 /* save image to file */
103 int       gfx_render (gfx_canvas_t *canvas,
104                               art_u32 width, art_u32 height,
105                               gfx_color_t background, FILE *fo);
106
107 /* free memory used by nodes this will also remove memory required for
108    node chain and associated material */
109 int           gfx_destroy    (gfx_canvas_t *canvas); 
110
111
112 /* PNG support*/
113 int       gfx_render_png (gfx_canvas_t *canvas,
114                               art_u32 width, art_u32 height,
115                               gfx_color_t background, FILE *fo);
116 double gfx_get_text_width_libart ( gfx_canvas_t *canvas, double start, 
117                 char* font, double size, double tabwidth, 
118                 char* text, int rotation );
119
120 /* SVG support */
121 int       gfx_render_svg (gfx_canvas_t *canvas,
122                               art_u32 width, art_u32 height,
123                               gfx_color_t background, FILE *fo);
124
125 /* EPS support */
126 int       gfx_render_eps (gfx_canvas_t *canvas,
127                               art_u32 width, art_u32 height,
128                               gfx_color_t background, FILE *fo);
129
130 /* PDF support */
131 int       gfx_render_pdf (gfx_canvas_t *canvas,
132                               art_u32 width, art_u32 height,
133                               gfx_color_t background, FILE *fo);
134
135 #endif