[Libreoffice-commits] core.git: include/vcl vcl/source

Miklos Vajna (via logerrit) logerrit at kemper.freedesktop.org
Thu Jan 7 08:06:14 UTC 2021


 include/vcl/filter/PDFiumLibrary.hxx |   47 ++++++++-------------
 vcl/source/pdf/PDFiumLibrary.cxx     |   77 +++++++++++++++++++++++++----------
 2 files changed, 74 insertions(+), 50 deletions(-)

New commits:
commit 6bb6eb1692d7dd432103d0e7278534390084caf6
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Wed Jan 6 21:05:04 2021 +0100
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Thu Jan 7 09:05:30 2021 +0100

    pdfium: rework to eliminate FPDF_ANNOTATION from the public interface
    
    Change-Id: Ib11213f0307cd215b71e3da08468be6e82e2eb55
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108914
    Tested-by: Jenkins
    Reviewed-by: Miklos Vajna <vmiklos at collabora.com>

diff --git a/include/vcl/filter/PDFiumLibrary.hxx b/include/vcl/filter/PDFiumLibrary.hxx
index 3509c1d77d5a..e32466b9bf13 100644
--- a/include/vcl/filter/PDFiumLibrary.hxx
+++ b/include/vcl/filter/PDFiumLibrary.hxx
@@ -86,36 +86,27 @@ public:
     virtual PDFBitmapType getFormat() = 0;
 };
 
-class VCL_DLLPUBLIC PDFiumAnnotation final
+class VCL_DLLPUBLIC PDFiumAnnotation
 {
-private:
-    FPDF_ANNOTATION mpAnnotation;
-
-    PDFiumAnnotation(const PDFiumAnnotation&) = delete;
-    PDFiumAnnotation& operator=(const PDFiumAnnotation&) = delete;
-
 public:
-    PDFiumAnnotation(FPDF_ANNOTATION pAnnotation);
-    ~PDFiumAnnotation();
-    FPDF_ANNOTATION getPointer() { return mpAnnotation; }
-
-    PDFAnnotationSubType getSubType();
-    basegfx::B2DRectangle getRectangle();
-    bool hasKey(OString const& rKey);
-    PDFObjectType getValueType(OString const& rKey);
-    OUString getString(OString const& rKey);
-    std::unique_ptr<PDFiumAnnotation> getLinked(OString const& rKey);
-    int getObjectCount();
-    std::unique_ptr<PDFiumPageObject> getObject(int nIndex);
-    std::vector<std::vector<basegfx::B2DPoint>> getInkStrokes();
-    std::vector<basegfx::B2DPoint> getVertices();
-    Color getColor();
-    Color getInteriorColor();
-    float getBorderWidth();
-    basegfx::B2DSize getBorderCornerRadius();
-    size_t getAttachmentPointsCount();
-    std::vector<basegfx::B2DPoint> getAttachmentPoints(size_t nIndex);
-    std::vector<basegfx::B2DPoint> getLineGeometry();
+    virtual ~PDFiumAnnotation() = default;
+    virtual PDFAnnotationSubType getSubType() = 0;
+    virtual basegfx::B2DRectangle getRectangle() = 0;
+    virtual bool hasKey(OString const& rKey) = 0;
+    virtual PDFObjectType getValueType(OString const& rKey) = 0;
+    virtual OUString getString(OString const& rKey) = 0;
+    virtual std::unique_ptr<PDFiumAnnotation> getLinked(OString const& rKey) = 0;
+    virtual int getObjectCount() = 0;
+    virtual std::unique_ptr<PDFiumPageObject> getObject(int nIndex) = 0;
+    virtual std::vector<std::vector<basegfx::B2DPoint>> getInkStrokes() = 0;
+    virtual std::vector<basegfx::B2DPoint> getVertices() = 0;
+    virtual Color getColor() = 0;
+    virtual Color getInteriorColor() = 0;
+    virtual float getBorderWidth() = 0;
+    virtual basegfx::B2DSize getBorderCornerRadius() = 0;
+    virtual size_t getAttachmentPointsCount() = 0;
+    virtual std::vector<basegfx::B2DPoint> getAttachmentPoints(size_t nIndex) = 0;
+    virtual std::vector<basegfx::B2DPoint> getLineGeometry() = 0;
 };
 
 class PDFiumTextPage;
diff --git a/vcl/source/pdf/PDFiumLibrary.cxx b/vcl/source/pdf/PDFiumLibrary.cxx
index a75b2b92d62f..dbae22b07bdc 100644
--- a/vcl/source/pdf/PDFiumLibrary.cxx
+++ b/vcl/source/pdf/PDFiumLibrary.cxx
@@ -146,6 +146,38 @@ public:
     bool isClosed() const override;
     PDFSegmentType getType() const override;
 };
+
+class PDFiumAnnotationImpl final : public PDFiumAnnotation
+{
+private:
+    FPDF_ANNOTATION mpAnnotation;
+
+    PDFiumAnnotationImpl(const PDFiumAnnotationImpl&) = delete;
+    PDFiumAnnotationImpl& operator=(const PDFiumAnnotationImpl&) = delete;
+
+public:
+    PDFiumAnnotationImpl(FPDF_ANNOTATION pAnnotation);
+    ~PDFiumAnnotationImpl();
+    FPDF_ANNOTATION getPointer() { return mpAnnotation; }
+
+    PDFAnnotationSubType getSubType() override;
+    basegfx::B2DRectangle getRectangle() override;
+    bool hasKey(OString const& rKey) override;
+    PDFObjectType getValueType(OString const& rKey) override;
+    OUString getString(OString const& rKey) override;
+    std::unique_ptr<PDFiumAnnotation> getLinked(OString const& rKey) override;
+    int getObjectCount() override;
+    std::unique_ptr<PDFiumPageObject> getObject(int nIndex) override;
+    std::vector<std::vector<basegfx::B2DPoint>> getInkStrokes() override;
+    std::vector<basegfx::B2DPoint> getVertices() override;
+    Color getColor() override;
+    Color getInteriorColor() override;
+    float getBorderWidth() override;
+    basegfx::B2DSize getBorderCornerRadius() override;
+    size_t getAttachmentPointsCount() override;
+    std::vector<basegfx::B2DPoint> getAttachmentPoints(size_t nIndex) override;
+    std::vector<basegfx::B2DPoint> getLineGeometry() override;
+};
 }
 
 OUString convertPdfDateToISO8601(OUString const& rInput)
@@ -454,7 +486,8 @@ int PDFiumPage::getAnnotationCount() { return FPDFPage_GetAnnotCount(mpPage); }
 
 int PDFiumPage::getAnnotationIndex(std::unique_ptr<PDFiumAnnotation> const& rAnnotation)
 {
-    return FPDFPage_GetAnnotIndex(mpPage, rAnnotation->getPointer());
+    auto pAnnotation = static_cast<PDFiumAnnotationImpl*>(rAnnotation.get());
+    return FPDFPage_GetAnnotIndex(mpPage, pAnnotation->getPointer());
 }
 
 std::unique_ptr<PDFiumAnnotation> PDFiumPage::getAnnotation(int nIndex)
@@ -463,7 +496,7 @@ std::unique_ptr<PDFiumAnnotation> PDFiumPage::getAnnotation(int nIndex)
     FPDF_ANNOTATION pAnnotation = FPDFPage_GetAnnot(mpPage, nIndex);
     if (pAnnotation)
     {
-        pPDFiumAnnotation = std::make_unique<PDFiumAnnotation>(pAnnotation);
+        pPDFiumAnnotation = std::make_unique<PDFiumAnnotationImpl>(pAnnotation);
     }
     return pPDFiumAnnotation;
 }
@@ -740,23 +773,23 @@ PDFBitmapType PDFiumBitmapImpl::getFormat()
     return static_cast<PDFBitmapType>(FPDFBitmap_GetFormat(mpBitmap));
 }
 
-PDFiumAnnotation::PDFiumAnnotation(FPDF_ANNOTATION pAnnotation)
+PDFiumAnnotationImpl::PDFiumAnnotationImpl(FPDF_ANNOTATION pAnnotation)
     : mpAnnotation(pAnnotation)
 {
 }
 
-PDFiumAnnotation::~PDFiumAnnotation()
+PDFiumAnnotationImpl::~PDFiumAnnotationImpl()
 {
     if (mpAnnotation)
         FPDFPage_CloseAnnot(mpAnnotation);
 }
 
-PDFAnnotationSubType PDFiumAnnotation::getSubType()
+PDFAnnotationSubType PDFiumAnnotationImpl::getSubType()
 {
     return PDFAnnotationSubType(FPDFAnnot_GetSubtype(mpAnnotation));
 }
 
-basegfx::B2DRectangle PDFiumAnnotation::getRectangle()
+basegfx::B2DRectangle PDFiumAnnotationImpl::getRectangle()
 {
     basegfx::B2DRectangle aB2DRectangle;
     FS_RECTF aRect;
@@ -767,7 +800,7 @@ basegfx::B2DRectangle PDFiumAnnotation::getRectangle()
     return aB2DRectangle;
 }
 
-Color PDFiumAnnotation::getColor()
+Color PDFiumAnnotationImpl::getColor()
 {
     Color aColor = COL_TRANSPARENT;
     unsigned int nR, nG, nB, nA;
@@ -778,7 +811,7 @@ Color PDFiumAnnotation::getColor()
     return aColor;
 }
 
-Color PDFiumAnnotation::getInteriorColor()
+Color PDFiumAnnotationImpl::getInteriorColor()
 {
     Color aColor = COL_TRANSPARENT;
     unsigned int nR, nG, nB, nA;
@@ -789,12 +822,12 @@ Color PDFiumAnnotation::getInteriorColor()
     return aColor;
 }
 
-size_t PDFiumAnnotation::getAttachmentPointsCount()
+size_t PDFiumAnnotationImpl::getAttachmentPointsCount()
 {
     return FPDFAnnot_CountAttachmentPoints(mpAnnotation);
 }
 
-std::vector<basegfx::B2DPoint> PDFiumAnnotation::getAttachmentPoints(size_t nIndex)
+std::vector<basegfx::B2DPoint> PDFiumAnnotationImpl::getAttachmentPoints(size_t nIndex)
 {
     std::vector<basegfx::B2DPoint> aQuads;
 
@@ -809,7 +842,7 @@ std::vector<basegfx::B2DPoint> PDFiumAnnotation::getAttachmentPoints(size_t nInd
     return aQuads;
 }
 
-std::vector<basegfx::B2DPoint> PDFiumAnnotation::getLineGeometry()
+std::vector<basegfx::B2DPoint> PDFiumAnnotationImpl::getLineGeometry()
 {
     std::vector<basegfx::B2DPoint> aLine;
     FS_POINTF aStart;
@@ -841,7 +874,7 @@ bool getBorderProperties(FPDF_ANNOTATION mpAnnotation, float& rHorizontalCornerR
 }
 }
 
-float PDFiumAnnotation::getBorderWidth()
+float PDFiumAnnotationImpl::getBorderWidth()
 {
     float fHorizontalCornerRadius;
     float fVerticalCornerRadius;
@@ -853,7 +886,7 @@ float PDFiumAnnotation::getBorderWidth()
     return fBorderWidth;
 }
 
-basegfx::B2DSize PDFiumAnnotation::getBorderCornerRadius()
+basegfx::B2DSize PDFiumAnnotationImpl::getBorderCornerRadius()
 {
     float fHorizontalCornerRadius;
     float fVerticalCornerRadius;
@@ -865,17 +898,17 @@ basegfx::B2DSize PDFiumAnnotation::getBorderCornerRadius()
     return basegfx::B2DSize(fHorizontalCornerRadius, fVerticalCornerRadius);
 }
 
-bool PDFiumAnnotation::hasKey(OString const& rKey)
+bool PDFiumAnnotationImpl::hasKey(OString const& rKey)
 {
     return FPDFAnnot_HasKey(mpAnnotation, rKey.getStr());
 }
 
-PDFObjectType PDFiumAnnotation::getValueType(OString const& rKey)
+PDFObjectType PDFiumAnnotationImpl::getValueType(OString const& rKey)
 {
     return static_cast<PDFObjectType>(FPDFAnnot_GetValueType(mpAnnotation, rKey.getStr()));
 }
 
-OUString PDFiumAnnotation::getString(OString const& rKey)
+OUString PDFiumAnnotationImpl::getString(OString const& rKey)
 {
     OUString rString;
     unsigned long nSize = FPDFAnnot_GetStringValue(mpAnnotation, rKey.getStr(), nullptr, 0);
@@ -903,7 +936,7 @@ OUString PDFiumAnnotation::getString(OString const& rKey)
     return rString;
 }
 
-std::vector<std::vector<basegfx::B2DPoint>> PDFiumAnnotation::getInkStrokes()
+std::vector<std::vector<basegfx::B2DPoint>> PDFiumAnnotationImpl::getInkStrokes()
 {
     std::vector<std::vector<basegfx::B2DPoint>> aB2DPointList;
     int nInkStrokes = FPDFAnnot_GetInkListCount(mpAnnotation);
@@ -927,7 +960,7 @@ std::vector<std::vector<basegfx::B2DPoint>> PDFiumAnnotation::getInkStrokes()
     return aB2DPointList;
 }
 
-std::vector<basegfx::B2DPoint> PDFiumAnnotation::getVertices()
+std::vector<basegfx::B2DPoint> PDFiumAnnotationImpl::getVertices()
 {
     std::vector<basegfx::B2DPoint> aB2DPoints;
     int nPoints = FPDFAnnot_GetVertices(mpAnnotation, nullptr, 0);
@@ -943,20 +976,20 @@ std::vector<basegfx::B2DPoint> PDFiumAnnotation::getVertices()
     return aB2DPoints;
 }
 
-std::unique_ptr<PDFiumAnnotation> PDFiumAnnotation::getLinked(OString const& rKey)
+std::unique_ptr<PDFiumAnnotation> PDFiumAnnotationImpl::getLinked(OString const& rKey)
 {
     std::unique_ptr<PDFiumAnnotation> pPDFiumAnnotation;
     FPDF_ANNOTATION pAnnotation = FPDFAnnot_GetLinkedAnnot(mpAnnotation, rKey.getStr());
     if (pAnnotation)
     {
-        pPDFiumAnnotation = std::make_unique<PDFiumAnnotation>(pAnnotation);
+        pPDFiumAnnotation = std::make_unique<PDFiumAnnotationImpl>(pAnnotation);
     }
     return pPDFiumAnnotation;
 }
 
-int PDFiumAnnotation::getObjectCount() { return FPDFAnnot_GetObjectCount(mpAnnotation); }
+int PDFiumAnnotationImpl::getObjectCount() { return FPDFAnnot_GetObjectCount(mpAnnotation); }
 
-std::unique_ptr<PDFiumPageObject> PDFiumAnnotation::getObject(int nIndex)
+std::unique_ptr<PDFiumPageObject> PDFiumAnnotationImpl::getObject(int nIndex)
 {
     std::unique_ptr<PDFiumPageObject> pPDFiumPageObject;
     FPDF_PAGEOBJECT pPageObject = FPDFAnnot_GetObject(mpAnnotation, nIndex);


More information about the Libreoffice-commits mailing list