diff options
-rw-r--r-- | include/vcl/filter/PDFiumLibrary.hxx | 15 | ||||
-rw-r--r-- | vcl/source/graphic/VectorGraphicSearch.cxx | 19 | ||||
-rw-r--r-- | vcl/source/pdf/PDFiumLibrary.cxx | 11 |
3 files changed, 35 insertions, 10 deletions
diff --git a/include/vcl/filter/PDFiumLibrary.hxx b/include/vcl/filter/PDFiumLibrary.hxx index 0fbcf4fe2199..418feede99b6 100644 --- a/include/vcl/filter/PDFiumLibrary.hxx +++ b/include/vcl/filter/PDFiumLibrary.hxx @@ -149,6 +149,21 @@ public: virtual bool getDrawMode(PDFFillMode& eFillMode, bool& bStroke) = 0; }; +class VCL_DLLPUBLIC PDFiumSearchHandle final +{ +private: + FPDF_SCHHANDLE mpSearchHandle; + + PDFiumSearchHandle(const PDFiumSearchHandle&) = delete; + PDFiumSearchHandle& operator=(const PDFiumSearchHandle&) = delete; + +public: + PDFiumSearchHandle(FPDF_SCHHANDLE pSearchHandle); + ~PDFiumSearchHandle(); + + FPDF_SCHHANDLE getPointer() { return mpSearchHandle; } +}; + class VCL_DLLPUBLIC PDFiumTextPage final { private: diff --git a/vcl/source/graphic/VectorGraphicSearch.cxx b/vcl/source/graphic/VectorGraphicSearch.cxx index 083dc6cf2741..3ac33db37cc3 100644 --- a/vcl/source/graphic/VectorGraphicSearch.cxx +++ b/vcl/source/graphic/VectorGraphicSearch.cxx @@ -30,7 +30,7 @@ private: std::unique_ptr<vcl::pdf::PDFiumDocument>& mpPdfDocument; std::unique_ptr<vcl::pdf::PDFiumPage> mpPage; std::unique_ptr<vcl::pdf::PDFiumTextPage> mpTextPage; - FPDF_SCHHANDLE mpSearchHandle; + std::unique_ptr<vcl::pdf::PDFiumSearchHandle> mpSearchHandle; public: sal_Int32 mnPageIndex; @@ -40,7 +40,6 @@ public: SearchContext(std::unique_ptr<vcl::pdf::PDFiumDocument>& pPdfDocument, sal_Int32 nPageIndex) : mpPdfDocument(pPdfDocument) - , mpSearchHandle(nullptr) , mnPageIndex(nPageIndex) , mnCurrentIndex(-1) { @@ -49,7 +48,7 @@ public: ~SearchContext() { if (mpSearchHandle) - FPDFText_FindClose(mpSearchHandle); + mpSearchHandle.reset(); if (mpTextPage) mpTextPage.reset(); if (mpPage) @@ -77,7 +76,7 @@ public: return true; if (mpSearchHandle) - FPDFText_FindClose(mpSearchHandle); + mpSearchHandle.reset(); if (mpTextPage) mpTextPage.reset(); @@ -114,15 +113,15 @@ public: if (maOptions.mbMatchWholeWord) nSearchFlags |= FPDF_MATCHWHOLEWORD; - mpSearchHandle - = FPDFText_FindStart(mpTextPage->getPointer(), pString, nSearchFlags, nStartIndex); + mpSearchHandle = std::make_unique<vcl::pdf::PDFiumSearchHandle>( + FPDFText_FindStart(mpTextPage->getPointer(), pString, nSearchFlags, nStartIndex)); return mpSearchHandle != nullptr; } bool next() { - if (mpSearchHandle && FPDFText_FindNext(mpSearchHandle)) + if (mpSearchHandle && FPDFText_FindNext(mpSearchHandle->getPointer())) { mnCurrentIndex = index(); return true; @@ -132,7 +131,7 @@ public: bool previous() { - if (mpSearchHandle && FPDFText_FindPrev(mpSearchHandle)) + if (mpSearchHandle && FPDFText_FindPrev(mpSearchHandle->getPointer())) { mnCurrentIndex = index(); return true; @@ -143,14 +142,14 @@ public: int index() { if (mpSearchHandle) - return FPDFText_GetSchResultIndex(mpSearchHandle); + return FPDFText_GetSchResultIndex(mpSearchHandle->getPointer()); return -1; } int size() { if (mpSearchHandle) - return FPDFText_GetSchCount(mpSearchHandle); + return FPDFText_GetSchCount(mpSearchHandle->getPointer()); return -1; } diff --git a/vcl/source/pdf/PDFiumLibrary.cxx b/vcl/source/pdf/PDFiumLibrary.cxx index 886549031596..fce8d4d539bd 100644 --- a/vcl/source/pdf/PDFiumLibrary.cxx +++ b/vcl/source/pdf/PDFiumLibrary.cxx @@ -1100,6 +1100,17 @@ unsigned int PDFiumTextPage::getUnicode(int index) return FPDFText_GetUnicode(mpTextPage, index); } +PDFiumSearchHandle::PDFiumSearchHandle(FPDF_SCHHANDLE pSearchHandle) + : mpSearchHandle(pSearchHandle) +{ +} + +PDFiumSearchHandle::~PDFiumSearchHandle() +{ + if (mpSearchHandle) + FPDFText_FindClose(mpSearchHandle); +} + } // end vcl::pdf #endif // HAVE_FEATURE_PDFIUM |