From 25abe582982caeb07d1e0af4acca53bb110a33bf Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 12 Apr 2012 10:51:38 +0100 Subject: [PATCH] pdf (debug API): Export the ability to force fallbacks We need to occasionally force fallbacks whilst testing the PDF output, so export a debug interface to do so in order to avoid poking around inside cairo internals. References: https://bugs.freedesktop.org/show_bug.cgi?id=48577 Signed-off-by: Chris Wilson --- boilerplate/cairo-boilerplate-pdf.c | 19 ++++++------------- src/cairo-pdf-surface.c | 21 +++++++++++++++++++++ src/cairo-pdf.h | 5 +++++ 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/boilerplate/cairo-boilerplate-pdf.c b/boilerplate/cairo-boilerplate-pdf.c index d76d13951..985540b2f 100644 --- a/boilerplate/cairo-boilerplate-pdf.c +++ b/boilerplate/cairo-boilerplate-pdf.c @@ -29,8 +29,6 @@ #if CAIRO_CAN_TEST_PDF_SURFACE #include -#include -#include #if HAVE_SIGNAL_H #include @@ -221,23 +219,18 @@ _cairo_boilerplate_pdf_cleanup (void *closure) } static void -_cairo_boilerplate_pdf_force_fallbacks (cairo_surface_t *abstract_surface, +_cairo_boilerplate_pdf_force_fallbacks (cairo_surface_t *surface, double x_pixels_per_inch, double y_pixels_per_inch) { - pdf_target_closure_t *ptc = cairo_surface_get_user_data (abstract_surface, - &pdf_closure_key); - - cairo_paginated_surface_t *paginated; - cairo_pdf_surface_t *surface; + pdf_target_closure_t *ptc = + cairo_surface_get_user_data (surface, &pdf_closure_key); if (ptc->target) - abstract_surface = ptc->target; + surface = ptc->target; - paginated = (cairo_paginated_surface_t*) abstract_surface; - surface = (cairo_pdf_surface_t*) paginated->target; - surface->force_fallbacks = TRUE; - cairo_surface_set_fallback_resolution (&paginated->base, + cairo_pdf_surface_debug_force_fallbacks (surface); + cairo_surface_set_fallback_resolution (surface, x_pixels_per_inch, y_pixels_per_inch); } diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c index 78537cef8..15b7da596 100644 --- a/src/cairo-pdf-surface.c +++ b/src/cairo-pdf-surface.c @@ -683,6 +683,27 @@ cairo_pdf_surface_set_size (cairo_surface_t *surface, status = _cairo_surface_set_error (surface, status); } +/** + * cairo_pdf_surface_debug_force_fallbacks: + * @surface: a PDF #cairo_surface_t + * + * This is purely a debugging interface, intended only to be used in + * conformation testing, to force the surface to contain only rasterised + * graphics and no native PDF drawing. + * + * Since: 1.12.2 + **/ +void +cairo_pdf_surface_debug_force_fallbacks (cairo_surface_t *abstract_surface) +{ + cairo_pdf_surface_t *surface = NULL; + + if (! _extract_pdf_surface (abstract_surface, &surface)) + return; + + surface->force_fallbacks = TRUE; +} + static void _cairo_pdf_surface_clear (cairo_pdf_surface_t *surface) { diff --git a/src/cairo-pdf.h b/src/cairo-pdf.h index 1bc8524f2..91ee3f1a9 100644 --- a/src/cairo-pdf.h +++ b/src/cairo-pdf.h @@ -85,6 +85,11 @@ cairo_pdf_surface_set_size (cairo_surface_t *surface, double width_in_points, double height_in_points); +/* debug interface */ + +cairo_public void +cairo_pdf_surface_debug_force_fallbacks (cairo_surface_t *abstract_surface); + CAIRO_END_DECLS #else /* CAIRO_HAS_PDF_SURFACE */