diff options
-rw-r--r-- | drawinglayer/source/processor2d/baseprocessor2d.cxx | 36 | ||||
-rw-r--r-- | include/drawinglayer/processor2d/baseprocessor2d.hxx | 7 |
2 files changed, 26 insertions, 17 deletions
diff --git a/drawinglayer/source/processor2d/baseprocessor2d.cxx b/drawinglayer/source/processor2d/baseprocessor2d.cxx index 00d71151e887..a078fe882e9e 100644 --- a/drawinglayer/source/processor2d/baseprocessor2d.cxx +++ b/drawinglayer/source/processor2d/baseprocessor2d.cxx @@ -41,28 +41,32 @@ namespace drawinglayer::processor2d void BaseProcessor2D::process(const primitive2d::BasePrimitive2D& rCandidate) { - primitive2d::Primitive2DContainer aContainer; - rCandidate.get2DDecomposition(aContainer, getViewInformation2D()); - process(aContainer); + // use the visitor API to avoid the cost of constructing Primitive2DContainers + rCandidate.get2DDecomposition(*this, getViewInformation2D()); } - void BaseProcessor2D::process(const primitive2d::Primitive2DContainer& rSource) + // Primitive2DDecompositionVisitor + void BaseProcessor2D::append(const primitive2d::Primitive2DReference& rCandidate) { - if(rSource.empty()) - return; - - const sal_Int32 nCount(rSource.size()); + const primitive2d::BasePrimitive2D* pBasePrimitive = static_cast< const primitive2d::BasePrimitive2D* >(rCandidate.get()); + processBasePrimitive2D(*pBasePrimitive); + } + void BaseProcessor2D::append(const primitive2d::Primitive2DContainer& rContainer) + { + process(rContainer); + } + void BaseProcessor2D::append(primitive2d::Primitive2DContainer&& rCandidate) + { + process(rCandidate); + } - for(sal_Int32 a(0); a < nCount; a++) + void BaseProcessor2D::process(const primitive2d::Primitive2DContainer& rSource) + { + for (const primitive2d::Primitive2DReference& rCandidate : rSource) { - // get reference - const primitive2d::Primitive2DReference xReference(rSource[a]); - - if(xReference.is()) - { - const primitive2d::BasePrimitive2D* pBasePrimitive = static_cast< const primitive2d::BasePrimitive2D* >(xReference.get()); + const primitive2d::BasePrimitive2D* pBasePrimitive = static_cast< const primitive2d::BasePrimitive2D* >(rCandidate.get()); + if (pBasePrimitive) processBasePrimitive2D(*pBasePrimitive); - } } } diff --git a/include/drawinglayer/processor2d/baseprocessor2d.hxx b/include/drawinglayer/processor2d/baseprocessor2d.hxx index 1f0bd46efb62..4f1515109a77 100644 --- a/include/drawinglayer/processor2d/baseprocessor2d.hxx +++ b/include/drawinglayer/processor2d/baseprocessor2d.hxx @@ -22,6 +22,7 @@ #include <drawinglayer/drawinglayerdllapi.h> +#include <drawinglayer/primitive2d/Primitive2DVisitor.hxx> #include <drawinglayer/primitive2d/baseprimitive2d.hxx> #include <drawinglayer/geometry/viewinformation2d.hxx> @@ -150,7 +151,7 @@ namespace drawinglayer::processor2d be helpful to add many for the purpose not interesting higher level primitives to not force their decomposition to be created and/or parsed. */ - class DRAWINGLAYER_DLLPUBLIC BaseProcessor2D + class DRAWINGLAYER_DLLPUBLIC BaseProcessor2D : public drawinglayer::primitive2d::Primitive2DDecompositionVisitor { private: /// The ViewInformation2D itself. It's private to isolate accesses to it @@ -174,6 +175,10 @@ namespace drawinglayer::processor2d void process(const primitive2d::BasePrimitive2D& rCandidate); + // Primitive2DDecompositionVisitor + virtual void append(const primitive2d::Primitive2DReference&) override final; + virtual void append(const primitive2d::Primitive2DContainer&) override final; + virtual void append(primitive2d::Primitive2DContainer&&) override final; public: /// constructor/destructor |