summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan2019-04-27 13:52:20 +0800
committerJonathan2019-04-27 13:52:20 +0800
commit586e84a7807e0176b89dd60046bb1642e589fe2f (patch)
tree4a805cb0fa5f311a8168606294fe9e75c8b3f183
parent0468648f4d262ba1adee95a5645118998b3a7263 (diff)
downloadaur-586e84a7807e0176b89dd60046bb1642e589fe2f.tar.gz
Upgrade integrated subpixel-patched poppler to the latest version 0.76.
-rw-r--r--.SRCINFO19
-rw-r--r--01-evince-subpixel-rendering-by-poppler.patch52
-rw-r--r--02-subpixel-rendering-for-poppler-and-glib.patch309
-rw-r--r--03-cairo-backend-for-poppler-qt5.patch236
-rw-r--r--PKGBUILD56
5 files changed, 33 insertions, 639 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 8c17eb8af536..ca02e0d40b6f 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,6 +1,6 @@
pkgbase = evince-lcd-standalone
- pkgdesc = Document viewer (PDF, Postscript, djvu, etc.) with built-in LCD subpixel rendering support
- pkgver = 3.31.91
+ pkgdesc = Document viewer (PDF, Postscript, djvu, etc.) with built-in LCD subpixel rendering
+ pkgver = 3.32.0
pkgrel = 1
url = https://wiki.gnome.org/Apps/Evince
arch = x86_64
@@ -21,7 +21,6 @@ pkgbase = evince-lcd-standalone
makedepends = gcc-libs
makedepends = cairo
makedepends = fontconfig
- makedepends = openjpeg
makedepends = gtk2
makedepends = qt4
makedepends = qt5-base
@@ -44,20 +43,16 @@ pkgbase = evince-lcd-standalone
depends = libsynctex
optdepends = texlive-bin: DVI support
optdepends = gvfs: bookmark support and session saving
- provides = evince=3.31.91
+ provides = evince=3.32.0
conflicts = evince
conflicts = evince-lcdfilter
options = !emptydirs
- source = git+https://git.gnome.org/browse/evince#commit=ae8a46449c65aa274c6a1ebd4b1f057e552517a3
- source = https://poppler.freedesktop.org/poppler-0.43.0.tar.xz
- source = 01-evince-subpixel-rendering-by-poppler.patch
- source = 02-subpixel-rendering-for-poppler-and-glib.patch
- source = 03-cairo-backend-for-poppler-qt5.patch
+ source = git+https://gitlab.gnome.org/GNOME/evince.git#commit=10da4bcec1cdd535a267e4b8e971668a47f0138b
+ source = https://poppler.freedesktop.org/poppler-0.76.0.tar.xz
+ source = git+https://github.com/jonathanffon/poppler-lcd-patch.git
sha256sums = SKIP
+ sha256sums = 370f5fcfe2bbf0c76fc394d338cd72ed7f2044b67f4eb4b115eb074ccfc70d63
sha256sums = SKIP
- sha256sums = 65c35d86787021cccee99082ad15cb06e0e865384f9a05aa3523a8aec1229af6
- sha256sums = 73c0fb71877633cefc37b13bcd7896263dc63b91fe13fa97c2c240292a2bc338
- sha256sums = c554b9411764ffcad7a91e22f78a594ca9851e631c70ec15a2b0d52bada0573c
pkgname = evince-lcd-standalone
diff --git a/01-evince-subpixel-rendering-by-poppler.patch b/01-evince-subpixel-rendering-by-poppler.patch
deleted file mode 100644
index ccacd99a9d8e..000000000000
--- a/01-evince-subpixel-rendering-by-poppler.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-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);
-
diff --git a/02-subpixel-rendering-for-poppler-and-glib.patch b/02-subpixel-rendering-for-poppler-and-glib.patch
deleted file mode 100644
index c82281872681..000000000000
--- a/02-subpixel-rendering-for-poppler-and-glib.patch
+++ /dev/null
@@ -1,309 +0,0 @@
-From: Jeffrey Feng <galago1992@gmail.com>
-Subject: [PATCH 2/3] subpixel rendering for poppler and poppler-glib
----
-diff -rup a/ b/|diffstat
- CMakeLists.txt | 1
- glib/CMakeLists.txt | 1
- glib/demo/render.c | 25 +++++++++++++++++---
- glib/poppler-page.cc | 10 ++++++++
- glib/poppler-page.h | 1
- poppler/CairoFontEngine.cc | 6 ++--
- poppler/CairoOutputDev.cc | 17 +++++++++++++
- poppler/Gfx.cc | 56 +++++++++++++++++++++++++++++++++++++++++++++
- poppler/Gfx.h | 3 ++
- poppler/Page.cc | 14 +++++++++++
- poppler/Page.h | 3 ++
- 11 files changed, 131 insertions(+), 6 deletions(-)
-
-diff -rup a/CMakeLists.txt b/CMakeLists.txt
---- a/CMakeLists.txt 2016-04-29 06:13:57.000000000 +0800
-+++ b/CMakeLists.txt 2018-05-22 23:05:18.907662448 +0800
-@@ -501,6 +501,7 @@ add_library(poppler STATIC ${poppler_SRC
- else(MSVC)
- add_library(poppler SHARED ${poppler_SRCS})
- endif(MSVC)
-+set_target_properties(poppler PROPERTIES OUTPUT_NAME "poppler-lcd")
- set_target_properties(poppler PROPERTIES VERSION 60.0.0 SOVERSION 60)
- target_link_libraries(poppler LINK_PRIVATE ${poppler_LIBS})
- install(TARGETS poppler RUNTIME DESTINATION bin LIBRARY DESTINATION lib${LIB_SUFFIX} ARCHIVE DESTINATION lib${LIB_SUFFIX})
-diff -rup a/glib/CMakeLists.txt b/glib/CMakeLists.txt
---- a/glib/CMakeLists.txt 2015-05-15 02:23:07.000000000 +0800
-+++ b/glib/CMakeLists.txt 2018-05-22 23:06:31.313659479 +0800
-@@ -81,6 +81,7 @@ set(poppler_glib_generated_SRCS
- ${CMAKE_SOURCE_DIR}/poppler/CairoRescaleBox.cc
- )
- add_library(poppler-glib SHARED ${poppler_glib_SRCS} ${poppler_glib_generated_SRCS})
-+set_target_properties(poppler-glib PROPERTIES OUTPUT_NAME "poppler-glib-lcd")
- set_target_properties(poppler-glib PROPERTIES VERSION 8.7.0 SOVERSION 8)
- target_link_libraries(poppler-glib poppler ${GLIB2_LIBRARIES} ${CAIRO_LIBRARIES} ${FREETYPE_LIBRARIES})
- if(HAVE_PTHREAD)
-diff -rup a/glib/demo/render.c b/glib/demo/render.c
---- a/glib/demo/render.c 2014-02-09 23:10:30.000000000 +0800
-+++ b/glib/demo/render.c 2018-05-18 21:21:13.000000000 +0800
-@@ -82,12 +82,14 @@ pgd_render_start (GtkButton *button,
- PgdRenderDemo *demo)
- {
- PopplerPage *page;
-+ gboolean subpixel_rendering;
- gdouble page_width, page_height;
- gdouble width, height;
- gint x, y;
- gchar *str;
- GTimer *timer;
- cairo_t *cr;
-+ cairo_font_options_t *fo;
-
- page = poppler_document_get_page (demo->doc, demo->page);
- if (!page)
-@@ -116,6 +118,21 @@ pgd_render_start (GtkButton *button,
- width, height);
- cr = cairo_create (demo->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);
-+
- cairo_save (cr);
- switch (demo->rotate) {
- case 90:
-@@ -143,9 +160,11 @@ pgd_render_start (GtkButton *button,
- poppler_page_render (page, cr);
- cairo_restore (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);
-+ }
-
- g_timer_stop (timer);
-
-diff -rup a/glib/poppler-page.cc b/glib/poppler-page.cc
---- a/glib/poppler-page.cc 2016-03-02 07:35:24.000000000 +0800
-+++ b/glib/poppler-page.cc 2018-05-18 21:21:13.000000000 +0800
-@@ -2424,3 +2424,13 @@ poppler_page_get_text_attributes_for_are
-
- return g_list_reverse(attributes);
- }
-+
-+gboolean
-+poppler_page_support_subpixel_rendering (PopplerPage *page)
-+{
-+ CairoOutputDev *output_dev;
-+ g_return_val_if_fail (POPPLER_IS_PAGE (page), FALSE);
-+
-+ output_dev = page->document->output_dev;
-+ return page->page->supportSubpixelRendering(output_dev);
-+}
-diff -rup a/glib/poppler-page.h b/glib/poppler-page.h
---- a/glib/poppler-page.h 2016-03-02 07:35:24.000000000 +0800
-+++ b/glib/poppler-page.h 2018-05-18 21:21:13.000000000 +0800
-@@ -109,6 +109,7 @@ GList *poppler_page_get_
- void poppler_page_free_text_attributes (GList *list);
- GList * poppler_page_get_text_attributes_for_area (PopplerPage *page,
- PopplerRectangle *area);
-+gboolean poppler_page_support_subpixel_rendering (PopplerPage *page);
-
- /* A rectangle on a page, with coordinates in PDF points. */
- #define POPPLER_TYPE_RECTANGLE (poppler_rectangle_get_type ())
-diff -rup a/poppler/CairoFontEngine.cc b/poppler/CairoFontEngine.cc
---- a/poppler/CairoFontEngine.cc 2016-04-29 06:05:41.000000000 +0800
-+++ b/poppler/CairoFontEngine.cc 2018-05-20 12:51:49.952696424 +0800
-@@ -132,7 +132,7 @@ CairoFont::getSubstitutionCorrection(Gfx
- cairo_matrix_t m;
- cairo_matrix_init_identity(&m);
- cairo_font_options_t *options = cairo_font_options_create();
-- cairo_font_options_set_hint_style(options, CAIRO_HINT_STYLE_NONE);
-+ cairo_font_options_set_hint_style(options, CAIRO_HINT_STYLE_SLIGHT);
- cairo_font_options_set_hint_metrics(options, CAIRO_HINT_METRICS_OFF);
- cairo_scaled_font_t *scaled_font = cairo_scaled_font_create(cairo_font_face, &m, &m, options);
-
-@@ -190,7 +190,7 @@ _ft_new_face_uncached (FT_Library lib,
- }
-
- font_face = cairo_ft_font_face_create_for_ft_face (face,
-- FT_LOAD_NO_HINTING |
-+ FT_LOAD_TARGET_LIGHT |
- FT_LOAD_NO_BITMAP);
- if (cairo_font_face_set_user_data (font_face,
- &_ft_cairo_key,
-@@ -359,7 +359,7 @@ _ft_new_face (FT_Library lib,
- _ft_open_faces = l;
-
- l->font_face = cairo_ft_font_face_create_for_ft_face (tmpl.face,
-- FT_LOAD_NO_HINTING |
-+ FT_LOAD_TARGET_LIGHT |
- FT_LOAD_NO_BITMAP);
- if (cairo_font_face_set_user_data (l->font_face,
- &_ft_cairo_key,
-diff -rup a/poppler/CairoOutputDev.cc b/poppler/CairoOutputDev.cc
---- a/poppler/CairoOutputDev.cc 2016-04-29 06:05:11.000000000 +0800
-+++ b/poppler/CairoOutputDev.cc 2018-05-18 21:21:13.000000000 +0800
-@@ -1402,6 +1402,7 @@ void CairoOutputDev::drawChar(GfxState *
- void CairoOutputDev::endString(GfxState *state)
- {
- int render;
-+ GfxFontType fontType;
-
- if (!currentFont)
- return;
-@@ -1419,6 +1420,18 @@ void CairoOutputDev::endString(GfxState
- goto finish;
- }
-
-+ fontType = state->getFont()->getType();
-+ // Do not enable subpixel rendering for type3 font
-+ // For some reason it does not work
-+ if (fontType == fontType3) {
-+ cairo_save(cairo);
-+ cairo_font_options_t *fo;
-+ fo = cairo_font_options_create ();
-+ cairo_get_font_options (cairo, fo);
-+ cairo_font_options_set_antialias (fo, CAIRO_ANTIALIAS_DEFAULT);
-+ cairo_set_font_options (cairo, fo);
-+ }
-+
- if (!(render & 1)) {
- LOG (printf ("fill string\n"));
- cairo_set_source (cairo, fill_pattern);
-@@ -1469,6 +1482,10 @@ void CairoOutputDev::endString(GfxState
- }
-
- finish:
-+ // pair with the previous cairo_save to disable subpixel rendering for type3 fonts
-+ if (fontType == fontType3) {
-+ cairo_restore(cairo);
-+ }
- gfree (glyphs);
- glyphs = NULL;
- if (use_show_text_glyphs) {
-diff -rup a/poppler/Gfx.cc b/poppler/Gfx.cc
---- a/poppler/Gfx.cc 2016-03-17 03:16:12.000000000 +0800
-+++ b/poppler/Gfx.cc 2018-05-18 21:21:13.000000000 +0800
-@@ -4726,6 +4726,62 @@ void Gfx::doImage(Object *ref, Stream *s
- error(errSyntaxError, getPos(), "Bad image parameters");
- }
-
-+GBool Gfx::checkNormalBlendModeOnly(Object *str) {
-+ // printf("check blender mode start\n");
-+ char *cmd;
-+ Object obj;
-+ Object args[maxArgs];
-+ int numArgs, i;
-+ GBool onlyNormalBlendMode;
-+ Parser myParser(xref, new Lexer(xref, str), gFalse);
-+
-+ numArgs = 0;
-+ onlyNormalBlendMode = gTrue;
-+
-+ myParser.getObj(&obj);
-+ while (!obj.isEOF()) {
-+ if (obj.isCmd()) {
-+ cmd = obj.getCmd();
-+
-+ if (strcmp(cmd, "gs") == 0) {
-+ Object obj1, obj2;
-+ GfxBlendMode mode;
-+ if (res->lookupGState(args[0].getName(), &obj1)) {
-+ if (!obj1.dictLookup("BM", &obj2)->isNull()) {
-+ if (state->parseBlendMode(&obj2, &mode)) {
-+ // printf("check blend mode: %d\n", mode);
-+ onlyNormalBlendMode &= (mode == gfxBlendNormal);
-+ }
-+ }
-+ obj2.free();
-+ }
-+ obj1.free();
-+ }
-+ obj.free();
-+
-+ for (i = 0; i < numArgs; ++i)
-+ args[i].free();
-+ numArgs = 0;
-+
-+ } else if (numArgs < maxArgs) {
-+ args[numArgs++] = obj;
-+ } else {
-+ obj.free();
-+ }
-+
-+ myParser.getObj(&obj);
-+ }
-+ obj.free();
-+
-+ if (numArgs > 0) {
-+ for (i = 0; i < numArgs; ++i)
-+ args[i].free();
-+ }
-+
-+ return onlyNormalBlendMode;
-+}
-+
-+
- GBool Gfx::checkTransparencyGroup(Dict *resDict) {
- // check the effect of compositing objects as a group:
- // look for ExtGState entries with ca != 1 or CA != 1 or BM != normal
-diff -rup a/poppler/Gfx.h b/poppler/Gfx.h
---- a/poppler/Gfx.h 2015-11-16 05:05:22.000000000 +0800
-+++ b/poppler/Gfx.h 2018-05-18 21:21:13.000000000 +0800
-@@ -186,6 +186,9 @@ public:
- // Get the current graphics state object.
- GfxState *getState() { return state; }
-
-+ // Check whether a stream only contains normal blend mode (to enable subpixel rendering)
-+ GBool checkNormalBlendModeOnly(Object *str);
-+
- GBool checkTransparencyGroup(Dict *resDict);
-
- void drawForm(Object *str, Dict *resDict, double *matrix, double *bbox,
-diff -rup a/poppler/Page.cc b/poppler/Page.cc
---- a/poppler/Page.cc 2016-02-07 20:41:06.000000000 +0800
-+++ b/poppler/Page.cc 2018-05-18 21:21:13.000000000 +0800
-@@ -370,6 +370,20 @@ Dict *Page::getResourceDictCopy(XRef *xr
- return dict ? dict->copy(xrefA) : NULL;
- }
-
-+GBool Page::supportSubpixelRendering(OutputDev *out) {
-+ GBool supported = gFalse;
-+ Object obj;
-+ PDFRectangle box;
-+
-+ contents.fetch(xref, &obj);
-+ if (!obj.isNull()) {
-+ Gfx gfx(doc, out, attrs->getResourceDict(), &box, NULL);
-+ supported = gfx.checkNormalBlendModeOnly(&obj);
-+ }
-+ obj.free();
-+ return supported;
-+}
-+
- void Page::replaceXRef(XRef *xrefA) {
- Object obj1;
- Dict *pageDict = pageObj.getDict()->copy(xrefA);
-diff -rup a/poppler/Page.h b/poppler/Page.h
---- a/poppler/Page.h 2015-11-16 05:05:22.000000000 +0800
-+++ b/poppler/Page.h 2018-05-18 21:21:13.000000000 +0800
-@@ -179,6 +179,9 @@ public:
- Dict *getResourceDict();
- Dict *getResourceDictCopy(XRef *xrefA);
-
-+ // Whether the content in this page supports subpixel rendering (lcdfilter)
-+ GBool supportSubpixelRendering(OutputDev *out);
-+
- // Get annotations array.
- Object *getAnnots(Object *obj, XRef *xrefA = NULL) { return annotsObj.fetch((xrefA == NULL) ? xref : xrefA, obj); }
- // Add a new annotation to the page
diff --git a/03-cairo-backend-for-poppler-qt5.patch b/03-cairo-backend-for-poppler-qt5.patch
deleted file mode 100644
index 0bcfbd1a9a4b..000000000000
--- a/03-cairo-backend-for-poppler-qt5.patch
+++ /dev/null
@@ -1,236 +0,0 @@
-From: Jeffrey Feng <galago1992@gmail.com>
-Subject: [PATCH 3/3] cairo backend for poppler-qt5
----
-diff -rup a/qt5 b/qt5|diffstat
- demos/viewer.cpp | 6 ++-
- src/CMakeLists.txt | 15 +++++++
- src/poppler-document.cc | 3 +
- src/poppler-page.cc | 83 +++++++++++++++++++++++++++++++++++++++++++++++-
- src/poppler-private.cc | 2 -
- src/poppler-qt5.h | 3 +
- tests/CMakeLists.txt | 4 ++
- 7 files changed, 112 insertions(+), 4 deletions(-)
-
-diff -rup a/qt5/demos/viewer.cpp b/qt5/demos/viewer.cpp
---- a/qt5/demos/viewer.cpp 2014-02-09 23:10:33.000000000 +0800
-+++ b/qt5/demos/viewer.cpp 2018-05-20 11:50:24.585847554 +0800
-@@ -74,13 +74,17 @@ PdfViewer::PdfViewer()
- m_settingsRenderBackendGrp->setExclusive(true);
- act = settingsRenderMenu->addAction(tr("Splash"));
- act->setCheckable(true);
-- act->setChecked(true);
- act->setData(qVariantFromValue(0));
- m_settingsRenderBackendGrp->addAction(act);
- act = settingsRenderMenu->addAction(tr("Arthur"));
- act->setCheckable(true);
- act->setData(qVariantFromValue(1));
- m_settingsRenderBackendGrp->addAction(act);
-+ act = settingsRenderMenu->addAction(tr("Cairo"));
-+ act->setCheckable(true);
-+ act->setChecked(true);
-+ act->setData(qVariantFromValue(2));
-+ m_settingsRenderBackendGrp->addAction(act);
- connect(m_settingsRenderBackendGrp, SIGNAL(triggered(QAction*)),
- this, SLOT(slotRenderBackend(QAction*)));
-
-diff -rup a/qt5/src/CMakeLists.txt b/qt5/src/CMakeLists.txt
---- a/qt5/src/CMakeLists.txt 2016-03-02 07:35:24.000000000 +0800
-+++ b/qt5/src/CMakeLists.txt 2018-05-19 11:01:30.000000000 +0800
-@@ -6,6 +6,10 @@ include_directories(
- ${Qt5Core_INCLUDE_DIRS}
- ${CMAKE_CURRENT_BINARY_DIR}
- )
-+if (HAVE_CAIRO)
-+ include_directories(${CAIRO_INCLUDE_DIRS})
-+ add_definitions(${CAIRO_CFLAGS})
-+endif (HAVE_CAIRO)
-
- set(poppler_qt5_SRCS
- poppler-annotation.cc
-@@ -29,9 +33,20 @@ set(poppler_qt5_SRCS
- poppler-media.cc
- ArthurOutputDev.cc
- )
-+if (HAVE_CAIRO)
-+ set(poppler_qt5_SRCS ${poppler_qt5_SRCS}
-+ ${CMAKE_SOURCE_DIR}/poppler/CairoOutputDev.cc
-+ ${CMAKE_SOURCE_DIR}/poppler/CairoRescaleBox.cc
-+ ${CMAKE_SOURCE_DIR}/poppler/CairoFontEngine.cc
-+ )
-+endif(HAVE_CAIRO)
- add_library(poppler-qt5 SHARED ${poppler_qt5_SRCS})
-+set_target_properties(poppler-qt5 PROPERTIES OUTPUT_NAME "poppler-qt5-lcd")
- set_target_properties(poppler-qt5 PROPERTIES VERSION 1.6.0 SOVERSION 1)
- target_link_libraries(poppler-qt5 poppler ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Xml_LIBRARIES})
-+if (HAVE_CAIRO)
-+ target_link_libraries(poppler-qt5 ${CAIRO_LIBRARIES})
-+endif (HAVE_CAIRO)
- if(MSVC)
- target_link_libraries(poppler-qt5 poppler ${poppler_LIBS})
- endif(MSVC)
-diff -rup a/qt5/src/poppler-document.cc b/qt5/src/poppler-document.cc
---- a/qt5/src/poppler-document.cc 2015-09-08 23:34:57.000000000 +0800
-+++ b/qt5/src/poppler-document.cc 2018-05-19 11:04:11.000000000 +0800
-@@ -528,6 +528,9 @@ namespace Poppler {
- ret << Document::SplashBackend;
- #endif
- ret << Document::ArthurBackend;
-+#if defined(HAVE_CAIRO)
-+ ret << Document::CairoBackend;
-+#endif
- return ret;
- }
-
-diff -rup a/qt5/src/poppler-page.cc b/qt5/src/poppler-page.cc
---- a/qt5/src/poppler-page.cc 2016-04-29 05:58:39.000000000 +0800
-+++ b/qt5/src/poppler-page.cc 2018-05-20 12:26:07.000000000 +0800
-@@ -41,6 +41,7 @@
- #include <QtGui/QPainter>
-
- #include <config.h>
-+#include <math.h>
- #include <PDFDoc.h>
- #include <Catalog.h>
- #include <Form.h>
-@@ -54,7 +55,9 @@
- #include <SplashOutputDev.h>
- #include <splash/SplashBitmap.h>
- #endif
--
-+#if defined(HAVE_CAIRO)
-+#include <CairoOutputDev.h>
-+#endif
- #include "poppler-private.h"
- #include "poppler-page-transition-private.h"
- #include "poppler-page-private.h"
-@@ -406,6 +409,82 @@ QImage Page::renderToImage(double xres,
- img = tmpimg;
- break;
- }
-+ case Poppler::Document::CairoBackend:
-+ {
-+#if defined(HAVE_CAIRO)
-+ CairoOutputDev *output_dev = new CairoOutputDev();
-+ output_dev->startDoc(m_page->parentDoc->doc);
-+ int buffer_width, buffer_height, rotate;
-+ cairo_surface_t *surface;
-+ cairo_t *cairo;
-+ cairo_font_options_t *fo;
-+ GBool subpixel_rendering;
-+ // If w or h are -1, that indicates the whole page, so we need to
-+ // calculate how many pixels that corresponds to. Otherwise, we can use w
-+ // or h directly for our buffer size.
-+ const QSize pageSize = this->pageSize();
-+ if (w == -1) {
-+ const double xscale = xres / 72.0;
-+ const double width = pageSize.width();;
-+ buffer_width = (int) ceil(width * xscale);
-+ } else {
-+ buffer_width = w;
-+ }
-+ if (h == -1) {
-+ const double yscale = yres / 72.0;
-+ const double height = pageSize.height();
-+ buffer_height = (int) ceil(height * yscale);
-+ } else {
-+ buffer_height = h;
-+ }
-+
-+ rotate = rotation + m_page->page->getRotate();
-+
-+ // FIXME: Okular never provides a rotation value, so I don't have any way
-+ // of testing this right now. The result is that subpixels are ordered
-+ // incorrectly when the page is rotated.
-+
-+ //if (rotate == 90 || rotate == 270) {
-+ // const double temp = height;
-+ // height = width;
-+ // width = temp;
-+ //}
-+
-+ img = QImage(buffer_width, buffer_height, QImage::Format_ARGB32);
-+ img.fill(Qt::white); // Never transparent
-+
-+ surface = cairo_image_surface_create_for_data(
-+ img.bits(),
-+ CAIRO_FORMAT_ARGB32,
-+ buffer_width, buffer_height,
-+ img.bytesPerLine());
-+
-+ cairo = cairo_create(surface);
-+ fo = cairo_font_options_create ();
-+ cairo_get_font_options (cairo, fo);
-+ subpixel_rendering = m_page->page->supportSubpixelRendering (output_dev);
-+ if (subpixel_rendering) {
-+ cairo_set_source_rgb (cairo, 1., 1., 1.);
-+ cairo_font_options_set_antialias (fo, CAIRO_ANTIALIAS_SUBPIXEL);
-+ cairo_font_options_set_subpixel_order (fo, CAIRO_SUBPIXEL_ORDER_RGB);
-+ }
-+ cairo_set_font_options (cairo, fo);
-+ cairo_font_options_destroy (fo);
-+
-+ output_dev->setCairo(cairo);
-+
-+ m_page->parentDoc->doc->displayPageSlice(
-+ output_dev, m_page->index + 1, xres, yres, rotation, false, true,
-+ false, x, y, w, h);
-+
-+ // Clean up
-+ output_dev->setCairo(NULL);
-+ cairo_destroy(cairo);
-+ cairo_surface_destroy(surface);
-+ delete output_dev;
-+#endif
-+ break;
-+ }
- }
-
- return img;
-@@ -448,6 +527,8 @@ bool Page::renderToPainter(QPainter* pai
- painter->restore();
- return true;
- }
-+ case Poppler::Document::CairoBackend:
-+ return false;
- }
- return false;
- }
-diff -rup a/qt5/src/poppler-private.cc b/qt5/src/poppler-private.cc
---- a/qt5/src/poppler-private.cc 2015-09-08 23:31:07.000000000 +0800
-+++ b/qt5/src/poppler-private.cc 2018-05-19 12:25:04.000000000 +0800
-@@ -234,7 +234,7 @@ namespace Debug {
-
- void DocumentData::init()
- {
-- m_backend = Document::SplashBackend;
-+ m_backend = Document::CairoBackend;
- paperColor = Qt::white;
- m_hints = 0;
- m_optContentModel = 0;
-diff -rup a/qt5/src/poppler-qt5.h b/qt5/src/poppler-qt5.h
---- a/qt5/src/poppler-qt5.h 2015-09-02 05:46:49.000000000 +0800
-+++ b/qt5/src/poppler-qt5.h 2018-05-19 11:12:36.000000000 +0800
-@@ -876,7 +876,8 @@ delete it;
- */
- enum RenderBackend {
- SplashBackend, ///< Splash backend
-- ArthurBackend ///< Arthur (Qt) backend
-+ ArthurBackend, ///< Arthur (Qt) backend
-+ CairoBackend ///< Cairo backend
- };
-
- /**
-diff -rup a/qt5/tests/CMakeLists.txt b/qt5/tests/CMakeLists.txt
---- a/qt5/tests/CMakeLists.txt 2016-03-02 07:35:24.000000000 +0800
-+++ b/qt5/tests/CMakeLists.txt 2018-05-20 11:46:08.806858043 +0800
-@@ -10,6 +10,10 @@ include_directories(
- ${Qt5Xml_INCLUDE_DIRS}
- ${Qt5Widgets_INCLUDE_DIRS}
- )
-+if (HAVE_CAIRO)
-+ include_directories(${CAIRO_INCLUDE_DIRS})
-+ add_definitions(${CAIRO_CFLAGS})
-+endif (HAVE_CAIRO)
-
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Gui_EXECUTABLE_COMPILE_FLAGS}")
diff --git a/PKGBUILD b/PKGBUILD
index f255006fdfc6..430c9ab05113 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -2,9 +2,9 @@
pkgname=evince-lcd-standalone
_pkgname=evince
-pkgver=3.31.91
+pkgver=3.32.0
pkgrel=1
-pkgdesc="Document viewer (PDF, Postscript, djvu, etc.) with built-in LCD subpixel rendering support"
+pkgdesc="Document viewer (PDF, Postscript, djvu, etc.) with built-in LCD subpixel rendering"
url="https://wiki.gnome.org/Apps/Evince"
arch=(x86_64)
license=(GPL)
@@ -13,7 +13,7 @@ depends=('gtk3' 'libgxps' 'libspectre' 'gsfonts' 'djvulibre' 't1lib' 'dconf'
'gst-plugins-base-libs' 'gspell' 'libsynctex')
makedepends=('itstool' 'libnautilus-extension' 'texlive-bin' 'gobject-introspection'
'intltool' 'docbook-xsl' 'gtk-doc' 'gnome-common' 'git' 'python'
- 'python2' 'libjpeg' 'gcc-libs' 'cairo' 'fontconfig' 'openjpeg' 'gtk2'
+ 'python2' 'libjpeg' 'gcc-libs' 'cairo' 'fontconfig' 'gtk2'
'qt4' 'qt5-base' 'icu' 'pkgconfig' 'lcms2')
optdepends=('texlive-bin: DVI support'
'gvfs: bookmark support and session saving')
@@ -21,17 +21,13 @@ provides=("evince=$pkgver")
conflicts=('evince' 'evince-lcdfilter')
groups=(gnome)
options=('!emptydirs')
-_commit=ae8a46449c65aa274c6a1ebd4b1f057e552517a3
-source=("git+https://git.gnome.org/browse/evince#commit=$_commit"
- "https://poppler.freedesktop.org/poppler-0.43.0.tar.xz"
- 01-evince-subpixel-rendering-by-poppler.patch
- 02-subpixel-rendering-for-poppler-and-glib.patch
- 03-cairo-backend-for-poppler-qt5.patch)
+_commit=10da4bcec1cdd535a267e4b8e971668a47f0138b # tags/3.32.0^0
+source=("git+https://gitlab.gnome.org/GNOME/evince.git#commit=$_commit"
+ "https://poppler.freedesktop.org/poppler-0.76.0.tar.xz"
+ "git+https://github.com/jonathanffon/poppler-lcd-patch.git")
sha256sums=('SKIP'
- 'SKIP'
- '65c35d86787021cccee99082ad15cb06e0e865384f9a05aa3523a8aec1229af6'
- '73c0fb71877633cefc37b13bcd7896263dc63b91fe13fa97c2c240292a2bc338'
- 'c554b9411764ffcad7a91e22f78a594ca9851e631c70ec15a2b0d52bada0573c')
+ '370f5fcfe2bbf0c76fc394d338cd72ed7f2044b67f4eb4b115eb074ccfc70d63'
+ 'SKIP')
pkgver() {
cd $_pkgname
@@ -46,30 +42,30 @@ prepare() {
build() {
#patch poppler
- cd poppler-0.43.0
- patch -Np1<../02-subpixel-rendering-for-poppler-and-glib.patch
- patch -Np1<../03-cairo-backend-for-poppler-qt5.patch
+ cd $srcdir/poppler-0.76.0
+ for patch in `ls ../poppler-lcd-patch/*.patch`; do
+ patch -p1<$patch
+ done
- # poppler > 0.43 fails to work with LCD subpixel rendering patch.
+ # build poppler
cd $srcdir
- mkdir -p build&&cd $_
- cmake ../poppler-0.43.0 -DENABLE_XPDF_HEADERS=ON -DENABLE_LIBOPENJPEG=FALSE
- make DESTDIR="$srcdir" install
+ mkdir -p pbuild&&cd $_
+ cmake ../poppler-0.76.0 \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_INSTALL_PREFIX=$srcdir/usr/local \
+ -DCMAKE_INSTALL_LIBDIR=$srcdir/usr/local/lib \
+ -DENABLE_UNSTABLE_API_ABI_HEADERS=ON \
+ -DBUILD_GTK_TESTS=OFF -DBUILD_QT4_TESTS=OFF \
+ -DBUILD_QT5_TESTS=OFF -DBUILD_CPP_TESTS=OFF
+ make install
- # rename shared libraries to resolve conflicts with existing poppler installation.
- cd $srcdir/usr/local/lib
- rm `find . -type l`
- mv libpoppler-lcd.so.60.0.0 libpoppler-lcd.so.60
- mv libpoppler-glib-lcd.so.8.7.0 libpoppler-glib-lcd.so.8
-
- # patch evince and build
+ # Build evince with subpixel patched poppler-0.76
cd $srcdir/$_pkgname
- patch -Np1<../01-evince-subpixel-rendering-by-poppler.patch
sed -i 's#$(BACKEND_LIBTOOL_FLAGS)#& -Wl,-rpath -Wl,/usr/lib/evince/poppler-lcd#' ./backend/pdf/Makefile.am
BROWSER_PLUGIN_DIR=/usr/lib/epiphany/plugins \
POPPLER_CFLAGS="-I$srcdir/usr/local/include/poppler/glib -I$srcdir/usr/local/include/poppler `pkg-config --cflags glib-2.0 gobject-2.0 cairo libxml-2.0`" \
- POPPLER_LIBS="-L$srcdir/usr/local/lib -l:libpoppler-glib-lcd.so.8 -l:libpoppler-lcd.so.60 `pkg-config --libs glib-2.0 gobject-2.0 cairo libxml-2.0`" \
+ POPPLER_LIBS="-L$srcdir/usr/local/lib -l:libpoppler-glib.so.8 -l:libpoppler.so.87 `pkg-config --libs glib-2.0 gobject-2.0 cairo libxml-2.0`" \
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
--libexecdir=/usr/lib/$_pkgname \
--disable-static \
@@ -94,5 +90,5 @@ package() {
make DESTDIR="$pkgdir" install
libdir=$pkgdir/usr/lib/evince/poppler-lcd
mkdir -p $libdir
- cp "$srcdir/usr/local/lib/libpoppler"{-glib-lcd.so.8,-lcd.so.60} $libdir
+ cp "$srcdir/usr/local/lib/libpoppler"{-glib.so.8,.so.87} $libdir
}