/* PSPP - a program for statistical analysis.
- Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+ Copyright (C) 2009, 2010, 2011, 2014 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
#include <stdbool.h>
#include <stddef.h>
-#include <output/table-provider.h>
+#include "output/table-provider.h"
-struct table;
+struct table_item;
enum render_line_style
{
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]).
/* Width of different kinds of lines. */
int line_widths[TABLE_N_AXES][RENDER_N_LINES];
+
+ /* Minimum cell width or height before allowing the cell to be broken
+ across two pages. (Joined cells may always be broken at join
+ points.) */
+ int min_break[TABLE_N_AXES];
};
\f
-/* A "page" of content that is ready to be rendered.
-
- A page's size is not limited to the size passed in as part of render_params.
- Use render_break (see below) to break a too-big render_page into smaller
- render_pages that will fit in the available space. */
-struct render_page *render_page_create (const struct render_params *,
- const struct table *);
-
-struct render_page *render_page_ref (const struct render_page *);
-void render_page_unref (struct render_page *);
-
-int render_page_get_size (const struct render_page *, enum table_axis);
-void render_page_draw (const struct render_page *);
\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 hw; /* Width of headers of 'page' along 'axis'. */
- };
+struct render_pager *render_pager_create (const struct render_params *,
+ const struct table_item *);
+void render_pager_destroy (struct render_pager *);
+
+bool render_pager_has_next (const struct render_pager *);
+int render_pager_draw_next (struct render_pager *, int space);
-void render_break_init (struct render_break *, struct render_page *,
- enum table_axis);
-void render_break_init_empty (struct render_break *);
-void render_break_destroy (struct render_break *);
+void render_pager_draw (const struct render_pager *);
+void render_pager_draw_region (const struct render_pager *,
+ int x, int y, int w, int h);
-bool render_break_has_next (const struct render_break *);
-int render_break_next_size (const struct render_break *);
-struct render_page *render_break_next (struct render_break *, int size);
+int render_pager_get_size (const struct render_pager *, enum table_axis);
+int render_pager_get_best_breakpoint (const struct render_pager *, int height);
#endif /* output/render.h */