37 : maTimer(
"vcl::Animation")
41 , mbIsInAnimation(
false)
42 , mbLoopTerminated(
false)
48 : maBitmapEx(rAnimation.maBitmapEx)
49 , maTimer(
"vcl::Animation")
50 , maGlobalSize(rAnimation.maGlobalSize)
52 , mnPos(rAnimation.mnPos)
53 , mbIsInAnimation(
false)
54 , mbLoopTerminated(rAnimation.mbLoopTerminated)
56 for (
auto const&
i : rAnimation.
maList)
71 if (
this != &rAnimation)
75 for (
auto const&
i : rAnimation.
maList)
93 [](
const std::unique_ptr<AnimationBitmap>& pAnim1,
94 const std::unique_ptr<AnimationBitmap>& pAnim2) ->
bool {
95 return *pAnim1 == *pAnim2;
120 [&aRect](
const std::unique_ptr<AnimationBitmap>& pAnim) ->
bool {
132 for (
auto const& pAnimationBitmap :
maList)
134 nSizeBytes += pAnimationBitmap->maBitmapEx.GetSizeBytes();
146 UInt32ToSVBT32(
maList.size(), aBT32);
176 auto itAnimView = std::find_if(
178 [&rOut, nExtraData](
const std::unique_ptr<ImplAnimView>& pAnimView) ->
bool {
179 return pAnimView->matches(&rOut, nExtraData);
184 if ((*itAnimView)->getOutPos() == rDestPt
185 && (*itAnimView)->getOutSizePix() == rOut.
LogicToPixel(rDestSz))
187 (*itAnimView)->repaint();
203 new ImplAnimView(
this, &rOut, rDestPt, rDestSz, nExtraData, pFirstFrameOutDev));
212 Draw(rOut, rDestPt, rDestSz);
223 [=](
const std::unique_ptr<ImplAnimView>& pAnimView) ->
bool {
224 return pAnimView->matches(pOut, nExtraData);
250 maList[0]->maBitmapEx.Draw(&rOut, rDestPt, rDestSz);
255 const size_t nOldPos =
mnPos;
280 const size_t nAnimCount =
maList.size();
284 bool bGlobalPause =
false;
288 std::vector<std::unique_ptr<AInfo>> aAInfoList;
291 aAInfoList.emplace_back(
i->createAInfo());
296 for (
auto& pAInfo : aAInfoList)
299 if (!pAInfo->pViewData)
301 pView =
new ImplAnimView(
this, pAInfo->pOutDev, pAInfo->aStartOrg,
302 pAInfo->aStartSize, pAInfo->nExtraData);
304 maViewList.push_back(std::unique_ptr<ImplAnimView>(pView));
309 pView->
pause(pAInfo->bPause);
314 auto removeStart = std::remove_if(maViewList.begin(), maViewList.end(),
315 [](
const auto& pView) {
return !pView->isMarked(); });
316 maViewList.erase(removeStart, maViewList.cend());
319 bGlobalPause = std::all_of(maViewList.cbegin(), maViewList.cend(),
320 [](
const auto& pView) {
return pView->isPause(); });
323 std::for_each(maViewList.cbegin(), maViewList.cend(),
324 [](
const auto& pView) { pView->setMarked(
false); });
329 else if (bGlobalPause)
341 mnPos = nAnimCount - 1;
357 [
this](
const auto& pView) { pView->draw(
mnPos); });
364 [](
const auto& pView) {
return pView->isMarked(); });
404 return *
maList[nAnimation];
444 for (
size_t i = 0,
n =
maList.size(); (
i <
n) && bRet; ++
i)
461 for (
size_t i = 0,
n =
maList.size(); (
i <
n) && bRet; ++
i)
487 for (
size_t i = 0,
n =
maList.size(); (
i <
n) && bRet; ++
i)
512 for (
size_t i = 0,
n =
maList.size(); (
i <
n) && bRet; ++
i)
532 short nChannelGPercent,
short nChannelBPercent,
double fGamma,
bool bInvert)
543 for (
size_t i = 0,
n =
maList.size(); (
i <
n) && bRet; ++
i)
545 bRet =
maList[
i]->maBitmapEx.Adjust(nLuminancePercent, nContrastPercent, nChannelRPercent,
546 nChannelGPercent, nChannelBPercent, fGamma, bInvert);
549 maBitmapEx.
Adjust(nLuminancePercent, nContrastPercent, nChannelRPercent, nChannelGPercent,
550 nChannelBPercent, fGamma, bInvert);
555 const sal_uInt16 nCount = rAnimation.
Count();
559 const sal_uInt32 nDummy32 = 0;
571 for (sal_uInt16
i = 0;
i < nCount;
i++)
574 const sal_uInt16 nRest = nCount -
i - 1;
584 : rAnimationBitmap.
mnWait);
602 sal_uInt32 nAnimMagic1, nAnimMagic2;
604 bool bReadAnimations =
false;
607 nStmPos = rIStm.
Tell();
614 if ((nAnimMagic1 == 0x5344414e) && (nAnimMagic2 == 0x494d4931) && !rIStm.
GetError())
615 bReadAnimations =
true;
621 nStmPos = rIStm.
Tell();
624 if ((nAnimMagic1 == 0x5344414e) && (nAnimMagic2 == 0x494d4931) && !rIStm.
GetError())
625 bReadAnimations =
true;
658 rAnimation.
Insert(aAnimationBitmap);
659 }
while (nTmp16 && !rIStm.
GetError());
SvStream & WriteBool(bool b)
#define LINK(Instance, Class, Member)
OutDevType GetOutDevType() const
void SetLoopCount(const sal_uInt32 nLoopCount)
sal_uInt64 BitmapChecksum
void Stop(const OutputDevice *pOutDev=nullptr, tools::Long nExtraData=0)
void setMarked(bool bIsMarked)
void pause(bool bIsPaused)
SAL_DLLPRIVATE void ImplRestartTimer(sal_uLong nTimeout)
SvStream & WriteUInt16(sal_uInt16 nUInt16)
bool Adjust(short nLuminancePercent, short nContrastPercent, short nChannelRPercent, short nChannelGPercent, short nChannelBPercent, double fGamma=1.0, bool bInvert=false, bool msoBrightness=false)
Change various global color characteristics.
friend SvStream & WriteAnimation(SvStream &rOStream, const Animation &rAnimation)
SvStream & ReadUInt16(sal_uInt16 &rUInt16)
Link< Animation *, void > maNotifyLink
const BitmapEx & GetBitmapEx() const
SvStream & ReadCharAsBool(bool &rBool)
bool ReduceColors(sal_uInt16 nNewColorCount)
BitmapChecksum GetChecksum() const
sal_uInt64 Seek(sal_uInt64 nPos)
BitmapChecksum vcl_get_checksum(BitmapChecksum Checksum, const void *Data, sal_uInt32 DatLen)
GDIMetaFile * GetConnectMetaFile() const
bool Convert(BmpConversion eConversion)
Convert bitmap format.
BitmapChecksum GetChecksum() const
constexpr tools::Long Width() const
OString read_uInt16_lenPrefixed_uInt8s_ToOString(SvStream &rStrm)
bool Start(OutputDevice &rOutDev, const Point &rDestPt, const Size &rDestSz, tools::Long nExtraData, OutputDevice *pFirstFrameOutDev)
static bool Filter(BitmapEx &rBmpEx, BitmapFilter const &rFilter)
SvStream & WriteUInt32(sal_uInt32 nUInt32)
void Draw(OutputDevice &rOutDev, const Point &rDestPt) const
void Mirror(BmpMirrorFlags nMirrorFlags)
bool Mirror(BmpMirrorFlags nMirrorFlags)
Mirror the bitmap.
SvStream & ReadUInt32(sal_uInt32 &rUInt32)
#define BITMAP_CHECKSUM_SIZE
void Replace(const AnimationBitmap &rNewAnimationBmp, sal_uInt16 nAnimation)
bool Invert()
Perform the Invert operation on every pixel.
Some things multiple-inherit from VclAbstractDialog and OutputDevice, so we need to use virtual inher...
virtual void Start(bool bStartTimer=true) override
Schedules the task for execution.
std::vector< std::unique_ptr< AnimationBitmap > > maList
#define ANIMATION_TIMEOUT_ON_CLICK
std::vector< std::unique_ptr< ImplAnimView > > maViewList
void SetTimeout(sal_uInt64 nTimeoutMs)
void Draw(OutputDevice *pOutDev, const Point &rDestPt) const
const AnimationBitmap & Get(sal_uInt16 nAnimation) const
std::size_t write_uInt16_lenPrefixed_uInt8s_FromOString(SvStream &rStrm, std::string_view rStr)
Bitmap GetBitmap(Color aTransparentReplaceColor) const
SAL_WARN_UNUSED_RESULT Point PixelToLogic(const Point &rDevicePt) const
SAL_WARN_UNUSED_RESULT Point LogicToPixel(const Point &rLogicPt) const
friend SvStream & ReadAnimation(SvStream &rIStream, Animation &rAnimation)
SvStreamEndian GetEndian() const
bool operator==(const Animation &rAnimation) const
::std::size_t mnLoopCount
bool Insert(const AnimationBitmap &rAnimationBitmap)
#define SAL_WARN_IF(condition, area, stream)
constexpr tools::Long Height() const
void BCToBCOA(BitmapChecksum n, BitmapChecksumOctetArray p)
bool IsInAnimation() const
void SetEndian(SvStreamEndian SvStreamEndian)
sal_Int64 GetSizeBytes() const
void SetInvokeHandler(const Link< Timer *, void > &rLink)
IMPL_LINK_NOARG(Animation, ImplTimeoutHdl, Timer *, void)
sal_uInt8 BitmapChecksumOctetArray[BITMAP_CHECKSUM_SIZE]
bool IsTransparent() const
sal_uLong GetSizeBytes() const
void Convert(BmpConversion eConversion)
void Adjust(short nLuminancePercent, short nContrastPercent, short nChannelRPercent, short nChannelGPercent, short nChannelBPercent, double fGamma=1.0, bool bInvert=false)
static SAL_DLLPRIVATE sal_uLong mnAnimCount
Animation & operator=(const Animation &rAnimation)
bool m_bDetectedRangeSegmentation false