1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
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);
|