Rebased ref, commits from common ancestor: commit 24e0e9469dab9cb4eb774f0fd3794706d3a128cb Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Tue Dec 29 10:42:17 2020 +0900 Commit: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> CommitDate: Tue Dec 29 10:48:33 2020 +0900
vcl: remove or rename too long methods names in VectorGraphicData Change-Id: I8a64d27927b608afdc7996e0b0bbc59a58fde90f diff --git a/emfio/source/reader/emfreader.cxx b/emfio/source/reader/emfreader.cxx index ae00508380e1..c2240ed612e5 100644 --- a/emfio/source/reader/emfreader.cxx +++ b/emfio/source/reader/emfreader.cxx @@ -517,7 +517,7 @@ namespace emfio return; } - if (pVectorGraphicData->getVectorGraphicDataType() != VectorGraphicDataType::Pdf) + if (pVectorGraphicData->getType() != VectorGraphicDataType::Pdf) { return; } diff --git a/filter/source/svg/svgfilter.cxx b/filter/source/svg/svgfilter.cxx index a15dc12f53e6..2d930f897359 100644 --- a/filter/source/svg/svgfilter.cxx +++ b/filter/source/svg/svgfilter.cxx @@ -256,7 +256,7 @@ bool SVGFilter::filterImpressOrDraw( const Sequence< PropertyValue >& rDescripto auto const & rVectorGraphicData(aGraphic.getVectorGraphicData()); bool bContainsNoGeometry(false); - if(bool(rVectorGraphicData) && VectorGraphicDataType::Svg == rVectorGraphicData->getVectorGraphicDataType()) + if(bool(rVectorGraphicData) && VectorGraphicDataType::Svg == rVectorGraphicData->getType()) { const drawinglayer::primitive2d::Primitive2DContainer aContainer(rVectorGraphicData->getPrimitive2DSequence()); diff --git a/include/vcl/vectorgraphicdata.hxx b/include/vcl/vectorgraphicdata.hxx index 02511dd7909c..18800bac04d9 100644 --- a/include/vcl/vectorgraphicdata.hxx +++ b/include/vcl/vectorgraphicdata.hxx @@ -64,12 +64,12 @@ private: std::deque< css::uno::Reference< css::graphic::XPrimitive2D > > maSequence; BitmapEx maReplacement; size_t mNestedBitmapSize; - VectorGraphicDataType meVectorGraphicDataType; + VectorGraphicDataType meType; // extra: std::unique_ptr<WmfExternal> mpExternalHeader; - // If the vector format has more pages this denotes which page to render + /// If the vector format has more pages this denotes which page to render sal_Int32 mnPageIndex; /// Useful for PDF, which is vector-based, but still rendered to a bitmap. @@ -104,23 +104,21 @@ public: return maDataContainer; } - sal_uInt32 getVectorGraphicDataArrayLength() const - { - return maDataContainer.getSize(); - } - enum class State { UNPARSED, PARSED }; std::pair<State, size_t> getSizeBytes() const; - const VectorGraphicDataType& getVectorGraphicDataType() const { return meVectorGraphicDataType; } + const VectorGraphicDataType& getType() const { return meType; } /// data read and evtl. on demand creation const basegfx::B2DRange& getRange() const; - const std::deque< css::uno::Reference< css::graphic::XPrimitive2D > >& getPrimitive2DSequence() const; + const std::deque<css::uno::Reference<css::graphic::XPrimitive2D>>& getPrimitive2DSequence() const; const BitmapEx& getReplacement() const; BitmapChecksum GetChecksum() const; - sal_Int32 getPageIndex() const { return std::max(sal_Int32(0), mnPageIndex); } + sal_Int32 getPageIndex() const + { + return std::max(sal_Int32(0), mnPageIndex); + } void setPageIndex(sal_Int32 nPageIndex) { diff --git a/sd/qa/unit/SdrPdfImportTest.cxx b/sd/qa/unit/SdrPdfImportTest.cxx index 85fb33d8243c..243699c99743 100644 --- a/sd/qa/unit/SdrPdfImportTest.cxx +++ b/sd/qa/unit/SdrPdfImportTest.cxx @@ -107,8 +107,7 @@ CPPUNIT_TEST_FIXTURE(SdrPdfImportTest, testImportSimpleText) Graphic aGraphic = pGraphicObject->GetGraphic(); auto const& pVectorGraphicData = aGraphic.getVectorGraphicData(); CPPUNIT_ASSERT(pVectorGraphicData); - CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, - pVectorGraphicData->getVectorGraphicDataType()); + CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType()); // Mark the object SdrView* pView = pViewShell->GetView(); @@ -197,8 +196,7 @@ CPPUNIT_TEST_FIXTURE(SdrPdfImportTest, testAnnotationsImportExport) Graphic aGraphic = pGraphicObject->GetGraphic(); auto const& pVectorGraphicData = aGraphic.getVectorGraphicData(); CPPUNIT_ASSERT(pVectorGraphicData); - CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, - pVectorGraphicData->getVectorGraphicDataType()); + CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType()); // Write the PDF aContainer = pVectorGraphicData->getBinaryDataContainer(); diff --git a/sd/qa/unit/tiledrendering/LOKitSearchTest.cxx b/sd/qa/unit/tiledrendering/LOKitSearchTest.cxx index 6397f8c25acc..9b898119a47c 100644 --- a/sd/qa/unit/tiledrendering/LOKitSearchTest.cxx +++ b/sd/qa/unit/tiledrendering/LOKitSearchTest.cxx @@ -303,8 +303,7 @@ void LOKitSearchTest::testSearchInPDFNonExisting() Graphic aGraphic = pGraphicObject->GetGraphic(); auto const& pVectorGraphicData = aGraphic.getVectorGraphicData(); CPPUNIT_ASSERT(pVectorGraphicData); - CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, - pVectorGraphicData->getVectorGraphicDataType()); + CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType()); lcl_search("NonExisting"); @@ -332,8 +331,7 @@ void LOKitSearchTest::testSearchInPDF() Graphic aGraphic = pGraphicObject->GetGraphic(); auto const& pVectorGraphicData = aGraphic.getVectorGraphicData(); CPPUNIT_ASSERT(pVectorGraphicData); - CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, - pVectorGraphicData->getVectorGraphicDataType()); + CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType()); // Search lcl_search("ABC"); @@ -381,8 +379,7 @@ void LOKitSearchTest::testSearchInPDFOnePDFObject() Graphic aGraphic = pGraphicObject->GetGraphic(); auto const& pVectorGraphicData = aGraphic.getVectorGraphicData(); CPPUNIT_ASSERT(pVectorGraphicData); - CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, - pVectorGraphicData->getVectorGraphicDataType()); + CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType()); // Search down lcl_search("ABC", false, false); @@ -419,8 +416,7 @@ void LOKitSearchTest::testSearchInPDFInMultiplePages() Graphic aGraphic = pGraphicObject->GetGraphic(); auto const& pVectorGraphicData = aGraphic.getVectorGraphicData(); CPPUNIT_ASSERT(pVectorGraphicData); - CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, - pVectorGraphicData->getVectorGraphicDataType()); + CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType()); } // Search for "him" @@ -511,8 +507,7 @@ void LOKitSearchTest::testSearchInPDFInMultiplePagesBackwards() Graphic aGraphic = pGraphicObject->GetGraphic(); auto const& pVectorGraphicData = aGraphic.getVectorGraphicData(); CPPUNIT_ASSERT(pVectorGraphicData); - CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, - pVectorGraphicData->getVectorGraphicDataType()); + CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType()); } // Expected for backwards search is: @@ -633,8 +628,7 @@ void LOKitSearchTest::testSearchIn2MixedObjects() auto const& pVectorGraphicData = aGraphic.getVectorGraphicData(); CPPUNIT_ASSERT(pVectorGraphicData); - CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, - pVectorGraphicData->getVectorGraphicDataType()); + CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType()); } // Let's try to search now @@ -716,8 +710,7 @@ void LOKitSearchTest::testSearchIn6MixedObjects() CPPUNIT_ASSERT(pGraphicObject); auto const& pVectorGraphicData = pGraphicObject->GetGraphic().getVectorGraphicData(); CPPUNIT_ASSERT(pVectorGraphicData); - CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, - pVectorGraphicData->getVectorGraphicDataType()); + CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType()); } // Check Object 3 @@ -743,8 +736,7 @@ void LOKitSearchTest::testSearchIn6MixedObjects() CPPUNIT_ASSERT(pGraphicObject); auto const& pVectorGraphicData = pGraphicObject->GetGraphic().getVectorGraphicData(); CPPUNIT_ASSERT(pVectorGraphicData); - CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Svg, - pVectorGraphicData->getVectorGraphicDataType()); + CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Svg, pVectorGraphicData->getType()); } // Check Object 6 @@ -756,8 +748,7 @@ void LOKitSearchTest::testSearchIn6MixedObjects() CPPUNIT_ASSERT(pGraphicObject); auto const& pVectorGraphicData = pGraphicObject->GetGraphic().getVectorGraphicData(); CPPUNIT_ASSERT(pVectorGraphicData); - CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, - pVectorGraphicData->getVectorGraphicDataType()); + CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType()); } // Search "ABC" which is in all objects (2 times in Object 3) diff --git a/sd/source/ui/view/Outliner.cxx b/sd/source/ui/view/Outliner.cxx index 59e740b4bda1..1e58117cdb81 100644 --- a/sd/source/ui/view/Outliner.cxx +++ b/sd/source/ui/view/Outliner.cxx @@ -1154,7 +1154,7 @@ bool isValidVectorGraphicObject(const sd::outliner::IteratorPosition& rPosition) if (pGraphicObject) { auto const& pVectorGraphicData = pGraphicObject->GetGraphic().getVectorGraphicData(); - if (pVectorGraphicData && VectorGraphicDataType::Pdf == pVectorGraphicData->getVectorGraphicDataType()) + if (pVectorGraphicData && VectorGraphicDataType::Pdf == pVectorGraphicData->getType()) { return true; } diff --git a/svx/source/core/graphichelper.cxx b/svx/source/core/graphichelper.cxx index fb483c5bfe54..a43f17cee56b 100644 --- a/svx/source/core/graphichelper.cxx +++ b/svx/source/core/graphichelper.cxx @@ -69,9 +69,9 @@ void GraphicHelper::GetPreferredExtension( OUString& rExtension, const Graphic& OUString aExtension = "png"; auto const & rVectorGraphicDataPtr(rGraphic.getVectorGraphicData()); - if (rVectorGraphicDataPtr && rVectorGraphicDataPtr->getVectorGraphicDataArrayLength()) + if (rVectorGraphicDataPtr && !rVectorGraphicDataPtr->getBinaryDataContainer().isEmpty()) { - switch (rVectorGraphicDataPtr->getVectorGraphicDataType()) + switch (rVectorGraphicDataPtr->getType()) { case VectorGraphicDataType::Wmf: aExtension = "wmf"; diff --git a/svx/source/svdraw/svdedtv2.cxx b/svx/source/svdraw/svdedtv2.cxx index f688c32df82b..9dd795bb632b 100644 --- a/svx/source/svdraw/svdedtv2.cxx +++ b/svx/source/svdraw/svdedtv2.cxx @@ -2103,7 +2103,7 @@ void SdrEditView::DoImportMarkedMtf(SvdProgressInfo *pProgrInfo) Graphic aGraphic = pGraf->GetGraphic(); auto const & pVectorGraphicData = aGraphic.getVectorGraphicData(); - if (pVectorGraphicData && pVectorGraphicData->getVectorGraphicDataType() == VectorGraphicDataType::Pdf) + if (pVectorGraphicData && pVectorGraphicData->getType() == VectorGraphicDataType::Pdf) { #if HAVE_FEATURE_PDFIUM aLogicRect = pGraf->GetLogicRect(); diff --git a/svx/source/svdraw/svdograf.cxx b/svx/source/svdraw/svdograf.cxx index c0904bf1e1ce..8e0461272fd9 100644 --- a/svx/source/svdraw/svdograf.cxx +++ b/svx/source/svdraw/svdograf.cxx @@ -142,7 +142,7 @@ void SdrGrafObj::onGraphicChanged() // Skip for PDF as it is only a bitmap primitive in a sequence and // doesn't contain metadata. However getting the primitive sequence // will also trigger a premature rendering of the PDF. - if (rVectorGraphicDataPtr->getVectorGraphicDataType() == VectorGraphicDataType::Pdf) + if (rVectorGraphicDataPtr->getType() == VectorGraphicDataType::Pdf) return; const drawinglayer::primitive2d::Primitive2DContainer aSequence(rVectorGraphicDataPtr->getPrimitive2DSequence()); @@ -560,7 +560,7 @@ OUString SdrGrafObj::TakeObjNameSingul() const if (rVectorGraphicDataPtr) { - switch (rVectorGraphicDataPtr->getVectorGraphicDataType()) + switch (rVectorGraphicDataPtr->getType()) { case VectorGraphicDataType::Svg: { @@ -635,7 +635,7 @@ OUString SdrGrafObj::TakeObjNamePlural() const if (rVectorGraphicDataPtr) { - switch (rVectorGraphicDataPtr->getVectorGraphicDataType()) + switch (rVectorGraphicDataPtr->getType()) { case VectorGraphicDataType::Svg: { diff --git a/svx/source/xoutdev/_xoutbmp.cxx b/svx/source/xoutdev/_xoutbmp.cxx index 6dba9e722a7d..9f53d9c22d41 100644 --- a/svx/source/xoutdev/_xoutbmp.cxx +++ b/svx/source/xoutdev/_xoutbmp.cxx @@ -129,12 +129,12 @@ ErrCode XOutBitmap::WriteGraphic( const Graphic& rGraphic, OUString& rFileName, // #i121128# use shortcut to write Vector Graphic Data data in original form (if possible) auto const & rVectorGraphicDataPtr(rGraphic.getVectorGraphicData()); - if (rVectorGraphicDataPtr && rVectorGraphicDataPtr->getVectorGraphicDataArrayLength()) + if (rVectorGraphicDataPtr && rVectorGraphicDataPtr->getBinaryDataContainer().getSize()) { - const bool bIsSvg(rFilterName.equalsIgnoreAsciiCase("svg") && VectorGraphicDataType::Svg == rVectorGraphicDataPtr->getVectorGraphicDataType()); - const bool bIsWmf(rFilterName.equalsIgnoreAsciiCase("wmf") && VectorGraphicDataType::Wmf == rVectorGraphicDataPtr->getVectorGraphicDataType()); - const bool bIsEmf(rFilterName.equalsIgnoreAsciiCase("emf") && VectorGraphicDataType::Emf == rVectorGraphicDataPtr->getVectorGraphicDataType()); - const bool bIsPdf(rFilterName.equalsIgnoreAsciiCase("pdf") && VectorGraphicDataType::Pdf == rVectorGraphicDataPtr->getVectorGraphicDataType()); + const bool bIsSvg(rFilterName.equalsIgnoreAsciiCase("svg") && VectorGraphicDataType::Svg == rVectorGraphicDataPtr->getType()); + const bool bIsWmf(rFilterName.equalsIgnoreAsciiCase("wmf") && VectorGraphicDataType::Wmf == rVectorGraphicDataPtr->getType()); + const bool bIsEmf(rFilterName.equalsIgnoreAsciiCase("emf") && VectorGraphicDataType::Emf == rVectorGraphicDataPtr->getType()); + const bool bIsPdf(rFilterName.equalsIgnoreAsciiCase("pdf") && VectorGraphicDataType::Pdf == rVectorGraphicDataPtr->getType()); if (bIsSvg || bIsWmf || bIsEmf || bIsPdf) { diff --git a/vcl/qa/cppunit/GraphicTest.cxx b/vcl/qa/cppunit/GraphicTest.cxx index e4829860a515..4a998039a4bc 100644 --- a/vcl/qa/cppunit/GraphicTest.cxx +++ b/vcl/qa/cppunit/GraphicTest.cxx @@ -377,8 +377,7 @@ void GraphicTest::testEmfToWmfConversion() sal_uInt16 nFormat = aGraphicFilter.GetImportFormatNumberForShortName(u"WMF"); CPPUNIT_ASSERT_EQUAL(ERRCODE_NONE, aGraphicFilter.ImportGraphic(aGraphic, OUString(), aStream, nFormat)); - CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Wmf, - aGraphic.getVectorGraphicData()->getVectorGraphicDataType()); + CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Wmf, aGraphic.getVectorGraphicData()->getType()); // Save as WMF. sal_uInt16 nFilterType = aGraphicFilter.GetExportFormatNumberForShortName(u"WMF"); @@ -661,7 +660,7 @@ void GraphicTest::testSwappingVectorGraphic_SVG_WithGfxLink() CPPUNIT_ASSERT_EQUAL(true, bool(pVectorData)); CPPUNIT_ASSERT_EQUAL(true, aGraphic.isAvailable()); - CPPUNIT_ASSERT_EQUAL(sal_uInt32(223), pVectorData->getVectorGraphicDataArrayLength()); + CPPUNIT_ASSERT_EQUAL(size_t(223), pVectorData->getBinaryDataContainer().getSize()); CPPUNIT_ASSERT_EQUAL(true, aGraphic.IsGfxLink()); CPPUNIT_ASSERT_EQUAL(sal_uInt32(223), aGraphic.GetGfxLink().GetDataSize()); @@ -711,8 +710,8 @@ void GraphicTest::testSwappingVectorGraphic_SVG_WithoutGfxLink() GraphicFilter& rGraphicFilter = GraphicFilter::GetGraphicFilter(); Graphic aInputGraphic = rGraphicFilter.ImportUnloadedGraphic(aStream); - CPPUNIT_ASSERT_EQUAL(sal_uInt32(223), - aInputGraphic.getVectorGraphicData()->getVectorGraphicDataArrayLength()); + CPPUNIT_ASSERT_EQUAL(size_t(223), + aInputGraphic.getVectorGraphicData()->getBinaryDataContainer().getSize()); // Create graphic Graphic aGraphic(aInputGraphic.getVectorGraphicData()); @@ -721,8 +720,8 @@ void GraphicTest::testSwappingVectorGraphic_SVG_WithoutGfxLink() CPPUNIT_ASSERT_EQUAL(true, bool(aGraphic.getVectorGraphicData())); CPPUNIT_ASSERT_EQUAL(true, aGraphic.isAvailable()); - CPPUNIT_ASSERT_EQUAL(sal_uInt32(223), - aGraphic.getVectorGraphicData()->getVectorGraphicDataArrayLength()); + CPPUNIT_ASSERT_EQUAL(size_t(223), + aGraphic.getVectorGraphicData()->getBinaryDataContainer().getSize()); CPPUNIT_ASSERT_EQUAL(false, aGraphic.IsGfxLink()); @@ -775,8 +774,8 @@ void GraphicTest::testSwappingVectorGraphic_SVG_WithoutGfxLink() CPPUNIT_ASSERT_EQUAL(GraphicType::Bitmap, aGraphic.GetType()); CPPUNIT_ASSERT_EQUAL(true, bool(aGraphic.getVectorGraphicData())); - sal_uInt32 nVectorByteSize = aGraphic.getVectorGraphicData()->getVectorGraphicDataArrayLength(); - CPPUNIT_ASSERT_EQUAL(sal_uInt32(223), nVectorByteSize); + size_t nVectorByteSize = aGraphic.getVectorGraphicData()->getBinaryDataContainer().getSize(); + CPPUNIT_ASSERT_EQUAL(size_t(223), nVectorByteSize); CPPUNIT_ASSERT_EQUAL(false, aGraphic.IsGfxLink()); @@ -863,8 +862,8 @@ void GraphicTest::testSwappingGraphicProperties_SVG_WithoutGfxLink() GraphicFilter& rGraphicFilter = GraphicFilter::GetGraphicFilter(); Graphic aInputGraphic = rGraphicFilter.ImportUnloadedGraphic(aStream); - CPPUNIT_ASSERT_EQUAL(sal_uInt32(223), - aInputGraphic.getVectorGraphicData()->getVectorGraphicDataArrayLength()); + CPPUNIT_ASSERT_EQUAL(size_t(223), + aInputGraphic.getVectorGraphicData()->getBinaryDataContainer().getSize()); // Create graphic Graphic aGraphic(aInputGraphic.getVectorGraphicData()); @@ -934,10 +933,9 @@ void GraphicTest::testSwappingVectorGraphic_PDF_WithGfxLink() // Set the page index aGraphic.getVectorGraphicData()->setPageIndex(1); - CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, - aGraphic.getVectorGraphicData()->getVectorGraphicDataType()); - CPPUNIT_ASSERT_EQUAL(sal_uInt32(17693), - aGraphic.getVectorGraphicData()->getVectorGraphicDataArrayLength()); + CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, aGraphic.getVectorGraphicData()->getType()); + CPPUNIT_ASSERT_EQUAL(size_t(17693), + aGraphic.getVectorGraphicData()->getBinaryDataContainer().getSize()); CPPUNIT_ASSERT_EQUAL(true, aGraphic.isAvailable()); CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aGraphic.getVectorGraphicData()->getPageIndex()); @@ -975,10 +973,9 @@ void GraphicTest::testSwappingVectorGraphic_PDF_WithoutGfxLink() // Set the page index aGraphic.getVectorGraphicData()->setPageIndex(1); - CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, - aGraphic.getVectorGraphicData()->getVectorGraphicDataType()); - CPPUNIT_ASSERT_EQUAL(sal_uInt32(17693), - aGraphic.getVectorGraphicData()->getVectorGraphicDataArrayLength()); + CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, aGraphic.getVectorGraphicData()->getType()); + CPPUNIT_ASSERT_EQUAL(size_t(17693), + aGraphic.getVectorGraphicData()->getBinaryDataContainer().getSize()); CPPUNIT_ASSERT_EQUAL(true, aGraphic.isAvailable()); CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aGraphic.getVectorGraphicData()->getPageIndex()); diff --git a/vcl/qa/cppunit/PDFiumLibraryTest.cxx b/vcl/qa/cppunit/PDFiumLibraryTest.cxx index 597737864a87..be03a3e005b8 100644 --- a/vcl/qa/cppunit/PDFiumLibraryTest.cxx +++ b/vcl/qa/cppunit/PDFiumLibraryTest.cxx @@ -62,8 +62,7 @@ void PDFiumLibraryTest::testDocument() auto pVectorGraphicData = aGraphic.getVectorGraphicData(); CPPUNIT_ASSERT(pVectorGraphicData); - CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, - pVectorGraphicData->getVectorGraphicDataType()); + CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType()); auto& rDataContainer = pVectorGraphicData->getBinaryDataContainer(); @@ -89,8 +88,7 @@ void PDFiumLibraryTest::testPages() auto pVectorGraphicData = aGraphic.getVectorGraphicData(); CPPUNIT_ASSERT(pVectorGraphicData); - CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, - pVectorGraphicData->getVectorGraphicDataType()); + CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType()); auto& rDataContainer = pVectorGraphicData->getBinaryDataContainer(); @@ -114,8 +112,7 @@ void PDFiumLibraryTest::testPageObjects() auto pVectorGraphicData = aGraphic.getVectorGraphicData(); CPPUNIT_ASSERT(pVectorGraphicData); - CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, - pVectorGraphicData->getVectorGraphicDataType()); + CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType()); auto& rDataContainer = pVectorGraphicData->getBinaryDataContainer(); @@ -163,8 +160,7 @@ void PDFiumLibraryTest::testAnnotationsMadeInEvince() auto pVectorGraphicData = aGraphic.getVectorGraphicData(); CPPUNIT_ASSERT(pVectorGraphicData); - CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, - pVectorGraphicData->getVectorGraphicDataType()); + CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType()); auto& rDataContainer = pVectorGraphicData->getBinaryDataContainer(); @@ -219,8 +215,7 @@ void PDFiumLibraryTest::testAnnotationsMadeInAcrobat() auto pVectorGraphicData = aGraphic.getVectorGraphicData(); CPPUNIT_ASSERT(pVectorGraphicData); - CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, - pVectorGraphicData->getVectorGraphicDataType()); + CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType()); auto& rDataContainer = pVectorGraphicData->getBinaryDataContainer(); @@ -296,8 +291,7 @@ void PDFiumLibraryTest::testAnnotationsDifferentTypes() auto pVectorGraphicData = aGraphic.getVectorGraphicData(); CPPUNIT_ASSERT(pVectorGraphicData); - CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, - pVectorGraphicData->getVectorGraphicDataType()); + CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getType()); auto& rDataContainer = pVectorGraphicData->getBinaryDataContainer(); diff --git a/vcl/source/filter/graphicfilter.cxx b/vcl/source/filter/graphicfilter.cxx index 35b060409d42..0aeb54fb5b85 100644 --- a/vcl/source/filter/graphicfilter.cxx +++ b/vcl/source/filter/graphicfilter.cxx @@ -1984,9 +1984,8 @@ ErrCode GraphicFilter::ExportGraphic( const Graphic& rGraphic, const OUString& r // VectorGraphicDataType::Wmf means WMF or EMF, allow direct write in the WMF case // only. if (rVectorGraphicDataPtr - && rVectorGraphicDataPtr->getVectorGraphicDataArrayLength() - && VectorGraphicDataType::Wmf - == rVectorGraphicDataPtr->getVectorGraphicDataType() + && rVectorGraphicDataPtr->getType() == VectorGraphicDataType::Wmf + && !rVectorGraphicDataPtr->getBinaryDataContainer().isEmpty() && !bIsEMF) { auto & aDataContainer = rVectorGraphicDataPtr->getBinaryDataContainer(); @@ -2020,8 +2019,8 @@ ErrCode GraphicFilter::ExportGraphic( const Graphic& rGraphic, const OUString& r auto const & rVectorGraphicDataPtr(rGraphic.getVectorGraphicData()); if (rVectorGraphicDataPtr - && rVectorGraphicDataPtr->getVectorGraphicDataArrayLength() - && VectorGraphicDataType::Emf == rVectorGraphicDataPtr->getVectorGraphicDataType()) + && rVectorGraphicDataPtr->getType() == VectorGraphicDataType::Emf + && !rVectorGraphicDataPtr->getBinaryDataContainer().isEmpty()) { auto & aDataContainer = rVectorGraphicDataPtr->getBinaryDataContainer(); rOStm.WriteBytes(aDataContainer.getData(), aDataContainer.getSize()); @@ -2115,8 +2114,8 @@ ErrCode GraphicFilter::ExportGraphic( const Graphic& rGraphic, const OUString& r auto const & rVectorGraphicDataPtr(rGraphic.getVectorGraphicData()); if (rVectorGraphicDataPtr - && rVectorGraphicDataPtr->getVectorGraphicDataArrayLength() - && VectorGraphicDataType::Svg == rVectorGraphicDataPtr->getVectorGraphicDataType()) + && rVectorGraphicDataPtr->getType() == VectorGraphicDataType::Svg + && !rVectorGraphicDataPtr->getBinaryDataContainer().isEmpty()) { auto & aDataContainer = rVectorGraphicDataPtr->getBinaryDataContainer(); rOStm.WriteBytes(aDataContainer.getData(), aDataContainer.getSize()); diff --git a/vcl/source/gdi/TypeSerializer.cxx b/vcl/source/gdi/TypeSerializer.cxx index c1525786fc56..dd71fa2343c7 100644 --- a/vcl/source/gdi/TypeSerializer.cxx +++ b/vcl/source/gdi/TypeSerializer.cxx @@ -362,7 +362,7 @@ void TypeSerializer::writeGraphic(const Graphic& rGraphic) // this is used e.g. in swapping out graphic data and in transporting it over UNO API // as sequence of bytes, but AFAIK not written anywhere to any kind of file, so it should be // no problem to extend it; only used at runtime - switch (pVectorGraphicData->getVectorGraphicDataType()) + switch (pVectorGraphicData->getType()) { case VectorGraphicDataType::Wmf: { diff --git a/vcl/source/gdi/impgraph.cxx b/vcl/source/gdi/impgraph.cxx index 83ae4c849b24..f6e9e74ad80e 100644 --- a/vcl/source/gdi/impgraph.cxx +++ b/vcl/source/gdi/impgraph.cxx @@ -672,8 +672,8 @@ const GDIMetaFile& ImpGraphic::ImplGetGDIMetaFile() const ensureAvailable(); if (!maMetaFile.GetActionSize() && maVectorGraphicData - && (VectorGraphicDataType::Emf == maVectorGraphicData->getVectorGraphicDataType() - || VectorGraphicDataType::Wmf == maVectorGraphicData->getVectorGraphicDataType())) + && (VectorGraphicDataType::Emf == maVectorGraphicData->getType() + || VectorGraphicDataType::Wmf == maVectorGraphicData->getType())) { // If we have a Emf/Wmf VectorGraphic object, we // need a way to get the Metafile data out of the primitive @@ -1173,7 +1173,7 @@ bool ImpGraphic::swapOutGraphic(SvStream& rStream) // this is used e.g. in swapping out graphic data and in transporting it over UNO API // as sequence of bytes, but AFAIK not written anywhere to any kind of file, so it should be // no problem to extend it; only used at runtime - switch (maVectorGraphicData->getVectorGraphicDataType()) + switch (maVectorGraphicData->getType()) { case VectorGraphicDataType::Wmf: { @@ -1197,7 +1197,7 @@ bool ImpGraphic::swapOutGraphic(SvStream& rStream) } } - rStream.WriteUInt32(maVectorGraphicData->getVectorGraphicDataArrayLength()); + rStream.WriteUInt32(maVectorGraphicData->getBinaryDataContainer().getSize()); rStream.WriteBytes( maVectorGraphicData->getBinaryDataContainer().getData(), diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx index 1547f4a8ea99..95a01cce70fd 100644 --- a/vcl/source/gdi/pdfwriter_impl.cxx +++ b/vcl/source/gdi/pdfwriter_impl.cxx @@ -9000,7 +9000,7 @@ void PDFWriterImpl::createEmbeddedFile(const Graphic& rGraphic, ReferenceXObject // no pdf data. rEmit.m_nBitmapObject = nBitmapObject; - if (!rGraphic.getVectorGraphicData() || rGraphic.getVectorGraphicData()->getVectorGraphicDataType() != VectorGraphicDataType::Pdf) + if (!rGraphic.getVectorGraphicData() || rGraphic.getVectorGraphicData()->getType() != VectorGraphicDataType::Pdf) return; BinaryDataContainer const & rDataContainer = rGraphic.getVectorGraphicData()->getBinaryDataContainer(); @@ -9073,7 +9073,7 @@ void PDFWriterImpl::drawJPGBitmap( SvStream& rDCTData, bool bIsTrueColor, const { m_aJPGs.emplace( m_aJPGs.begin() ); JPGEmit& rEmit = m_aJPGs.front(); - if (!rGraphic.getVectorGraphicData() || rGraphic.getVectorGraphicData()->getVectorGraphicDataType() != VectorGraphicDataType::Pdf || m_aContext.UseReferenceXObject) + if (!rGraphic.getVectorGraphicData() || rGraphic.getVectorGraphicData()->getType() != VectorGraphicDataType::Pdf || m_aContext.UseReferenceXObject) rEmit.m_nObject = createObject(); rEmit.m_aID = aID; rEmit.m_pStream = std::move( pStream ); @@ -9177,7 +9177,7 @@ const BitmapEmit& PDFWriterImpl::createBitmapEmit( const BitmapEx& i_rBitmap, co m_aBitmaps.push_front( BitmapEmit() ); m_aBitmaps.front().m_aID = aID; m_aBitmaps.front().m_aBitmap = aBitmap; - if (!rGraphic.getVectorGraphicData() || rGraphic.getVectorGraphicData()->getVectorGraphicDataType() != VectorGraphicDataType::Pdf || m_aContext.UseReferenceXObject) + if (!rGraphic.getVectorGraphicData() || rGraphic.getVectorGraphicData()->getType() != VectorGraphicDataType::Pdf || m_aContext.UseReferenceXObject) m_aBitmaps.front().m_nObject = createObject(); createEmbeddedFile(rGraphic, m_aBitmaps.front().m_aReferenceXObject, m_aBitmaps.front().m_nObject); it = m_aBitmaps.begin(); diff --git a/vcl/source/gdi/vectorgraphicdata.cxx b/vcl/source/gdi/vectorgraphicdata.cxx index 7f11dc454753..24be63da30dc 100644 --- a/vcl/source/gdi/vectorgraphicdata.cxx +++ b/vcl/source/gdi/vectorgraphicdata.cxx @@ -113,9 +113,9 @@ static size_t estimateSize( bool VectorGraphicData::operator==(const VectorGraphicData& rCandidate) const { - if (getVectorGraphicDataType() == rCandidate.getVectorGraphicDataType()) + if (getType() == rCandidate.getType()) { - if (getVectorGraphicDataArrayLength() == rCandidate.getVectorGraphicDataArrayLength()) + if (maDataContainer.getSize() == rCandidate.maDataContainer.getSize()) { if (0 == memcmp( maDataContainer.getData(), @@ -142,7 +142,7 @@ void VectorGraphicData::setWmfExternalHeader(const WmfExternal& aExtHeader) void VectorGraphicData::ensurePdfReplacement() { - assert(getVectorGraphicDataType() == VectorGraphicDataType::Pdf); + assert(getType() == VectorGraphicDataType::Pdf); if (!maReplacement.IsEmpty()) return; // nothing to do @@ -166,7 +166,7 @@ void VectorGraphicData::ensureReplacement() // shortcut for PDF - PDFium can generate the replacement bitmap for us // directly - if (getVectorGraphicDataType() == VectorGraphicDataType::Pdf) + if (getType() == VectorGraphicDataType::Pdf) { ensurePdfReplacement(); return; @@ -193,7 +193,7 @@ void VectorGraphicData::ensureSequenceAndRange() // create Vector Graphic Data interpreter uno::Reference<uno::XComponentContext> xContext(::comphelper::getProcessComponentContext()); - switch (getVectorGraphicDataType()) + switch (getType()) { case VectorGraphicDataType::Svg: { @@ -311,7 +311,7 @@ VectorGraphicData::VectorGraphicData( maSequence(), maReplacement(), mNestedBitmapSize(0), - meVectorGraphicDataType(eVectorDataType), + meType(eVectorDataType), mnPageIndex(nPageIndex) { } diff --git a/vcl/source/graphic/GraphicID.cxx b/vcl/source/graphic/GraphicID.cxx index cfd2d751d246..f2a9afa60dbe 100644 --- a/vcl/source/graphic/GraphicID.cxx +++ b/vcl/source/graphic/GraphicID.cxx @@ -36,7 +36,7 @@ GraphicID::GraphicID(ImpGraphic const& rGraphic) { const basegfx::B2DRange& rRange = rVectorGraphicDataPtr->getRange(); - mnID1 |= rVectorGraphicDataPtr->getVectorGraphicDataArrayLength(); + mnID1 |= rVectorGraphicDataPtr->getBinaryDataContainer().getSize(); mnID2 = basegfx::fround(rRange.getWidth()); mnID3 = basegfx::fround(rRange.getHeight()); mnID4 = vcl_get_checksum(0, rVectorGraphicDataPtr->getBinaryDataContainer().getData(), diff --git a/vcl/source/graphic/VectorGraphicSearch.cxx b/vcl/source/graphic/VectorGraphicSearch.cxx index 3c1003d29654..c5e04060bc1b 100644 --- a/vcl/source/graphic/VectorGraphicSearch.cxx +++ b/vcl/source/graphic/VectorGraphicSearch.cxx @@ -237,7 +237,7 @@ bool VectorGraphicSearch::search(OUString const& rSearchString, { auto pData = maGraphic.getVectorGraphicData(); - if (pData && pData->getVectorGraphicDataType() == VectorGraphicDataType::Pdf) + if (pData && pData->getType() == VectorGraphicDataType::Pdf) { if (searchPDF(pData)) { commit 44e22e0732c70a1abff403bf2b9fcea0d71a7c5e Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Mon Dec 28 18:45:13 2020 +0900 Commit: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> CommitDate: Tue Dec 29 10:48:33 2020 +0900 vcl: remove VectorGraphicDataArray, use BinaryDataContainer instead This change removes the contructor taking VectorGraphicDataArray for constructing VectorGraphicData, and instead of this, use the BinaryDataContainer instead. This further removes duplication and copying of the binary source data for various vector graphics formats (most importantly PDF and SVG). Change-Id: I1b9abf1662e1f30965c9068d04cb0afb82b3edaf diff --git a/include/vcl/gfxlink.hxx b/include/vcl/gfxlink.hxx index 85bb85cb53f2..1acb51d05c0a 100644 --- a/include/vcl/gfxlink.hxx +++ b/include/vcl/gfxlink.hxx @@ -86,6 +86,11 @@ public: sal_uInt32 GetDataSize() const { return maDataContainer.getSize(); } const sal_uInt8* GetData() const; + const BinaryDataContainer& getDataContainer() + { + return maDataContainer; + } + const Size& GetPrefSize() const { return maPrefSize;} void SetPrefSize( const Size& rPrefSize ); bool IsPrefSizeValid() const { return mbPrefSizeValid;} diff --git a/include/vcl/vectorgraphicdata.hxx b/include/vcl/vectorgraphicdata.hxx index 8d55a9487d26..02511dd7909c 100644 --- a/include/vcl/vectorgraphicdata.hxx +++ b/include/vcl/vectorgraphicdata.hxx @@ -86,10 +86,6 @@ private: VectorGraphicData& operator=(const VectorGraphicData&) = delete; public: - VectorGraphicData( - const VectorGraphicDataArray& rVectorGraphicDataArray, - VectorGraphicDataType eVectorDataType, - sal_Int32 nPageIndex = -1); VectorGraphicData( const BinaryDataContainer& rDataContainer, VectorGraphicDataType eVectorDataType, diff --git a/sfx2/source/appl/appmisc.cxx b/sfx2/source/appl/appmisc.cxx index c62fcd47a1e5..52906069e483 100644 --- a/sfx2/source/appl/appmisc.cxx +++ b/sfx2/source/appl/appmisc.cxx @@ -164,15 +164,13 @@ bool SfxApplication::loadBrandSvg(const char *pName, BitmapEx &rBitmap, int nWid if ( !FileExists(aObj) ) return false; - std::vector<sal_uInt8> aBinaryData; + auto aBinaryData = std::make_unique<std::vector<sal_uInt8>>(); OUString aPath = aObj.PathToFileName(); - if (!loadDataFromFile(aPath, aBinaryData)) + if (!loadDataFromFile(aPath, *aBinaryData)) return false; - VectorGraphicDataArray aVectorGraphicDataArray; - std::copy(aBinaryData.cbegin(), aBinaryData.cend(), aVectorGraphicDataArray.begin()); - - VectorGraphicData aVectorGraphicData(aVectorGraphicDataArray, VectorGraphicDataType::Svg); + BinaryDataContainer aDataContainer(aBinaryData); + VectorGraphicData aVectorGraphicData(aDataContainer, VectorGraphicDataType::Svg); // transform into [0,0,width,width*aspect] std dimensions diff --git a/vcl/source/filter/graphicfilter.cxx b/vcl/source/filter/graphicfilter.cxx index 65f3b8bb450f..35b060409d42 100644 --- a/vcl/source/filter/graphicfilter.cxx +++ b/vcl/source/filter/graphicfilter.cxx @@ -1620,7 +1620,8 @@ ErrCode GraphicFilter::ImportGraphic( Graphic& rGraphic, const OUString& rPath, if(!aMemStream.GetError() ) { - auto aVectorGraphicDataPtr = std::make_shared<VectorGraphicData>(aNewData, VectorGraphicDataType::Svg); + BinaryDataContainer aDataContainer(reinterpret_cast<const sal_uInt8*>(aNewData.getConstArray()), aNewData.getLength()); + auto aVectorGraphicDataPtr = std::make_shared<VectorGraphicData>(aDataContainer, VectorGraphicDataType::Svg); rGraphic = Graphic(aVectorGraphicDataPtr); bOkay = true; } @@ -1633,7 +1634,8 @@ ErrCode GraphicFilter::ImportGraphic( Graphic& rGraphic, const OUString& rPath, if(!rIStream.GetError()) { - auto aVectorGraphicDataPtr = std::make_shared<VectorGraphicData>(aNewData, VectorGraphicDataType::Svg); + BinaryDataContainer aDataContainer(reinterpret_cast<const sal_uInt8*>(aNewData.getConstArray()), aNewData.getLength()); + auto aVectorGraphicDataPtr = std::make_shared<VectorGraphicData>(aDataContainer, VectorGraphicDataType::Svg); rGraphic = Graphic(aVectorGraphicDataPtr); bOkay = true; } @@ -1707,10 +1709,11 @@ ErrCode GraphicFilter::ImportGraphic( Graphic& rGraphic, const OUString& rPath, { const bool bIsWmf(aFilterName.equalsIgnoreAsciiCase(IMP_WMF)); const VectorGraphicDataType aDataType(bIsWmf ? VectorGraphicDataType::Wmf : VectorGraphicDataType::Emf); + + BinaryDataContainer aDataContainer(reinterpret_cast<const sal_uInt8*>(aNewData.getConstArray()), aNewData.getLength()); + auto aVectorGraphicDataPtr = - std::make_shared<VectorGraphicData>( - aNewData, - aDataType); + std::make_shared<VectorGraphicData>(aDataContainer, aDataType); if (pExtHeader) { diff --git a/vcl/source/filter/ipdf/pdfread.cxx b/vcl/source/filter/ipdf/pdfread.cxx index bfa27f68358b..69376a621d79 100644 --- a/vcl/source/filter/ipdf/pdfread.cxx +++ b/vcl/source/filter/ipdf/pdfread.cxx @@ -107,23 +107,23 @@ bool getCompatibleStream(SvStream& rInStream, SvStream& rOutStream) } #endif // HAVE_FEATURE_PDFIUM -VectorGraphicDataArray createVectorGraphicDataArray(SvStream& rStream) +BinaryDataContainer createBinaryDataContainer(SvStream& rStream) { // Save the original PDF stream for later use. SvMemoryStream aMemoryStream; if (!getCompatibleStream(rStream, aMemoryStream)) - return VectorGraphicDataArray(); + return BinaryDataContainer(); const sal_uInt32 nStreamLength = aMemoryStream.TellEnd(); - VectorGraphicDataArray aPdfData(nStreamLength); + auto aPdfData = std::make_unique<std::vector<sal_uInt8>>(nStreamLength); aMemoryStream.Seek(STREAM_SEEK_TO_BEGIN); - aMemoryStream.ReadBytes(aPdfData.begin(), nStreamLength); + aMemoryStream.ReadBytes(aPdfData->data(), aPdfData->size()); if (aMemoryStream.GetError()) - return VectorGraphicDataArray(); + return BinaryDataContainer(); - return aPdfData; + return BinaryDataContainer(aPdfData); } } // end anonymous namespace @@ -233,15 +233,15 @@ size_t RenderPDFBitmaps(const void* pBuffer, int nSize, std::vector<BitmapEx>& r bool importPdfVectorGraphicData(SvStream& rStream, std::shared_ptr<VectorGraphicData>& rVectorGraphicData) { - VectorGraphicDataArray aPdfDataArray = createVectorGraphicDataArray(rStream); - if (!aPdfDataArray.hasElements()) + BinaryDataContainer aDataContainer = createBinaryDataContainer(rStream); + if (aDataContainer.isEmpty()) { SAL_WARN("vcl.filter", "ImportPDF: empty PDF data array"); return false; } rVectorGraphicData - = std::make_shared<VectorGraphicData>(aPdfDataArray, VectorGraphicDataType::Pdf); + = std::make_shared<VectorGraphicData>(aDataContainer, VectorGraphicDataType::Pdf); return true; } @@ -442,17 +442,12 @@ size_t ImportPDFUnloaded(const OUString& rURL, std::vector<PDFGraphicResult>& rG ::utl::UcbStreamHelper::CreateStream(rURL, StreamMode::READ | StreamMode::SHARE_DENYNONE)); // Save the original PDF stream for later use. - BinaryDataContainer aBinaryDataContainer; - { - VectorGraphicDataArray aPdfDataArray = createVectorGraphicDataArray(*xStream); - if (!aPdfDataArray.hasElements()) - return 0; - const sal_uInt8* pData = reinterpret_cast<const sal_uInt8*>(aPdfDataArray.getConstArray()); - aBinaryDataContainer = BinaryDataContainer(pData, aPdfDataArray.getLength()); - } + BinaryDataContainer aDataContainer = createBinaryDataContainer(*xStream); + if (aDataContainer.isEmpty()) + return 0; // Prepare the link with the PDF stream. - auto pGfxLink = std::make_shared<GfxLink>(aBinaryDataContainer, GfxLinkType::NativePdf); + auto pGfxLink = std::make_shared<GfxLink>(aDataContainer, GfxLinkType::NativePdf); auto pPdfium = vcl::pdf::PDFiumLibrary::get(); @@ -480,7 +475,7 @@ size_t ImportPDFUnloaded(const OUString& rURL, std::vector<PDFGraphicResult>& rG tools::Long nPageHeight = convertTwipToMm100(aPageSize.getY() * pointToTwipconversionRatio); auto aVectorGraphicDataPtr = std::make_shared<VectorGraphicData>( - aBinaryDataContainer, VectorGraphicDataType::Pdf, nPageIndex); + aDataContainer, VectorGraphicDataType::Pdf, nPageIndex); // Create the Graphic with the VectorGraphicDataPtr and link the original PDF stream. // We swap out this Graphic as soon as possible, and a later swap in diff --git a/vcl/source/filter/wmf/wmf.cxx b/vcl/source/filter/wmf/wmf.cxx index 70ff37f7473f..2394c66d217d 100644 --- a/vcl/source/filter/wmf/wmf.cxx +++ b/vcl/source/filter/wmf/wmf.cxx @@ -42,8 +42,9 @@ bool ReadWindowMetafile( SvStream& rStream, GDIMetaFile& rMTF ) // Read binary data to mem array const sal_uInt32 nStreamLength(nStreamEnd - nStreamStart); - VectorGraphicDataArray aNewData(nStreamLength); - rStream.ReadBytes(aNewData.begin(), nStreamLength); + auto rData = std::make_unique<std::vector<sal_uInt8>>(nStreamLength); + rStream.ReadBytes(rData->data(), rData->size()); + BinaryDataContainer aDataContainer(rData); rStream.Seek(nStreamStart); if (rStream.good()) @@ -52,9 +53,7 @@ bool ReadWindowMetafile( SvStream& rStream, GDIMetaFile& rMTF ) // too much for type, this will be checked there. Also no path // needed, it is a temporary object auto aVectorGraphicDataPtr = - std::make_shared<VectorGraphicData>( - aNewData, - VectorGraphicDataType::Emf); + std::make_shared<VectorGraphicData>(aDataContainer, VectorGraphicDataType::Emf); // create a Graphic and grep Metafile from it const Graphic aGraphic(aVectorGraphicDataPtr); @@ -93,10 +92,9 @@ bool ConvertGraphicToWMF(const Graphic& rGraphic, SvStream& rTargetStream, { // This may be an EMF+ file, converting that to WMF is better done by re-parsing EMF+ as EMF // and converting that to WMF. - uno::Sequence<sal_Int8> aData(reinterpret_cast<const sal_Int8*>(aLink.GetData()), - aLink.GetDataSize()); + auto & rDataContainer = aLink.getDataContainer(); auto aVectorGraphicData - = std::make_shared<VectorGraphicData>(aData, VectorGraphicDataType::Emf); + = std::make_shared<VectorGraphicData>(rDataContainer, VectorGraphicDataType::Emf); aVectorGraphicData->setEnableEMFPlus(false); Graphic aGraphic(aVectorGraphicData); bool bRet = ConvertGDIMetaFileToWMF(aGraphic.GetGDIMetaFile(), rTargetStream, pConfigItem, diff --git a/vcl/source/gdi/TypeSerializer.cxx b/vcl/source/gdi/TypeSerializer.cxx index b1cdf4790c01..c1525786fc56 100644 --- a/vcl/source/gdi/TypeSerializer.cxx +++ b/vcl/source/gdi/TypeSerializer.cxx @@ -278,9 +278,9 @@ void TypeSerializer::readGraphic(Graphic& rGraphic) if (nLength) { - VectorGraphicDataArray aData(nLength); - - mrStream.ReadBytes(aData.getArray(), nLength); + auto rData = std::make_unique<std::vector<sal_uInt8>>(nLength); + mrStream.ReadBytes(rData->data(), rData->size()); + BinaryDataContainer aDataContainer(rData); if (!mrStream.GetError()) { @@ -300,7 +300,7 @@ void TypeSerializer::readGraphic(Graphic& rGraphic) } auto aVectorGraphicDataPtr - = std::make_shared<VectorGraphicData>(aData, aDataType); + = std::make_shared<VectorGraphicData>(aDataContainer, aDataType); rGraphic = Graphic(aVectorGraphicDataPtr); } } diff --git a/vcl/source/gdi/impgraph.cxx b/vcl/source/gdi/impgraph.cxx index aeb471852ec8..83ae4c849b24 100644 --- a/vcl/source/gdi/impgraph.cxx +++ b/vcl/source/gdi/impgraph.cxx @@ -1546,14 +1546,14 @@ bool ImpGraphic::swapInGraphic(SvStream& rStream) if (constSvgMagic == nMagic || constWmfMagic == nMagic || constEmfMagic == nMagic || constPdfMagic == nMagic) { - sal_uInt32 nVectorGraphicDataArrayLength(0); - rStream.ReadUInt32(nVectorGraphicDataArrayLength); + sal_uInt32 nVectorGraphicDataSize(0); + rStream.ReadUInt32(nVectorGraphicDataSize); - if (nVectorGraphicDataArrayLength) + if (nVectorGraphicDataSize) { - VectorGraphicDataArray aNewData(nVectorGraphicDataArrayLength); - - rStream.ReadBytes(aNewData.getArray(), nVectorGraphicDataArrayLength); + auto rData = std::make_unique<std::vector<sal_uInt8>>(nVectorGraphicDataSize); + rStream.ReadBytes(rData->data(), nVectorGraphicDataSize); + BinaryDataContainer aDataContainer(rData); if (rStream.GetError()) return false; @@ -1578,7 +1578,7 @@ bool ImpGraphic::swapInGraphic(SvStream& rStream) return false; } - auto aVectorGraphicDataPtr = std::make_shared<VectorGraphicData>(aNewData, aDataType); + auto aVectorGraphicDataPtr = std::make_shared<VectorGraphicData>(aDataContainer, aDataType); if (!rStream.GetError()) { diff --git a/vcl/source/gdi/vectorgraphicdata.cxx b/vcl/source/gdi/vectorgraphicdata.cxx index 609040f44129..7f11dc454753 100644 --- a/vcl/source/gdi/vectorgraphicdata.cxx +++ b/vcl/source/gdi/vectorgraphicdata.cxx @@ -252,9 +252,9 @@ void VectorGraphicData::ensureSequenceAndRange() {"PageIndex", uno::makeAny<sal_Int32>(mnPageIndex)}, }); // TODO: change xPdfDecomposer to use BinaryDataContainer directly - VectorGraphicDataArray aVectorGraphicDataArray(maDataContainer.getSize()); - std::copy(maDataContainer.cbegin(), maDataContainer.cend(), aVectorGraphicDataArray.begin()); - auto xPrimitive2D = xPdfDecomposer->getDecomposition(aVectorGraphicDataArray, aDecompositionParameters); + css::uno::Sequence<sal_Int8> aDataSequence(maDataContainer.getSize()); + std::copy(maDataContainer.cbegin(), maDataContainer.cend(), aDataSequence.begin()); + auto xPrimitive2D = xPdfDecomposer->getDecomposition(aDataSequence, aDecompositionParameters); maSequence = comphelper::sequenceToContainer<std::deque<uno::Reference<graphic::XPrimitive2D>>>(xPrimitive2D); break; @@ -301,21 +301,6 @@ std::pair<VectorGraphicData::State, size_t> VectorGraphicData::getSizeBytes() co } } -VectorGraphicData::VectorGraphicData( - const VectorGraphicDataArray& rVectorGraphicDataArray, - VectorGraphicDataType eVectorDataType, - sal_Int32 nPageIndex) -: maDataContainer(reinterpret_cast<const sal_uInt8*>(rVectorGraphicDataArray.begin()), rVectorGraphicDataArray.getLength()), - mbSequenceCreated(false), - maRange(), - maSequence(), - maReplacement(), - mNestedBitmapSize(0), - meVectorGraphicDataType(eVectorDataType), - mnPageIndex(nPageIndex) -{ -} - VectorGraphicData::VectorGraphicData( const BinaryDataContainer& rDataContainer, VectorGraphicDataType eVectorDataType, commit ec92c4b2995d67e0c78236d0e739f6735d77d9a0 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Mon Dec 28 18:34:39 2020 +0900 Commit: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> CommitDate: Tue Dec 29 10:48:32 2020 +0900 vcl: a way to create data for BinaryDataContainer without copying Construstor for BinaryDataContainer taking unique_ptr<sal_uInt8> represents a way how to create and fill the data for the container and make sure that the container is the only one that is managing the data after construction. Generally we don't want to give the access to the internal shared_ptr to the outside, so with the unique_ptr we make sure that there is no outside references present (which would be the case if the we would take shared_ptr as the constructor) and the unique_ptr is cleared (moved) after construction. Change-Id: I123114c8bee92e342740d94a784b2c16e2564528 diff --git a/include/vcl/BinaryDataContainer.hxx b/include/vcl/BinaryDataContainer.hxx index 94ace9767a07..d8a20a94aa3f 100644 --- a/include/vcl/BinaryDataContainer.hxx +++ b/include/vcl/BinaryDataContainer.hxx @@ -28,6 +28,7 @@ private: public: explicit BinaryDataContainer(); explicit BinaryDataContainer(const sal_uInt8* pData, size_t nSize); + explicit BinaryDataContainer(std::unique_ptr<std::vector<sal_uInt8>>& rData); BinaryDataContainer(const BinaryDataContainer& rBinaryDataContainer) : mpData(rBinaryDataContainer.mpData) diff --git a/vcl/qa/cppunit/BinaryDataContainerTest.cxx b/vcl/qa/cppunit/BinaryDataContainerTest.cxx index 597e7d4bc3aa..3f965e8bd3fd 100644 --- a/vcl/qa/cppunit/BinaryDataContainerTest.cxx +++ b/vcl/qa/cppunit/BinaryDataContainerTest.cxx @@ -19,14 +19,14 @@ namespace { class BinaryDataContainerTest : public CppUnit::TestFixture { - void test(); + void testConstruct(); CPPUNIT_TEST_SUITE(BinaryDataContainerTest); - CPPUNIT_TEST(test); + CPPUNIT_TEST(testConstruct); CPPUNIT_TEST_SUITE_END(); }; -void BinaryDataContainerTest::test() +void BinaryDataContainerTest::testConstruct() { { BinaryDataContainer aContainer; @@ -54,6 +54,21 @@ void BinaryDataContainerTest::test() CPPUNIT_ASSERT_EQUAL(true, bool(aCopyOfContainer.isEmpty())); CPPUNIT_ASSERT_EQUAL(size_t(0), aCopyOfContainer.getSize()); } + { + // construct a unique_ptr data array + std::vector<sal_uInt8> aTestByteArray = { 1, 2, 3, 4 }; + auto aConstructionByteArray = std::make_unique<std::vector<sal_uInt8>>(aTestByteArray); + + // remember for later to compare + const sal_uInt8* pInternal = aConstructionByteArray->data(); + + BinaryDataContainer aContainer(aConstructionByteArray); + + // make sure the unique_ptr was moved into BinaryDataContainer + CPPUNIT_ASSERT_EQUAL(false, bool(aConstructionByteArray)); + // make sure we didn't copy data into BinaryDataContainer (pointers match) + CPPUNIT_ASSERT_EQUAL(pInternal, aContainer.getData()); + } } } // namespace diff --git a/vcl/source/graphic/BinaryDataContainer.cxx b/vcl/source/graphic/BinaryDataContainer.cxx index 7576852215b1..4490fb78339b 100644 --- a/vcl/source/graphic/BinaryDataContainer.cxx +++ b/vcl/source/graphic/BinaryDataContainer.cxx @@ -19,6 +19,11 @@ BinaryDataContainer::BinaryDataContainer(const sal_uInt8* pData, size_t nSize) std::copy(pData, pData + nSize, mpData->data()); } +BinaryDataContainer::BinaryDataContainer(std::unique_ptr<std::vector<sal_uInt8>>& rData) + : mpData(std::move(rData)) +{ +} + size_t BinaryDataContainer::calculateHash() const { size_t nSeed = 0; commit b9a453239b10eae808bd848afe87d3549b76eb3f Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Mon Dec 28 10:03:18 2020 +0900 Commit: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> CommitDate: Tue Dec 29 10:48:32 2020 +0900 vcl: use BinaryDataContianer in VectorGraphicData This change is needed so we can use the same data in GfxLink and in VectorGraphicData. Currently the data needed to be duplicated, which is less than ideal. Change-Id: I79419921d09681fa8f0b1ac4bf8ea84199d4aae6 diff --git a/include/vcl/vectorgraphicdata.hxx b/include/vcl/vectorgraphicdata.hxx index e231435312e8..8d55a9487d26 100644 --- a/include/vcl/vectorgraphicdata.hxx +++ b/include/vcl/vectorgraphicdata.hxx @@ -23,6 +23,7 @@ #include <basegfx/range/b2drange.hxx> #include <com/sun/star/uno/Sequence.hxx> #include <vcl/bitmapex.hxx> +#include <vcl/BinaryDataContainer.hxx> #include <rtl/ustring.hxx> #include <deque> #include <memory> @@ -55,7 +56,7 @@ class VCL_DLLPUBLIC VectorGraphicData { private: // the file and length - VectorGraphicDataArray maVectorGraphicDataArray; + BinaryDataContainer maDataContainer; // on demand created content bool mbSequenceCreated; @@ -89,6 +90,10 @@ public: const VectorGraphicDataArray& rVectorGraphicDataArray, VectorGraphicDataType eVectorDataType, sal_Int32 nPageIndex = -1); + VectorGraphicData( + const BinaryDataContainer& rDataContainer, + VectorGraphicDataType eVectorDataType, + sal_Int32 nPageIndex = -1); ~VectorGraphicData(); /// compare op @@ -98,8 +103,16 @@ public: void setWmfExternalHeader(const WmfExternal& aExtHeader); /// data read - const VectorGraphicDataArray& getVectorGraphicDataArray() const { return maVectorGraphicDataArray; } - sal_uInt32 getVectorGraphicDataArrayLength() const { return maVectorGraphicDataArray.getLength(); } + const BinaryDataContainer& getBinaryDataContainer() const + { + return maDataContainer; + } + + sal_uInt32 getVectorGraphicDataArrayLength() const + { + return maDataContainer.getSize(); + } + enum class State { UNPARSED, PARSED }; std::pair<State, size_t> getSizeBytes() const; diff --git a/sd/qa/unit/SdrPdfImportTest.cxx b/sd/qa/unit/SdrPdfImportTest.cxx index f5e24fd19ede..85fb33d8243c 100644 --- a/sd/qa/unit/SdrPdfImportTest.cxx +++ b/sd/qa/unit/SdrPdfImportTest.cxx @@ -175,8 +175,7 @@ CPPUNIT_TEST_FIXTURE(SdrPdfImportTest, testAnnotationsImportExport) sd::ViewShell* pViewShell = pImpressDocument->GetDocShell()->GetViewShell(); CPPUNIT_ASSERT(pViewShell); - const void* pData = nullptr; - int nLength = 0; + BinaryDataContainer aContainer; { // Get the first page - there should be only one. @@ -202,13 +201,15 @@ CPPUNIT_TEST_FIXTURE(SdrPdfImportTest, testAnnotationsImportExport) pVectorGraphicData->getVectorGraphicDataType()); // Write the PDF - pData = pVectorGraphicData->getVectorGraphicDataArray().getConstArray(); - nLength = pVectorGraphicData->getVectorGraphicDataArrayLength(); + aContainer = pVectorGraphicData->getBinaryDataContainer(); } { // check graphic PDF has annotations - auto pPDFDocument = pPdfiumLibrary->openDocument(pData, nLength); + CPPUNIT_ASSERT_EQUAL(false, aContainer.isEmpty()); + + auto pPDFDocument + = pPdfiumLibrary->openDocument(aContainer.getData(), aContainer.getSize()); auto pPDFPage = pPDFDocument->openPage(0); CPPUNIT_ASSERT_EQUAL(2, pPDFPage->getAnnotationCount()); diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx index bf8681502682..259c14233efa 100644 --- a/sd/qa/unit/import-tests.cxx +++ b/sd/qa/unit/import-tests.cxx @@ -1380,8 +1380,8 @@ void SdImportTest::testPDFImportShared() { Graphic const & rGraphic = aGraphics[i]; CPPUNIT_ASSERT_EQUAL_MESSAGE("Expected all PDF streams to be identical.", - rFirstGraphic.getVectorGraphicData()->getVectorGraphicDataArray().getConstArray(), - rGraphic.getVectorGraphicData()->getVectorGraphicDataArray().getConstArray()); + rFirstGraphic.getVectorGraphicData()->getBinaryDataContainer().getData(), + rGraphic.getVectorGraphicData()->getBinaryDataContainer().getData()); CPPUNIT_ASSERT_EQUAL_MESSAGE("Expected all GfxLinks to be identical.", rFirstGraphic.GetSharedGfxLink().get(), diff --git a/svx/source/svdraw/svdpdf.cxx b/svx/source/svdraw/svdpdf.cxx index e1ae905cef33..4cd84120fafe 100644 --- a/svx/source/svdraw/svdpdf.cxx +++ b/svx/source/svdraw/svdpdf.cxx @@ -125,8 +125,8 @@ ImpSdrPdfImport::ImpSdrPdfImport(SdrModel& rModel, SdrLayerID nLay, const tools: // Load the buffer using pdfium. auto const& rVectorGraphicData = rGraphic.getVectorGraphicData(); - auto* pData = rVectorGraphicData->getVectorGraphicDataArray().getConstArray(); - sal_Int32 nSize = rVectorGraphicData->getVectorGraphicDataArrayLength(); + auto* pData = rVectorGraphicData->getBinaryDataContainer().getData(); + sal_Int32 nSize = rVectorGraphicData->getBinaryDataContainer().getSize(); mpPdfDocument = mpPDFium->openDocument(pData, nSize); if (!mpPdfDocument) return; diff --git a/svx/source/xoutdev/_xoutbmp.cxx b/svx/source/xoutdev/_xoutbmp.cxx index 1d0c23e92780..6dba9e722a7d 100644 --- a/svx/source/xoutdev/_xoutbmp.cxx +++ b/svx/source/xoutdev/_xoutbmp.cxx @@ -149,7 +149,8 @@ ErrCode XOutBitmap::WriteGraphic( const Graphic& rGraphic, OUString& rFileName, if (pOStm) { - pOStm->WriteBytes(rVectorGraphicDataPtr->getVectorGraphicDataArray().getConstArray(), rVectorGraphicDataPtr->getVectorGraphicDataArrayLength()); + auto & rDataContainer = rVectorGraphicDataPtr->getBinaryDataContainer(); + pOStm->WriteBytes(rDataContainer.getData(), rDataContainer.getSize()); aMedium.Commit(); if (!aMedium.GetError()) diff --git a/vcl/inc/pdf/ExternalPDFStreams.hxx b/vcl/inc/pdf/ExternalPDFStreams.hxx index ab3d057bd83c..f47aa56578d8 100644 --- a/vcl/inc/pdf/ExternalPDFStreams.hxx +++ b/vcl/inc/pdf/ExternalPDFStreams.hxx @@ -18,6 +18,7 @@ #include <memory> #include <vcl/filter/pdfdocument.hxx> +#include <vcl/BinaryDataContainer.hxx> namespace vcl { @@ -27,7 +28,7 @@ namespace vcl // reused to avoid unnecessary parsing. struct VCL_DLLPUBLIC ExternalPDFStream { - std::vector<sal_uInt8> maData; + BinaryDataContainer maDataContainer; std::shared_ptr<filter::PDFDocument> mpPDFDocument; std::map<sal_Int32, sal_Int32> maCopiedResources; @@ -38,7 +39,7 @@ struct VCL_DLLPUBLIC ExternalPDFStream if (!mpPDFDocument) { SvMemoryStream aPDFStream; - aPDFStream.WriteBytes(maData.data(), maData.size()); + aPDFStream.WriteBytes(maDataContainer.getData(), maDataContainer.getSize()); aPDFStream.Seek(0); mpPDFDocument = std::make_shared<filter::PDFDocument>(); if (!mpPDFDocument->Read(aPDFStream)) @@ -61,7 +62,7 @@ private: public: ExternalPDFStreams() {} - sal_Int32 store(const sal_uInt8* pData, sal_uInt32 nLength); + sal_Int32 store(BinaryDataContainer const& rDataContainer); ExternalPDFStream& get(sal_uInt32 nIndex); }; diff --git a/vcl/qa/cppunit/PDFiumLibraryTest.cxx b/vcl/qa/cppunit/PDFiumLibraryTest.cxx index 577f73ed1130..597737864a87 100644 --- a/vcl/qa/cppunit/PDFiumLibraryTest.cxx +++ b/vcl/qa/cppunit/PDFiumLibraryTest.cxx @@ -65,12 +65,11 @@ void PDFiumLibraryTest::testDocument() CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getVectorGraphicDataType()); - const void* pData = pVectorGraphicData->getVectorGraphicDataArray().getConstArray(); - int nLength = pVectorGraphicData->getVectorGraphicDataArrayLength(); + auto& rDataContainer = pVectorGraphicData->getBinaryDataContainer(); auto pPdfium = vcl::pdf::PDFiumLibrary::get(); CPPUNIT_ASSERT(pPdfium); - auto pDocument = pPdfium->openDocument(pData, nLength); + auto pDocument = pPdfium->openDocument(rDataContainer.getData(), rDataContainer.getSize()); CPPUNIT_ASSERT(pDocument); CPPUNIT_ASSERT_EQUAL(1, pDocument->getPageCount()); @@ -93,11 +92,10 @@ void PDFiumLibraryTest::testPages() CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getVectorGraphicDataType()); - const void* pData = pVectorGraphicData->getVectorGraphicDataArray().getConstArray(); - int nLength = pVectorGraphicData->getVectorGraphicDataArrayLength(); + auto& rDataContainer = pVectorGraphicData->getBinaryDataContainer(); auto pPdfium = vcl::pdf::PDFiumLibrary::get(); - auto pDocument = pPdfium->openDocument(pData, nLength); + auto pDocument = pPdfium->openDocument(rDataContainer.getData(), rDataContainer.getSize()); CPPUNIT_ASSERT(pDocument); CPPUNIT_ASSERT_EQUAL(1, pDocument->getPageCount()); @@ -119,11 +117,10 @@ void PDFiumLibraryTest::testPageObjects() CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getVectorGraphicDataType()); - const void* pData = pVectorGraphicData->getVectorGraphicDataArray().getConstArray(); - int nLength = pVectorGraphicData->getVectorGraphicDataArrayLength(); + auto& rDataContainer = pVectorGraphicData->getBinaryDataContainer(); auto pPdfium = vcl::pdf::PDFiumLibrary::get(); - auto pDocument = pPdfium->openDocument(pData, nLength); + auto pDocument = pPdfium->openDocument(rDataContainer.getData(), rDataContainer.getSize()); CPPUNIT_ASSERT(pDocument); CPPUNIT_ASSERT_EQUAL(1, pDocument->getPageCount()); @@ -169,11 +166,10 @@ void PDFiumLibraryTest::testAnnotationsMadeInEvince() CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getVectorGraphicDataType()); - const void* pData = pVectorGraphicData->getVectorGraphicDataArray().getConstArray(); - int nLength = pVectorGraphicData->getVectorGraphicDataArrayLength(); + auto& rDataContainer = pVectorGraphicData->getBinaryDataContainer(); auto pPdfium = vcl::pdf::PDFiumLibrary::get(); - auto pDocument = pPdfium->openDocument(pData, nLength); + auto pDocument = pPdfium->openDocument(rDataContainer.getData(), rDataContainer.getSize()); CPPUNIT_ASSERT(pDocument); CPPUNIT_ASSERT_EQUAL(1, pDocument->getPageCount()); @@ -226,11 +222,10 @@ void PDFiumLibraryTest::testAnnotationsMadeInAcrobat() CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getVectorGraphicDataType()); - const void* pData = pVectorGraphicData->getVectorGraphicDataArray().getConstArray(); - int nLength = pVectorGraphicData->getVectorGraphicDataArrayLength(); + auto& rDataContainer = pVectorGraphicData->getBinaryDataContainer(); auto pPdfium = vcl::pdf::PDFiumLibrary::get(); - auto pDocument = pPdfium->openDocument(pData, nLength); + auto pDocument = pPdfium->openDocument(rDataContainer.getData(), rDataContainer.getSize()); CPPUNIT_ASSERT(pDocument); CPPUNIT_ASSERT_EQUAL(1, pDocument->getPageCount()); @@ -304,11 +299,10 @@ void PDFiumLibraryTest::testAnnotationsDifferentTypes() CPPUNIT_ASSERT_EQUAL(VectorGraphicDataType::Pdf, pVectorGraphicData->getVectorGraphicDataType()); - const void* pData = pVectorGraphicData->getVectorGraphicDataArray().getConstArray(); - int nLength = pVectorGraphicData->getVectorGraphicDataArrayLength(); + auto& rDataContainer = pVectorGraphicData->getBinaryDataContainer(); auto pPdfium = vcl::pdf::PDFiumLibrary::get(); - auto pDocument = pPdfium->openDocument(pData, nLength); + auto pDocument = pPdfium->openDocument(rDataContainer.getData(), rDataContainer.getSize()); CPPUNIT_ASSERT(pDocument); CPPUNIT_ASSERT_EQUAL(1, pDocument->getPageCount()); diff --git a/vcl/source/filter/graphicfilter.cxx b/vcl/source/filter/graphicfilter.cxx index 02747b4e869b..65f3b8bb450f 100644 --- a/vcl/source/filter/graphicfilter.cxx +++ b/vcl/source/filter/graphicfilter.cxx @@ -1986,7 +1986,8 @@ ErrCode GraphicFilter::ExportGraphic( const Graphic& rGraphic, const OUString& r == rVectorGraphicDataPtr->getVectorGraphicDataType() && !bIsEMF) { - rOStm.WriteBytes(rVectorGraphicDataPtr->getVectorGraphicDataArray().getConstArray(), rVectorGraphicDataPtr->getVectorGraphicDataArrayLength()); + auto & aDataContainer = rVectorGraphicDataPtr->getBinaryDataContainer(); + rOStm.WriteBytes(aDataContainer.getData(), aDataContainer.getSize()); if (rOStm.GetError()) { @@ -2019,7 +2020,8 @@ ErrCode GraphicFilter::ExportGraphic( const Graphic& rGraphic, const OUString& r && rVectorGraphicDataPtr->getVectorGraphicDataArrayLength() && VectorGraphicDataType::Emf == rVectorGraphicDataPtr->getVectorGraphicDataType()) { - rOStm.WriteBytes(rVectorGraphicDataPtr->getVectorGraphicDataArray().getConstArray(), rVectorGraphicDataPtr->getVectorGraphicDataArrayLength()); + auto & aDataContainer = rVectorGraphicDataPtr->getBinaryDataContainer(); + rOStm.WriteBytes(aDataContainer.getData(), aDataContainer.getSize()); if (rOStm.GetError()) { @@ -2113,7 +2115,8 @@ ErrCode GraphicFilter::ExportGraphic( const Graphic& rGraphic, const OUString& r && rVectorGraphicDataPtr->getVectorGraphicDataArrayLength() && VectorGraphicDataType::Svg == rVectorGraphicDataPtr->getVectorGraphicDataType()) { - rOStm.WriteBytes(rVectorGraphicDataPtr->getVectorGraphicDataArray().getConstArray(), rVectorGraphicDataPtr->getVectorGraphicDataArrayLength()); + auto & aDataContainer = rVectorGraphicDataPtr->getBinaryDataContainer(); + rOStm.WriteBytes(aDataContainer.getData(), aDataContainer.getSize()); if( rOStm.GetError() ) { diff --git a/vcl/source/filter/ipdf/pdfread.cxx b/vcl/source/filter/ipdf/pdfread.cxx index 9c8493fcf58c..bfa27f68358b 100644 --- a/vcl/source/filter/ipdf/pdfread.cxx +++ b/vcl/source/filter/ipdf/pdfread.cxx @@ -442,18 +442,17 @@ size_t ImportPDFUnloaded(const OUString& rURL, std::vector<PDFGraphicResult>& rG ::utl::UcbStreamHelper::CreateStream(rURL, StreamMode::READ | StreamMode::SHARE_DENYNONE)); // Save the original PDF stream for later use. - VectorGraphicDataArray aPdfDataArray = createVectorGraphicDataArray(*xStream); - if (!aPdfDataArray.hasElements()) - return 0; + BinaryDataContainer aBinaryDataContainer; + { + VectorGraphicDataArray aPdfDataArray = createVectorGraphicDataArray(*xStream); + if (!aPdfDataArray.hasElements()) + return 0; + const sal_uInt8* pData = reinterpret_cast<const sal_uInt8*>(aPdfDataArray.getConstArray()); + aBinaryDataContainer = BinaryDataContainer(pData, aPdfDataArray.getLength()); + } // Prepare the link with the PDF stream. - const size_t nGraphicContentSize = aPdfDataArray.getLength(); - std::unique_ptr<sal_uInt8[]> pGraphicContent(new sal_uInt8[nGraphicContentSize]); - - std::copy(aPdfDataArray.begin(), aPdfDataArray.end(), pGraphicContent.get()); - - auto pGfxLink = std::make_shared<GfxLink>(std::move(pGraphicContent), nGraphicContentSize, - GfxLinkType::NativePdf); + auto pGfxLink = std::make_shared<GfxLink>(aBinaryDataContainer, GfxLinkType::NativePdf); auto pPdfium = vcl::pdf::PDFiumLibrary::get(); @@ -481,7 +480,7 @@ size_t ImportPDFUnloaded(const OUString& rURL, std::vector<PDFGraphicResult>& rG tools::Long nPageHeight = convertTwipToMm100(aPageSize.getY() * pointToTwipconversionRatio); auto aVectorGraphicDataPtr = std::make_shared<VectorGraphicData>( - aPdfDataArray, VectorGraphicDataType::Pdf, nPageIndex); + aBinaryDataContainer, VectorGraphicDataType::Pdf, nPageIndex); // Create the Graphic with the VectorGraphicDataPtr and link the original PDF stream. // We swap out this Graphic as soon as possible, and a later swap in diff --git a/vcl/source/gdi/TypeSerializer.cxx b/vcl/source/gdi/TypeSerializer.cxx index 114a8de73719..b1cdf4790c01 100644 --- a/vcl/source/gdi/TypeSerializer.cxx +++ b/vcl/source/gdi/TypeSerializer.cxx @@ -386,10 +386,10 @@ void TypeSerializer::writeGraphic(const Graphic& rGraphic) } } - sal_uInt32 nSize = pVectorGraphicData->getVectorGraphicDataArrayLength(); + sal_uInt32 nSize = pVectorGraphicData->getBinaryDataContainer().getSize(); mrStream.WriteUInt32(nSize); - mrStream.WriteBytes( - pVectorGraphicData->getVectorGraphicDataArray().getConstArray(), nSize); + mrStream.WriteBytes(pVectorGraphicData->getBinaryDataContainer().getData(), + nSize); // For backwards compatibility, used to serialize path mrStream.WriteUniOrByteString(OUString(), mrStream.GetStreamCharSet()); } diff --git a/vcl/source/gdi/impgraph.cxx b/vcl/source/gdi/impgraph.cxx index 8dc81eb4987f..aeb471852ec8 100644 --- a/vcl/source/gdi/impgraph.cxx +++ b/vcl/source/gdi/impgraph.cxx @@ -1200,8 +1200,8 @@ bool ImpGraphic::swapOutGraphic(SvStream& rStream) rStream.WriteUInt32(maVectorGraphicData->getVectorGraphicDataArrayLength()); rStream.WriteBytes( - maVectorGraphicData->getVectorGraphicDataArray().getConstArray(), - maVectorGraphicData->getVectorGraphicDataArrayLength()); + maVectorGraphicData->getBinaryDataContainer().getData(), + maVectorGraphicData->getBinaryDataContainer().getSize()); } else if (ImplIsAnimated()) { diff --git a/vcl/source/gdi/pdfwriter_impl.cxx b/vcl/source/gdi/pdfwriter_impl.cxx index 3ba778e09d49..1547f4a8ea99 100644 --- a/vcl/source/gdi/pdfwriter_impl.cxx +++ b/vcl/source/gdi/pdfwriter_impl.cxx @@ -4484,12 +4484,12 @@ bool PDFWriterImpl::emitEmbeddedFiles() aLine.append(rEmbeddedFile.m_nObject); aLine.append(" 0 obj\n"); aLine.append("<< /Type /EmbeddedFile /Length "); - aLine.append(static_cast<sal_Int64>(rEmbeddedFile.m_pData->size())); + aLine.append(static_cast<sal_Int64>(rEmbeddedFile.m_aDataContainer.getSize())); aLine.append(" >>\nstream\n"); CHECK_RETURN(writeBuffer(aLine.getStr(), aLine.getLength())); aLine.setLength(0); - CHECK_RETURN(writeBuffer(rEmbeddedFile.m_pData->data(), rEmbeddedFile.m_pData->size())); + CHECK_RETURN(writeBuffer(rEmbeddedFile.m_aDataContainer.getData(), rEmbeddedFile.m_aDataContainer.getSize())); aLine.append("\nendstream\nendobj\n\n"); CHECK_RETURN(writeBuffer(aLine.getStr(), aLine.getLength())); @@ -9003,22 +9003,19 @@ void PDFWriterImpl::createEmbeddedFile(const Graphic& rGraphic, ReferenceXObject if (!rGraphic.getVectorGraphicData() || rGraphic.getVectorGraphicData()->getVectorGraphicDataType() != VectorGraphicDataType::Pdf) return; - sal_uInt32 nLength = rGraphic.getVectorGraphicData()->getVectorGraphicDataArrayLength(); - auto const & rArray = rGraphic.getVectorGraphicData()->getVectorGraphicDataArray(); + BinaryDataContainer const & rDataContainer = rGraphic.getVectorGraphicData()->getBinaryDataContainer(); if (m_aContext.UseReferenceXObject) { - auto pPDFData = std::make_shared<std::vector<sal_Int8>>(rArray.getConstArray(), rArray.getConstArray() + nLength); - // Store the original PDF data as an embedded file. m_aEmbeddedFiles.emplace_back(); m_aEmbeddedFiles.back().m_nObject = createObject(); - m_aEmbeddedFiles.back().m_pData = pPDFData; + m_aEmbeddedFiles.back().m_aDataContainer = rDataContainer; rEmit.m_nEmbeddedObject = m_aEmbeddedFiles.back().m_nObject; } else { - sal_Int32 aIndex = m_aExternalPDFStreams.store(reinterpret_cast<const sal_uInt8*>(rArray.getConstArray()), nLength); + sal_Int32 aIndex = m_aExternalPDFStreams.store(rDataContainer); rEmit.m_nExternalPDFPageIndex = rGraphic.getVectorGraphicData()->getPageIndex(); rEmit.m_nExternalPDFDataIndex = aIndex; } diff --git a/vcl/source/gdi/pdfwriter_impl.hxx b/vcl/source/gdi/pdfwriter_impl.hxx index 25a2774f7ab7..cfbe450e859a 100644 --- a/vcl/source/gdi/pdfwriter_impl.hxx +++ b/vcl/source/gdi/pdfwriter_impl.hxx @@ -50,6 +50,7 @@ #include <o3tl/lru_map.hxx> #include <comphelper/hash.hxx> #include <tools/stream.hxx> +#include <vcl/BinaryDataContainer.hxx> #include <vcl/filter/pdfobjectcontainer.hxx> #include <pdf/ExternalPDFStreams.hxx> @@ -402,7 +403,7 @@ struct PDFEmbeddedFile /// ID of the file. sal_Int32 m_nObject; /// Contents of the file. - std::shared_ptr<std::vector<sal_Int8>> m_pData; + BinaryDataContainer m_aDataContainer; PDFEmbeddedFile() : m_nObject(0) diff --git a/vcl/source/gdi/vectorgraphicdata.cxx b/vcl/source/gdi/vectorgraphicdata.cxx index 61618b7adfe8..609040f44129 100644 --- a/vcl/source/gdi/vectorgraphicdata.cxx +++ b/vcl/source/gdi/vectorgraphicdata.cxx @@ -39,6 +39,7 @@ #include <vcl/outdev.hxx> #include <vcl/wmfexternal.hxx> #include <vcl/pdfread.hxx> +#include <unotools/streamwrap.hxx> using namespace ::com::sun::star; @@ -117,9 +118,9 @@ bool VectorGraphicData::operator==(const VectorGraphicData& rCandidate) const if (getVectorGraphicDataArrayLength() == rCandidate.getVectorGraphicDataArrayLength()) { if (0 == memcmp( - getVectorGraphicDataArray().getConstArray(), - rCandidate.getVectorGraphicDataArray().getConstArray(), - getVectorGraphicDataArrayLength())) + maDataContainer.getData(), + rCandidate.maDataContainer.getData(), + maDataContainer.getSize())) { return true; } @@ -151,8 +152,8 @@ void VectorGraphicData::ensurePdfReplacement() sal_Int32 nUsePageIndex = 0; if (mnPageIndex >= 0) nUsePageIndex = mnPageIndex; - vcl::RenderPDFBitmaps(maVectorGraphicDataArray.getConstArray(), - maVectorGraphicDataArray.getLength(), aBitmaps, nUsePageIndex, 1, + vcl::RenderPDFBitmaps(maDataContainer.getData(), + maDataContainer.getSize(), aBitmaps, nUsePageIndex, 1, &maSizeHint); if (!aBitmaps.empty()) maReplacement = aBitmaps[0]; @@ -181,7 +182,9 @@ void VectorGraphicData::ensureReplacement() void VectorGraphicData::ensureSequenceAndRange() { - if (mbSequenceCreated || !maVectorGraphicDataArray.hasElements()) + printf ("VectorGraphicData::ensureSequenceAndRange\n"); + + if (mbSequenceCreated || maDataContainer.isEmpty()) return; // import SVG to maSequence, also set maRange @@ -194,11 +197,15 @@ void VectorGraphicData::ensureSequenceAndRange() { case VectorGraphicDataType::Svg: { + css::uno::Sequence<sal_Int8> aDataSequence(maDataContainer.getSize()); + std::copy(maDataContainer.cbegin(), maDataContainer.cend(), aDataSequence.begin()); + const uno::Reference<io::XInputStream> xInputStream(new comphelper::SequenceInputStream(aDataSequence)); + + const uno::Reference< graphic::XSvgParser > xSvgParser = graphic::SvgTools::create(xContext); - const uno::Reference< io::XInputStream > myInputStream(new comphelper::SequenceInputStream(maVectorGraphicDataArray)); - if (myInputStream.is()) - maSequence = comphelper::sequenceToContainer<std::deque<css::uno::Reference< css::graphic::XPrimitive2D >>>(xSvgParser->getDecomposition(myInputStream, OUString())); + if (xInputStream.is()) + maSequence = comphelper::sequenceToContainer<std::deque<css::uno::Reference< css::graphic::XPrimitive2D >>>(xSvgParser->getDecomposition(xInputStream, OUString())); break; } @@ -206,7 +213,11 @@ void VectorGraphicData::ensureSequenceAndRange() case VectorGraphicDataType::Wmf: { const uno::Reference< graphic::XEmfParser > xEmfParser = graphic::EmfTools::create(xContext); - const uno::Reference< io::XInputStream > myInputStream(new comphelper::SequenceInputStream(maVectorGraphicDataArray)); + + css::uno::Sequence<sal_Int8> aDataSequence(maDataContainer.getSize()); + std::copy(maDataContainer.cbegin(), maDataContainer.cend(), aDataSequence.begin()); + const uno::Reference<io::XInputStream> xInputStream(new comphelper::SequenceInputStream(aDataSequence)); + uno::Sequence< ::beans::PropertyValue > aSequence; if (mpExternalHeader) @@ -214,7 +225,7 @@ void VectorGraphicData::ensureSequenceAndRange() aSequence = mpExternalHeader->getSequence(); } - if (myInputStream.is()) + if (xInputStream.is()) { // Pass the size hint of the graphic to the EMF parser. geometry::RealPoint2D aSizeHint; @@ -224,15 +235,12 @@ void VectorGraphicData::ensureSequenceAndRange() if (!mbEnableEMFPlus) { - auto aVector - = comphelper::sequenceToContainer<std::vector<beans::PropertyValue>>( - aSequence); - aVector.push_back( - comphelper::makePropertyValue("EMFPlusEnable", uno::makeAny(false))); + auto aVector = comphelper::sequenceToContainer<std::vector<beans::PropertyValue>>(aSequence); + aVector.push_back(comphelper::makePropertyValue("EMFPlusEnable", uno::makeAny(false))); aSequence = comphelper::containerToSequence(aVector); } - maSequence = comphelper::sequenceToContainer<std::deque<css::uno::Reference< css::graphic::XPrimitive2D >>>(xEmfParser->getDecomposition(myInputStream, OUString(), aSequence)); + maSequence = comphelper::sequenceToContainer<std::deque<css::uno::Reference< css::graphic::XPrimitive2D >>>(xEmfParser->getDecomposition(xInputStream, OUString(), aSequence)); } break; @@ -243,7 +251,10 @@ void VectorGraphicData::ensureSequenceAndRange() uno::Sequence<beans::PropertyValue> aDecompositionParameters = comphelper::InitPropertySequence({ {"PageIndex", uno::makeAny<sal_Int32>(mnPageIndex)}, }); - auto xPrimitive2D = xPdfDecomposer->getDecomposition(maVectorGraphicDataArray, aDecompositionParameters); + // TODO: change xPdfDecomposer to use BinaryDataContainer directly + VectorGraphicDataArray aVectorGraphicDataArray(maDataContainer.getSize()); + std::copy(maDataContainer.cbegin(), maDataContainer.cend(), aVectorGraphicDataArray.begin()); + auto xPrimitive2D = xPdfDecomposer->getDecomposition(aVectorGraphicDataArray, aDecompositionParameters); maSequence = comphelper::sequenceToContainer<std::deque<uno::Reference<graphic::XPrimitive2D>>>(xPrimitive2D); break; @@ -280,13 +291,13 @@ void VectorGraphicData::ensureSequenceAndRange() std::pair<VectorGraphicData::State, size_t> VectorGraphicData::getSizeBytes() const { - if (!maSequence.empty() && maVectorGraphicDataArray.hasElements()) + if (!maSequence.empty() && !maDataContainer.isEmpty()) { - return std::make_pair(State::PARSED, maVectorGraphicDataArray.getLength() + mNestedBitmapSize); + return std::make_pair(State::PARSED, maDataContainer.getSize() + mNestedBitmapSize); } else { - return std::make_pair(State::UNPARSED, maVectorGraphicDataArray.getLength()); + return std::make_pair(State::UNPARSED, maDataContainer.getSize()); } } @@ -294,7 +305,22 @@ VectorGraphicData::VectorGraphicData( const VectorGraphicDataArray& rVectorGraphicDataArray, VectorGraphicDataType eVectorDataType, sal_Int32 nPageIndex) -: maVectorGraphicDataArray(rVectorGraphicDataArray), +: maDataContainer(reinterpret_cast<const sal_uInt8*>(rVectorGraphicDataArray.begin()), rVectorGraphicDataArray.getLength()), + mbSequenceCreated(false), + maRange(), + maSequence(), + maReplacement(), + mNestedBitmapSize(0), + meVectorGraphicDataType(eVectorDataType), + mnPageIndex(nPageIndex) +{ +} + +VectorGraphicData::VectorGraphicData( + const BinaryDataContainer& rDataContainer, + VectorGraphicDataType eVectorDataType, + sal_Int32 nPageIndex) +: maDataContainer(rDataContainer), mbSequenceCreated(false), maRange(), maSequence(), @@ -332,7 +358,7 @@ const BitmapEx& VectorGraphicData::getReplacement() const BitmapChecksum VectorGraphicData::GetChecksum() const { - return vcl_get_checksum(0, maVectorGraphicDataArray.getConstArray(), maVectorGraphicDataArray.getLength()); + return vcl_get_checksum(0, maDataContainer.getData(), maDataContainer.getSize()); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/graphic/GraphicID.cxx b/vcl/source/graphic/GraphicID.cxx index 1cad217241fa..cfd2d751d246 100644 --- a/vcl/source/graphic/GraphicID.cxx +++ b/vcl/source/graphic/GraphicID.cxx @@ -39,9 +39,8 @@ GraphicID::GraphicID(ImpGraphic const& rGraphic) mnID1 |= rVectorGraphicDataPtr->getVectorGraphicDataArrayLength(); mnID2 = basegfx::fround(rRange.getWidth()); mnID3 = basegfx::fround(rRange.getHeight()); - mnID4 = vcl_get_checksum( - 0, rVectorGraphicDataPtr->getVectorGraphicDataArray().getConstArray(), - rVectorGraphicDataPtr->getVectorGraphicDataArrayLength()); + mnID4 = vcl_get_checksum(0, rVectorGraphicDataPtr->getBinaryDataContainer().getData(), + rVectorGraphicDataPtr->getBinaryDataContainer().getSize()); } else if (rGraphic.ImplIsAnimated()) { diff --git a/vcl/source/graphic/VectorGraphicSearch.cxx b/vcl/source/graphic/VectorGraphicSearch.cxx index dfa747bc1a6a..3c1003d29654 100644 --- a/vcl/source/graphic/VectorGraphicSearch.cxx +++ b/vcl/source/graphic/VectorGraphicSearch.cxx @@ -252,8 +252,8 @@ bool VectorGraphicSearch::search(OUString const& rSearchString, bool VectorGraphicSearch::searchPDF(std::shared_ptr<VectorGraphicData> const& rData) { mpImplementation->mpPdfDocument - = FPDF_LoadMemDocument(rData->getVectorGraphicDataArray().getConstArray(), - rData->getVectorGraphicDataArrayLength(), /*password=*/nullptr); + = FPDF_LoadMemDocument(rData->getBinaryDataContainer().getData(), + rData->getBinaryDataContainer().getSize(), /*password=*/nullptr); if (!mpImplementation->mpPdfDocument) { diff --git a/vcl/source/pdf/ExternalPDFStreams.cxx b/vcl/source/pdf/ExternalPDFStreams.cxx index 08f31ed22829..e3716e1e0aed 100644 --- a/vcl/source/pdf/ExternalPDFStreams.cxx +++ b/vcl/source/pdf/ExternalPDFStreams.cxx @@ -13,19 +13,18 @@ namespace vcl { -sal_Int32 ExternalPDFStreams::store(const sal_uInt8* pData, sal_uInt32 nLength) +sal_Int32 ExternalPDFStreams::store(BinaryDataContainer const& rDataContainer) { sal_Int32 nIndex = -1; - std::vector<sal_uInt8> aHash - = comphelper::Hash::calculateHash(pData, nLength, comphelper::HashType::SHA1); + std::vector<sal_uInt8> aHash = comphelper::Hash::calculateHash( + rDataContainer.getData(), rDataContainer.getSize(), comphelper::HashType::SHA1); auto it = maStreamIndexMap.find(aHash); if (it == maStreamIndexMap.end()) { auto& rExternalStream = maStreamList.emplace_back(); - rExternalStream.maData.resize(nLength); - std::copy(pData, pData + nLength, rExternalStream.maData.begin()); + rExternalStream.maDataContainer = rDataContainer; nIndex = maStreamList.size() - 1; maStreamIndexMap.emplace(aHash, nIndex); } commit 82080920848d63168c714f1b3745f601ac1fbb8d Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Sun Dec 27 19:07:57 2020 +0900 Commit: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> CommitDate: Tue Dec 29 10:48:31 2020 +0900 vcl: implement BinaryDataContainer copy, move + test Also remove constructor that takes size only - BinaryDataContainer should always be constructed with data, that is copied into the container and should be immutable. Change-Id: Ic61b393b7729b948843bd20e6676c9290c68936f diff --git a/include/vcl/BinaryDataContainer.hxx b/include/vcl/BinaryDataContainer.hxx index 5eb5f4486b9e..94ace9767a07 100644 --- a/include/vcl/BinaryDataContainer.hxx +++ b/include/vcl/BinaryDataContainer.hxx @@ -27,13 +27,29 @@ private: public: explicit BinaryDataContainer(); - explicit BinaryDataContainer(size_t nSize); explicit BinaryDataContainer(const sal_uInt8* pData, size_t nSize); - explicit BinaryDataContainer(const BinaryDataContainer& rBinaryDataContainer) = default; - explicit BinaryDataContainer(BinaryDataContainer&& rBinaryDataContainer) = default; - BinaryDataContainer& operator=(const BinaryDataContainer& rBinaryDataContainer) = default; - BinaryDataContainer& operator=(BinaryDataContainer&& rBinaryDataContainer) = default; + BinaryDataContainer(const BinaryDataContainer& rBinaryDataContainer) + : mpData(rBinaryDataContainer.mpData) + { + } + + BinaryDataContainer(BinaryDataContainer&& rBinaryDataContainer) + : mpData(std::move(rBinaryDataContainer.mpData)) + { + } + + BinaryDataContainer& operator=(const BinaryDataContainer& rBinaryDataContainer) + { + mpData = rBinaryDataContainer.mpData; + return *this; + } + + BinaryDataContainer& operator=(BinaryDataContainer&& rBinaryDataContainer) + { + mpData = std::move(rBinaryDataContainer.mpData); + return *this; + } size_t getSize() const { return mpData ? mpData->size() : 0; } bool isEmpty() const { return mpData && mpData->empty(); } diff --git a/vcl/CppunitTest_vcl_graphic_test.mk b/vcl/CppunitTest_vcl_graphic_test.mk index 2f2c61735ef8..9221fd474fdd 100644 --- a/vcl/CppunitTest_vcl_graphic_test.mk +++ b/vcl/CppunitTest_vcl_graphic_test.mk @@ -15,6 +15,7 @@ $(eval $(call gb_CppunitTest_add_exception_objects,vcl_graphic_test, \ vcl/qa/cppunit/GraphicFormatDetectorTest \ vcl/qa/cppunit/GraphicNativeMetadataTest \ vcl/qa/cppunit/VectorGraphicSearchTest \ + vcl/qa/cppunit/BinaryDataContainerTest \ )) $(eval $(call gb_CppunitTest_use_externals,vcl_graphic_test, \ diff --git a/vcl/qa/cppunit/BinaryDataContainerTest.cxx b/vcl/qa/cppunit/BinaryDataContainerTest.cxx new file mode 100644 index 000000000000..597e7d4bc3aa --- /dev/null +++ b/vcl/qa/cppunit/BinaryDataContainerTest.cxx @@ -0,0 +1,63 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <cppunit/TestAssert.h> +#include <cppunit/TestFixture.h> +#include <cppunit/extensions/HelperMacros.h> + +#include <vcl/BinaryDataContainer.hxx> + +using namespace css; + +namespace +{ +class BinaryDataContainerTest : public CppUnit::TestFixture +{ + void test(); + + CPPUNIT_TEST_SUITE(BinaryDataContainerTest); + CPPUNIT_TEST(test); + CPPUNIT_TEST_SUITE_END(); +}; + +void BinaryDataContainerTest::test() +{ + { + BinaryDataContainer aContainer; + CPPUNIT_ASSERT_EQUAL(true, bool(aContainer.isEmpty())); + CPPUNIT_ASSERT_EQUAL(size_t(0), aContainer.getSize()); + } + { + std::vector<sal_uInt8> aTestByteArray = { 1, 2, 3, 4 }; + BinaryDataContainer aContainer(aTestByteArray.data(), aTestByteArray.size()); + CPPUNIT_ASSERT_EQUAL(false, bool(aContainer.isEmpty())); + CPPUNIT_ASSERT_EQUAL(size_t(4), aContainer.getSize()); + + // Test Copy + BinaryDataContainer aCopyOfContainer = aContainer; + CPPUNIT_ASSERT_EQUAL(false, bool(aCopyOfContainer.isEmpty())); + CPPUNIT_ASSERT_EQUAL(size_t(4), aCopyOfContainer.getSize()); + CPPUNIT_ASSERT_EQUAL(aCopyOfContainer.getData(), aContainer.getData()); + + // Test Move + BinaryDataContainer aMovedInContainer = std::move(aCopyOfContainer); + CPPUNIT_ASSERT_EQUAL(false, bool(aMovedInContainer.isEmpty())); + CPPUNIT_ASSERT_EQUAL(size_t(4), aMovedInContainer.getSize()); + CPPUNIT_ASSERT_EQUAL(aMovedInContainer.getData(), aContainer.getData()); + + CPPUNIT_ASSERT_EQUAL(true, bool(aCopyOfContainer.isEmpty())); + CPPUNIT_ASSERT_EQUAL(size_t(0), aCopyOfContainer.getSize()); + } +} + +} // namespace + +CPPUNIT_TEST_SUITE_REGISTRATION(BinaryDataContainerTest); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/graphic/BinaryDataContainer.cxx b/vcl/source/graphic/BinaryDataContainer.cxx index 4c556195fe6a..7576852215b1 100644 --- a/vcl/source/graphic/BinaryDataContainer.cxx +++ b/vcl/source/graphic/BinaryDataContainer.cxx @@ -13,11 +13,6 @@ BinaryDataContainer::BinaryDataContainer() = default; -BinaryDataContainer::BinaryDataContainer(size_t nSize) - : mpData(std::make_shared<std::vector<sal_uInt8>>(nSize)) -{ -} - BinaryDataContainer::BinaryDataContainer(const sal_uInt8* pData, size_t nSize) : mpData(std::make_shared<std::vector<sal_uInt8>>(nSize)) { commit f7e03d34232251c9d8d4938098288344a12dd53c Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Sat Dec 26 12:41:08 2020 +0900 Commit: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> CommitDate: Tue Dec 29 10:48:31 2020 +0900 vcl: remove "path" attribute from VectorGraphicData This isn't used for anything important for the vector graphic and is mostly empty string anyways. Change-Id: I1c5b52b5b407bd320cb5053141f1699971607399 diff --git a/include/vcl/vectorgraphicdata.hxx b/include/vcl/vectorgraphicdata.hxx index cb3963947d2d..e231435312e8 100644 --- a/include/vcl/vectorgraphicdata.hxx +++ b/include/vcl/vectorgraphicdata.hxx @@ -57,9 +57,6 @@ private: // the file and length VectorGraphicDataArray maVectorGraphicDataArray; - // The absolute Path if available - OUString maPath; - // on demand created content bool mbSequenceCreated; basegfx::B2DRange maRange; @@ -90,7 +87,6 @@ private: public: VectorGraphicData( const VectorGraphicDataArray& rVectorGraphicDataArray, - const OUString& rPath, VectorGraphicDataType eVectorDataType, sal_Int32 nPageIndex = -1); ~VectorGraphicData(); @@ -106,7 +102,7 @@ public: sal_uInt32 getVectorGraphicDataArrayLength() const { return maVectorGraphicDataArray.getLength(); } enum class State { UNPARSED, PARSED }; std::pair<State, size_t> getSizeBytes() const; - const OUString& getPath() const { return maPath; } + const VectorGraphicDataType& getVectorGraphicDataType() const { return meVectorGraphicDataType; } /// data read and evtl. on demand creation diff --git a/sfx2/source/appl/appmisc.cxx b/sfx2/source/appl/appmisc.cxx index 37011ff1cc2f..c62fcd47a1e5 100644 --- a/sfx2/source/appl/appmisc.cxx +++ b/sfx2/source/appl/appmisc.cxx @@ -166,13 +166,13 @@ bool SfxApplication::loadBrandSvg(const char *pName, BitmapEx &rBitmap, int nWid std::vector<sal_uInt8> aBinaryData; OUString aPath = aObj.PathToFileName(); - if (!loadDataFromFile(aObj.PathToFileName(), aBinaryData)) + if (!loadDataFromFile(aPath, aBinaryData)) return false; VectorGraphicDataArray aVectorGraphicDataArray; std::copy(aBinaryData.cbegin(), aBinaryData.cend(), aVectorGraphicDataArray.begin()); - VectorGraphicData aVectorGraphicData(aVectorGraphicDataArray, aPath, VectorGraphicDataType::Svg); + VectorGraphicData aVectorGraphicData(aVectorGraphicDataArray, VectorGraphicDataType::Svg); // transform into [0,0,width,width*aspect] std dimensions diff --git a/vcl/qa/cppunit/GraphicTest.cxx b/vcl/qa/cppunit/GraphicTest.cxx index 538995ff5dd2..e4829860a515 100644 --- a/vcl/qa/cppunit/GraphicTest.cxx +++ b/vcl/qa/cppunit/GraphicTest.cxx @@ -325,6 +325,10 @@ void GraphicTest::testUnloadedGraphicSizeUnit() Size aMtfSize100(42, 42); SvFileStream aStream(aURL, StreamMode::READ); Graphic aGraphic = rGraphicFilter.ImportUnloadedGraphic(aStream, 0, &aMtfSize100); + + CPPUNIT_ASSERT_EQUAL(Size(42, 42), aGraphic.GetPrefSize()); + + // Force it to swap in aGraphic.makeAvailable(); // Without the accompanying fix in place, this test would have failed with: @@ -753,10 +757,10 @@ void GraphicTest::testSwappingVectorGraphic_SVG_WithoutGfxLink() CPPUNIT_ASSERT_EQUAL(true, bool(xStream)); // Check size of the stream - CPPUNIT_ASSERT_EQUAL(sal_uInt64(249), xStream->remainingSize()); + CPPUNIT_ASSERT_EQUAL(sal_uInt64(247), xStream->remainingSize()); std::vector<unsigned char> aHash = calculateHash(xStream); - CPPUNIT_ASSERT_EQUAL(std::string("322da9ea0683f03ce35cf8a71e59b686b9be28e8"), + CPPUNIT_ASSERT_EQUAL(std::string("666820973fd95e6cd9e7bc5f1c53732acbc99326"), toHexString(aHash)); } diff --git a/vcl/source/filter/graphicfilter.cxx b/vcl/source/filter/graphicfilter.cxx index 2a708336d233..02747b4e869b 100644 --- a/vcl/source/filter/graphicfilter.cxx +++ b/vcl/source/filter/graphicfilter.cxx @@ -1620,7 +1620,7 @@ ErrCode GraphicFilter::ImportGraphic( Graphic& rGraphic, const OUString& rPath, if(!aMemStream.GetError() ) { - auto aVectorGraphicDataPtr = std::make_shared<VectorGraphicData>(aNewData, rPath, VectorGraphicDataType::Svg); + auto aVectorGraphicDataPtr = std::make_shared<VectorGraphicData>(aNewData, VectorGraphicDataType::Svg); rGraphic = Graphic(aVectorGraphicDataPtr); bOkay = true; } @@ -1633,7 +1633,7 @@ ErrCode GraphicFilter::ImportGraphic( Graphic& rGraphic, const OUString& rPath, if(!rIStream.GetError()) { - auto aVectorGraphicDataPtr = std::make_shared<VectorGraphicData>(aNewData, rPath, VectorGraphicDataType::Svg); + auto aVectorGraphicDataPtr = std::make_shared<VectorGraphicData>(aNewData, VectorGraphicDataType::Svg); rGraphic = Graphic(aVectorGraphicDataPtr); bOkay = true; } @@ -1710,7 +1710,6 @@ ErrCode GraphicFilter::ImportGraphic( Graphic& rGraphic, const OUString& rPath, auto aVectorGraphicDataPtr = std::make_shared<VectorGraphicData>( aNewData, - rPath, aDataType); if (pExtHeader) diff --git a/vcl/source/filter/ipdf/pdfread.cxx b/vcl/source/filter/ipdf/pdfread.cxx index ecc22331520a..9c8493fcf58c 100644 --- a/vcl/source/filter/ipdf/pdfread.cxx +++ b/vcl/source/filter/ipdf/pdfread.cxx @@ -240,8 +240,8 @@ bool importPdfVectorGraphicData(SvStream& rStream, return false; } - rVectorGraphicData = std::make_shared<VectorGraphicData>(aPdfDataArray, OUString(), - VectorGraphicDataType::Pdf); + rVectorGraphicData + = std::make_shared<VectorGraphicData>(aPdfDataArray, VectorGraphicDataType::Pdf); return true; } @@ -481,7 +481,7 @@ size_t ImportPDFUnloaded(const OUString& rURL, std::vector<PDFGraphicResult>& rG tools::Long nPageHeight = convertTwipToMm100(aPageSize.getY() * pointToTwipconversionRatio); auto aVectorGraphicDataPtr = std::make_shared<VectorGraphicData>( - aPdfDataArray, OUString(), VectorGraphicDataType::Pdf, nPageIndex); ... etc. - the rest is truncated _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits