zip-writer: Write size and CRC in local directory when possible.
[pspp] / src / output / render.h
index c08a687dc99cba2381cc22f4c319d7277cb616c3..f2ded79d6c117432cb68a788be0f299084c33ddd 100644 (file)
@@ -44,6 +44,19 @@ struct render_params
     int (*measure_cell_height) (void *aux, const struct table_cell *cell,
                                 int width);
 
+    /* Given that there is space measuring WIDTH by HEIGHT to render CELL,
+       where HEIGHT is insufficient to render the entire height of the cell,
+       returns the largest height less than HEIGHT at which it is appropriate
+       to break the cell.  For example, if breaking at the specified HEIGHT
+       would break in the middle of a line of text, the return value would be
+       just sufficiently less that the breakpoint would be between lines of
+       text.
+
+       Optional.  If NULL, the rendering engine assumes that all breakpoints
+       are acceptable. */
+    int (*adjust_break) (void *aux, const struct table_cell *cell,
+                         int width, int height);
+
     /* Draws a generalized intersection of lines in the rectangle whose
        top-left corner is (BB[TABLE_HORZ][0], BB[TABLE_VERT][0]) and whose
        bottom-right corner is (BB[TABLE_HORZ][1], BB[TABLE_VERT][1]).
@@ -100,14 +113,16 @@ int render_page_get_size (const struct render_page *, enum table_axis);
 void render_page_draw (const struct render_page *);
 void render_page_draw_region (const struct render_page *,
                               int x, int y, int w, int h);
+
+int render_page_get_best_breakpoint (const struct render_page *, int height);
 \f
 /* An iterator for breaking render_pages into smaller chunks. */
 struct render_break
   {
     struct render_page *page;   /* Page being broken up. */
     enum table_axis axis;       /* Axis along which 'page' is being broken. */
-    int cell;                   /* Next cell. */
-    int pixel;                  /* Pixel offset within 'cell' (usually 0). */
+    int z;                      /* Next cell along 'axis'. */
+    int pixel;                  /* Pixel offset within cell 'z' (usually 0). */
     int hw;                     /* Width of headers of 'page' along 'axis'. */
   };