static void xr_draw_chart (const struct chart_item *, cairo_t *,
double x, double y, double width, double height);
-/* Draws onto CR at least the region of R that is enclosed in (X,Y)-(X+W,Y+H),
- and possibly some additional parts. */
+/* Draws onto CR */
void
-xr_rendering_draw (struct xr_rendering *r, cairo_t *cr,
- int x, int y, int w, int h)
+xr_rendering_draw_all (struct xr_rendering *r, cairo_t *cr)
{
if (is_table_item (r->item))
{
}
xr->y = r->title_height;
- render_page_draw_region (r->page,
- x * XR_POINT, (y * XR_POINT) - r->title_height,
- w * XR_POINT, h * XR_POINT);
+ render_page_draw (r->page);
}
else
xr_draw_chart (to_chart_item (r->item), cr,
void xr_rendering_apply_options (struct xr_rendering *, struct string_map *o);
void xr_rendering_measure (struct xr_rendering *, int *w, int *h);
-void xr_rendering_draw (struct xr_rendering *, cairo_t *,
- int x, int y, int w, int h);
+void xr_rendering_draw_all (struct xr_rendering *r, cairo_t *cr);
/* Functions for rendering a series of output items to a series of Cairo
contexts, with pagination, possibly including headers.
render_page_draw_cells (page, bb);
}
-/* Returns the greatest value i, 0 <= i < n, such that cp[i] <= x0. */
-static int
-get_clip_min_extent (int x0, const int cp[], int n)
-{
- int low, high, best;
-
- low = 0;
- high = n;
- best = 0;
- while (low < high)
- {
- int middle = low + (high - low) / 2;
-
- if (cp[middle] <= x0)
- {
- best = middle;
- low = middle + 1;
- }
- else
- high = middle;
- }
-
- return best;
-}
-
-/* Returns the least value i, 0 <= i < n, such that cp[i + 1] >= x1. */
-static int
-get_clip_max_extent (int x1, const int cp[], int n)
-{
- int low, high, best;
-
- low = 0;
- high = n;
- best = n;
- while (low < high)
- {
- int middle = low + (high - low) / 2;
-
- if (cp[middle] >= x1)
- best = high = middle;
- else
- low = middle + 1;
- }
-
- return best;
-}
-
-/* Renders the cells of PAGE that intersect (X,Y)-(X+W,Y+H), by calling the
- 'draw_line' and 'draw_cell' functions from the render_params provided to
- render_page_create(). */
-void
-render_page_draw_region (const struct render_page *page,
- int x, int y, int w, int h)
-{
- int bb[TABLE_N_AXES][2];
-
- bb[H][0] = get_clip_min_extent (x, page->cp[H], page->n[H] * 2 + 1);
- bb[H][1] = get_clip_max_extent (x + w, page->cp[H], page->n[H] * 2 + 1);
- bb[V][0] = get_clip_min_extent (y, page->cp[V], page->n[V] * 2 + 1);
- bb[V][1] = get_clip_max_extent (y + h, page->cp[V], page->n[V] * 2 + 1);
-
- render_page_draw_cells (page, bb);
-}
\f
/* Breaking up tables to fit on a page. */
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);
\f
/* An iterator for breaking render_pages into smaller chunks. */
struct render_break
xr_rendering_apply_options (r, &viewer->render_opts);
- xr_rendering_draw (r, cr, event->area.x, event->area.y,
- event->area.width, event->area.height);
+ xr_rendering_draw_all (r, cr);
+
cairo_destroy (cr);
return TRUE;
}
+
static void
psppire_output_submit (struct output_driver *this,
const struct output_item *item)