diff options
61 files changed, 421 insertions, 236 deletions
diff --git a/drawinglayer/source/drawinglayeruno/xprimitive2drenderer.cxx b/drawinglayer/source/drawinglayeruno/xprimitive2drenderer.cxx index abca8a310925..4c236606711e 100644 --- a/drawinglayer/source/drawinglayeruno/xprimitive2drenderer.cxx +++ b/drawinglayer/source/drawinglayeruno/xprimitive2drenderer.cxx @@ -133,7 +133,7 @@ namespace drawinglayer::unorenderer const primitive2d::Primitive2DReference xEmbedRef( new primitive2d::TransformPrimitive2D( aEmbedding, - comphelper::sequenceToContainer<primitive2d::Primitive2DContainer>(aPrimitive2DSequence))); + aPrimitive2DSequence)); primitive2d::Primitive2DContainer xEmbedSeq { xEmbedRef }; BitmapEx aBitmapEx( diff --git a/drawinglayer/source/primitive2d/BufferedDecompositionPrimitive2D.cxx b/drawinglayer/source/primitive2d/BufferedDecompositionPrimitive2D.cxx index 769b23fb5b80..68ccc714c688 100644 --- a/drawinglayer/source/primitive2d/BufferedDecompositionPrimitive2D.cxx +++ b/drawinglayer/source/primitive2d/BufferedDecompositionPrimitive2D.cxx @@ -33,8 +33,6 @@ void BufferedDecompositionPrimitive2D::get2DDecomposition( Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const { - std::unique_lock aGuard(m_aMutex); - if (getBuffered2DDecomposition().empty()) { Primitive2DContainer aNewSequence; diff --git a/drawinglayer/source/primitive2d/Primitive2DContainer.cxx b/drawinglayer/source/primitive2d/Primitive2DContainer.cxx index 3ae4a9b3e3c4..b6c30a1c43bf 100644 --- a/drawinglayer/source/primitive2d/Primitive2DContainer.cxx +++ b/drawinglayer/source/primitive2d/Primitive2DContainer.cxx @@ -21,12 +21,39 @@ #include <drawinglayer/primitive2d/Primitive2DContainer.hxx> #include <drawinglayer/primitive2d/Tools.hxx> +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> #include <drawinglayer/geometry/viewinformation2d.hxx> using namespace css; namespace drawinglayer::primitive2d { +Primitive2DContainer::Primitive2DContainer( + const css::uno::Sequence<css::uno::Reference<css::graphic::XPrimitive2D>>& rSource) +{ + for (const auto& rPrimitive : rSource) + append(static_cast<const UnoPrimitive2D*>(rPrimitive.get())->getBasePrimitive2D()); +} +Primitive2DContainer::Primitive2DContainer( + const std::deque<css::uno::Reference<css::graphic::XPrimitive2D>>& rSource) +{ + for (const auto& rPrimitive : rSource) + append(static_cast<const UnoPrimitive2D*>(rPrimitive.get())->getBasePrimitive2D()); +} + +css::uno::Sequence<css::uno::Reference<css::graphic::XPrimitive2D>> +Primitive2DContainer::toSequence() const +{ + css::uno::Sequence<css::uno::Reference<css::graphic::XPrimitive2D>> aVal(size()); + auto p = aVal.getArray(); + for (const auto& rPrimitive : *this) + { + *p = new UnoPrimitive2D(rPrimitive); + ++p; + } + return aVal; +} + Primitive2DContainer Primitive2DContainer::maybeInvert(bool bInvert) const { const sal_uInt32 nSize(size()); @@ -115,7 +142,47 @@ void Primitive2DContainer::append(Primitive2DContainer&& rSource) void Primitive2DContainer::append(const Primitive2DSequence& rSource) { - this->insert(this->end(), rSource.begin(), rSource.end()); + for (const auto& rPrimitive : rSource) + append(static_cast<const UnoPrimitive2D*>(rPrimitive.get())->getBasePrimitive2D()); +} + +UnoPrimitive2D::~UnoPrimitive2D() {} + +basegfx::B2DRange +UnoPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const +{ + std::unique_lock aGuard(m_aMutex); + return mxPrimitive->getB2DRange(rViewInformation); +} + +sal_uInt32 UnoPrimitive2D::getPrimitive2DID() const { return mxPrimitive->getPrimitive2DID(); } + +void UnoPrimitive2D::get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, + const geometry::ViewInformation2D& rViewInformation) const +{ + std::unique_lock aGuard(m_aMutex); + mxPrimitive->get2DDecomposition(rVisitor, rViewInformation); +} + +css::uno::Sequence<::css::uno::Reference<::css::graphic::XPrimitive2D>> + SAL_CALL UnoPrimitive2D::getDecomposition( + const css::uno::Sequence<css::beans::PropertyValue>& rViewParameters) +{ + std::unique_lock aGuard(m_aMutex); + return mxPrimitive->getDecomposition(rViewParameters).toSequence(); +} + +css::geometry::RealRectangle2D SAL_CALL +UnoPrimitive2D::getRange(const css::uno::Sequence<css::beans::PropertyValue>& rViewParameters) +{ + std::unique_lock aGuard(m_aMutex); + return mxPrimitive->getRange(rViewParameters); +} + +sal_Int64 SAL_CALL UnoPrimitive2D::estimateUsage() +{ + std::unique_lock aGuard(m_aMutex); + return mxPrimitive->estimateUsage(); } } // end of namespace drawinglayer::primitive2d diff --git a/drawinglayer/source/primitive2d/Tools.cxx b/drawinglayer/source/primitive2d/Tools.cxx index 7be666a2cbd0..87272d9d1f9d 100644 --- a/drawinglayer/source/primitive2d/Tools.cxx +++ b/drawinglayer/source/primitive2d/Tools.cxx @@ -35,9 +35,7 @@ getB2DRangeFromPrimitive2DReference(const Primitive2DReference& rCandidate, if (!rCandidate) return basegfx::B2DRange(); - // get C++ implementation base - const BasePrimitive2D* pCandidate(static_cast<BasePrimitive2D*>(rCandidate.get())); - return pCandidate->getB2DRange(aViewInformation); + return rCandidate->getB2DRange(aViewInformation); } bool arePrimitive2DReferencesEqual(const Primitive2DReference& rxA, const Primitive2DReference& rxB) @@ -54,10 +52,28 @@ bool arePrimitive2DReferencesEqual(const Primitive2DReference& rxA, const Primit return true; } - const BasePrimitive2D* pA(static_cast<const BasePrimitive2D*>(rxA.get())); - const BasePrimitive2D* pB(static_cast<const BasePrimitive2D*>(rxB.get())); + return rxA->operator==(*rxB); +} + +bool arePrimitive2DReferencesEqual(const css::uno::Reference<css::graphic::XPrimitive2D>& rxA, + const css::uno::Reference<css::graphic::XPrimitive2D>& rxB) +{ + const bool bAIs(rxA.is()); + + if (bAIs != rxB.is()) + { + return false; + } + + if (!bAIs) + { + return true; + } + + auto pA = static_cast<const UnoPrimitive2D*>(rxA.get()); + auto pB = static_cast<const UnoPrimitive2D*>(rxB.get()); - return pA->operator==(*pB); + return (*pA->getBasePrimitive2D()) == (*pB->getBasePrimitive2D()); } OUString idToString(sal_uInt32 nId) diff --git a/drawinglayer/source/primitive2d/backgroundcolorprimitive2d.cxx b/drawinglayer/source/primitive2d/backgroundcolorprimitive2d.cxx index 68f31cb4c67a..8f68d9e73ba3 100644 --- a/drawinglayer/source/primitive2d/backgroundcolorprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/backgroundcolorprimitive2d.cxx @@ -67,8 +67,6 @@ namespace drawinglayer::primitive2d void BackgroundColorPrimitive2D::get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const { - std::unique_lock aGuard( m_aMutex ); - if(!getBuffered2DDecomposition().empty() && (maLastViewport != rViewInformation.getViewport())) { // conditions of last local decomposition have changed, delete @@ -82,7 +80,6 @@ namespace drawinglayer::primitive2d } // use parent implementation - aGuard.unlock(); BufferedDecompositionPrimitive2D::get2DDecomposition(rVisitor, rViewInformation); } diff --git a/drawinglayer/source/primitive2d/baseprimitive2d.cxx b/drawinglayer/source/primitive2d/baseprimitive2d.cxx index 86eaa37eb976..b5590bce082c 100644 --- a/drawinglayer/source/primitive2d/baseprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/baseprimitive2d.cxx @@ -19,6 +19,7 @@ #include <sal/config.h> +#include <drawinglayer/primitive2d/Primitive2DContainer.hxx> #include <drawinglayer/primitive2d/baseprimitive2d.hxx> #include <drawinglayer/primitive2d/Tools.hxx> #include <drawinglayer/geometry/viewinformation2d.hxx> @@ -141,23 +142,23 @@ void BasePrimitive2D::get2DDecomposition( { } -css::uno::Sequence<::css::uno::Reference<::css::graphic::XPrimitive2D>> SAL_CALL +Primitive2DContainer BasePrimitive2D::getDecomposition(const uno::Sequence<beans::PropertyValue>& rViewParameters) { const auto aViewInformation = geometry::createViewInformation2D(rViewParameters); Primitive2DContainer aContainer; get2DDecomposition(aContainer, aViewInformation); - return comphelper::containerToSequence(aContainer); + return aContainer; } -css::geometry::RealRectangle2D SAL_CALL +css::geometry::RealRectangle2D BasePrimitive2D::getRange(const uno::Sequence<beans::PropertyValue>& rViewParameters) { const auto aViewInformation = geometry::createViewInformation2D(rViewParameters); return basegfx::unotools::rectangle2DFromB2DRectangle(getB2DRange(aViewInformation)); } -sal_Int64 SAL_CALL BasePrimitive2D::estimateUsage() +sal_Int64 BasePrimitive2D::estimateUsage() { return 0; // for now ignore the objects themselves } diff --git a/drawinglayer/source/primitive2d/bitmapprimitive2d.cxx b/drawinglayer/source/primitive2d/bitmapprimitive2d.cxx index 0a06010d31e2..6f256b6e1850 100644 --- a/drawinglayer/source/primitive2d/bitmapprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/bitmapprimitive2d.cxx @@ -52,7 +52,7 @@ BitmapPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInforma return aRetval; } -sal_Int64 SAL_CALL BitmapPrimitive2D::estimateUsage() +sal_Int64 BitmapPrimitive2D::estimateUsage() { if (!getXBitmap().is()) { diff --git a/drawinglayer/source/primitive2d/controlprimitive2d.cxx b/drawinglayer/source/primitive2d/controlprimitive2d.cxx index db27950df5d5..461400dafb84 100644 --- a/drawinglayer/source/primitive2d/controlprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/controlprimitive2d.cxx @@ -316,7 +316,6 @@ namespace drawinglayer::primitive2d { // this primitive is view-dependent related to the scaling. If scaling has changed, // destroy existing decomposition. To detect change, use size of unit size in view coordinates - std::unique_lock aGuard( m_aMutex ); const basegfx::B2DVector aNewScaling(rViewInformation.getObjectToViewTransformation() * basegfx::B2DVector(1.0, 1.0)); if(!getBuffered2DDecomposition().empty()) @@ -335,7 +334,6 @@ namespace drawinglayer::primitive2d } // use parent implementation - aGuard.unlock(); BufferedDecompositionPrimitive2D::get2DDecomposition(rVisitor, rViewInformation); } diff --git a/drawinglayer/source/primitive2d/embedded3dprimitive2d.cxx b/drawinglayer/source/primitive2d/embedded3dprimitive2d.cxx index fe83b3850d8f..f072df0c33a7 100644 --- a/drawinglayer/source/primitive2d/embedded3dprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/embedded3dprimitive2d.cxx @@ -35,8 +35,6 @@ namespace drawinglayer::primitive2d { bool Embedded3DPrimitive2D::impGetShadow3D() const { - std::unique_lock aGuard( m_aMutex ); - // create on demand if(!mbShadow3DChecked && !getChildren3D().empty()) { diff --git a/drawinglayer/source/primitive2d/fillhatchprimitive2d.cxx b/drawinglayer/source/primitive2d/fillhatchprimitive2d.cxx index 07c48612d21d..09a82bdd89ca 100644 --- a/drawinglayer/source/primitive2d/fillhatchprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/fillhatchprimitive2d.cxx @@ -173,10 +173,8 @@ namespace drawinglayer::primitive2d void FillHatchPrimitive2D::get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const { - std::unique_lock aGuard( m_aMutex ); bool bAdaptDistance(0 != getFillHatch().getMinimalDiscreteDistance()); - aGuard.unlock(); if(bAdaptDistance) { // behave view-dependent diff --git a/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx b/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx index c8a4da035455..9974117b5ae0 100644 --- a/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx +++ b/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx @@ -518,7 +518,7 @@ namespace drawinglayer::primitive2d aRetval.resize(1); aRetval[0] = new TransformPrimitive2D( aEmbedVectorGraphic, - rGraphic.getVectorGraphicData()->getPrimitive2DSequence()); + Primitive2DContainer(rGraphic.getVectorGraphicData()->getPrimitive2DSequence())); } } else diff --git a/drawinglayer/source/primitive2d/gridprimitive2d.cxx b/drawinglayer/source/primitive2d/gridprimitive2d.cxx index 515263e0d475..ddb468e9ad39 100644 --- a/drawinglayer/source/primitive2d/gridprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/gridprimitive2d.cxx @@ -305,8 +305,6 @@ namespace drawinglayer::primitive2d void GridPrimitive2D::get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const { - std::unique_lock aGuard( m_aMutex ); - if(!getBuffered2DDecomposition().empty()) { if(maLastViewport != rViewInformation.getViewport() || maLastObjectToViewTransformation != rViewInformation.getObjectToViewTransformation()) @@ -324,7 +322,6 @@ namespace drawinglayer::primitive2d } // use parent implementation - aGuard.unlock(); BufferedDecompositionPrimitive2D::get2DDecomposition(rVisitor, rViewInformation); } diff --git a/drawinglayer/source/primitive2d/groupprimitive2d.cxx b/drawinglayer/source/primitive2d/groupprimitive2d.cxx index 8c16d848fdff..7a39bde2ccf4 100644 --- a/drawinglayer/source/primitive2d/groupprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/groupprimitive2d.cxx @@ -53,16 +53,13 @@ namespace drawinglayer::primitive2d getChildren(rVisitor); } - sal_Int64 SAL_CALL GroupPrimitive2D::estimateUsage() + sal_Int64 GroupPrimitive2D::estimateUsage() { size_t nRet(0); for (auto& it : getChildren()) { - uno::Reference<util::XAccounting> const xAcc(it, uno::UNO_QUERY); - if (xAcc.is()) - { - nRet += xAcc->estimateUsage(); - } + if (it) + nRet += it->estimateUsage(); } return nRet; } diff --git a/drawinglayer/source/primitive2d/helplineprimitive2d.cxx b/drawinglayer/source/primitive2d/helplineprimitive2d.cxx index 612181bb7854..07d6a7f2236f 100644 --- a/drawinglayer/source/primitive2d/helplineprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/helplineprimitive2d.cxx @@ -155,8 +155,6 @@ namespace drawinglayer::primitive2d void HelplinePrimitive2D::get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const { - std::unique_lock aGuard( m_aMutex ); - if(!getBuffered2DDecomposition().empty()) { if(maLastViewport != rViewInformation.getViewport() || maLastObjectToViewTransformation != rViewInformation.getObjectToViewTransformation()) @@ -174,7 +172,6 @@ namespace drawinglayer::primitive2d } // use parent implementation - aGuard.unlock(); BufferedDecompositionPrimitive2D::get2DDecomposition(rVisitor, rViewInformation); } diff --git a/drawinglayer/source/primitive2d/patternfillprimitive2d.cxx b/drawinglayer/source/primitive2d/patternfillprimitive2d.cxx index cd4c58d11127..b667545b5347 100644 --- a/drawinglayer/source/primitive2d/patternfillprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/patternfillprimitive2d.cxx @@ -350,17 +350,12 @@ namespace drawinglayer::primitive2d BufferedDecompositionPrimitive2D::get2DDecomposition(rVisitor, rViewInformation); } - sal_Int64 SAL_CALL PatternFillPrimitive2D::estimateUsage() + sal_Int64 PatternFillPrimitive2D::estimateUsage() { size_t nRet(0); for (auto& it : getChildren()) - { - uno::Reference<util::XAccounting> const xAcc(it, uno::UNO_QUERY); - if (xAcc.is()) - { - nRet += xAcc->estimateUsage(); - } - } + if (it) + nRet += it->estimateUsage(); return nRet; } diff --git a/drawinglayer/source/primitive2d/polygonprimitive2d.cxx b/drawinglayer/source/primitive2d/polygonprimitive2d.cxx index 0ed46fa68c81..1cbde11ae96b 100644 --- a/drawinglayer/source/primitive2d/polygonprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/polygonprimitive2d.cxx @@ -167,7 +167,6 @@ void PolygonMarkerPrimitive2D::get2DDecomposition( Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const { - std::unique_lock aGuard(m_aMutex); bool bNeedNewDecomposition(false); if (!getBuffered2DDecomposition().empty()) @@ -195,7 +194,6 @@ void PolygonMarkerPrimitive2D::get2DDecomposition( } // use parent implementation - aGuard.unlock(); BufferedDecompositionPrimitive2D::get2DDecomposition(rVisitor, rViewInformation); } diff --git a/drawinglayer/source/primitive2d/primitivetools2d.cxx b/drawinglayer/source/primitive2d/primitivetools2d.cxx index c4ab4f5c800b..7c6d426e95a2 100644 --- a/drawinglayer/source/primitive2d/primitivetools2d.cxx +++ b/drawinglayer/source/primitive2d/primitivetools2d.cxx @@ -26,8 +26,6 @@ namespace drawinglayer::primitive2d { void DiscreteMetricDependentPrimitive2D::get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const { - std::unique_lock aGuard( m_aMutex ); - // get the current DiscreteUnit, look at X and Y and use the maximum const basegfx::B2DVector aDiscreteVector(rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 1.0)); const double fDiscreteUnit(std::min(fabs(aDiscreteVector.getX()), fabs(aDiscreteVector.getY()))); @@ -45,7 +43,6 @@ namespace drawinglayer::primitive2d } // call base implementation - aGuard.unlock(); BufferedDecompositionPrimitive2D::get2DDecomposition(rVisitor, rViewInformation); } @@ -54,8 +51,6 @@ namespace drawinglayer::primitive2d void ViewportDependentPrimitive2D::get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const { - std::unique_lock aGuard( m_aMutex ); - // get the current Viewport const basegfx::B2DRange& rViewport = rViewInformation.getViewport(); @@ -72,14 +67,11 @@ namespace drawinglayer::primitive2d } // call base implementation - aGuard.unlock(); BufferedDecompositionPrimitive2D::get2DDecomposition(rVisitor, rViewInformation); } void ViewTransformationDependentPrimitive2D::get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const { - std::unique_lock aGuard( m_aMutex ); - // get the current ViewTransformation const basegfx::B2DHomMatrix& rViewTransformation = rViewInformation.getViewTransformation(); @@ -96,14 +88,11 @@ namespace drawinglayer::primitive2d } // call base implementation - aGuard.unlock(); BufferedDecompositionPrimitive2D::get2DDecomposition(rVisitor, rViewInformation); } void ObjectAndViewTransformationDependentPrimitive2D::get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const { - std::unique_lock aGuard( m_aMutex ); - // get the current ViewTransformation const basegfx::B2DHomMatrix& rViewTransformation = rViewInformation.getViewTransformation(); @@ -130,7 +119,6 @@ namespace drawinglayer::primitive2d } // call base implementation - aGuard.unlock(); BufferedDecompositionPrimitive2D::get2DDecomposition(rVisitor, rViewInformation); } diff --git a/drawinglayer/source/primitive2d/sceneprimitive2d.cxx b/drawinglayer/source/primitive2d/sceneprimitive2d.cxx index 4f238cef4792..d371cdedcd5c 100644 --- a/drawinglayer/source/primitive2d/sceneprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/sceneprimitive2d.cxx @@ -509,8 +509,6 @@ namespace drawinglayer::primitive2d Primitive2DContainer ScenePrimitive2D::getShadow2D() const { - std::unique_lock aGuard( m_aMutex ); - Primitive2DContainer aRetval; // create 2D shadows from contained 3D primitives @@ -624,8 +622,6 @@ namespace drawinglayer::primitive2d void ScenePrimitive2D::get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const { - std::unique_lock aGuard( m_aMutex ); - // get the involved ranges (see helper method calculateDiscreteSizes for details) basegfx::B2DRange aDiscreteRange; basegfx::B2DRange aUnitVisibleRange; @@ -679,7 +675,6 @@ namespace drawinglayer::primitive2d } // use parent implementation - aGuard.unlock(); BufferedDecompositionPrimitive2D::get2DDecomposition(rVisitor, rViewInformation); } diff --git a/drawinglayer/source/primitive2d/texteffectprimitive2d.cxx b/drawinglayer/source/primitive2d/texteffectprimitive2d.cxx index d05e727ce50c..dae397e1abd8 100644 --- a/drawinglayer/source/primitive2d/texteffectprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/texteffectprimitive2d.cxx @@ -213,8 +213,6 @@ void TextEffectPrimitive2D::get2DDecomposition( Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const { - std::unique_lock aGuard(m_aMutex); - if (!getBuffered2DDecomposition().empty()) { if (maLastObjectToViewTransformation != rViewInformation.getObjectToViewTransformation()) @@ -233,7 +231,6 @@ void TextEffectPrimitive2D::get2DDecomposition( } // use parent implementation - aGuard.unlock(); BufferedDecompositionPrimitive2D::get2DDecomposition(rVisitor, rViewInformation); } diff --git a/drawinglayer/source/processor2d/baseprocessor2d.cxx b/drawinglayer/source/processor2d/baseprocessor2d.cxx index b4291dd4431c..e7a6a44932f7 100644 --- a/drawinglayer/source/processor2d/baseprocessor2d.cxx +++ b/drawinglayer/source/processor2d/baseprocessor2d.cxx @@ -17,6 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <drawinglayer/primitive2d/Primitive2DContainer.hxx> #include <drawinglayer/processor2d/baseprocessor2d.hxx> #include <comphelper/sequence.hxx> @@ -48,8 +49,7 @@ namespace drawinglayer::processor2d // Primitive2DDecompositionVisitor void BaseProcessor2D::visit(const primitive2d::Primitive2DReference& rCandidate) { - const primitive2d::BasePrimitive2D* pBasePrimitive = static_cast< const primitive2d::BasePrimitive2D* >(rCandidate.get()); - processBasePrimitive2D(*pBasePrimitive); + processBasePrimitive2D(*rCandidate); } void BaseProcessor2D::visit(const primitive2d::Primitive2DContainer& rContainer) { @@ -64,9 +64,8 @@ namespace drawinglayer::processor2d { for (const primitive2d::Primitive2DReference& rCandidate : rSource) { - const primitive2d::BasePrimitive2D* pBasePrimitive = static_cast< const primitive2d::BasePrimitive2D* >(rCandidate.get()); - if (pBasePrimitive) - processBasePrimitive2D(*pBasePrimitive); + if (rCandidate) + processBasePrimitive2D(*rCandidate); } } diff --git a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx index c4ca011d30d1..73a3332af221 100644 --- a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx +++ b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx @@ -620,9 +620,7 @@ void VclPixelProcessor2D::processUnifiedTransparencePrimitive2D( if (1 == rContent.size()) { - const primitive2d::Primitive2DReference xReference(rContent[0]); - const primitive2d::BasePrimitive2D* pBasePrimitive - = static_cast<const primitive2d::BasePrimitive2D*>(xReference.get()); + const primitive2d::BasePrimitive2D* pBasePrimitive = rContent[0].get(); switch (pBasePrimitive->getPrimitive2DID()) { diff --git a/drawinglayer/source/processor3d/defaultprocessor3d.cxx b/drawinglayer/source/processor3d/defaultprocessor3d.cxx index b9159c46c73f..2b61acd19762 100644 --- a/drawinglayer/source/processor3d/defaultprocessor3d.cxx +++ b/drawinglayer/source/processor3d/defaultprocessor3d.cxx @@ -34,6 +34,7 @@ #include <vcl/bitmapex.hxx> #include <drawinglayer/attribute/sdrsceneattribute3d.hxx> #include <drawinglayer/attribute/sdrlightingattribute3d.hxx> +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> #include <vcl/graph.hxx> #include <basegfx/matrix/b2dhommatrixtools.hxx> diff --git a/drawinglayer/source/tools/converters.cxx b/drawinglayer/source/tools/converters.cxx index 382b81197526..c0a92a8f479f 100644 --- a/drawinglayer/source/tools/converters.cxx +++ b/drawinglayer/source/tools/converters.cxx @@ -23,7 +23,10 @@ #include <drawinglayer/primitive2d/transformprimitive2d.hxx> #include <drawinglayer/processor2d/baseprocessor2d.hxx> #include <drawinglayer/processor2d/processor2dtools.hxx> +#include <vcl/svapp.hxx> #include <vcl/virdev.hxx> +#include <com/sun/star/geometry/RealRectangle2D.hpp> +#include <tools/diagnose_ex.h> #include <drawinglayer/converters.hxx> @@ -170,6 +173,100 @@ namespace drawinglayer return aRetval; } + BitmapEx convertPrimitive2DContainerToBitmapEx( + primitive2d::Primitive2DContainer&& rSequence, + const basegfx::B2DRange& rTargetRange, + sal_uInt32 nMaximumQuadraticPixels, + const o3tl::Length eTargetUnit, + const std::optional<Size>& rTargetDPI) + { + if(rSequence.empty()) + return BitmapEx(); + + try + { + css::geometry::RealRectangle2D aRealRect; + aRealRect.X1 = rTargetRange.getMinX(); + aRealRect.Y1 = rTargetRange.getMinY(); + aRealRect.X2 = rTargetRange.getMaxX(); + aRealRect.Y2 = rTargetRange.getMaxY(); + + // get system DPI + Size aDPI(Application::GetDefaultDevice()->LogicToPixel(Size(1, 1), MapMode(MapUnit::MapInch))); + if (rTargetDPI.has_value()) + { + aDPI = *rTargetDPI; + } + + ::sal_uInt32 DPI_X = aDPI.getWidth(); + ::sal_uInt32 DPI_Y = aDPI.getHeight(); + const basegfx::B2DRange aRange(aRealRect.X1, aRealRect.Y1, aRealRect.X2, aRealRect.Y2); + const double fWidth(aRange.getWidth()); + const double fHeight(aRange.getHeight()); + + if(!(basegfx::fTools::more(fWidth, 0.0) && basegfx::fTools::more(fHeight, 0.0))) + return BitmapEx(); + + if(0 == DPI_X) + { + DPI_X = 75; + } + + if(0 == DPI_Y) + { + DPI_Y = 75; + } + + if(0 == nMaximumQuadraticPixels) + { + nMaximumQuadraticPixels = 500000; + } + + const auto aViewInformation2D = geometry::createViewInformation2D({}); + const sal_uInt32 nDiscreteWidth(basegfx::fround(o3tl::convert(fWidth, eTargetUnit, o3tl::Length::in) * DPI_X)); + const sal_uInt32 nDiscreteHeight(basegfx::fround(o3tl::convert(fHeight, eTargetUnit, o3tl::Length::in) * DPI_Y)); + + basegfx::B2DHomMatrix aEmbedding( + basegfx::utils::createTranslateB2DHomMatrix( + -aRange.getMinX(), + -aRange.getMinY())); + + aEmbedding.scale( + nDiscreteWidth / fWidth, + nDiscreteHeight / fHeight); + + const primitive2d::Primitive2DReference xEmbedRef( + new primitive2d::TransformPrimitive2D( + aEmbedding, + std::move(rSequence))); + primitive2d::Primitive2DContainer xEmbedSeq { xEmbedRef }; + + BitmapEx aBitmapEx( + convertToBitmapEx( + std::move(xEmbedSeq), + aViewInformation2D, + nDiscreteWidth, + nDiscreteHeight, + nMaximumQuadraticPixels)); + + if(aBitmapEx.IsEmpty()) + return BitmapEx(); + aBitmapEx.SetPrefMapMode(MapMode(MapUnit::Map100thMM)); + aBitmapEx.SetPrefSize(Size(basegfx::fround(fWidth), basegfx::fround(fHeight))); + + return aBitmapEx; + } + catch (const css::uno::Exception&) + { + TOOLS_WARN_EXCEPTION("vcl", "Got no graphic::XPrimitive2DRenderer!"); + } + catch (const std::exception& e) + { + SAL_WARN("vcl", "Got no graphic::XPrimitive2DRenderer! : " << e.what()); + } + + return BitmapEx(); + } } // end of namespace drawinglayer /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/drawinglayer/source/tools/primitive2dxmldump.cxx b/drawinglayer/source/tools/primitive2dxmldump.cxx index 5f753039183c..5f303a627e0f 100644 --- a/drawinglayer/source/tools/primitive2dxmldump.cxx +++ b/drawinglayer/source/tools/primitive2dxmldump.cxx @@ -605,10 +605,7 @@ void Primitive2dXmlDump::decomposeAndWrite( { for (size_t i = 0; i < rPrimitive2DSequence.size(); i++) { - drawinglayer::primitive2d::Primitive2DReference xPrimitive2DReference - = rPrimitive2DSequence[i]; - const BasePrimitive2D* pBasePrimitive - = static_cast<const BasePrimitive2D*>(xPrimitive2DReference.get()); + const BasePrimitive2D* pBasePrimitive = rPrimitive2DSequence[i].get(); sal_uInt32 nId = pBasePrimitive->getPrimitive2DID(); if (nId < maFilter.size() && maFilter[nId]) continue; diff --git a/drawinglayer/source/tools/wmfemfhelper.cxx b/drawinglayer/source/tools/wmfemfhelper.cxx index f8c562ce1a7a..307da099a774 100644 --- a/drawinglayer/source/tools/wmfemfhelper.cxx +++ b/drawinglayer/source/tools/wmfemfhelper.cxx @@ -1257,7 +1257,7 @@ namespace wmfemfhelper // prepare Primitive2DSequence, put text in foreground drawinglayer::primitive2d::Primitive2DContainer aSequence(2); - aSequence[1] = drawinglayer::primitive2d::Primitive2DReference(pResult); + aSequence[1] = pResult; // prepare filled polygon basegfx::B2DPolygon aOutline(basegfx::utils::createPolygonFromRect(aTextRange)); diff --git a/emfio/CppunitTest_emfio_wmf.mk b/emfio/CppunitTest_emfio_wmf.mk index ec67bff3a9b4..a127bdb0af1f 100644 --- a/emfio/CppunitTest_emfio_wmf.mk +++ b/emfio/CppunitTest_emfio_wmf.mk @@ -32,17 +32,10 @@ $(eval $(call gb_CppunitTest_use_libraries,emfio_wmf,\ vcl \ )) -$(eval $(call gb_CppunitTest_use_components,emfio_wmf,\ - configmgr/source/configmgr \ - emfio/emfio \ - i18npool/util/i18npool \ - ucb/source/core/ucb1 \ - unotools/util/utl \ -)) - $(eval $(call gb_CppunitTest_use_configuration,emfio_wmf)) $(eval $(call gb_CppunitTest_use_sdk_api,emfio_wmf)) $(eval $(call gb_CppunitTest_use_ure,emfio_wmf)) $(eval $(call gb_CppunitTest_use_vcl,emfio_wmf)) +$(eval $(call gb_CppunitTest_use_rdb,emfio_wmf,services)) # vim: set noet sw=4 ts=4: diff --git a/emfio/qa/cppunit/emf/EmfImportTest.cxx b/emfio/qa/cppunit/emf/EmfImportTest.cxx index 6b16770d8d71..c9d5d17179ef 100644 --- a/emfio/qa/cppunit/emf/EmfImportTest.cxx +++ b/emfio/qa/cppunit/emf/EmfImportTest.cxx @@ -24,6 +24,7 @@ #include <com/sun/star/graphic/EmfTools.hpp> +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> #include <drawinglayer/primitive2d/Primitive2DContainer.hxx> #include <drawinglayer/tools/primitive2dxmldump.hxx> #include <vcl/filter/PDFiumLibrary.hxx> @@ -162,8 +163,7 @@ void Test::testPolyPolygon() Primitive2DSequence aSequence = parseEmf(u"/emfio/qa/cppunit/emf/data/fdo79679-2.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); @@ -205,8 +205,7 @@ void Test::TestDrawImagePointsTypeBitmap() = parseEmf(u"/emfio/qa/cppunit/emf/data/TestDrawImagePointsTypeBitmap.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", "color", "#0080ff"); @@ -237,8 +236,7 @@ void Test::TestDrawString() Primitive2DSequence aSequence = parseEmf(u"/emfio/qa/cppunit/emf/data/TestDrawString.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); // check correct import of the DrawString: height, position, text, color and font @@ -259,8 +257,7 @@ void Test::TestDrawStringAlign() Primitive2DSequence aSequence = parseEmf(u"/emfio/qa/cppunit/emf/data/TestDrawStringAlign.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "mask/transform", 9); @@ -330,8 +327,7 @@ void Test::TestDrawStringTransparent() = parseEmf(u"/emfio/qa/cppunit/emf/data/TestDrawStringTransparent.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "mask/transform/unifiedtransparence", "transparence", @@ -358,8 +354,7 @@ void Test::TestDrawStringWithBrush() = parseEmf(u"/emfio/qa/cppunit/emf/data/TestDrawStringWithBrush.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "transform/textdecoratedportion", "xy11", "20"); assertXPath(pDocument, aXPathPrefix + "transform/textdecoratedportion", "xy13", "16"); @@ -379,8 +374,7 @@ void Test::TestDrawLine() Primitive2DSequence aSequence = parseEmf(u"/emfio/qa/cppunit/emf/data/TestDrawLine.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); // check correct import of the DrawLine: color and width of the line @@ -394,8 +388,7 @@ void Test::TestLinearGradient() Primitive2DSequence aSequence = parseEmf(u"/emfio/qa/cppunit/emf/data/TestLinearGradient.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, "/primitive2D/metafile/transform", "xy11", "1"); @@ -433,8 +426,7 @@ void Test::TestTextMapMode() Primitive2DSequence aSequence = parseEmf(u"/emfio/qa/cppunit/emf/data/TextMapMode.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", 2); @@ -471,8 +463,7 @@ void Test::TestEnglishMapMode() = parseEmf(u"/emfio/qa/cppunit/emf/data/test_mm_hienglish_ref.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", 1); @@ -514,8 +505,7 @@ void Test::TestRectangleWithModifyWorldTransform() = parseEmf(u"/emfio/qa/cppunit/emf/data/TestRectangleWithModifyWorldTransform.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", 1); @@ -535,8 +525,7 @@ void Test::TestChordWithModifyWorldTransform() = parseEmf(u"/emfio/qa/cppunit/emf/data/TestChordWithModifyWorldTransform.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", "color", "#ffffff"); @@ -557,8 +546,7 @@ void Test::TestArcStartPointEqualEndPoint() = parseEmf(u"/emfio/qa/cppunit/emf/data/TestArcStartPointEqualEndPoint.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "mask/group/mask/polygonhairline", "color", "#000000"); @@ -607,8 +595,7 @@ void Test::TestArcInsideWronglyDefinedRectangle() = parseEmf(u"/emfio/qa/cppunit/emf/data/TestArcInsideWronglyDefinedRectangle.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "polygonhairline", "color", "#000000"); @@ -634,8 +621,7 @@ void Test::TestEllipseWithSelectClipPath() = parseEmf(u"/emfio/qa/cppunit/emf/data/TestEllipseWithSelectClipPath.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "group/mask/polypolygon", 1); @@ -666,8 +652,7 @@ void Test::TestEllipseXformIntersectClipRect() = parseEmf(u"/emfio/qa/cppunit/emf/data/TestEllipseXformIntersectClipRect.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "path", "m0 0h3000v2000h-3000z"); @@ -725,8 +710,7 @@ void Test::TestDrawPolyLine16WithClip() = parseEmf(u"/emfio/qa/cppunit/emf/data/TestDrawPolyLine16WithClip.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "path", "m0 0h3943v3939h-3943z"); @@ -754,8 +738,7 @@ void Test::TestFillRegion() Primitive2DSequence aSequence = parseEmf(u"/emfio/qa/cppunit/emf/data/TestFillRegion.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "path", "m0 0h3943v3939h-3943z"); @@ -779,8 +762,7 @@ void Test::TestPolylinetoCloseStroke() = parseEmf(u"/emfio/qa/cppunit/emf/data/TestPolylinetoCloseStroke.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "polygonhairline", 2); @@ -807,8 +789,7 @@ void Test::TestExtTextOutOpaqueAndClipTransform() = parseEmf(u"/emfio/qa/cppunit/emf/data/TestExtTextOutOpaqueAndClipTransform.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "textsimpleportion", 2); @@ -862,8 +843,7 @@ void Test::TestBitBltStretchBltWMF() = parseEmf(u"/emfio/qa/cppunit/wmf/data/TestBitBltStretchBlt.wmf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "mask/bitmap", 2); @@ -913,8 +893,7 @@ void Test::TestExtTextOutOpaqueAndClipWMF() = parseEmf(u"/emfio/qa/cppunit/wmf/data/TestExtTextOutOpaqueAndClip.wmf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); #ifdef MACOSX @@ -964,8 +943,7 @@ void Test::TestPaletteWMF() Primitive2DSequence aSequence = parseEmf(u"/emfio/qa/cppunit/wmf/data/TestPalette.wmf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "mask/polypolygoncolor", 2); @@ -995,8 +973,7 @@ void Test::TestRestoreDCWMF() Primitive2DSequence aSequence = parseEmf(u"/emfio/qa/cppunit/wmf/data/TestRestoreDC.wmf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", 3); @@ -1024,8 +1001,7 @@ void Test::TestRoundrectWMF() Primitive2DSequence aSequence = parseEmf(u"/emfio/qa/cppunit/wmf/data/TestRoundRect.wmf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", "color", "#ffffff"); @@ -1066,8 +1042,7 @@ void Test::TestStretchDIBWMF() Primitive2DSequence aSequence = parseEmf(u"/emfio/qa/cppunit/wmf/data/TestStretchDIB.wmf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "mask/bitmap", "xy11", "12065"); @@ -1095,8 +1070,7 @@ void Test::TestPolyLineWidth() Primitive2DSequence aSequence = parseEmf(u"/emfio/qa/cppunit/emf/data/TestPolyLineWidth.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "polypolygoncolor/polypolygon", "path", @@ -1115,8 +1089,7 @@ void Test::TestRestoreDC() Primitive2DSequence aSequence = parseEmf(u"/emfio/qa/cppunit/emf/data/TestRestoreDC.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", "color", "#ff0000"); @@ -1133,8 +1106,7 @@ void Test::TestRoundRect() Primitive2DSequence aSequence = parseEmf(u"/emfio/qa/cppunit/emf/data/TestRoundRect.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "polypolygoncolor", 2); @@ -1186,8 +1158,7 @@ void Test::TestCreatePen() Primitive2DSequence aSequence = parseEmf(u"/emfio/qa/cppunit/emf/data/TestCreatePen.emf"); CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument - = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence)); CPPUNIT_ASSERT(pDocument); assertXPath(pDocument, aXPathPrefix + "mask/polypolygon", "path", "m0 0h31250v18192h-31250z"); diff --git a/emfio/source/emfuno/xemfparser.cxx b/emfio/source/emfuno/xemfparser.cxx index e5d27056332d..bd9ad4ac6eb3 100644 --- a/emfio/source/emfuno/xemfparser.cxx +++ b/emfio/source/emfuno/xemfparser.cxx @@ -24,7 +24,7 @@ #include <cppuhelper/implbase2.hxx> #include <cppuhelper/supportsservice.hxx> #include <comphelper/sequence.hxx> -#include <drawinglayer/primitive2d/Primitive2DContainer.hxx> +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> #include <vcl/outdev.hxx> #include <vcl/svapp.hxx> @@ -202,7 +202,7 @@ namespace emfio::emfreader SAL_WARN("emfio", "Invalid stream (!)"); } - return comphelper::containerToSequence(aRetval); + return aRetval.toSequence(); } void XEmfParser::setSizeHint(const geometry::RealPoint2D& rSize) diff --git a/filter/Library_pdffilter.mk b/filter/Library_pdffilter.mk index 6219c3a306aa..178a479d72ac 100644 --- a/filter/Library_pdffilter.mk +++ b/filter/Library_pdffilter.mk @@ -49,6 +49,7 @@ $(eval $(call gb_Library_use_libraries,pdffilter,\ cppuhelper \ cppu \ sal \ + salhelper \ drawinglayer \ drawinglayercore \ )) diff --git a/filter/source/pdf/pdfdecomposer.cxx b/filter/source/pdf/pdfdecomposer.cxx index 1118021a6377..f861b4eaf86e 100644 --- a/filter/source/pdf/pdfdecomposer.cxx +++ b/filter/source/pdf/pdfdecomposer.cxx @@ -13,6 +13,7 @@ #include <cppuhelper/implbase2.hxx> #include <cppuhelper/supportsservice.hxx> #include <drawinglayer/primitive2d/bitmapprimitive2d.hxx> +#include <drawinglayer/primitive2d/Primitive2DContainer.hxx> #include <vcl/bitmapex.hxx> #include <vcl/pdfread.hxx> #include <vcl/svapp.hxx> @@ -89,8 +90,11 @@ XPdfDecomposer::getDecomposition(const uno::Reference<util::XBinaryDataContainer 0)); // create primitive - return { new drawinglayer::primitive2d::BitmapPrimitive2D( - VCLUnoHelper::CreateVCLXBitmap(aReplacement), aBitmapTransform) }; + return drawinglayer::primitive2d::Primitive2DContainer{ + new drawinglayer::primitive2d::BitmapPrimitive2D( + VCLUnoHelper::CreateVCLXBitmap(aReplacement), aBitmapTransform) + } + .toSequence(); } OUString SAL_CALL XPdfDecomposer::getImplementationName() diff --git a/filter/source/svg/svgfilter.cxx b/filter/source/svg/svgfilter.cxx index 174c3bbb35b0..4c3f033d02eb 100644 --- a/filter/source/svg/svgfilter.cxx +++ b/filter/source/svg/svgfilter.cxx @@ -45,6 +45,7 @@ #include <tools/zcodec.hxx> #include <drawinglayer/primitive2d/baseprimitive2d.hxx> +#include <drawinglayer/primitive2d/Primitive2DContainer.hxx> #include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> #include "svgfilter.hxx" @@ -258,15 +259,10 @@ bool SVGFilter::filterImpressOrDraw( const Sequence< PropertyValue >& rDescripto for(const auto& rCandidate : aContainer) { - if(rCandidate.is()) + if(rCandidate && PRIMITIVE2D_ID_HIDDENGEOMETRYPRIMITIVE2D != rCandidate->getPrimitive2DID()) { - auto pBasePrimitive = static_cast< const drawinglayer::primitive2d::BasePrimitive2D* >(rCandidate.get()); - - if(PRIMITIVE2D_ID_HIDDENGEOMETRYPRIMITIVE2D != pBasePrimitive->getPrimitive2DID()) - { - bAllAreHiddenGeometry = false; - break; - } + bAllAreHiddenGeometry = false; + break; } } diff --git a/include/drawinglayer/converters.hxx b/include/drawinglayer/converters.hxx index a0b8c4c4be78..1fda7a2f8350 100644 --- a/include/drawinglayer/converters.hxx +++ b/include/drawinglayer/converters.hxx @@ -29,6 +29,14 @@ convertToBitmapEx(drawinglayer::primitive2d::Primitive2DContainer&& rSeq, const geometry::ViewInformation2D& rViewInformation2D, sal_uInt32 nDiscreteWidth, sal_uInt32 nDiscreteHeight, sal_uInt32 nMaxSquarePixels); +// helper to convert any Primitive2DSequence to a good quality BitmapEx, +// using default parameters +BitmapEx DRAWINGLAYER_DLLPUBLIC convertPrimitive2DContainerToBitmapEx( + drawinglayer::primitive2d::Primitive2DContainer&& rSeq, const basegfx::B2DRange& rTargetRange, + const sal_uInt32 nMaximumQuadraticPixels = 500000, + const o3tl::Length eTargetUnit = o3tl::Length::mm100, + const std::optional<Size>& rTargetDPI = std::nullopt); + } // end of namespace drawinglayer /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/drawinglayer/primitive2d/BufferedDecompositionPrimitive2D.hxx b/include/drawinglayer/primitive2d/BufferedDecompositionPrimitive2D.hxx index e875709b440e..8087a6544dc0 100644 --- a/include/drawinglayer/primitive2d/BufferedDecompositionPrimitive2D.hxx +++ b/include/drawinglayer/primitive2d/BufferedDecompositionPrimitive2D.hxx @@ -20,7 +20,7 @@ #pragma once #include <drawinglayer/drawinglayerdllapi.h> - +#include <drawinglayer/primitive2d/Primitive2DContainer.hxx> #include <drawinglayer/primitive2d/baseprimitive2d.hxx> namespace drawinglayer::geometry diff --git a/include/drawinglayer/primitive2d/CommonTypes.hxx b/include/drawinglayer/primitive2d/CommonTypes.hxx index a7ef629fc98f..3e14b05daa30 100644 --- a/include/drawinglayer/primitive2d/CommonTypes.hxx +++ b/include/drawinglayer/primitive2d/CommonTypes.hxx @@ -20,11 +20,13 @@ #pragma once #include <com/sun/star/graphic/XPrimitive2D.hpp> +#include <rtl/ref.hxx> namespace drawinglayer::primitive2d { -typedef css::uno::Reference<css::graphic::XPrimitive2D> Primitive2DReference; -typedef css::uno::Sequence<Primitive2DReference> Primitive2DSequence; +class BasePrimitive2D; +typedef rtl::Reference<BasePrimitive2D> Primitive2DReference; +typedef css::uno::Sequence<css::uno::Reference<css::graphic::XPrimitive2D>> Primitive2DSequence; } // end of namespace drawinglayer::primitive2d diff --git a/include/drawinglayer/primitive2d/Primitive2DContainer.hxx b/include/drawinglayer/primitive2d/Primitive2DContainer.hxx index 43268d0209dd..45688e504936 100644 --- a/include/drawinglayer/primitive2d/Primitive2DContainer.hxx +++ b/include/drawinglayer/primitive2d/Primitive2DContainer.hxx @@ -21,6 +21,7 @@ #include <drawinglayer/drawinglayerdllapi.h> +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> #include <drawinglayer/primitive2d/CommonTypes.hxx> #include <drawinglayer/primitive2d/Primitive2DVisitor.hxx> @@ -70,6 +71,9 @@ public: : deque(first, last) { } + Primitive2DContainer( + const css::uno::Sequence<css::uno::Reference<css::graphic::XPrimitive2D>>&); + Primitive2DContainer(const std::deque<css::uno::Reference<css::graphic::XPrimitive2D>>&); virtual void visit(const Primitive2DReference& rSource) override { append(rSource); } virtual void visit(const Primitive2DContainer& rSource) override { append(rSource); } @@ -93,6 +97,8 @@ public: bool operator!=(const Primitive2DContainer& rB) const { return !operator==(rB); } basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& aViewInformation) const; Primitive2DContainer maybeInvert(bool bInvert = false) const; + + css::uno::Sequence<css::uno::Reference<css::graphic::XPrimitive2D>> toSequence() const; }; } // end of namespace drawinglayer::primitive2d diff --git a/include/drawinglayer/primitive2d/Tools.hxx b/include/drawinglayer/primitive2d/Tools.hxx index fcb7ff48ce54..3eaa322d9a4f 100644 --- a/include/drawinglayer/primitive2d/Tools.hxx +++ b/include/drawinglayer/primitive2d/Tools.hxx @@ -22,13 +22,9 @@ #include <drawinglayer/drawinglayerdllapi.h> #include <drawinglayer/primitive2d/CommonTypes.hxx> #include <drawinglayer/geometry/viewinformation2d.hxx> +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> #include <basegfx/range/b2drange.hxx> -namespace drawinglayer::geometry -{ -class ViewInformation2D; -} - namespace drawinglayer::primitive2d { /// get B2DRange from a given Primitive2DReference @@ -41,6 +37,13 @@ basegfx::B2DRange DRAWINGLAYERCORE_DLLPUBLIC getB2DRangeFromPrimitive2DReference bool DRAWINGLAYERCORE_DLLPUBLIC arePrimitive2DReferencesEqual(const Primitive2DReference& rA, const Primitive2DReference& rB); +/** compare two Primitive2DReferences for equality, including trying to get implementations (BasePrimitive2D) + and using compare operator + */ +bool DRAWINGLAYERCORE_DLLPUBLIC +arePrimitive2DReferencesEqual(const css::uno::Reference<css::graphic::XPrimitive2D>& rA, + const css::uno::Reference<css::graphic::XPrimitive2D>& rB); + OUString DRAWINGLAYERCORE_DLLPUBLIC idToString(sal_uInt32 nId); } // end of namespace drawinglayer::primitive2d diff --git a/include/drawinglayer/primitive2d/baseprimitive2d.hxx b/include/drawinglayer/primitive2d/baseprimitive2d.hxx index 444fec94c384..5fbcafc655db 100644 --- a/include/drawinglayer/primitive2d/baseprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/baseprimitive2d.hxx @@ -31,6 +31,9 @@ #include <com/sun/star/util/XAccounting.hpp> #include <basegfx/range/b2drange.hxx> #include <com/sun/star/graphic/XPrimitive2D.hpp> +#include <salhelper/simplereferenceobject.hxx> +#include <rtl/ref.hxx> +#include <deque> #include <mutex> namespace drawinglayer::geometry @@ -147,7 +150,7 @@ namespace drawinglayer::primitive2d for view-independent primitives which are defined by not using ViewInformation2D in their get2DDecomposition/getB2DRange implementations. */ -class DRAWINGLAYERCORE_DLLPUBLIC BasePrimitive2D : public BasePrimitive2DImplBase +class DRAWINGLAYERCORE_DLLPUBLIC BasePrimitive2D : public salhelper::SimpleReferenceObject { BasePrimitive2D(const BasePrimitive2D&) = delete; BasePrimitive2D& operator=(const BasePrimitive2D&) = delete; @@ -183,6 +186,54 @@ public: /** The getDecomposition implementation for UNO API will use getDecomposition from this implementation. It will construct a ViewInformation2D from the ViewParameters for that purpose */ + virtual Primitive2DContainer + getDecomposition(const css::uno::Sequence<css::beans::PropertyValue>& rViewParameters); + + /** The getRange implementation for UNO API will use getRange from this implementation. It + will construct a ViewInformation2D from the ViewParameters for that purpose + */ + virtual css::geometry::RealRectangle2D + getRange(const css::uno::Sequence<css::beans::PropertyValue>& rViewParameters); + + // XAccounting + virtual sal_Int64 estimateUsage(); +}; + +/** + Rather than make all the BasePrimitive2D classes bear the cost of being an UNO + object, we just wrap the top level BasePrimitive2D in this class when we need + to pass them over UNO +*/ +class DRAWINGLAYERCORE_DLLPUBLIC UnoPrimitive2D final : public BasePrimitive2DImplBase +{ + UnoPrimitive2D(const UnoPrimitive2D&) = delete; + UnoPrimitive2D& operator=(const UnoPrimitive2D&) = delete; + +public: + // constructor/destructor + UnoPrimitive2D(const rtl::Reference<BasePrimitive2D>& rPrimitive) + : mxPrimitive(rPrimitive) + { + } + virtual ~UnoPrimitive2D() override; + + /// The default implementation will use getDecomposition results to create the range + basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; + + /** provide unique ID for fast identifying of known primitive implementations in renderers. These use + the defines from drawinglayer_primitivetypes2d.hxx to define unique IDs. + */ + sal_uInt32 getPrimitive2DID() const; + + /// The default implementation will return an empty sequence + void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, + const geometry::ViewInformation2D& rViewInformation) const; + + // Methods from XPrimitive2D + + /** The getDecomposition implementation for UNO API will use getDecomposition from this implementation. It + will construct a ViewInformation2D from the ViewParameters for that purpose + */ virtual css::uno::Sequence<::css::uno::Reference<::css::graphic::XPrimitive2D>> SAL_CALL getDecomposition(const css::uno::Sequence<css::beans::PropertyValue>& rViewParameters) override; @@ -194,6 +245,11 @@ public: // XAccounting virtual sal_Int64 SAL_CALL estimateUsage() override; + + rtl::Reference<BasePrimitive2D> const& getBasePrimitive2D() const { return mxPrimitive; } + +private: + rtl::Reference<BasePrimitive2D> mxPrimitive; }; } // end of namespace drawinglayer::primitive2d diff --git a/include/drawinglayer/primitive2d/bitmapprimitive2d.hxx b/include/drawinglayer/primitive2d/bitmapprimitive2d.hxx index bef384eb47b2..46c0825af5e5 100644 --- a/include/drawinglayer/primitive2d/bitmapprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/bitmapprimitive2d.hxx @@ -67,7 +67,7 @@ public: getB2DRange(const geometry::ViewInformation2D& rViewInformation) const override; // XAccounting - virtual sal_Int64 SAL_CALL estimateUsage() override; + virtual sal_Int64 estimateUsage() override; /// provide unique ID virtual sal_uInt32 getPrimitive2DID() const override; diff --git a/include/drawinglayer/primitive2d/groupprimitive2d.hxx b/include/drawinglayer/primitive2d/groupprimitive2d.hxx index 52d4fb4eb13b..b34bef834f03 100644 --- a/include/drawinglayer/primitive2d/groupprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/groupprimitive2d.hxx @@ -85,7 +85,7 @@ namespace drawinglayer::primitive2d virtual sal_uInt32 getPrimitive2DID() const override; // XAccounting - virtual sal_Int64 SAL_CALL estimateUsage() override; + virtual sal_Int64 estimateUsage() override; }; } // end of namespace drawinglayer::primitive2d diff --git a/include/drawinglayer/primitive2d/patternfillprimitive2d.hxx b/include/drawinglayer/primitive2d/patternfillprimitive2d.hxx index 63a3e6d8d274..9da0e44e5414 100644 --- a/include/drawinglayer/primitive2d/patternfillprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/patternfillprimitive2d.hxx @@ -85,7 +85,7 @@ namespace drawinglayer::primitive2d virtual sal_uInt32 getPrimitive2DID() const override; // XAccounting - virtual sal_Int64 SAL_CALL estimateUsage() override; + virtual sal_Int64 estimateUsage() override; /// helper which creates the content - checks if clipping is needed and eventually /// creates buffered content to speed up rendering diff --git a/include/drawinglayer/primitive2d/textbreakuphelper.hxx b/include/drawinglayer/primitive2d/textbreakuphelper.hxx index de233da8ea07..c007bb6afa1c 100644 --- a/include/drawinglayer/primitive2d/textbreakuphelper.hxx +++ b/include/drawinglayer/primitive2d/textbreakuphelper.hxx @@ -20,7 +20,7 @@ #pragma once #include <drawinglayer/drawinglayerdllapi.h> -#include <drawinglayer/primitive2d/Primitive2DContainer.hxx> +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> #include <drawinglayer/primitive2d/textlayoutdevice.hxx> #include <basegfx/matrix/b2dhommatrixtools.hxx> @@ -39,7 +39,7 @@ namespace drawinglayer::primitive2d { private: const TextSimplePortionPrimitive2D& mrSource; - Primitive2DContainer mxResult; + Primitive2DContainer mxResult; TextLayouterDevice maTextLayouter; basegfx::utils::B2DHomMatrixBufferedOnDemandDecompose maDecTrans; diff --git a/include/drawinglayer/processor2d/hittestprocessor2d.hxx b/include/drawinglayer/processor2d/hittestprocessor2d.hxx index 9ba4ad55dcaa..5638f688964e 100644 --- a/include/drawinglayer/processor2d/hittestprocessor2d.hxx +++ b/include/drawinglayer/processor2d/hittestprocessor2d.hxx @@ -21,7 +21,7 @@ #define INCLUDED_DRAWINGLAYER_PROCESSOR2D_HITTESTPROCESSOR2D_HXX #include <drawinglayer/drawinglayerdllapi.h> - +#include <drawinglayer/primitive2d/Primitive2DContainer.hxx> #include <drawinglayer/processor2d/baseprocessor2d.hxx> namespace basegfx { class B2DPolygon; } diff --git a/sfx2/source/appl/appmisc.cxx b/sfx2/source/appl/appmisc.cxx index 51cde7cb8a7a..dc1f26a969b3 100644 --- a/sfx2/source/appl/appmisc.cxx +++ b/sfx2/source/appl/appmisc.cxx @@ -156,7 +156,7 @@ bool SfxApplication::loadBrandSvg(const char *pName, BitmapEx &rBitmap, int nWid const drawinglayer::primitive2d::Primitive2DReference xTransformRef( new drawinglayer::primitive2d::TransformPrimitive2D( aTransform, - aVectorGraphicData.getPrimitive2DSequence())); + drawinglayer::primitive2d::Primitive2DContainer(aVectorGraphicData.getPrimitive2DSequence()))); // UNO dance to render from drawinglayer @@ -178,7 +178,7 @@ bool SfxApplication::loadBrandSvg(const char *pName, BitmapEx &rBitmap, int nWid const uno::Reference< rendering::XBitmap > xBitmap( xPrimitive2DRenderer->rasterize( - drawinglayer::primitive2d::Primitive2DSequence(&xTransformRef, 1), + drawinglayer::primitive2d::Primitive2DContainer{xTransformRef}.toSequence(), uno::Sequence< beans::PropertyValue >(), fFakeDPI, fFakeDPI, diff --git a/sfx2/source/control/thumbnailview.cxx b/sfx2/source/control/thumbnailview.cxx index 04de9a437550..37043f8767c0 100644 --- a/sfx2/source/control/thumbnailview.cxx +++ b/sfx2/source/control/thumbnailview.cxx @@ -18,6 +18,7 @@ #include <comphelper/processfactory.hxx> #include <drawinglayer/attribute/fontattribute.hxx> #include <drawinglayer/primitive2d/PolyPolygonColorPrimitive2D.hxx> +#include <drawinglayer/primitive2d/Primitive2DContainer.hxx> #include <drawinglayer/primitive2d/textlayoutdevice.hxx> #include <drawinglayer/processor2d/baseprocessor2d.hxx> #include <drawinglayer/processor2d/processorfromoutputdevice.hxx> diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx index b4924dc4474c..7050dee85964 100644 --- a/sfx2/source/view/viewfrm.cxx +++ b/sfx2/source/view/viewfrm.cxx @@ -80,6 +80,7 @@ #include <comphelper/namedvaluecollection.hxx> #include <comphelper/docpasswordrequest.hxx> #include <comphelper/docpasswordhelper.hxx> +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> #include <com/sun/star/uno/Reference.h> diff --git a/svgio/CppunitTest_svgio.mk b/svgio/CppunitTest_svgio.mk index e6708c916f34..3a828ad036e3 100644 --- a/svgio/CppunitTest_svgio.mk +++ b/svgio/CppunitTest_svgio.mk @@ -35,6 +35,7 @@ $(eval $(call gb_CppunitTest_use_libraries,svgio,\ cppuhelper \ comphelper \ sal \ + salhelper \ sax \ svt \ test \ diff --git a/svgio/CppunitTest_svgio_tools.mk b/svgio/CppunitTest_svgio_tools.mk index 09eb03f659fc..cb48c5eda09d 100644 --- a/svgio/CppunitTest_svgio_tools.mk +++ b/svgio/CppunitTest_svgio_tools.mk @@ -34,6 +34,7 @@ $(eval $(call gb_CppunitTest_use_libraries,svgio_tools,\ cppu \ cppuhelper \ sal \ + salhelper \ sax \ svt \ tk \ diff --git a/svgio/Library_svgio.mk b/svgio/Library_svgio.mk index e921ddaad939..c5a35405323f 100644 --- a/svgio/Library_svgio.mk +++ b/svgio/Library_svgio.mk @@ -39,6 +39,7 @@ $(eval $(call gb_Library_use_libraries,svgio,\ cppu \ cppuhelper \ sal \ + salhelper \ tk \ tl \ sax \ diff --git a/svgio/qa/cppunit/SvgImportTest.cxx b/svgio/qa/cppunit/SvgImportTest.cxx index 25baf76fdad8..a46285ee7f64 100644 --- a/svgio/qa/cppunit/SvgImportTest.cxx +++ b/svgio/qa/cppunit/SvgImportTest.cxx @@ -20,6 +20,7 @@ #include <drawinglayer/primitive2d/Tools.hxx> #include <drawinglayer/tools/primitive2dxmldump.hxx> +#include <drawinglayer/primitive2d/Primitive2DContainer.hxx> #include <memory> #include <string_view> @@ -129,7 +130,7 @@ Primitive2DSequence Test::parseSvg(std::u16string_view aSource) void Test::checkRectPrimitive(Primitive2DSequence const & rPrimitive) { drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(rPrimitive)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(rPrimitive)); CPPUNIT_ASSERT (pDocument); @@ -149,8 +150,11 @@ void Test::checkRectPrimitive(Primitive2DSequence const & rPrimitive) bool arePrimitive2DSequencesEqual(const Primitive2DSequence& rA, const Primitive2DSequence& rB) { return std::equal(rA.begin(), rA.end(), rB.begin(), rB.end(), - [](const Primitive2DReference& a, const Primitive2DReference& b) { - return drawinglayer::primitive2d::arePrimitive2DReferencesEqual(a, b); }); + [](const css::uno::Reference<css::graphic::XPrimitive2D>& a, + const css::uno::Reference<css::graphic::XPrimitive2D>& b) + { + return drawinglayer::primitive2d::arePrimitive2DReferencesEqual(a, b); + }); } // Attributes for an object (like rect as in this case) can be defined @@ -185,7 +189,7 @@ void Test::testTdf87309() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceTdf87309.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceTdf87309)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(aSequenceTdf87309); CPPUNIT_ASSERT (pDocument); @@ -204,7 +208,7 @@ void Test::testFontsizeKeywords() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceFontsizeKeywords.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceFontsizeKeywords)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(aSequenceFontsizeKeywords); CPPUNIT_ASSERT (pDocument); @@ -267,7 +271,7 @@ void Test::testFontsizePercentage() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceFontsizePercentage.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceFontsizePercentage)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(aSequenceFontsizePercentage); CPPUNIT_ASSERT (pDocument); @@ -284,7 +288,7 @@ void Test::testFontsizeRelative() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceFontsizeRelative.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceFontsizeRelative)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(aSequenceFontsizeRelative); CPPUNIT_ASSERT (pDocument); @@ -306,7 +310,7 @@ void Test::testTdf45771() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceTdf45771.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceTdf45771)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(aSequenceTdf45771); CPPUNIT_ASSERT (pDocument); @@ -323,7 +327,7 @@ void Test::testTdf97941() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceTdf97941.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceTdf97941)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(aSequenceTdf97941); CPPUNIT_ASSERT (pDocument); @@ -339,7 +343,7 @@ void Test::testTdf104339() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceTdf104339.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceTdf104339)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(aSequenceTdf104339); CPPUNIT_ASSERT (pDocument); assertXPath(pDocument, "/primitive2D/transform/transform/transform/transform/transform/polypolygoncolor", "color", "#000000"); @@ -351,7 +355,7 @@ void Test::testTdf85770() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceTdf85770.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceTdf85770)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequenceTdf85770)); CPPUNIT_ASSERT (pDocument); @@ -377,7 +381,7 @@ void Test::testTdf79163() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceTdf79163.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceTdf79163)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequenceTdf79163)); CPPUNIT_ASSERT (pDocument); @@ -390,7 +394,7 @@ void Test::testTdf97542_1() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceTdf97542_1.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceTdf97542_1)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequenceTdf97542_1)); CPPUNIT_ASSERT (pDocument); @@ -406,7 +410,7 @@ void Test::testTdf97542_2() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceTdf97542_2.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceTdf97542_2)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequenceTdf97542_2)); CPPUNIT_ASSERT (pDocument); @@ -422,7 +426,7 @@ void Test::testTdf97543() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceTdf97543.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceTdf97543)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequenceTdf97543)); CPPUNIT_ASSERT (pDocument); @@ -441,7 +445,7 @@ void Test::testRGBColor() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceRGBColor.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceRGBColor)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequenceRGBColor)); CPPUNIT_ASSERT (pDocument); @@ -460,7 +464,7 @@ void Test::testRGBAColor() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceRGBAColor.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceRGBAColor)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequenceRGBAColor)); CPPUNIT_ASSERT (pDocument); @@ -473,7 +477,7 @@ void Test::testNoneColor() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceRGBAColor.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceRGBAColor)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequenceRGBAColor)); CPPUNIT_ASSERT (pDocument); @@ -490,7 +494,7 @@ void Test::testTdf97936() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceTdf97936.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceTdf97936)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequenceTdf97936)); CPPUNIT_ASSERT (pDocument); @@ -518,7 +522,7 @@ void Test::testClipPathAndParentStyle() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceClipPathAndParentStyle.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceClipPathAndParentStyle)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequenceClipPathAndParentStyle)); CPPUNIT_ASSERT (pDocument); @@ -536,7 +540,7 @@ void Test::testClipPathAndStyle() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceClipPathAndStyle.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceClipPathAndStyle)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequenceClipPathAndStyle)); CPPUNIT_ASSERT (pDocument); @@ -553,7 +557,7 @@ void Test::testi125329() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequencei125329.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequencei125329)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequencei125329)); CPPUNIT_ASSERT (pDocument); @@ -576,7 +580,7 @@ void Test::testMaskingPath07b() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceMaskingPath07b.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceMaskingPath07b)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequenceMaskingPath07b)); CPPUNIT_ASSERT (pDocument); @@ -588,7 +592,7 @@ void Test::test123926() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence123926.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence123926)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence123926)); CPPUNIT_ASSERT (pDocument); @@ -602,7 +606,7 @@ void Test::test47446() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence47446.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence47446)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence47446)); CPPUNIT_ASSERT (pDocument); @@ -617,7 +621,7 @@ void Test::test47446b() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequence47446b.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequence47446b)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequence47446b)); CPPUNIT_ASSERT (pDocument); @@ -632,7 +636,7 @@ void Test::testMaskText() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceMaskText.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceMaskText)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequenceMaskText)); CPPUNIT_ASSERT (pDocument); @@ -650,7 +654,7 @@ void Test::testTdf99994() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceTdf99994.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceTdf99994)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequenceTdf99994)); CPPUNIT_ASSERT (pDocument); @@ -667,7 +671,7 @@ void Test::testTdf99115() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceTdf99115.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceTdf99115) ); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequenceTdf99115) ); CPPUNIT_ASSERT (pDocument); @@ -716,7 +720,7 @@ void Test::testTdf101237() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceTdf101237.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceTdf101237)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequenceTdf101237)); CPPUNIT_ASSERT (pDocument); @@ -731,7 +735,7 @@ void Test::testTdf94765() CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(aSequenceTdf94765.getLength())); drawinglayer::Primitive2dXmlDump dumper; - xmlDocUniquePtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceTdf94765)); + xmlDocUniquePtr pDocument = dumper.dumpAndParse(Primitive2DContainer(aSequenceTdf94765)); CPPUNIT_ASSERT (pDocument); @@ -762,7 +766,7 @@ void Test::testBehaviourWhenWidthAndHeightIsOrIsNotSet() basegfx::B2DRange aRange; uno::Sequence<beans::PropertyValue> aViewParameters; - for (Primitive2DReference const & xReference : aSequence) + for (css::uno::Reference<css::graphic::XPrimitive2D> const & xReference : aSequence) { if (xReference.is()) { @@ -787,7 +791,7 @@ void Test::testBehaviourWhenWidthAndHeightIsOrIsNotSet() basegfx::B2DRange aRange; uno::Sequence<beans::PropertyValue> aViewParameters; - for (Primitive2DReference const & xReference : aSequence) + for (css::uno::Reference<css::graphic::XPrimitive2D> const & xReference : aSequence) { if (xReference.is()) { diff --git a/svgio/source/svguno/xsvgparser.cxx b/svgio/source/svguno/xsvgparser.cxx index 515c6910beb4..f6e85cdeb964 100644 --- a/svgio/source/svguno/xsvgparser.cxx +++ b/svgio/source/svguno/xsvgparser.cxx @@ -141,7 +141,7 @@ namespace svgio::svgreader OSL_ENSURE(false, "Invalid stream (!)"); } - return comphelper::containerToSequence(aRetval); + return aRetval.toSequence(); } uno::Any SAL_CALL XSvgParser::getDrawCommands( diff --git a/svx/source/dialog/frmsel.cxx b/svx/source/dialog/frmsel.cxx index e2be7400f89c..117bec6f6784 100644 --- a/svx/source/dialog/frmsel.cxx +++ b/svx/source/dialog/frmsel.cxx @@ -38,6 +38,7 @@ #include <vcl/svapp.hxx> #include <drawinglayer/processor2d/processor2dtools.hxx> #include <drawinglayer/processor2d/baseprocessor2d.hxx> +#include <drawinglayer/primitive2d/Primitive2DContainer.hxx> #include <bitmaps.hlst> diff --git a/svx/source/sdr/primitive2d/primitivefactory2d.cxx b/svx/source/sdr/primitive2d/primitivefactory2d.cxx index 9625c8bcd41e..620bc0e4f5a9 100644 --- a/svx/source/sdr/primitive2d/primitivefactory2d.cxx +++ b/svx/source/sdr/primitive2d/primitivefactory2d.cxx @@ -36,7 +36,7 @@ css::uno::Sequence< css::uno::Reference< css::graphic::XPrimitive2D > > SAL_CALL const sdr::contact::ViewContact& rSource(pSource->GetViewContact()); drawinglayer::primitive2d::Primitive2DContainer aSourceVal; rSource.getViewIndependentPrimitive2DContainer(aSourceVal); - aRetval = comphelper::containerToSequence(aSourceVal); + aRetval = aSourceVal.toSequence(); } } @@ -75,7 +75,7 @@ css::uno::Sequence< css::uno::Reference< css::graphic::XPrimitive2D > > SAL_CALL const sdr::contact::ViewContact& rSource(pSource->GetViewContact()); drawinglayer::primitive2d::Primitive2DContainer aSourceRetval; rSource.getViewIndependentPrimitive2DContainer(aSourceRetval); - aRetval = comphelper::containerToSequence(aSourceRetval); + aRetval = aSourceRetval.toSequence(); } } diff --git a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx index 017be7b4f5bb..18f1a0918fed 100644 --- a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx +++ b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx @@ -212,7 +212,7 @@ basegfx::B2DRange getTextAnchorRange(const attribute::SdrTextAttribute& rText, else { // add to decomposition - return Primitive2DReference(pNewFillPrimitive); + return pNewFillPrimitive; } } @@ -249,7 +249,7 @@ basegfx::B2DRange getTextAnchorRange(const attribute::SdrTextAttribute& rText, else { // add to decomposition - return Primitive2DReference(pNewLinePrimitive); + return pNewLinePrimitive; } } diff --git a/svx/source/svdraw/svdograf.cxx b/svx/source/svdraw/svdograf.cxx index 67bd14cc8622..2b95bb7207f3 100644 --- a/svx/source/svdraw/svdograf.cxx +++ b/svx/source/svdraw/svdograf.cxx @@ -145,15 +145,15 @@ void SdrGrafObj::onGraphicChanged() if (rVectorGraphicDataPtr->getType() == VectorGraphicDataType::Pdf) return; - const drawinglayer::primitive2d::Primitive2DContainer aSequence(rVectorGraphicDataPtr->getPrimitive2DSequence()); + const std::deque<css::uno::Reference<css::graphic::XPrimitive2D>>& rContainer(rVectorGraphicDataPtr->getPrimitive2DSequence()); - if (aSequence.empty()) + if (rContainer.empty()) return; drawinglayer::geometry::ViewInformation2D aViewInformation2D; drawinglayer::processor2d::ObjectInfoPrimitiveExtractor2D aProcessor(aViewInformation2D); - aProcessor.process(aSequence); + aProcessor.process(rContainer); const drawinglayer::primitive2d::ObjectInfoPrimitive2D* pResult = aProcessor.getResult(); diff --git a/svx/source/svdraw/svdpntv.cxx b/svx/source/svdraw/svdpntv.cxx index e8c42b4651d1..5ab5b150d175 100644 --- a/svx/source/svdraw/svdpntv.cxx +++ b/svx/source/svdraw/svdpntv.cxx @@ -41,6 +41,7 @@ #include <svx/sdr/contact/objectcontact.hxx> #include <svx/sdr/animation/objectanimator.hxx> #include <drawinglayer/primitive2d/metafileprimitive2d.hxx> +#include <drawinglayer/converters.hxx> #include <basegfx/matrix/b2dhommatrixtools.hxx> #include <comphelper/lok.hxx> #include <svx/svdviter.hxx> @@ -118,7 +119,7 @@ BitmapEx convertMetafileToBitmapEx( rTargetRange.getRange(), rTargetRange.getMinimum()), rMtf)); - aBitmapEx = convertPrimitive2DSequenceToBitmapEx( + aBitmapEx = drawinglayer::convertPrimitive2DContainerToBitmapEx( drawinglayer::primitive2d::Primitive2DContainer { aMtf }, rTargetRange, nMaximumQuadraticPixels); diff --git a/svx/source/svdraw/svdview.cxx b/svx/source/svdraw/svdview.cxx index 0dddaf873c3b..55731106abf8 100644 --- a/svx/source/svdraw/svdview.cxx +++ b/svx/source/svdraw/svdview.cxx @@ -456,14 +456,11 @@ SdrHitKind SdrView::PickAnything(const Point& rLogicPos, SdrViewEvent& rVEvt) co for (const drawinglayer::primitive2d::Primitive2DReference& xReference : aHitContainer) { - if (xReference.is()) + auto pBasePrimitive = xReference.get(); + if (pBasePrimitive && pBasePrimitive->getPrimitive2DID() == PRIMITIVE2D_ID_TEXTHIERARCHYFIELDPRIMITIVE2D) { - auto pBasePrimitive = static_cast<const drawinglayer::primitive2d::BasePrimitive2D*>(xReference.get()); - if (pBasePrimitive->getPrimitive2DID() == PRIMITIVE2D_ID_TEXTHIERARCHYFIELDPRIMITIVE2D) - { - pTextHierarchyFieldPrimitive2D = static_cast<const drawinglayer::primitive2d::TextHierarchyFieldPrimitive2D*>(xReference.get()); - break; - } + pTextHierarchyFieldPrimitive2D = static_cast<const drawinglayer::primitive2d::TextHierarchyFieldPrimitive2D*>(pBasePrimitive); + break; } } diff --git a/svx/source/svdraw/svdxcgv.cxx b/svx/source/svdraw/svdxcgv.cxx index 8e84ff133626..c4725d899566 100644 --- a/svx/source/svdraw/svdxcgv.cxx +++ b/svx/source/svdraw/svdxcgv.cxx @@ -43,6 +43,7 @@ #include <vcl/vectorgraphicdata.hxx> #include <drawinglayer/primitive2d/groupprimitive2d.hxx> #include <drawinglayer/geometry/viewinformation2d.hxx> +#include <drawinglayer/converters.hxx> #include <svx/sdr/contact/viewcontact.hxx> #include <sdr/contact/objectcontactofobjlistpainter.hxx> #include <svx/sdr/contact/displayinfo.hxx> @@ -502,8 +503,8 @@ BitmapEx SdrExchangeView::GetMarkedObjBitmapEx(bool bNoVDevIfOneBmpMarked, const // if we have geometry and it has a range, convert to BitmapEx using // common tooling - aBmp = convertPrimitive2DSequenceToBitmapEx( - xPrimitives, + aBmp = drawinglayer::convertPrimitive2DContainerToBitmapEx( + std::move(xPrimitives), aRange, nMaximumQuadraticPixels, eRangeUnit, diff --git a/svx/source/unodraw/unoshape.cxx b/svx/source/unodraw/unoshape.cxx index 86b3d875d64a..94a7b2540ec6 100644 --- a/svx/source/unodraw/unoshape.cxx +++ b/svx/source/unodraw/unoshape.cxx @@ -80,6 +80,7 @@ #include <svx/lathe3d.hxx> #include <extrud3d.hxx> #include <svx/sdr/contact/viewcontact.hxx> +#include <drawinglayer/converters.hxx> #include <drawinglayer/geometry/viewinformation2d.hxx> #include <drawinglayer/primitive2d/transformprimitive2d.hxx> @@ -748,8 +749,8 @@ uno::Any SvxShape::GetBitmap( bool bMetaFile /* = false */ ) const } const BitmapEx aBmp( - convertPrimitive2DSequenceToBitmapEx( - xPrimitives, + drawinglayer::convertPrimitive2DContainerToBitmapEx( + std::move(xPrimitives), aRange)); Graphic aGraph(aBmp); diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk index 63de3bd1571e..cd6826c6dbba 100644 --- a/vcl/Library_vcl.mk +++ b/vcl/Library_vcl.mk @@ -63,6 +63,7 @@ $(eval $(call gb_Library_use_libraries,vcl,\ cppu \ cppuhelper \ $(call gb_Helper_optional,BREAKPAD,crashreport) \ + drawinglayercore \ i18nlangtag \ i18nutil \ $(if $(ENABLE_JAVA),jvmaccess) \ diff --git a/vcl/source/bitmap/BitmapTools.cxx b/vcl/source/bitmap/BitmapTools.cxx index 2a9dc870ddc1..b22661c628d7 100644 --- a/vcl/source/bitmap/BitmapTools.cxx +++ b/vcl/source/bitmap/BitmapTools.cxx @@ -91,7 +91,7 @@ void loadFromSvg(SvStream& rStream, const OUString& sPath, BitmapEx& rBitmapEx, geometry::RealRectangle2D aRealRect; basegfx::B2DRange aRange; - for (Primitive2DReference const & xReference : aPrimitiveSequence) + for (css::uno::Reference<css::graphic::XPrimitive2D> const & xReference : aPrimitiveSequence) { if (xReference.is()) { diff --git a/vcl/source/gdi/impgraph.cxx b/vcl/source/gdi/impgraph.cxx index a10844e1cada..b00eb31599fd 100644 --- a/vcl/source/gdi/impgraph.cxx +++ b/vcl/source/gdi/impgraph.cxx @@ -42,6 +42,7 @@ #include <vcl/metaact.hxx> #include <impgraph.hxx> #include <com/sun/star/graphic/XPrimitive2D.hpp> +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> #include <vcl/dibtools.hxx> #include <map> #include <memory> @@ -715,12 +716,16 @@ const GDIMetaFile& ImpGraphic::getGDIMetaFile() const { // try to cast to MetafileAccessor implementation const css::uno::Reference< css::graphic::XPrimitive2D > xReference(aSequence[0]); - const MetafileAccessor* pMetafileAccessor = dynamic_cast< const MetafileAccessor* >(xReference.get()); - - if (pMetafileAccessor) + auto pUnoPrimitive = static_cast< const drawinglayer::primitive2d::UnoPrimitive2D* >(xReference.get()); + if (pUnoPrimitive) { - // it is a MetafileAccessor implementation, get Metafile - pMetafileAccessor->accessMetafile(const_cast< ImpGraphic* >(this)->maMetaFile); + const MetafileAccessor* pMetafileAccessor = dynamic_cast< const MetafileAccessor* >(pUnoPrimitive->getBasePrimitive2D().get()); + + if (pMetafileAccessor) + { + // it is a MetafileAccessor implementation, get Metafile + pMetafileAccessor->accessMetafile(const_cast< ImpGraphic* >(this)->maMetaFile); + } } } } |