diff options
author | Jonathan | 2019-04-27 12:25:47 +0800 |
---|---|---|
committer | Jonathan | 2019-04-27 12:25:47 +0800 |
commit | a46bd78f8b82d36f7a2003ebe6b105f157ece28c (patch) | |
tree | 0046c5cddf299b6eee1849c23570ba989ad05d58 | |
parent | 4ba4bbaa74543565e5b2f254e785c0044d06b9fb (diff) | |
download | aur-a46bd78f8b82d36f7a2003ebe6b105f157ece28c.tar.gz |
Upgrade integrated subpixel-patched poppler to the latest version 0.76.
-rw-r--r-- | .SRCINFO | 19 | ||||
-rw-r--r-- | 01-okular-subpixel-rendering-by-poppler.patch | 42 | ||||
-rw-r--r-- | 02-subpixel-rendering-for-poppler-and-glib.patch | 309 | ||||
-rw-r--r-- | 03-cairo-backend-for-poppler-qt5.patch | 236 | ||||
-rw-r--r-- | PKGBUILD | 51 |
5 files changed, 52 insertions, 605 deletions
@@ -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}") @@ -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 } |