diff --git a/gui/pdfworker.cpp b/gui/pdfworker.cpp index c3875aa..0eeb4c3 100644 --- a/gui/pdfworker.cpp +++ b/gui/pdfworker.cpp @@ -18,27 +18,14 @@ struct Renderer double scaleX; double scaleY; QHash documentcache; - qsizetype maxTotalPreviewImageMemUsage; - std::atomic currentTotalPreviewImageMemUsage{0}; QVector wordsToHighlight; - Renderer(double scaleX, double scaleY, qsizetype maxPreviewImageMemUsage, QVector wordsToHighlight) + Renderer(double scaleX, double scaleY, QVector wordsToHighlight) { this->scaleX = scaleX; this->scaleY = scaleY; - this->maxTotalPreviewImageMemUsage = maxPreviewImageMemUsage; this->wordsToHighlight = wordsToHighlight; } - /*we need this one because std::atomic has none, but this is only a functor for - concurrentmap, thus, it's ok for it to be half-broken*/ - Renderer(const Renderer &o) - { - this->scaleX = o.scaleX; - this->scaleY = o.scaleY; - this->maxTotalPreviewImageMemUsage = o.maxTotalPreviewImageMemUsage; - this->wordsToHighlight = o.wordsToHighlight; - } - ~Renderer() { qDeleteAll(documentcache); @@ -47,8 +34,9 @@ struct Renderer Poppler::Document *document(QString path) { if(documentcache.contains(path)) + { return documentcache.value(path); - + } Poppler::Document *result = Poppler::Document::load(path); if(result == nullptr) { @@ -64,37 +52,33 @@ struct Renderer PdfPreview operator()(const PdfPreview &preview) { PdfPreview result = preview; - if(currentTotalPreviewImageMemUsage.load() < maxTotalPreviewImageMemUsage) + Poppler::Document *doc = document(preview.documentPath); + if(doc == nullptr) { - Poppler::Document *doc = document(preview.documentPath); - if(doc == nullptr) - { - return preview; - } - if(doc->isLocked()) - { - return preview; - } - int p = (int)preview.page - 1; - if(p < 0) - { - p = 0; - } - Poppler::Page *pdfPage = doc->page(p); - QImage img = pdfPage->renderToImage(scaleX, scaleY); - for(QString &word : wordsToHighlight) - { - QList rects = pdfPage->search(word, Poppler::Page::CaseInsensitive); - for(QRectF &rect : rects) - { - QPainter painter(&img); - painter.scale(scaleX / 72.0, scaleY / 72.0); - painter.fillRect(rect, QColor(255, 255, 0, 64)); - } - } - result.previewImage = img; - currentTotalPreviewImageMemUsage += img.sizeInBytes(); + return preview; } + if(doc->isLocked()) + { + return preview; + } + int p = (int)preview.page - 1; + if(p < 0) + { + p = 0; + } + Poppler::Page *pdfPage = doc->page(p); + QImage img = pdfPage->renderToImage(scaleX, scaleY); + for(QString &word : wordsToHighlight) + { + QList rects = pdfPage->search(word, Poppler::Page::CaseInsensitive); + for(QRectF &rect : rects) + { + QPainter painter(&img); + painter.scale(scaleX / 72.0, scaleY / 72.0); + painter.fillRect(rect, QColor(255, 255, 0, 64)); + } + } + result.previewImage = img; return result; } }; @@ -119,6 +103,5 @@ QFuture PdfWorker::generatePreviews(const QVector path double scaleY = QGuiApplication::primaryScreen()->physicalDotsPerInchY() * scalefactor; QSettings setting; - qsizetype maxPreviewImageMemUsage = setting.value("maxpreviewimagesmemory", 1024 * 1024 * 1024).toLongLong(); - return QtConcurrent::mapped(previews, Renderer(scaleX, scaleY, maxPreviewImageMemUsage, wordsToHighlight)); + return QtConcurrent::mapped(previews, Renderer(scaleX, scaleY, wordsToHighlight)); }