more work toward making table_item just a pivot_Table
[pspp] / src / output / cairo-fsm.h
index 60a6efb489166241c1d52a4966166667395f8d6d..8c8892378710ba5631fefdbedb01aebc03d2e99d 100644 (file)
 struct xr_fsm;
 struct output_item;
 
+/* The unit used for internal measurements is inch/(72 * XR_POINT).
+   (Thus, XR_POINT units represent one point.) */
+#define XR_POINT PANGO_SCALE
+
 enum xr_font_type
   {
     XR_FONT_PROPORTIONAL,
@@ -39,28 +43,41 @@ struct xr_fsm_style
   {
     int ref_cnt;
 
-    int size[TABLE_N_AXES];     /* Page size. */
+    int size[TABLE_N_AXES];      /* Page size. */
     int min_break[TABLE_N_AXES]; /* Minimum cell size to allow breaking. */
     PangoFontDescription *fonts[XR_N_FONTS];
+    struct cell_color fg;
     bool use_system_colors;
-    bool transparent;
-    double font_scale;
+
+    int object_spacing;
+
+    /* Resolution, in units per inch, used for measuring font "points".  If
+       this is 72.0, for example, then 1pt = 1 device unit, which is
+       appropriate for rendering to a surface created by
+       cairo_ps_surface_create() with its default transformation matrix of 72
+       units/inch.  For a screen-based surface, it is traditionally 96.0. */
+    double font_resolution;
   };
 struct xr_fsm_style *xr_fsm_style_ref (const struct xr_fsm_style *);
+struct xr_fsm_style *xr_fsm_style_unshare (struct xr_fsm_style *);
 void xr_fsm_style_unref (struct xr_fsm_style *);
 bool xr_fsm_style_equals (const struct xr_fsm_style *,
                           const struct xr_fsm_style *);
 
-struct xr_fsm *xr_fsm_create (const struct output_item *,
-                              const struct xr_fsm_style *,
-                              cairo_t *);
-void xr_fsm_destroy (struct xr_fsm *);
-
+/* Interface used for rendering output items in a single on-screen region. */
+struct xr_fsm *xr_fsm_create_for_scrolling (const struct output_item *,
+                                            const struct xr_fsm_style *,
+                                            cairo_t *);
 void xr_fsm_measure (struct xr_fsm *, cairo_t *, int *w, int *h);
 void xr_fsm_draw_all (struct xr_fsm *, cairo_t *);
 void xr_fsm_draw_region (struct xr_fsm *, cairo_t *,
                          int x, int y, int w, int h);
 
+/* Interface used for rendering output items to a series of printed pages. */
+struct xr_fsm *xr_fsm_create_for_printing (const struct output_item *,
+                                           const struct xr_fsm_style *,
+                                           cairo_t *);
+void xr_fsm_destroy (struct xr_fsm *);
 int xr_fsm_draw_slice (struct xr_fsm *, cairo_t *, int space);
 bool xr_fsm_is_empty (const struct xr_fsm *);