summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2010-06-11 14:06:15 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2010-06-11 14:12:23 +0100
commitf74b11415a1f7682dd50c222baa8815ef93681dc (patch)
tree561c33c736793448e3f3883ce5162a088ba15d13 /test
parent7f227ec8d3f981dbbf2ca1914bf7fd29d9cdfd05 (diff)
test: Use a group to render PDF correctly using poppler.
In order to support blend modes, we need to use a clear background whilst rendering the PDF, which inspired the use of DEST_OVER to avoid having to render to an intermediate surface. However, the adjunct of using subpixel text means that we cannot simply using the alpha channel as the sole mask and so need to render to an intermediate and paint it over an opaque background.
Diffstat (limited to 'test')
-rw-r--r--test/any2ppm.c9
-rw-r--r--test/pdf2png.c9
2 files changed, 12 insertions, 6 deletions
diff --git a/test/any2ppm.c b/test/any2ppm.c
index 55b4c7ec..b4c9de6f 100644
--- a/test/any2ppm.c
+++ b/test/any2ppm.c
@@ -357,14 +357,17 @@ _poppler_render_page (const char *filename,
poppler_page_get_size (page, &width, &height);
- surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
+ surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height);
cr = cairo_create (surface);
+ cairo_set_source_rgb (cr, 1., 1., 1.);
+ cairo_paint (cr);
+ cairo_push_group_with_content (cr, CAIRO_CONTENT_COLOR_ALPHA);
+
poppler_page_render (page, cr);
g_object_unref (page);
- cairo_set_operator (cr, CAIRO_OPERATOR_DEST_OVER);
- cairo_set_source_rgb (cr, 1., 1., 1.);
+ cairo_pop_group_to_source (cr);
cairo_paint (cr);
status = cairo_status (cr);
diff --git a/test/pdf2png.c b/test/pdf2png.c
index f60170cc..06fa05b1 100644
--- a/test/pdf2png.c
+++ b/test/pdf2png.c
@@ -74,15 +74,18 @@ int main (int argc, char *argv[])
poppler_page_get_size (page, &width, &height);
- surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
+ surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, width, height);
cr = cairo_create (surface);
cairo_surface_destroy (surface);
+ cairo_set_source_rgb (cr, 1,1,1);
+ cairo_paint (cr);
+ cairo_push_group_with_content (cr, CAIRO_CONTENT_COLOR_ALPHA);
+
poppler_page_render (page, cr);
g_object_unref (page);
- cairo_set_operator (cr, CAIRO_OPERATOR_DEST_OVER);
- cairo_set_source_rgb (cr, 1., 1., 1.);
+ cairo_pop_group_to_source (cr);
cairo_paint (cr);
status = cairo_surface_write_to_png (cairo_get_target (cr),