51 class AnimatedGraphicPrimitive2D :
public AnimatedSwitchPrimitive2D
86 bool isValidData()
const
93 void ensureVirtualDeviceSizeAndState()
101 if (aCurrent != aTarget)
111 const ::tools::Rectangle aRect(
Point(0, 0), aTarget);
117 sal_uInt32 generateStepTime(sal_uInt32 nIndex)
const
120 sal_uInt32 nWaitTime(rAnimationFrame.
mnWait * 10);
125 if (ANIMATION_TIMEOUT_ON_CLICK == rAnimationFrame.
mnWait)
129 nWaitTime = 100 * 60 * 60 * 24;
142 void createAndSetAnimationTiming()
152 const sal_uInt32 aStepTime(generateStepTime(a));
153 const animation::AnimationEntryFixed aTime(
static_cast<double>(aStepTime),
static_cast<double>(a) /
static_cast<double>(nCount));
155 aAnimationLoop.append(aTime);
158 animation::AnimationEntryList aAnimationEntryList;
159 aAnimationEntryList.append(aAnimationLoop);
161 setAnimationEntry(aAnimationEntryList);
168 bool useAlphaMask =
false;
169#if defined(MACOSX) || defined(IOS)
180 bitmap =
BitmapEx(aMainBitmap, aMaskBitmap);
185 bitmap =
BitmapEx(aMainBitmap, aMaskBitmap);
189 new BitmapPrimitive2D(
194 void checkSafeToBuffer(sal_uInt32 nIndex)
206 bool bBufferingComplete(
true);
212 bBufferingComplete =
false;
217 if (bBufferingComplete)
235 void createFrame(sal_uInt32 nTarget)
246 ensureVirtualDeviceSizeAndState();
255 bool bSourceBlending = rAnimationFrame.
meBlend == Blend::Source;
280 BitmapEx aExpandVisibilityMask(aAlphaMask, aAlphaMask);
303 BitmapEx aExpandVisibilityMask(rMask, rMask);
309 case Disposal::Previous:
352 AnimatedGraphicPrimitive2D(
360 virtual bool operator==(
const BasePrimitive2D& rPrimitive)
const override;
363 virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor,
const geometry::ViewInformation2D& rViewInformation)
const override;
368 AnimatedGraphicPrimitive2D::AnimatedGraphicPrimitive2D(
371 : AnimatedSwitchPrimitive2D(
372 animation::AnimationEntryList(),
373 Primitive2DContainer(),
386 createAndSetAnimationTiming();
395 static const sal_uInt64 nAllowedSize(64 * 256 * 256);
396 static const sal_uInt64 nHugeSize(10000000);
398 const sal_uInt64 nUsedSize(
static_cast<sal_uInt64
>(
maAnimation.
Count()) * aTarget.Width() * aTarget.Height());
400 if (nUsedSize < nAllowedSize)
405 if (nUsedSize > nHugeSize)
418 bool AnimatedGraphicPrimitive2D::operator==(
const BasePrimitive2D& rPrimitive)
const
424 const AnimatedGraphicPrimitive2D* pCompare =
dynamic_cast<const AnimatedGraphicPrimitive2D*
>(&rPrimitive);
427 return (
nullptr != pCompare
428 && getTransform() == pCompare->getTransform()
432 void AnimatedGraphicPrimitive2D::get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor,
const geometry::ViewInformation2D& rViewInformation)
const
438 const double fState(getAnimationEntry().getStateAtTime(rViewInformation.getViewTime()));
450 aRetval = tryTogetFromBuffer(nIndex);
454 rVisitor.visit(aRetval);
466 const_cast<AnimatedGraphicPrimitive2D*
>(
this)->createFrame(nIndex);
469 aRetval = tryTogetFromBuffer(nIndex);
473 rVisitor.visit(aRetval);
478 aRetval = createFromBuffer();
480 rVisitor.visit(aRetval);
496 case GraphicType::Bitmap :
502 aRetval[0] =
new AnimatedGraphicPrimitive2D(
519 aEmbedVectorGraphic.
scale(
524 aEmbedVectorGraphic = rTransform * aEmbedVectorGraphic;
544 case GraphicType::GdiMetafile :
558 const Size aMetaFileRealSize(
584 rContainer.
append(std::move(aRetval));
600 if(rChildren.empty())
608 aRetval = std::move(rChildren);
610 if(GraphicDrawMode::Watermark == aGraphicDrawMode)
617 fLuminance = std::clamp(fLuminance + 0.5, -1.0, 1.0);
618 fContrast = std::clamp(fContrast - 0.7, -1.0, 1.0);
619 aGraphicDrawMode = GraphicDrawMode::Standard;
623 switch(aGraphicDrawMode)
625 case GraphicDrawMode::Greys:
631 std::make_shared<basegfx::BColorModifier_gray>()));
636 case GraphicDrawMode::Mono:
642 std::make_shared<basegfx::BColorModifier_black_and_white>(0.5)));
650 aGraphicDrawMode != GraphicDrawMode::Watermark
651 &&
"OOps, GraphicDrawMode::Watermark should already be handled (see above)");
668 std::make_shared<basegfx::BColorModifier_RGBLuminanceContrast>(
684 std::make_shared<basegfx::BColorModifier_gamma>(
696 std::make_shared<basegfx::BColorModifier_invert>()));
const Size & GetDisplaySizePixel() const
const AnimationFrame & Get(sal_uInt16 nAnimation) const
sal_uInt32 GetLoopCount() const
static OutputDevice * GetDefaultDevice()
const AlphaMask & GetAlphaMask() const
const Size & GetSizePixel() const
const GDIMetaFile & GetGDIMetaFile() const
GraphicType GetType() const
BitmapEx GetBitmapEx(const GraphicConversionParameters &rParameters=GraphicConversionParameters()) const
const std::shared_ptr< VectorGraphicData > & getVectorGraphicData() const
constexpr tools::Long getHeight() const
constexpr tools::Long getWidth() const
void scale(double fX, double fY)
void transform(const basegfx::B2DHomMatrix &rMatrix)
ModifiedColorPrimitive2D class.
void append(const Primitive2DReference &)
sal_uInt32 mnNextFrameToPrepare
std::vector< Primitive2DReference > maBufferedPrimitives
buffering of all frames
ScopedVclPtrInstance< VirtualDevice > maVirtualDevice
the on-demand created VirtualDevices for frame creation
basegfx::B2DHomMatrix maTransform
the geometric definition
ScopedVclPtrInstance< VirtualDevice > maVirtualDeviceMask
const Graphic maGraphic
the Graphic with all its content possibilities, here only animated is allowed and gets checked by isV...
Primitive2DReference maBufferedFirstFrame
buffering of 1st frame (always active)
bool mbHugeSize
set if the animation is huge so that just always the next frame is used instead of using timing
::Animation maAnimation
local animation processing data, excerpt from maGraphic
VCL_DLLPUBLIC bool isVCLSkiaEnabled()
B2DHomMatrix createTranslateB2DHomMatrix(double fTranslateX, double fTranslateY)
B2DPolygon const & createUnitPolygon()
B2IRange fround(const B2DRange &rRange)
rtl::Reference< BasePrimitive2D > Primitive2DReference
void create2DDecompositionOfGraphic(Primitive2DContainer &rContainer, const Graphic &rGraphic, const basegfx::B2DHomMatrix &rTransform)
Helper method with supports decomposing a Graphic with all possible contents to lower level primitive...
Primitive2DContainer create2DColorModifierEmbeddingsAsNeeded(Primitive2DContainer &&rChildren, GraphicDrawMode aGraphicDrawMode, double fLuminance, double fContrast, double fRed, double fGreen, double fBlue, double fGamma, bool bInvert)
Helper to embed given sequence of primitives to evtl.
bool operator==(const XclFontData &rLeft, const XclFontData &rRight)