diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2016-11-14 09:11:35 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2016-12-22 06:44:08 +0000 |
commit | cc15806b527cc02c57bd92211fda259e33963106 (patch) | |
tree | 85aa90d0f1013ccef85cbfa2c0f064f905b0c464 /include/drawinglayer | |
parent | 41f7878ccbc457ef0431c999d38d9d77265d5dc7 (diff) |
convert BasePrimitive2D::get2DDecomposition to use a visitor
which lets us avoid constructing the decomposition when we are only
interesting in the bounding box, e.g. for hit testing
Change-Id: Icd8d430b75d207063f1db70e5a0822d5d82a7d00
Reviewed-on: https://gerrit.libreoffice.org/30835
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Tested-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'include/drawinglayer')
17 files changed, 39 insertions, 27 deletions
diff --git a/include/drawinglayer/primitive2d/animatedprimitive2d.hxx b/include/drawinglayer/primitive2d/animatedprimitive2d.hxx index 0e86019b8f4b..db873c5ccf28 100644 --- a/include/drawinglayer/primitive2d/animatedprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/animatedprimitive2d.hxx @@ -99,7 +99,7 @@ namespace drawinglayer depends on the point in time, so the default implementation is not useful here, it needs to be handled locally */ - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; }; } // end of namespace primitive2d } // end of namespace drawinglayer @@ -125,7 +125,7 @@ namespace drawinglayer const Primitive2DContainer& rChildren); /// create local decomposition - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; /// provide unique ID DeclPrimitive2DIDBlock() @@ -160,7 +160,7 @@ namespace drawinglayer const Primitive2DContainer& rChildren); /// create local decomposition - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; /// provide unique ID DeclPrimitive2DIDBlock() diff --git a/include/drawinglayer/primitive2d/backgroundcolorprimitive2d.hxx b/include/drawinglayer/primitive2d/backgroundcolorprimitive2d.hxx index 35d0221c3273..8ccc43375bfd 100644 --- a/include/drawinglayer/primitive2d/backgroundcolorprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/backgroundcolorprimitive2d.hxx @@ -77,7 +77,7 @@ namespace drawinglayer DeclPrimitive2DIDBlock() /// Override standard getDecomposition call to be view-dependent here - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; }; } // end of namespace primitive2d } // end of namespace drawinglayer diff --git a/include/drawinglayer/primitive2d/baseprimitive2d.hxx b/include/drawinglayer/primitive2d/baseprimitive2d.hxx index 66250bb59511..0bf92cef056a 100644 --- a/include/drawinglayer/primitive2d/baseprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/baseprimitive2d.hxx @@ -58,20 +58,32 @@ namespace drawinglayer { namespace primitive2d { typedef css::uno::Reference< css::graphic::XPrimitive2D > Primitive2DReference; typedef css::uno::Sequence< Primitive2DReference > Primitive2DSequence; + class Primitive2DContainer; + // Visitor class for walking a tree of Primitive2DReference in BasePrimitive2D::get2DDecomposition + class DRAWINGLAYER_DLLPUBLIC Primitive2DDecompositionVisitor { + public: + virtual void append(const Primitive2DReference&) = 0; + virtual void append(const Primitive2DContainer&) = 0; + virtual void append(Primitive2DContainer&&) = 0; + virtual ~Primitive2DDecompositionVisitor(); + }; - class SAL_WARN_UNUSED DRAWINGLAYER_DLLPUBLIC Primitive2DContainer : public std::deque< Primitive2DReference > + class SAL_WARN_UNUSED DRAWINGLAYER_DLLPUBLIC Primitive2DContainer : public std::deque< Primitive2DReference >, + public Primitive2DDecompositionVisitor { public: explicit Primitive2DContainer() {} explicit Primitive2DContainer( size_type count ) : deque(count) {} + virtual ~Primitive2DContainer() override; Primitive2DContainer( const Primitive2DContainer& other ) : deque(other) {} Primitive2DContainer( const Primitive2DContainer&& other ) : deque(other) {} Primitive2DContainer( const std::deque< Primitive2DReference >& other ) : deque(other) {} Primitive2DContainer( std::initializer_list<Primitive2DReference> init ) : deque(init) {} - void append(const Primitive2DContainer& rSource); + virtual void append(const Primitive2DReference&) override; + virtual void append(const Primitive2DContainer& rSource) override; + virtual void append(Primitive2DContainer&& rSource) override; void append(const Primitive2DSequence& rSource); - void append(Primitive2DContainer&& rSource); Primitive2DContainer& operator=(const Primitive2DContainer& r) { deque::operator=(r); return *this; } Primitive2DContainer& operator=(const Primitive2DContainer&& r) { deque::operator=(r); return *this; } bool operator==(const Primitive2DContainer& rB) const; @@ -190,7 +202,7 @@ namespace drawinglayer virtual sal_uInt32 getPrimitive2DID() const = 0; /// The default implementation will return an empty sequence - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const; // Methods from XPrimitive2D @@ -279,7 +291,7 @@ namespace drawinglayer overridden and the ViewInformation2D for the last decomposition need to be remembered, too, and be used in the next call to decide if the buffered decomposition may be reused or not. */ - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; }; } // end of namespace primitive2d } // end of namespace drawinglayer diff --git a/include/drawinglayer/primitive2d/controlprimitive2d.hxx b/include/drawinglayer/primitive2d/controlprimitive2d.hxx index 554d92d560bb..9286c147989a 100644 --- a/include/drawinglayer/primitive2d/controlprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/controlprimitive2d.hxx @@ -100,7 +100,7 @@ namespace drawinglayer DeclPrimitive2DIDBlock() /// Override standard getDecomposition to be view-dependent here - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; }; } // end of namespace primitive2d } // end of namespace drawinglayer diff --git a/include/drawinglayer/primitive2d/cropprimitive2d.hxx b/include/drawinglayer/primitive2d/cropprimitive2d.hxx index 124d0504f6df..9a71e9c4176d 100644 --- a/include/drawinglayer/primitive2d/cropprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/cropprimitive2d.hxx @@ -86,7 +86,7 @@ namespace drawinglayer virtual bool operator==(const BasePrimitive2D& rPrimitive) const override; /// local decomposition - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; /// provide unique ID DeclPrimitive2DIDBlock() diff --git a/include/drawinglayer/primitive2d/fillhatchprimitive2d.hxx b/include/drawinglayer/primitive2d/fillhatchprimitive2d.hxx index e320b3fa5dd8..4291cbb496d0 100644 --- a/include/drawinglayer/primitive2d/fillhatchprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/fillhatchprimitive2d.hxx @@ -93,7 +93,7 @@ namespace drawinglayer virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const override; /// Override standard getDecomposition to be view-dependent here - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; /// provide unique ID DeclPrimitive2DIDBlock() diff --git a/include/drawinglayer/primitive2d/gridprimitive2d.hxx b/include/drawinglayer/primitive2d/gridprimitive2d.hxx index 51ef7959e0a2..4e55030dfb2f 100644 --- a/include/drawinglayer/primitive2d/gridprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/gridprimitive2d.hxx @@ -107,7 +107,7 @@ namespace drawinglayer DeclPrimitive2DIDBlock() /// Override standard getDecomposition to be view-dependent here - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; }; } // end of namespace primitive2d } // end of namespace drawinglayer diff --git a/include/drawinglayer/primitive2d/groupprimitive2d.hxx b/include/drawinglayer/primitive2d/groupprimitive2d.hxx index 1928be18b0df..f08e032ad96e 100644 --- a/include/drawinglayer/primitive2d/groupprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/groupprimitive2d.hxx @@ -76,13 +76,13 @@ namespace drawinglayer /// data read access const Primitive2DContainer& getChildren() const { return maChildren; } - void getChildren(Primitive2DContainer& rContainer) const { rContainer.insert(rContainer.end(), maChildren.begin(), maChildren.end()); } + void getChildren(Primitive2DDecompositionVisitor& rVisitor) const { rVisitor.append(maChildren); } /// compare operator virtual bool operator==( const BasePrimitive2D& rPrimitive ) const override; /// local decomposition. Implementation will just return children - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; /// provide unique ID DeclPrimitive2DIDBlock() diff --git a/include/drawinglayer/primitive2d/helplineprimitive2d.hxx b/include/drawinglayer/primitive2d/helplineprimitive2d.hxx index fbc67fe382e8..fd48f0aae5fe 100644 --- a/include/drawinglayer/primitive2d/helplineprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/helplineprimitive2d.hxx @@ -102,7 +102,7 @@ namespace drawinglayer DeclPrimitive2DIDBlock() /// Override standard getDecomposition to be view-dependent here - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; }; } // end of namespace primitive2d } // end of namespace drawinglayer diff --git a/include/drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx b/include/drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx index 788d09d09b18..10e55812481a 100644 --- a/include/drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx @@ -48,7 +48,7 @@ namespace drawinglayer virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const override; /// local decomposition. Implementation will return empty Primitive2DSequence - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; // provide unique ID DeclPrimitive2DIDBlock() diff --git a/include/drawinglayer/primitive2d/patternfillprimitive2d.hxx b/include/drawinglayer/primitive2d/patternfillprimitive2d.hxx index 11d064737c45..800c3778d0aa 100644 --- a/include/drawinglayer/primitive2d/patternfillprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/patternfillprimitive2d.hxx @@ -83,7 +83,7 @@ namespace drawinglayer virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const override; /// overload to react on evtl. buffered content - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; /// provide unique ID DeclPrimitive2DIDBlock() diff --git a/include/drawinglayer/primitive2d/polygonprimitive2d.hxx b/include/drawinglayer/primitive2d/polygonprimitive2d.hxx index 2a41ac9d3bf2..e92276c6d5f9 100644 --- a/include/drawinglayer/primitive2d/polygonprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/polygonprimitive2d.hxx @@ -133,7 +133,7 @@ namespace drawinglayer virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const override; /// Override standard getDecomposition to be view-dependent here - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; /// provide unique ID DeclPrimitive2DIDBlock() diff --git a/include/drawinglayer/primitive2d/primitivetools2d.hxx b/include/drawinglayer/primitive2d/primitivetools2d.hxx index 289fc77de018..d127b6003244 100644 --- a/include/drawinglayer/primitive2d/primitivetools2d.hxx +++ b/include/drawinglayer/primitive2d/primitivetools2d.hxx @@ -58,7 +58,7 @@ namespace drawinglayer double getDiscreteUnit() const { return mfDiscreteUnit; } /// Override standard getDecomposition to be view-dependent here - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; }; } // end of namespace primitive2d } // end of namespace drawinglayer @@ -96,7 +96,7 @@ namespace drawinglayer const basegfx::B2DRange& getViewport() const { return maViewport; } /// Override standard getDecomposition to be view-dependent here - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; }; } // end of namespace primitive2d } // end of namespace drawinglayer @@ -134,7 +134,7 @@ namespace drawinglayer const basegfx::B2DHomMatrix& getViewTransformation() const { return maViewTransformation; } /// Override standard getDecomposition to be view-dependent here - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; }; } // end of namespace primitive2d } // end of namespace drawinglayer @@ -176,7 +176,7 @@ namespace drawinglayer const basegfx::B2DHomMatrix& getObjectTransformation() const { return maObjectTransformation; } /// Override standard getDecomposition to be view-dependent here - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; }; } // end of namespace primitive2d } // end of namespace drawinglayer diff --git a/include/drawinglayer/primitive2d/sceneprimitive2d.hxx b/include/drawinglayer/primitive2d/sceneprimitive2d.hxx index ba55c31414b7..141bd68d55d6 100644 --- a/include/drawinglayer/primitive2d/sceneprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/sceneprimitive2d.hxx @@ -145,7 +145,7 @@ namespace drawinglayer DeclPrimitive2DIDBlock() /// get local decomposition. Override since this decomposition is view-dependent - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; }; } // end of namespace primitive2d } // end of namespace drawinglayer diff --git a/include/drawinglayer/primitive2d/shadowprimitive2d.hxx b/include/drawinglayer/primitive2d/shadowprimitive2d.hxx index 13461f82478e..b216aca24b8c 100644 --- a/include/drawinglayer/primitive2d/shadowprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/shadowprimitive2d.hxx @@ -72,7 +72,7 @@ namespace drawinglayer virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const override; /// create decomposition - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; /// provide unique ID DeclPrimitive2DIDBlock() diff --git a/include/drawinglayer/primitive2d/texteffectprimitive2d.hxx b/include/drawinglayer/primitive2d/texteffectprimitive2d.hxx index 733234ff6369..a8da738bf087 100644 --- a/include/drawinglayer/primitive2d/texteffectprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/texteffectprimitive2d.hxx @@ -93,7 +93,7 @@ namespace drawinglayer DeclPrimitive2DIDBlock() /// Override standard getDecomposition to be view-dependent here - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; }; } // end of namespace primitive2d } // end of namespace drawinglayer diff --git a/include/drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx b/include/drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx index e24f8f3a5474..df6ac0e87c85 100644 --- a/include/drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx @@ -60,7 +60,7 @@ namespace drawinglayer virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const override; /// create decomposition - virtual void get2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const override; + virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; /// provide unique ID DeclPrimitive2DIDBlock() |