summaryrefslogtreecommitdiff
path: root/drawinglayer/source/primitive2d/backgroundcolorprimitive2d.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'drawinglayer/source/primitive2d/backgroundcolorprimitive2d.cxx')
-rw-r--r--drawinglayer/source/primitive2d/backgroundcolorprimitive2d.cxx36
1 files changed, 26 insertions, 10 deletions
diff --git a/drawinglayer/source/primitive2d/backgroundcolorprimitive2d.cxx b/drawinglayer/source/primitive2d/backgroundcolorprimitive2d.cxx
index 68f31cb4c67a..ea1b2a56942a 100644
--- a/drawinglayer/source/primitive2d/backgroundcolorprimitive2d.cxx
+++ b/drawinglayer/source/primitive2d/backgroundcolorprimitive2d.cxx
@@ -21,6 +21,7 @@
#include <basegfx/polygon/b2dpolygon.hxx>
#include <basegfx/polygon/b2dpolygontools.hxx>
#include <drawinglayer/primitive2d/PolyPolygonColorPrimitive2D.hxx>
+#include <drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx>
#include <drawinglayer/geometry/viewinformation2d.hxx>
#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
@@ -30,13 +31,31 @@ using namespace com::sun::star;
namespace drawinglayer::primitive2d
{
- void BackgroundColorPrimitive2D::create2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const
+ Primitive2DReference BackgroundColorPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
{
- if(!rViewInformation.getViewport().isEmpty())
+ // transparency invalid or completely transparent, done
+ if(getTransparency() < 0.0 || getTransparency() >= 1.0)
+ return nullptr;
+
+ // no viewport, not visible, done
+ if(rViewInformation.getViewport().isEmpty())
+ return nullptr;
+
+ // create decompose geometry
+ const basegfx::B2DPolygon aOutline(basegfx::utils::createPolygonFromRect(rViewInformation.getViewport()));
+ Primitive2DReference aDecompose(new PolyPolygonColorPrimitive2D(basegfx::B2DPolyPolygon(aOutline), getBColor()));
+
+ if(getTransparency() != 0.0)
{
- const basegfx::B2DPolygon aOutline(basegfx::utils::createPolygonFromRect(rViewInformation.getViewport()));
- rContainer.push_back(new PolyPolygonColorPrimitive2D(basegfx::B2DPolyPolygon(aOutline), getBColor()));
+ // if used, embed decompose geometry to unified transparency
+ Primitive2DContainer aContent { aDecompose };
+ aDecompose =
+ new UnifiedTransparencePrimitive2D(
+ std::move(aContent),
+ getTransparency());
}
+
+ return aDecompose;
}
BackgroundColorPrimitive2D::BackgroundColorPrimitive2D(
@@ -67,22 +86,19 @@ 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()))
+ if(getBuffered2DDecomposition() && (maLastViewport != rViewInformation.getViewport()))
{
// conditions of last local decomposition have changed, delete
- const_cast< BackgroundColorPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DContainer());
+ const_cast< BackgroundColorPrimitive2D* >(this)->setBuffered2DDecomposition(nullptr);
}
- if(getBuffered2DDecomposition().empty())
+ if(!getBuffered2DDecomposition())
{
// remember ViewRange
const_cast< BackgroundColorPrimitive2D* >(this)->maLastViewport = rViewInformation.getViewport();
}
// use parent implementation
- aGuard.unlock();
BufferedDecompositionPrimitive2D::get2DDecomposition(rVisitor, rViewInformation);
}