summaryrefslogtreecommitdiff
path: root/drawinglayer/source/primitive2d/animatedprimitive2d.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'drawinglayer/source/primitive2d/animatedprimitive2d.cxx')
-rw-r--r--drawinglayer/source/primitive2d/animatedprimitive2d.cxx143
1 files changed, 41 insertions, 102 deletions
diff --git a/drawinglayer/source/primitive2d/animatedprimitive2d.cxx b/drawinglayer/source/primitive2d/animatedprimitive2d.cxx
index f935f5b5b3..41b15c4595 100644
--- a/drawinglayer/source/primitive2d/animatedprimitive2d.cxx
+++ b/drawinglayer/source/primitive2d/animatedprimitive2d.cxx
@@ -52,33 +52,12 @@ namespace drawinglayer
{
namespace primitive2d
{
- Primitive2DSequence AnimatedSwitchPrimitive2D::createLocalDecomposition(const geometry::ViewInformation2D& rViewInformation) const
- {
- if(getChildren().hasElements())
- {
- const double fState(getAnimationEntry().getStateAtTime(rViewInformation.getViewTime()));
- const sal_uInt32 nLen(getChildren().getLength());
- sal_uInt32 nIndex(basegfx::fround(fState * (double)nLen));
-
- if(nIndex >= nLen)
- {
- nIndex = nLen - 1L;
- }
-
- const Primitive2DReference xRef(getChildren()[nIndex], uno::UNO_QUERY_THROW);
- return Primitive2DSequence(&xRef, 1L);
- }
-
- return Primitive2DSequence();
- }
-
AnimatedSwitchPrimitive2D::AnimatedSwitchPrimitive2D(
const animation::AnimationEntry& rAnimationEntry,
const Primitive2DSequence& rChildren,
bool bIsTextAnimation)
: GroupPrimitive2D(rChildren),
mpAnimationEntry(0),
- mfDecomposeViewTime(0.0),
mbIsTextAnimation(bIsTextAnimation)
{
// clone given animation description
@@ -105,29 +84,22 @@ namespace drawinglayer
Primitive2DSequence AnimatedSwitchPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
{
- ::osl::MutexGuard aGuard( m_aMutex );
-
- if(getLocalDecomposition().hasElements() && mfDecomposeViewTime != rViewInformation.getViewTime())
+ if(getChildren().hasElements())
{
- // conditions of last local decomposition have changed, delete
- const_cast< AnimatedSwitchPrimitive2D* >(this)->setLocalDecomposition(Primitive2DSequence());
- }
+ const double fState(getAnimationEntry().getStateAtTime(rViewInformation.getViewTime()));
+ const sal_uInt32 nLen(getChildren().getLength());
+ sal_uInt32 nIndex(basegfx::fround(fState * (double)nLen));
- if(!getLocalDecomposition().hasElements())
- {
- // remember time
- const_cast< AnimatedSwitchPrimitive2D* >(this)->mfDecomposeViewTime = rViewInformation.getViewTime();
- }
+ if(nIndex >= nLen)
+ {
+ nIndex = nLen - 1L;
+ }
- // use parent implementation
- return GroupPrimitive2D::get2DDecomposition(rViewInformation);
- }
+ const Primitive2DReference xRef(getChildren()[nIndex], uno::UNO_QUERY_THROW);
+ return Primitive2DSequence(&xRef, 1L);
+ }
- basegfx::B2DRange AnimatedSwitchPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const
- {
- // to get range from decomposition and not from group content, call implementation from
- // BasePrimitive2D here
- return BasePrimitive2D::getB2DRange(rViewInformation);
+ return Primitive2DSequence();
}
// provide unique ID
@@ -142,7 +114,15 @@ namespace drawinglayer
{
namespace primitive2d
{
- Primitive2DSequence AnimatedBlinkPrimitive2D::createLocalDecomposition(const geometry::ViewInformation2D& rViewInformation) const
+ AnimatedBlinkPrimitive2D::AnimatedBlinkPrimitive2D(
+ const animation::AnimationEntry& rAnimationEntry,
+ const Primitive2DSequence& rChildren,
+ bool bIsTextAnimation)
+ : AnimatedSwitchPrimitive2D(rAnimationEntry, rChildren, bIsTextAnimation)
+ {
+ }
+
+ Primitive2DSequence AnimatedBlinkPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
{
if(getChildren().hasElements())
{
@@ -157,14 +137,6 @@ namespace drawinglayer
return Primitive2DSequence();
}
- AnimatedBlinkPrimitive2D::AnimatedBlinkPrimitive2D(
- const animation::AnimationEntry& rAnimationEntry,
- const Primitive2DSequence& rChildren,
- bool bIsTextAnimation)
- : AnimatedSwitchPrimitive2D(rAnimationEntry, rChildren, bIsTextAnimation)
- {
- }
-
// provide unique ID
ImplPrimitrive2DIDBlock(AnimatedBlinkPrimitive2D, PRIMITIVE2D_ID_ANIMATEDBLINKPRIMITIVE2D)
@@ -172,41 +144,30 @@ namespace drawinglayer
} // end of namespace drawinglayer
//////////////////////////////////////////////////////////////////////////////
-// helper class for AnimatedInterpolatePrimitive2D
namespace drawinglayer
{
namespace primitive2d
{
- BufferedMatrixDecompose::BufferedMatrixDecompose(const basegfx::B2DHomMatrix& rMatrix)
- : maB2DHomMatrix(rMatrix),
- maScale(0.0, 0.0),
- maTranslate(0.0, 0.0),
- mfRotate(0.0),
- mfShearX(0.0),
- mbDecomposed(false)
- {
- }
-
- void BufferedMatrixDecompose::ensureDecompose() const
+ AnimatedInterpolatePrimitive2D::AnimatedInterpolatePrimitive2D(
+ const std::vector< basegfx::B2DHomMatrix >& rmMatrixStack,
+ const animation::AnimationEntry& rAnimationEntry,
+ const Primitive2DSequence& rChildren,
+ bool bIsTextAnimation)
+ : AnimatedSwitchPrimitive2D(rAnimationEntry, rChildren, bIsTextAnimation),
+ maMatrixStack()
{
- if(!mbDecomposed)
+ // copy matrices to locally pre-decomposed matrix stack
+ const sal_uInt32 nCount(rmMatrixStack.size());
+ maMatrixStack.reserve(nCount);
+
+ for(sal_uInt32 a(0L); a < nCount; a++)
{
- BufferedMatrixDecompose* pThis = const_cast< BufferedMatrixDecompose* >(this);
- maB2DHomMatrix.decompose(pThis->maScale, pThis->maTranslate, pThis->mfRotate, pThis->mfShearX);
- pThis->mbDecomposed = true;
+ maMatrixStack.push_back(basegfx::tools::B2DHomMatrixBufferedDecompose(rmMatrixStack[a]));
}
}
- } // end of anonymous namespace
-} // end of namespace drawinglayer
-//////////////////////////////////////////////////////////////////////////////
-
-namespace drawinglayer
-{
- namespace primitive2d
- {
- Primitive2DSequence AnimatedInterpolatePrimitive2D::createLocalDecomposition(const geometry::ViewInformation2D& rViewInformation) const
+ Primitive2DSequence AnimatedInterpolatePrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
{
const sal_uInt32 nSize(maMatrixStack.size());
@@ -227,21 +188,18 @@ namespace drawinglayer
const sal_uInt32 nIndA(sal_uInt32(floor(fIndex)));
const double fOffset(fIndex - (double)nIndA);
basegfx::B2DHomMatrix aTargetTransform;
+ std::vector< basegfx::tools::B2DHomMatrixBufferedDecompose >::const_iterator aMatA(maMatrixStack.begin() + nIndA);
if(basegfx::fTools::equalZero(fOffset))
{
// use matrix from nIndA directly
- aTargetTransform = maMatrixStack[nIndA].getB2DHomMatrix();
+ aTargetTransform = aMatA->getB2DHomMatrix();
}
else
{
- // interpolate. Get involved matrices and ensure they are decomposed
+ // interpolate. Get involved buffered decomposed matrices
const sal_uInt32 nIndB((nIndA + 1L) % nSize);
- std::vector< BufferedMatrixDecompose >::const_iterator aMatA(maMatrixStack.begin() + nIndA);
- std::vector< BufferedMatrixDecompose >::const_iterator aMatB(maMatrixStack.begin() + nIndB);
-
- aMatA->ensureDecompose();
- aMatB->ensureDecompose();
+ std::vector< basegfx::tools::B2DHomMatrixBufferedDecompose >::const_iterator aMatB(maMatrixStack.begin() + nIndB);
// interpolate for fOffset [0.0 .. 1.0[
const basegfx::B2DVector aScale(basegfx::interpolate(aMatA->getScale(), aMatB->getScale(), fOffset));
@@ -250,10 +208,8 @@ namespace drawinglayer
const double fShearX(((aMatB->getShearX() - aMatA->getShearX()) * fOffset) + aMatA->getShearX());
// build matrix for state
- aTargetTransform.scale(aScale.getX(), aScale.getY());
- aTargetTransform.shearX(fShearX);
- aTargetTransform.rotate(fRotate);
- aTargetTransform.translate(aTranslate.getX(), aTranslate.getY());
+ aTargetTransform = basegfx::tools::createScaleShearXRotateTranslateB2DHomMatrix(
+ aScale, fShearX, fRotate, aTranslate);
}
// create new transform primitive reference, return new sequence
@@ -266,23 +222,6 @@ namespace drawinglayer
}
}
- AnimatedInterpolatePrimitive2D::AnimatedInterpolatePrimitive2D(
- const std::vector< basegfx::B2DHomMatrix >& rmMatrixStack,
- const animation::AnimationEntry& rAnimationEntry,
- const Primitive2DSequence& rChildren,
- bool bIsTextAnimation)
- : AnimatedSwitchPrimitive2D(rAnimationEntry, rChildren, bIsTextAnimation),
- maMatrixStack()
- {
- // copy matrices
- const sal_uInt32 nCount(rmMatrixStack.size());
-
- for(sal_uInt32 a(0L); a < nCount; a++)
- {
- maMatrixStack.push_back(BufferedMatrixDecompose(rmMatrixStack[a]));
- }
- }
-
// provide unique ID
ImplPrimitrive2DIDBlock(AnimatedInterpolatePrimitive2D, PRIMITIVE2D_ID_ANIMATEDINTERPOLATEPRIMITIVE2D)