diff --git a/CHANGELOG.md b/CHANGELOG.md index 8de31e0e..61147e86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ Version counting is based on semantic versioning (Major.Feature.Patch) ### All apps * Run logger in a dedicated thread to avoid segfaults at application shutdown +* Add support for poppler-qt6 pdf backend ## 9.10 diff --git a/YACReaderLibrary/initial_comic_info_extractor.cpp b/YACReaderLibrary/initial_comic_info_extractor.cpp index 2d889f4c..763907f5 100644 --- a/YACReaderLibrary/initial_comic_info_extractor.cpp +++ b/YACReaderLibrary/initial_comic_info_extractor.cpp @@ -27,38 +27,31 @@ void InitialComicInfoExtractor::extract() #ifndef NO_PDF if (fi.suffix().compare("pdf", Qt::CaseInsensitive) == 0) { #if defined Q_OS_MAC && defined USE_PDFKIT - MacOSXPDFComic *pdfComic = new MacOSXPDFComic(); + auto pdfComic = std::make_unique(); if (!pdfComic->openComic(_fileSource)) { - delete pdfComic; - // QImage p; - // p.load(":/images/notCover.png"); - // p.save(_target); return; } #elif defined USE_PDFIUM - auto pdfComic = new PdfiumComic(); + auto pdfComic = std::make_unique(); if (!pdfComic->openComic(_fileSource)) { - delete pdfComic; return; } #else - Poppler::Document *pdfComic = Poppler::Document::load(_fileSource); +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + auto pdfComic = Poppler::Document::load(_fileSource); +#else + auto _pdfComic = Poppler::Document::load(_fileSource); + auto pdfComic = std::unique_ptr(_pdfComic); +#endif #endif - if (!pdfComic) { QLOG_WARN() << "Extracting cover: unable to open PDF file " << _fileSource; - // delete pdfComic; //TODO check if the delete is needed - pdfComic = 0; - // QImage p; - // p.load(":/images/notCover.png"); - // p.save(_target); return; } #if !defined USE_PDFKIT && !defined USE_PDFIUM // poppler only, not mac if (pdfComic->isLocked()) { QLOG_WARN() << "Extracting cover: unable to open PDF file " << _fileSource; - delete pdfComic; return; } #endif @@ -75,11 +68,7 @@ void InitialComicInfoExtractor::extract() saveCover(_target, p); } else if (_target != "") { QLOG_WARN() << "Extracting cover: requested cover index greater than numPages " << _fileSource; - // QImage p; - // p.load(":/images/notCover.png"); - // p.save(_target); } - delete pdfComic; } return; } diff --git a/common/comic.cpp b/common/comic.cpp index 69882fae..059c6203 100644 --- a/common/comic.cpp +++ b/common/comic.cpp @@ -796,24 +796,27 @@ bool PDFComic::load(const QString &path, const ComicDB &comic) void PDFComic::process() { #if defined Q_OS_MAC && defined USE_PDFKIT - pdfComic = new MacOSXPDFComic(); + pdfComic = std::make_unique(); if (!pdfComic->openComic(_path)) { - delete pdfComic; emit errorOpening(); return; } #elif defined USE_PDFIUM - pdfComic = new PdfiumComic(); + pdfComic = std::make_unique(); if (!pdfComic->openComic(_path)) { - delete pdfComic; emit errorOpening(); return; } #else + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) pdfComic = Poppler::Document::load(_path); +#else + auto _pdfComic = Poppler::Document::load(_path); + pdfComic = std::unique_ptr(_pdfComic); +#endif + if (!pdfComic) { - // delete pdfComic; - // pdfComic = 0; moveToThread(QCoreApplication::instance()->thread()); emit errorOpening(); return; @@ -824,7 +827,6 @@ void PDFComic::process() return; } - // pdfComic->setRenderHint(Poppler::Document::Antialiasing, true); pdfComic->setRenderHint(Poppler::Document::TextAntialiasing, true); #endif @@ -853,7 +855,6 @@ void PDFComic::process() int buffered_index = _index; for (int i = buffered_index; i < nPages; i++) { if (_invalidated) { - delete pdfComic; moveToThread(QCoreApplication::instance()->thread()); return; } @@ -862,14 +863,12 @@ void PDFComic::process() } for (int i = 0; i < buffered_index; i++) { if (_invalidated) { - delete pdfComic; moveToThread(QCoreApplication::instance()->thread()); return; } renderPage(i); } - delete pdfComic; moveToThread(QCoreApplication::instance()->thread()); emit imagesLoaded(); } @@ -883,10 +882,9 @@ void PDFComic::renderPage(int page) QImage img = pdfComic->getPage(page); if (!img.isNull()) { #else - Poppler::Page *pdfpage = pdfComic->page(page); + std::unique_ptr pdfpage(pdfComic->page(page)); if (pdfpage) { QImage img = pdfpage->renderToImage(150, 150); - delete pdfpage; #endif QByteArray ba; QBuffer buf(&ba); diff --git a/common/comic.h b/common/comic.h index a64da6f5..ae753a4c 100644 --- a/common/comic.h +++ b/common/comic.h @@ -12,7 +12,7 @@ #include "pdf_comic.h" #endif // NO_PDF class ComicDB; -//#define EXTENSIONS << "*.jpg" << "*.jpeg" << "*.png" << "*.gif" << "*.tiff" << "*.tif" << "*.bmp" Comic::getSupportedImageFormats() + //#define EXTENSIONS_LITERAL << ".jpg" << ".jpeg" << ".png" << ".gif" << ".tiff" << ".tif" << ".bmp" //Comic::getSupportedImageLiteralFormats() class Comic : public QObject { @@ -165,13 +165,14 @@ class PDFComic : public Comic private: // pdf #if defined Q_OS_MAC && defined USE_PDFKIT - MacOSXPDFComic *pdfComic; + std::unique_ptr pdfComic; #elif defined USE_PDFIUM - PdfiumComic *pdfComic; + std::unique_ptr pdfComic; #else - Poppler::Document *pdfComic; + std::unique_ptr pdfComic; #endif void renderPage(int page); + // void run(); public: diff --git a/common/pdf_comic.h b/common/pdf_comic.h index 13febf5c..f2d8ff8c 100644 --- a/common/pdf_comic.h +++ b/common/pdf_comic.h @@ -5,6 +5,7 @@ #include #include #include +#include #if defined Q_OS_MAC && defined USE_PDFKIT class MacOSXPDFComic @@ -45,6 +46,10 @@ private: QFile pdfFile; }; #else +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +#include +#else #include "poppler-qt5.h" +#endif // QT_VERSION #endif // Q_OS_MAC #endif // PDF_COMIC_H diff --git a/dependencies/pdf_backend.pri b/dependencies/pdf_backend.pri index a14885bb..0905ede6 100644 --- a/dependencies/pdf_backend.pri +++ b/dependencies/pdf_backend.pri @@ -55,18 +55,31 @@ CONFIG(poppler) { LIBS += -L$$PWD/poppler/dependencies/bin } if(unix|mingw):!macx { - !contains(QT_CONFIG, no-pkg-config):packagesExist(poppler-qt5) { - message("Using system provided installation of poppler-qt5 found by pkg-config.") - CONFIG += link_pkgconfig - PKGCONFIG += poppler-qt5 - } else:!macx:exists(/usr/include/poppler/qt5) { - message("Using system provided installation of poppler-qt5.") - INCLUDEPATH += /usr/include/poppler/qt5 - LIBS += -lpoppler-qt5 + greaterThan (QT_MAJOR_VERSION, 5) { + !contains(QT_CONFIG, no-pkg-config):packagesExist(poppler-qt6) { + message("Using system provided installation of poppler-qt6 found by pkg-config.") + CONFIG += link_pkgconfig + PKGCONFIG += poppler-qt6 + } else:!macx:exists(/usr/include/poppler/qt6) { + message("Using system provided installation of poppler-qt6.") + INCLUDEPATH += /usr/include/poppler/qt6 + LIBS += -lpoppler-qt6 + } else { + error("Could not find poppler-qt6") + } } else { - error("Could not find poppler-qt5") + !contains(QT_CONFIG, no-pkg-config):packagesExist(poppler-qt5) { + message("Using system provided installation of poppler-qt5 found by pkg-config.") + CONFIG += link_pkgconfig + PKGCONFIG += poppler-qt5 + } else:!macx:exists(/usr/include/poppler/qt5) { + message("Using system provided installation of poppler-qt5.") + INCLUDEPATH += /usr/include/poppler/qt5 + LIBS += -lpoppler-qt5 + } else { + error("Could not find poppler-qt5") + } } - } unix:macx { error (Poppler backend is currently not supported on macOS)