diff --git a/backend/pdf/ev-poppler.cc b/backend/pdf/ev-poppler.cc index 214094f..8a09909 100644 --- a/backend/pdf/ev-poppler.cc +++ b/backend/pdf/ev-poppler.cc @@ -393,11 +393,26 @@ pdf_page_render (PopplerPage *page, cairo_t *cr; double page_width, page_height; double xscale, yscale; + gboolean subpixel_rendering; + cairo_font_options_t *fo; surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); cr = cairo_create (surface); + fo = cairo_font_options_create (); + cairo_get_font_options (cr, fo); + subpixel_rendering = poppler_page_support_subpixel_rendering (page); + // printf("subpixel_rendering: %d\n", subpixel_rendering); + if (subpixel_rendering) { + cairo_set_source_rgb (cr, 1., 1., 1.); + cairo_paint (cr); + cairo_font_options_set_antialias (fo, CAIRO_ANTIALIAS_SUBPIXEL); + cairo_font_options_set_subpixel_order (fo, CAIRO_SUBPIXEL_ORDER_RGB); + } + cairo_set_font_options (cr, fo); + cairo_font_options_destroy (fo); + switch (rc->rotation) { case 90: cairo_translate (cr, width, 0); @@ -420,9 +435,11 @@ pdf_page_render (PopplerPage *page, cairo_rotate (cr, rc->rotation * G_PI / 180.0); poppler_page_render (page, cr); - cairo_set_operator (cr, CAIRO_OPERATOR_DEST_OVER); - cairo_set_source_rgb (cr, 1., 1., 1.); - cairo_paint (cr); + if (!subpixel_rendering) { + cairo_set_operator (cr, CAIRO_OPERATOR_DEST_OVER); + cairo_set_source_rgb (cr, 1., 1., 1.); + cairo_paint (cr); + } cairo_destroy (cr);