include/vcl/VectorGraphicSearch.hxx        |    6 ++---
 vcl/source/graphic/VectorGraphicSearch.cxx |   33 +++++++++++++++++++++--------
 2 files changed, 28 insertions(+), 11 deletions(-)

New commits:
commit 78a8e2c75b8c370b5c1b9f41de5df02174a47e23
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Fri May 15 12:20:42 2020 +0200
Commit:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
CommitDate: Fri May 15 12:20:42 2020 +0200

    vcl: Add internal "Implementation" class for VectorGraphicSearch
    
    We need to hide includes (needed for members) of PDFium inside
    from the outside, so not everyone using the VectorGraphicSearch
    needs to depend on PDFium too.
    
    Change-Id: I95e46c714758b130594d78a4618af7350e29a075

diff --git a/include/vcl/VectorGraphicSearch.hxx 
b/include/vcl/VectorGraphicSearch.hxx
index 3411d0a931e6..6c2589db1d01 100644
--- a/include/vcl/VectorGraphicSearch.hxx
+++ b/include/vcl/VectorGraphicSearch.hxx
@@ -14,8 +14,6 @@
 #include <vcl/vectorgraphicdata.hxx>
 #include <vcl/dllapi.h>
 
-#include <fpdf_doc.h>
-
 #include <memory>
 
 class SearchContext;
@@ -23,9 +21,11 @@ class SearchContext;
 class VCL_DLLPUBLIC VectorGraphicSearch final
 {
 private:
+    class Implementation;
+    std::unique_ptr<Implementation> mpImplementation;
     Graphic maGraphic;
-    FPDF_DOCUMENT mpPdfDocument;
     std::unique_ptr<SearchContext> mpSearchContext;
+
     bool searchPDF(std::shared_ptr<VectorGraphicData> const& rData, OUString 
const& rSearchString);
 
 public:
diff --git a/vcl/source/graphic/VectorGraphicSearch.cxx 
b/vcl/source/graphic/VectorGraphicSearch.cxx
index 864c65f2dda2..34ac0abd6654 100644
--- a/vcl/source/graphic/VectorGraphicSearch.cxx
+++ b/vcl/source/graphic/VectorGraphicSearch.cxx
@@ -11,8 +11,26 @@
 #include <sal/config.h>
 #include <vcl/VectorGraphicSearch.hxx>
 
+#include <fpdf_doc.h>
 #include <fpdf_text.h>
 
+class VectorGraphicSearch::Implementation
+{
+public:
+    FPDF_DOCUMENT mpPdfDocument;
+
+    Implementation()
+        : mpPdfDocument(nullptr)
+    {
+    }
+
+    ~Implementation()
+    {
+        if (mpPdfDocument)
+            FPDF_CloseDocument(mpPdfDocument);
+    }
+};
+
 class SearchContext
 {
 public:
@@ -78,8 +96,8 @@ public:
 };
 
 VectorGraphicSearch::VectorGraphicSearch(Graphic const& rGraphic)
-    : maGraphic(rGraphic)
-    , mpPdfDocument(nullptr)
+    : mpImplementation(std::make_unique<VectorGraphicSearch::Implementation>())
+    , maGraphic(rGraphic)
 {
     FPDF_LIBRARY_CONFIG aConfig;
     aConfig.version = 2;
@@ -92,9 +110,7 @@ VectorGraphicSearch::VectorGraphicSearch(Graphic const& 
rGraphic)
 VectorGraphicSearch::~VectorGraphicSearch()
 {
     mpSearchContext.reset();
-
-    if (mpPdfDocument)
-        FPDF_CloseDocument(mpPdfDocument);
+    mpImplementation.reset();
     FPDF_DestroyLibrary();
 }
 
@@ -115,11 +131,11 @@ bool 
VectorGraphicSearch::searchPDF(std::shared_ptr<VectorGraphicData> const& rD
     if (rSearchString.isEmpty())
         return false;
 
-    mpPdfDocument
+    mpImplementation->mpPdfDocument
         = 
FPDF_LoadMemDocument(rData->getVectorGraphicDataArray().getConstArray(),
                                rData->getVectorGraphicDataArrayLength(), 
/*password=*/nullptr);
 
-    if (!mpPdfDocument)
+    if (!mpImplementation->mpPdfDocument)
     {
         //TODO: Handle failure to load.
         switch (FPDF_GetLastError())
@@ -146,7 +162,8 @@ bool 
VectorGraphicSearch::searchPDF(std::shared_ptr<VectorGraphicData> const& rD
 
     sal_Int32 nPageIndex = std::max(rData->getPageIndex(), 0);
 
-    mpSearchContext.reset(new SearchContext(mpPdfDocument, nPageIndex, 
rSearchString));
+    mpSearchContext.reset(
+        new SearchContext(mpImplementation->mpPdfDocument, nPageIndex, 
rSearchString));
 
     return mpSearchContext->initialize();
 }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to