include/vcl/pdfread.hxx | 7 ++++++- vcl/inc/impgraph.hxx | 5 +++++ vcl/source/filter/ipdf/pdfread.cxx | 17 +++++++++++++---- vcl/source/gdi/impgraph.cxx | 20 ++++++++++++++------ vcl/source/gdi/vectorgraphicdata.cxx | 8 ++++---- 5 files changed, 42 insertions(+), 15 deletions(-)
New commits: commit 52bf1fcbc4b108e774dd579328def2b6019b8a0f Author: Tomaž Vajngerl <[email protected]> AuthorDate: Mon Dec 21 13:04:18 2020 +0900 Commit: Tomaž Vajngerl <[email protected]> CommitDate: Mon Dec 21 13:07:38 2020 +0900 ImplGraphic: set PrefSize, PrefMapMode without forcing a swap-in This adds methods to set the PrefSize, PrefMapMode directly with no forced swap-in. Change-Id: I52b424ffc920c5a760891672c1ef961c1b1c1b64 diff --git a/vcl/inc/impgraph.hxx b/vcl/inc/impgraph.hxx index 6a312a76d58e..86fa80606b8f 100644 --- a/vcl/inc/impgraph.hxx +++ b/vcl/inc/impgraph.hxx @@ -213,6 +213,11 @@ private: sal_Int32 getPageNumber() const; + // Set the pref size, but don't force swap-in + void setValuesForPrefSize(const Size& rPrefSize); + // Set the pref map mode, but don't force swap-in + void setValuesForPrefMapMod(const MapMode& rPrefMapMode); + public: void resetChecksum() { mnChecksum = 0; } bool swapIn(); diff --git a/vcl/source/gdi/impgraph.cxx b/vcl/source/gdi/impgraph.cxx index fec7c9654f4c..1ad21ab7c750 100644 --- a/vcl/source/gdi/impgraph.cxx +++ b/vcl/source/gdi/impgraph.cxx @@ -801,10 +801,8 @@ Size ImpGraphic::ImplGetPrefSize() const return aSize; } -void ImpGraphic::ImplSetPrefSize(const Size& rPrefSize) +void ImpGraphic::setValuesForPrefSize(const Size& rPrefSize) { - ensureAvailable(); - switch (meType) { case GraphicType::Bitmap: @@ -843,6 +841,12 @@ void ImpGraphic::ImplSetPrefSize(const Size& rPrefSize) } } +void ImpGraphic::ImplSetPrefSize(const Size& rPrefSize) +{ + ensureAvailable(); + setValuesForPrefSize(rPrefSize); +} + MapMode ImpGraphic::ImplGetPrefMapMode() const { MapMode aMapMode; @@ -887,10 +891,8 @@ MapMode ImpGraphic::ImplGetPrefMapMode() const return aMapMode; } -void ImpGraphic::ImplSetPrefMapMode(const MapMode& rPrefMapMode) +void ImpGraphic::setValuesForPrefMapMod(const MapMode& rPrefMapMode) { - ensureAvailable(); - switch (meType) { case GraphicType::Bitmap: @@ -926,6 +928,12 @@ void ImpGraphic::ImplSetPrefMapMode(const MapMode& rPrefMapMode) } } +void ImpGraphic::ImplSetPrefMapMode(const MapMode& rPrefMapMode) +{ + ensureAvailable(); + setValuesForPrefMapMod(rPrefMapMode); +} + sal_uLong ImpGraphic::ImplGetSizeBytes() const { if (mnSizeBytes > 0) commit e48fe07d7572790944689551169c7538e1ee0275 Author: Tomaž Vajngerl <[email protected]> AuthorDate: Tue Dec 15 17:01:01 2020 +0900 Commit: Tomaž Vajngerl <[email protected]> CommitDate: Mon Dec 21 12:59:55 2020 +0900 vcl: reverse the if statement in VectorGraphicData::getSizeBytes It makes more sense to fallback to an State::UNPARSED unless the condition is satisfied and not the other way around. Change-Id: I97c2792c8ddd293d99c6418ac0221b7331ee6b5c diff --git a/vcl/source/gdi/vectorgraphicdata.cxx b/vcl/source/gdi/vectorgraphicdata.cxx index 92d49e07de3e..a8134a60c852 100644 --- a/vcl/source/gdi/vectorgraphicdata.cxx +++ b/vcl/source/gdi/vectorgraphicdata.cxx @@ -278,15 +278,15 @@ void VectorGraphicData::ensureSequenceAndRange() mbSequenceCreated = true; } -auto VectorGraphicData::getSizeBytes() const -> std::pair<State, size_t> +std::pair<VectorGraphicData::State, size_t> VectorGraphicData::getSizeBytes() const { - if (maSequence.empty() && maVectorGraphicDataArray.hasElements()) + if (!maSequence.empty() && maVectorGraphicDataArray.hasElements()) { - return std::make_pair(State::UNPARSED, maVectorGraphicDataArray.getLength()); + return std::make_pair(State::PARSED, maVectorGraphicDataArray.getLength() + mNestedBitmapSize); } else { - return std::make_pair(State::PARSED, maVectorGraphicDataArray.getLength() + mNestedBitmapSize); + return std::make_pair(State::UNPARSED, maVectorGraphicDataArray.getLength()); } } commit 6273e8b9774649d5c19a8d7f9da9c56bbb7ded23 Author: Tomaž Vajngerl <[email protected]> AuthorDate: Tue Dec 15 16:54:46 2020 +0900 Commit: Tomaž Vajngerl <[email protected]> CommitDate: Mon Dec 21 12:59:49 2020 +0900 pdf: add a public function to load PDF as a VectorGraphicData This adds a public function that loads a PDF as a VectorGraphicData which essentially spilts the ImportPDF to general import as a VectorGraphicData and then creation of a new Graphic. This is needed so we can just load the VectorGraphicData independent to a Graphic itself, so we don't needlessly create a new Graphic instance in some cases. Change-Id: Ib5f570242da69a1537bfdf1054f8eb40ecead31b diff --git a/include/vcl/pdfread.hxx b/include/vcl/pdfread.hxx index b693c432302b..084bd3f913b5 100644 --- a/include/vcl/pdfread.hxx +++ b/include/vcl/pdfread.hxx @@ -34,7 +34,12 @@ VCL_DLLPUBLIC size_t RenderPDFBitmaps(const void* pBuffer, int nSize, std::vector<BitmapEx>& rBitmaps, size_t nFirstPage = 0, int nPages = 1, const basegfx::B2DTuple* pSizeHint = nullptr); -/// Imports a PDF stream into rGraphic as VectorGraphicData. +/// Imports a PDF stream as a VectorGraphicData. +VCL_DLLPUBLIC bool +importPdfVectorGraphicData(SvStream& rStream, + std::shared_ptr<VectorGraphicData>& rVectorGraphicData); + +/// Imports a PDF stream into rGraphic. VCL_DLLPUBLIC bool ImportPDF(SvStream& rStream, Graphic& rGraphic); struct PDFGraphicAnnotation diff --git a/vcl/source/filter/ipdf/pdfread.cxx b/vcl/source/filter/ipdf/pdfread.cxx index ef5d799fe4ee..dbfa5ceeaf68 100644 --- a/vcl/source/filter/ipdf/pdfread.cxx +++ b/vcl/source/filter/ipdf/pdfread.cxx @@ -230,7 +230,8 @@ size_t RenderPDFBitmaps(const void* pBuffer, int nSize, std::vector<BitmapEx>& r #endif // HAVE_FEATURE_PDFIUM } -bool ImportPDF(SvStream& rStream, Graphic& rGraphic) +bool importPdfVectorGraphicData(SvStream& rStream, + std::shared_ptr<VectorGraphicData>& rVectorGraphicData) { VectorGraphicDataArray aPdfDataArray = createVectorGraphicDataArray(rStream); if (!aPdfDataArray.hasElements()) @@ -239,10 +240,18 @@ bool ImportPDF(SvStream& rStream, Graphic& rGraphic) return false; } - auto aVectorGraphicDataPtr = std::make_shared<VectorGraphicData>(aPdfDataArray, OUString(), - VectorGraphicDataType::Pdf); + rVectorGraphicData = std::make_shared<VectorGraphicData>(aPdfDataArray, OUString(), + VectorGraphicDataType::Pdf); + + return true; +} - rGraphic = Graphic(aVectorGraphicDataPtr); +bool ImportPDF(SvStream& rStream, Graphic& rGraphic) +{ + std::shared_ptr<VectorGraphicData> pVectorGraphicData; + if (!importPdfVectorGraphicData(rStream, pVectorGraphicData)) + return false; + rGraphic = Graphic(pVectorGraphicData); return true; } _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
