New module to perform decimal floating point arithmetic for charts.
[pspp] / src / output / cairo-chart.h
index 041a169102395546db470f5fd79a693ba8f38f8c..27000cb56fa4cd10fb7706d868fb5171d70fd914 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2009 Free Software Foundation, Inc.
+   Copyright (C) 2009, 2011 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -31,17 +31,24 @@ struct xrchart_colour
     uint8_t blue;
   };
 
+struct xrchart_axis
+{
+  int data_max;
+  int data_min;
+
+  double scale;
+  double min;
+  double max;
+};
+
 /* The geometry of a chart. */
 struct xrchart_geometry
   {
-    int data_top;
-    int data_right;
-    int data_bottom;
-    int data_left;
-
-    int abscissa_top;
+    /* Bottom of the abscissa segment */
+    int abscissa_bottom;
 
-    int ordinate_right;
+    /* Left of the ordinate segment */
+    int ordinate_left;
 
     int title_bottom;
 
@@ -57,12 +64,9 @@ struct xrchart_geometry
     struct xrchart_colour fill_colour;
 
     /* Stuff particular to cartesians and boxplots. */
-    double ordinate_scale;
-    double abscissa_scale;
-    double x_min;
-    double x_max;
-    double y_min;
-    double y_max;
+    struct xrchart_axis axis[2];
+
+    /* True iff a path is currently being drawn */
     bool in_path;
   };
 
@@ -70,13 +74,13 @@ void xrchart_geometry_init (cairo_t *, struct xrchart_geometry *,
                             double width, double length);
 void xrchart_geometry_free (cairo_t *, struct xrchart_geometry *);
 
-#define XRCHART_N_COLOURS 9
+#define XRCHART_N_COLOURS 27
 extern const struct xrchart_colour data_colour[];
 
 enum tick_orientation
   {
-    TICK_ABSCISSA=0,
-    TICK_ORDINATE
+    SCALE_ABSCISSA=0,
+    SCALE_ORDINATE
   };
 
 enum xrmarker_type
@@ -92,13 +96,19 @@ void xrchart_draw_marker (cairo_t *, double x, double y, enum xrmarker_type,
 void xrchart_label (cairo_t *, int horz_justify, int vert_justify,
                     double font_size, const char *);
 
+void xrchart_label_rotate (cairo_t *cr, int horz_justify, int vert_justify,
+                          double font_size, const char *string, double angle);
+
+
 /* Draw a tick mark at position
    If label is non zero, then print it at the tick mark
 */
 void draw_tick (cairo_t *, const struct xrchart_geometry *,
-                enum tick_orientation orientation, double position,
+                enum tick_orientation orientation,
+               bool rotated,
+               double position,
                 const char *label, ...)
-  PRINTF_FORMAT (5, 6);
+  PRINTF_FORMAT (6, 7);
 
 
 /* Write the title on a chart*/
@@ -108,12 +118,12 @@ void xrchart_write_title (cairo_t *, const struct xrchart_geometry *,
 
 /* Set the scale for the abscissa */
 void xrchart_write_xscale (cairo_t *, struct xrchart_geometry *,
-                           double min, double max, int ticks);
+                           double min, double max);
 
 
 /* Set the scale for the ordinate */
 void xrchart_write_yscale (cairo_t *, struct xrchart_geometry *,
-                           double smin, double smax, int ticks);
+                           double smin, double smax);
 
 void xrchart_write_xlabel (cairo_t *, const struct xrchart_geometry *,
                            const char *label) ;
@@ -161,5 +171,10 @@ void xrchart_draw_np_plot (const struct chart_item *, cairo_t *,
                            struct xrchart_geometry *);
 void xrchart_draw_scree (const struct chart_item *, cairo_t *,
                          struct xrchart_geometry *);
+void xrchart_draw_spreadlevel (const struct chart_item *, cairo_t *,
+                         struct xrchart_geometry *);
+void xrchart_draw_scatterplot (const struct chart_item *, cairo_t *,
+                         struct xrchart_geometry *);
+
 
 #endif /* output/cairo-chart.h */