prepare for the release of rrdtool-1.2.5
[rrdtool.git] / src / rrd_gfx.c
index 6f83bc5..33621bf 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * RRDtool 1.2.4  Copyright by Tobi Oetiker, 1997-2005
+ * RRDtool 1.2.5  Copyright by Tobi Oetiker, 1997-2005
  ****************************************************************************
  * rrd_gfx.c  graphics wrapper for rrdtool
   **************************************************************************/
@@ -19,6 +19,7 @@
 
 #include "rrd_gfx.h"
 #include "rrd_afm.h"
+#include "unused.h"
 
 /* lines are better drawn on the pixle than between pixles */
 #define LINEOFFSET 0.5
@@ -291,7 +292,7 @@ double gfx_get_text_width ( gfx_canvas_t *canvas,
 }
 
 double gfx_get_text_width_libart (
-                           gfx_canvas_t *canvas, double start, char* font, double size,
+                           gfx_canvas_t *canvas, double UNUSED(start), char* font, double size,
                            double tabwidth, char* text, int rotation ){
 
   int           error;
@@ -963,7 +964,7 @@ static void pdf_calc(int page_height, gfx_node_t *node, pdf_coords *g)
 */
 static int svg_indent = 0;
 static int svg_single_line = 0;
-static const char *svg_default_font = "Helvetica";
+static const char *svg_default_font = "-dummy-";
 typedef struct svg_dash
 {
   int dash_enable;
@@ -1341,6 +1342,7 @@ static void svg_area(FILE *fp, gfx_node_t *node)
 static void svg_text(FILE *fp, gfx_node_t *node)
 {
    pdf_coords g;
+   const char *fontname;
    /* as svg has 0,0 in top-left corner (like most screens) instead of
          bottom-left corner like pdf and eps, we have to fake the coords
          using offset and inverse sin(r) value */
@@ -1362,12 +1364,10 @@ static void svg_text(FILE *fp, gfx_node_t *node)
      svg_write_number(fp, page_height - g.tmy);
      fputs("\"", fp);
    }
-
-/*  if (strcmp(node->filename, svg_default_font))
-    fprintf(fp, " font-family=\"%s\"", node->filename);
-    */
-   fputs(" font-family=\"Helvetica", fp);
-   fputs("\" font-size=\"", fp);
+   fontname = afm_get_font_name(node->filename);
+   if (strcmp(fontname, svg_default_font))
+     fprintf(fp, " font-family=\"%s\"", fontname);
+   fputs(" font-size=\"", fp);
    svg_write_number(fp, node->size);
    fputs("\"", fp);
   if (!svg_color_is_black(node->color))
@@ -1384,13 +1384,22 @@ int       gfx_render_svg (gfx_canvas_t *canvas,
                  art_u32 width, art_u32 height,
                  gfx_color_t background, FILE *fp){
    gfx_node_t *node = canvas->firstnode;
+   /* Find the first font used, and assume it is the mostly used
+         one. It reduces the number of font-familty attributes. */
+   while (node) {
+          if (node->type == GFX_TEXT && node->filename) {
+                  svg_default_font = afm_get_font_name(node->filename);
+                  break;
+          }
+          node = node->next;
+   }
    fputs(
 "<?xml version=\"1.0\" standalone=\"no\"?>\n"
 "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.0//EN\"\n"
 "   \"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd\">\n"
 "<!--\n"
 "   SVG file created by\n"
-"        RRDtool 1.2.4 Tobias Oetiker, http://tobi.oetiker.ch\n"
+"        RRDtool 1.2.5 Tobias Oetiker, http://tobi.oetiker.ch\n"
 "\n"
 "   The width/height attributes in the outhermost svg node\n"
 "   are just default sizes for the browser which is used\n"
@@ -1419,6 +1428,7 @@ int       gfx_render_svg (gfx_canvas_t *canvas,
    fprintf(fp, " x=\"0\" y=\"0\" width=\"%d\" height=\"%d\"", width, height);
   svg_write_color(fp, background, "fill");
    svg_close_tag_empty_node(fp);
+   node = canvas->firstnode;
    while (node) {
      switch (node->type) {
      case GFX_LINE:
@@ -1557,7 +1567,7 @@ static int eps_prologue(eps_state *state)
   gfx_node_t *node;
   fputs(
     "%!PS-Adobe-3.0 EPSF-3.0\n"
-    "%%Creator: RRDtool 1.2.4 Tobias Oetiker, http://tobi.oetiker.ch\n"
+    "%%Creator: RRDtool 1.2.5 Tobias Oetiker, http://tobi.oetiker.ch\n"
     /* can't like weird chars here */
     "%%Title: (RRDtool output)\n"
     "%%DocumentData: Clean7Bit\n"
@@ -2225,7 +2235,7 @@ static void pdf_init_document(pdf_state *state)
 
 static void pdf_setup_document(pdf_state *state)
 {
-  const char *creator = "RRDtool 1.2.4 Tobias Oetiker, http://tobi.oetiker.ch";
+  const char *creator = "RRDtool 1.2.5 Tobias Oetiker, http://tobi.oetiker.ch";
   /* all objects created by now, so init code can reference them */
   /* HEADER */
   pdf_puts(&state->pdf_header, "%PDF-1.3\n");
@@ -2345,7 +2355,7 @@ static void pdf_free_resources(pdf_state *state)
 
 int       gfx_render_pdf (gfx_canvas_t *canvas,
                  art_u32 width, art_u32 height,
-                 gfx_color_t background, FILE *fp){
+                 gfx_color_t UNUSED(background), FILE *fp){
   struct pdf_state state;
   memset(&state, 0, sizeof(pdf_state));
   state.fp = fp;