summarylogtreecommitdiffstats
path: root/evince-poppler-subpixel.patch
blob: 5ee4cc19a518123fd6c4412724b502fe89a33b73 (plain)
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);