summarylogtreecommitdiffstats
path: root/01-evince-subpixel-rendering-by-poppler.patch
diff options
context:
space:
mode:
Diffstat (limited to '01-evince-subpixel-rendering-by-poppler.patch')
-rw-r--r--01-evince-subpixel-rendering-by-poppler.patch52
1 files changed, 52 insertions, 0 deletions
diff --git a/01-evince-subpixel-rendering-by-poppler.patch b/01-evince-subpixel-rendering-by-poppler.patch
new file mode 100644
index 000000000000..ccacd99a9d8e
--- /dev/null
+++ b/01-evince-subpixel-rendering-by-poppler.patch
@@ -0,0 +1,52 @@
+From: Jeffrey Feng <galago1992@gmail.com>
+Subject: [PATCH 1/3] evince subpixel rendering provided by poppler cairo backend
+---
+diff -rup a/backend/pdf b/backend/pdf|diffstat
+ ev-poppler.cc | 23 ++++++++++++++++++++---
+ 1 file changed, 20 insertions(+), 3 deletions(-)
+
+diff -rup a/backend/pdf/ev-poppler.cc b/backend/pdf/ev-poppler.cc
+--- a/backend/pdf/ev-poppler.cc 2018-05-21 22:07:17.707456820 +0800
++++ b/backend/pdf/ev-poppler.cc 2018-05-21 22:20:05.643425328 +0800
+@@ -388,11 +388,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);
+@@ -415,9 +430,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);
+