summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan2019-04-27 12:25:47 +0800
committerJonathan2019-04-27 12:25:47 +0800
commita46bd78f8b82d36f7a2003ebe6b105f157ece28c (patch)
tree0046c5cddf299b6eee1849c23570ba989ad05d58
parent4ba4bbaa74543565e5b2f254e785c0044d06b9fb (diff)
downloadaur-a46bd78f8b82d36f7a2003ebe6b105f157ece28c.tar.gz
Upgrade integrated subpixel-patched poppler to the latest version 0.76.
-rw-r--r--.SRCINFO19
-rw-r--r--01-okular-subpixel-rendering-by-poppler.patch42
-rw-r--r--02-subpixel-rendering-for-poppler-and-glib.patch309
-rw-r--r--03-cairo-backend-for-poppler-qt5.patch236
-rw-r--r--PKGBUILD51
5 files changed, 52 insertions, 605 deletions
diff --git a/.SRCINFO b/.SRCINFO
index c5a0c4989650..236f0186a965 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,6 +1,6 @@
pkgbase = okular-lcd-standalone
- pkgdesc = KDE Document viewer (PDF, Postscript, djvu, etc.) with built-in LCD subpixel rendering support
- pkgver = 18.12.3
+ pkgdesc = Document viewer (PDF, Postscript, djvu, etc.) with built-in LCD subpixel rendering
+ pkgver = 19.04.0
pkgrel = 1
url = https://kde.org/applications/graphics/okular/
arch = x86_64
@@ -26,7 +26,6 @@ pkgbase = okular-lcd-standalone
makedepends = gcc-libs
makedepends = cairo
makedepends = fontconfig
- makedepends = openjpeg
makedepends = pkgconfig
makedepends = lcms2
makedepends = gobject-introspection
@@ -58,16 +57,14 @@ pkgbase = okular-lcd-standalone
replaces = kdegraphics-okular
replaces = okular
replaces = okular-git
- source = git+https://github.com/KDE/okular#commit=cdac709ed710b8240a22e103c83c258e228b6cbc
- source = https://poppler.freedesktop.org/poppler-0.43.0.tar.xz
+ source = https://download.kde.org/stable/applications/19.04.0/src/okular-19.04.0.tar.xz
+ source = https://poppler.freedesktop.org/poppler-0.76.0.tar.xz
+ source = git+https://github.com/jonathanffon/poppler-lcd-patch.git
source = 01-okular-subpixel-rendering-by-poppler.patch
- source = 02-subpixel-rendering-for-poppler-and-glib.patch
- source = 03-cairo-backend-for-poppler-qt5.patch
+ sha256sums = 1947b394dfd8da9c7cc4234e308e2476ffa44dc58542d246eafc8397d8991b6e
+ sha256sums = 370f5fcfe2bbf0c76fc394d338cd72ed7f2044b67f4eb4b115eb074ccfc70d63
sha256sums = SKIP
- sha256sums = SKIP
- sha256sums = 4d44bfc0f34a3e26f2d1cc6f5a99cf4199c7a13ae5e1ed57c4b875703328d525
- sha256sums = 73c0fb71877633cefc37b13bcd7896263dc63b91fe13fa97c2c240292a2bc338
- sha256sums = c554b9411764ffcad7a91e22f78a594ca9851e631c70ec15a2b0d52bada0573c
+ sha256sums = 7d9c083519cb6239b8cde57413ec02f6d48afd6c692757fef6feeb9498fcb787
pkgname = okular-lcd-standalone
diff --git a/01-okular-subpixel-rendering-by-poppler.patch b/01-okular-subpixel-rendering-by-poppler.patch
index daf738c941ed..24de94cf2be8 100644
--- a/01-okular-subpixel-rendering-by-poppler.patch
+++ b/01-okular-subpixel-rendering-by-poppler.patch
@@ -1,16 +1,14 @@
From: Jeffrey Feng <galago1992@gmail.com>
-Subject: [PATCH 1/3] okular LCD subpixel rendering by poppler
+Subject: okular LCD subpixel rendering by poppler
---
-git diff --stat
- CMakeLists.txt | 7 +++----
+ CMakeLists.txt | 9 +++++----
generators/poppler/CMakeLists.txt | 9 +++++++--
- 2 files changed, 10 insertions(+), 6 deletions(-)
+ 2 files changed, 12 insertions(+), 6 deletions(-)
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index d067039e0..aa60b226d 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -92,10 +92,8 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules)
+diff -ru a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt 2019-04-27 09:12:24.161327890 +0800
++++ b/CMakeLists.txt 2019-04-27 09:39:31.871255641 +0800
+@@ -113,10 +113,9 @@
find_package(ZLIB REQUIRED)
# This is here instead of in generators since we use if(Poppler_Qt5_FOUND) in autotests/
@@ -18,24 +16,25 @@ index d067039e0..aa60b226d 100644
-set_package_properties("Poppler" PROPERTIES
- TYPE RECOMMENDED
- PURPOSE "Support for PDF files in okular.")
++# Use standalone subpixel-patched poppler-0.76 for PDF files.")
+set(Poppler_Qt5_FOUND 1)
-+set(Poppler_VERSION "0.43.0")
++set(Poppler_VERSION "0.76.0")
- add_definitions(-DQT_USE_FAST_CONCATENATION -DQT_USE_FAST_OPERATOR_PLUS)
+ add_definitions(-DQT_USE_FAST_OPERATOR_PLUS)
add_definitions(-DTRANSLATION_DOMAIN="okular")
-@@ -116,6 +114,7 @@ if(BUILD_COVERAGE)
+@@ -140,6 +139,8 @@
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lgcov")
endif()
++# Always link to standalone patched poppler library
+STRING(REGEX REPLACE "--as-needed" "--no-as-needed" CMAKE_MODULE_LINKER_FLAGS ${CMAKE_MODULE_LINKER_FLAGS})
add_subdirectory( ui )
add_subdirectory( shell )
-diff --git a/generators/poppler/CMakeLists.txt b/generators/poppler/CMakeLists.txt
-index 73881f0e1..5e90efed8 100644
---- a/generators/poppler/CMakeLists.txt
-+++ b/generators/poppler/CMakeLists.txt
-@@ -19,7 +19,7 @@ if (Poppler_VERSION VERSION_GREATER "0.36.99")
+diff -ru a/generators/poppler/CMakeLists.txt b/generators/poppler/CMakeLists.txt
+--- a/generators/poppler/CMakeLists.txt 2019-04-27 09:47:44.217900447 +0800
++++ b/generators/poppler/CMakeLists.txt 2019-04-27 10:51:48.444707284 +0800
+@@ -19,7 +19,7 @@
set (HAVE_POPPLER_0_37 1)
endif()
@@ -44,7 +43,7 @@ index 73881f0e1..5e90efed8 100644
check_cxx_source_compiles("
#include <poppler-qt5.h>
-@@ -89,6 +89,8 @@ configure_file(
+@@ -142,6 +142,8 @@
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/../..
@@ -53,15 +52,16 @@ index 73881f0e1..5e90efed8 100644
)
########### next target ###############
-@@ -107,7 +109,10 @@ kconfig_add_kcfg_files(okularGenerator_poppler_PART_SRCS conf/pdfsettings.kcfgc
+@@ -161,7 +163,10 @@
okular_add_generator(okularGenerator_poppler ${okularGenerator_poppler_PART_SRCS})
-target_link_libraries(okularGenerator_poppler okularcore KF5::I18n KF5::Completion Poppler::Qt5 Qt5::Xml)
-+set(POPPLER_LIB ${POPPLER_LIB_DIR}/libpoppler-lcd.so)
-+set(POPPLER_QT5_LIB ${POPPLER_LIB_DIR}/libpoppler-qt5-lcd.so)
++set(POPPLER_LIB ${POPPLER_LIB_DIR}/libpoppler.so)
++set(POPPLER_QT5_LIB ${POPPLER_LIB_DIR}/libpoppler-qt5.so)
+set_target_properties(okularGenerator_poppler PROPERTIES INSTALL_RPATH ${POPPLER_LIB_RPATH})
+target_link_libraries(okularGenerator_poppler okularcore KF5::I18n KF5::Completion ${POPPLER_QT5_LIB} ${POPPLER_LIB} Qt5::Xml)
########### install files ###############
install( FILES okularPoppler.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR} )
+
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 d3a4c99827d4..805a6f8a62a8 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,17 +1,17 @@
# Maintainer: Jeffrey Feng <galago1992@gmail.com>
pkgname=okular-lcd-standalone
-_pkgname=okular
-pkgver=18.12.3
+_pkgname=okular-$pkgver
+pkgver=19.04.0
pkgrel=1
-pkgdesc='KDE 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'
arch=(x86_64)
url="https://kde.org/applications/graphics/okular/"
license=(GPL LGPL FDL)
groups=(kde-applications kdegraphics)
depends=(djvulibre libspectre libkexiv2 qca kpty kactivities threadweaver kjs kparts purpose discount phonon-qt5)
makedepends=(extra-cmake-modules ebook-tools kdegraphics-mobipocket kdoctools khtml chmlib discount git qt4
- qt5-base icu gtk2 python2 libjpeg gcc-libs cairo fontconfig openjpeg pkgconfig lcms2 gobject-introspection)
+ qt5-base icu gtk2 python2 libjpeg gcc-libs cairo fontconfig pkgconfig lcms2 gobject-introspection)
optdepends=('ebook-tools: mobi and epub support'
'kdegraphics-mobipocket: mobi support' 'kirigami2: mobile UI' 'libzip: CHM support'
'khtml: CHM support' 'chmlib: CHM support' 'calligra: ODT and ODP support'
@@ -19,38 +19,33 @@ optdepends=('ebook-tools: mobi and epub support'
conflicts=(kdegraphics-okular okular okular-git)
provides=(okular)
replaces=(kdegraphics-okular okular okular-git)
-_commit=cdac709ed710b8240a22e103c83c258e228b6cbc
-source=("git+https://github.com/KDE/okular#commit=$_commit"
- "https://poppler.freedesktop.org/poppler-0.43.0.tar.xz"
- 01-okular-subpixel-rendering-by-poppler.patch
- 02-subpixel-rendering-for-poppler-and-glib.patch
- 03-cairo-backend-for-poppler-qt5.patch)
-sha256sums=('SKIP'
+source=("https://download.kde.org/stable/applications/$pkgver/src/okular-$pkgver.tar.xz"
+ "https://poppler.freedesktop.org/poppler-0.76.0.tar.xz"
+ "git+https://github.com/jonathanffon/poppler-lcd-patch.git"
+ 01-okular-subpixel-rendering-by-poppler.patch)
+sha256sums=('1947b394dfd8da9c7cc4234e308e2476ffa44dc58542d246eafc8397d8991b6e'
+ '370f5fcfe2bbf0c76fc394d338cd72ed7f2044b67f4eb4b115eb074ccfc70d63'
'SKIP'
- '4d44bfc0f34a3e26f2d1cc6f5a99cf4199c7a13ae5e1ed57c4b875703328d525'
- '73c0fb71877633cefc37b13bcd7896263dc63b91fe13fa97c2c240292a2bc338'
- 'c554b9411764ffcad7a91e22f78a594ca9851e631c70ec15a2b0d52bada0573c')
-pkgver() {
- cd $_pkgname
- git describe --tags | sed 's/v//g'
-}
+ '7d9c083519cb6239b8cde57413ec02f6d48afd6c692757fef6feeb9498fcb787')
build() {
# patch okular
- cd $srcdir/$_pkgname
+ cd $srcdir/okular-$pkgver
patch -Np1<../01-okular-subpixel-rendering-by-poppler.patch
#patch poppler
- cd $srcdir/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
- # build poppler (poppler > 0.43 fails to work with LCD subpixel rendering patch)
+ # build poppler
cd $srcdir
mkdir -p pbuild&&cd $_
- cmake ../poppler-0.43.0 \
+ cmake ../poppler-0.76.0 \
+ -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$srcdir/usr/local \
- -DENABLE_XPDF_HEADERS=ON \
- -DENABLE_LIBOPENJPEG=FALSE \
+ -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
@@ -58,7 +53,7 @@ build() {
# build okular
cd $srcdir
mkdir -p build&&cd $_
- cmake ../$_pkgname \
+ cmake ../okular-$pkgver \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_LIBDIR=lib \
-DBUILD_TESTING=OFF \
@@ -72,5 +67,5 @@ package() {
make DESTDIR="$pkgdir" install
libdir=$pkgdir/usr/lib/qt/plugins/okular/poppler-lcd
mkdir -p $libdir
- cp "$srcdir/usr/local/lib/libpoppler-"{qt5-lcd.so.1,lcd.so.60} $libdir
+ cp "$srcdir/usr/local/lib/libpoppler"{-qt5.so.1,.so.87} $libdir
}