include/vcl/filter/PDFiumLibrary.hxx | 28 +++++++----------- vcl/source/pdf/PDFiumLibrary.cxx | 54 +++++++++++++++++++++++++---------- 2 files changed, 51 insertions(+), 31 deletions(-)
New commits: commit ff2a8e6c28650cdd361fa99e6e5d4782ad56c330 Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Tue Dec 8 21:07:35 2020 +0100 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Wed Dec 9 09:24:03 2020 +0100 pdfium: rework to eliminate FPDF_BITMAP from the public interface Change-Id: I8be708d801ebaebc7d1b42bbaa6afa29901b4f5b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107438 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmik...@collabora.com> diff --git a/include/vcl/filter/PDFiumLibrary.hxx b/include/vcl/filter/PDFiumLibrary.hxx index 6e952d4fc17b..1c0ccf581343 100644 --- a/include/vcl/filter/PDFiumLibrary.hxx +++ b/include/vcl/filter/PDFiumLibrary.hxx @@ -70,25 +70,19 @@ public: class PDFiumPage; -class VCL_DLLPUBLIC PDFiumBitmap final +class VCL_DLLPUBLIC PDFiumBitmap { -private: - FPDF_BITMAP mpBitmap; - - PDFiumBitmap(const PDFiumBitmap&) = delete; - PDFiumBitmap& operator=(const PDFiumBitmap&) = delete; - public: - PDFiumBitmap(FPDF_BITMAP pBitmap); - ~PDFiumBitmap(); - FPDF_BITMAP getPointer() { return mpBitmap; } - void fillRect(int left, int top, int width, int height, sal_uInt32 nColor); - void renderPageBitmap(PDFiumPage* pPage, int nStartX, int nStartY, int nSizeX, int nSizeY); - ConstScanline getBuffer(); - int getStride(); - int getWidth(); - int getHeight(); - PDFBitmapType getFormat(); + virtual ~PDFiumBitmap() = default; + virtual void fillRect(int left, int top, int width, int height, sal_uInt32 nColor) = 0; + virtual void renderPageBitmap(PDFiumPage* pPage, int nStartX, int nStartY, int nSizeX, + int nSizeY) + = 0; + virtual ConstScanline getBuffer() = 0; + virtual int getStride() = 0; + virtual int getWidth() = 0; + virtual int getHeight() = 0; + virtual PDFBitmapType getFormat() = 0; }; class VCL_DLLPUBLIC PDFiumAnnotation final diff --git a/vcl/source/pdf/PDFiumLibrary.cxx b/vcl/source/pdf/PDFiumLibrary.cxx index 00a3167bfa36..cf435ac419c8 100644 --- a/vcl/source/pdf/PDFiumLibrary.cxx +++ b/vcl/source/pdf/PDFiumLibrary.cxx @@ -85,6 +85,32 @@ int CompatibleWriterCallback(FPDF_FILEWRITE* pFileWrite, const void* pData, unsi namespace vcl::pdf { +namespace +{ +class PDFiumBitmapImpl final : public PDFiumBitmap +{ +private: + FPDF_BITMAP mpBitmap; + + PDFiumBitmapImpl(const PDFiumBitmapImpl&) = delete; + PDFiumBitmapImpl& operator=(const PDFiumBitmapImpl&) = delete; + +public: + PDFiumBitmapImpl(FPDF_BITMAP pBitmap); + ~PDFiumBitmapImpl() override; + FPDF_BITMAP getPointer() { return mpBitmap; } + + void fillRect(int left, int top, int width, int height, sal_uInt32 nColor) override; + void renderPageBitmap(PDFiumPage* pPage, int nStartX, int nStartY, int nSizeX, + int nSizeY) override; + ConstScanline getBuffer() override; + int getStride() override; + int getWidth() override; + int getHeight() override; + PDFBitmapType getFormat() override; +}; +} + OUString convertPdfDateToISO8601(OUString const& rInput) { if (rInput.getLength() < 6) @@ -208,7 +234,7 @@ std::unique_ptr<PDFiumBitmap> PDFium::createBitmap(int nWidth, int nHeight, int } else { - pPDFiumBitmap = std::make_unique<PDFiumBitmap>(pPdfBitmap); + pPDFiumBitmap = std::make_unique<PDFiumBitmapImpl>(pPdfBitmap); } return pPDFiumBitmap; } @@ -560,7 +586,7 @@ std::unique_ptr<PDFiumBitmap> PDFiumPageObject::getImageBitmap() FPDF_BITMAP pBitmap = FPDFImageObj_GetBitmap(mpPageObject); if (pBitmap) { - pPDFiumBitmap = std::make_unique<PDFiumBitmap>(pBitmap); + pPDFiumBitmap = std::make_unique<PDFiumBitmapImpl>(pBitmap); } return pPDFiumBitmap; } @@ -569,8 +595,8 @@ BitmapChecksum PDFiumPage::getChecksum(int nMDPPerm) { size_t nPageWidth = getWidth(); size_t nPageHeight = getHeight(); - auto pPdfBitmap - = std::make_unique<PDFiumBitmap>(FPDFBitmap_Create(nPageWidth, nPageHeight, /*alpha=*/1)); + auto pPdfBitmap = std::make_unique<PDFiumBitmapImpl>( + FPDFBitmap_Create(nPageWidth, nPageHeight, /*alpha=*/1)); if (!pPdfBitmap) { return 0; @@ -629,12 +655,12 @@ PDFSegmentType PDFiumPathSegment::getType() const return static_cast<PDFSegmentType>(FPDFPathSegment_GetType(mpPathSegment)); } -PDFiumBitmap::PDFiumBitmap(FPDF_BITMAP pBitmap) +PDFiumBitmapImpl::PDFiumBitmapImpl(FPDF_BITMAP pBitmap) : mpBitmap(pBitmap) { } -PDFiumBitmap::~PDFiumBitmap() +PDFiumBitmapImpl::~PDFiumBitmapImpl() { if (mpBitmap) { @@ -642,30 +668,30 @@ PDFiumBitmap::~PDFiumBitmap() } } -void PDFiumBitmap::fillRect(int left, int top, int width, int height, sal_uInt32 nColor) +void PDFiumBitmapImpl::fillRect(int left, int top, int width, int height, sal_uInt32 nColor) { FPDFBitmap_FillRect(mpBitmap, left, top, width, height, nColor); } -void PDFiumBitmap::renderPageBitmap(PDFiumPage* pPage, int nStartX, int nStartY, int nSizeX, - int nSizeY) +void PDFiumBitmapImpl::renderPageBitmap(PDFiumPage* pPage, int nStartX, int nStartY, int nSizeX, + int nSizeY) { FPDF_RenderPageBitmap(mpBitmap, pPage->getPointer(), nStartX, nStartY, nSizeX, nSizeY, /*rotate=*/0, /*flags=*/0); } -ConstScanline PDFiumBitmap::getBuffer() +ConstScanline PDFiumBitmapImpl::getBuffer() { return static_cast<ConstScanline>(FPDFBitmap_GetBuffer(mpBitmap)); } -int PDFiumBitmap::getStride() { return FPDFBitmap_GetStride(mpBitmap); } +int PDFiumBitmapImpl::getStride() { return FPDFBitmap_GetStride(mpBitmap); } -int PDFiumBitmap::getWidth() { return FPDFBitmap_GetWidth(mpBitmap); } +int PDFiumBitmapImpl::getWidth() { return FPDFBitmap_GetWidth(mpBitmap); } -int PDFiumBitmap::getHeight() { return FPDFBitmap_GetHeight(mpBitmap); } +int PDFiumBitmapImpl::getHeight() { return FPDFBitmap_GetHeight(mpBitmap); } -PDFBitmapType PDFiumBitmap::getFormat() +PDFBitmapType PDFiumBitmapImpl::getFormat() { return static_cast<PDFBitmapType>(FPDFBitmap_GetFormat(mpBitmap)); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits