1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #ifndef INCLUDED_VCL_ANIMATE_ANIMATION_HXX
21 #define INCLUDED_VCL_ANIMATE_ANIMATION_HXX
23 #include <tools/solar.h>
24 #include <vcl/dllapi.h>
25 #include <vcl/timer.hxx>
26 #include <vcl/animate/AnimationFrame.hxx>
28 #define ANIMATION_TIMEOUT_ON_CLICK 2147483647L
30 class AnimationRenderer
;
33 class VCL_DLLPUBLIC Animation
37 Animation(const Animation
& rAnimation
);
40 Animation
& operator=(const Animation
& rAnimation
);
41 bool operator==(const Animation
& rAnimation
) const;
42 bool operator!=(const Animation
& rAnimation
) const { return !(*this == rAnimation
); }
46 bool Start(OutputDevice
& rOutDev
, const Point
& rDestPt
, const Size
& rDestSz
,
47 tools::Long nRendererId
, OutputDevice
* pFirstFrameOutDev
);
49 void Stop(const OutputDevice
* pOutDev
= nullptr, tools::Long nRendererId
= 0);
51 void Draw(OutputDevice
& rOutDev
, const Point
& rDestPt
) const;
52 void Draw(OutputDevice
& rOutDev
, const Point
& rDestPt
, const Size
& rDestSz
) const;
54 bool IsInAnimation() const { return mbIsInAnimation
; }
55 bool IsTransparent() const;
57 const Size
& GetDisplaySizePixel() const { return maGlobalSize
; }
58 void SetDisplaySizePixel(const Size
& rSize
) { maGlobalSize
= rSize
; }
60 const BitmapEx
& GetBitmapEx() const { return maBitmapEx
; }
61 void SetBitmapEx(const BitmapEx
& rBmpEx
) { maBitmapEx
= rBmpEx
; }
63 sal_uInt32
GetLoopCount() const { return mnLoopCount
; }
64 void SetLoopCount(const sal_uInt32 nLoopCount
);
65 void ResetLoopCount();
67 void SetNotifyHdl(const Link
<Animation
*, void>& rLink
) { maNotifyLink
= rLink
; }
68 const Link
<Animation
*, void>& GetNotifyHdl() const { return maNotifyLink
; }
70 std::vector
<std::unique_ptr
<AnimationFrame
>>& GetAnimationFrames() { return maFrames
; }
71 size_t Count() const { return maFrames
.size(); }
72 bool Insert(const AnimationFrame
& rAnimationFrame
);
73 const AnimationFrame
& Get(sal_uInt16 nAnimation
) const;
74 void Replace(const AnimationFrame
& rNewAnimationBmp
, sal_uInt16 nAnimation
);
76 sal_uLong
GetSizeBytes() const;
77 BitmapChecksum
GetChecksum() const;
80 void Convert(BmpConversion eConversion
);
81 bool ReduceColors(sal_uInt16 nNewColorCount
);
84 void Mirror(BmpMirrorFlags nMirrorFlags
);
85 void Adjust(short nLuminancePercent
, short nContrastPercent
, short nChannelRPercent
,
86 short nChannelGPercent
, short nChannelBPercent
, double fGamma
= 1.0,
87 bool bInvert
= false);
89 friend SvStream
& ReadAnimation(SvStream
& rIStream
, Animation
& rAnimation
);
90 friend SvStream
& WriteAnimation(SvStream
& rOStream
, const Animation
& rAnimation
);
93 SAL_DLLPRIVATE
static void ImplIncAnimCount() { gAnimationRendererCount
++; }
94 SAL_DLLPRIVATE
static void ImplDecAnimCount() { gAnimationRendererCount
--; }
95 SAL_DLLPRIVATE sal_uLong
ImplGetCurPos() const { return mnFrameIndex
; }
98 SAL_DLLPRIVATE
static sal_uLong gAnimationRendererCount
;
100 std::vector
<std::unique_ptr
<AnimationFrame
>> maFrames
;
101 std::vector
<std::unique_ptr
<AnimationRenderer
>> maRenderers
;
103 Link
<Animation
*, void> maNotifyLink
;
107 sal_uInt32 mnLoopCount
;
110 bool mbIsInAnimation
;
111 bool mbLoopTerminated
;
113 SAL_DLLPRIVATE
std::vector
<std::unique_ptr
<AnimationData
>> CreateAnimationDataItems();
114 SAL_DLLPRIVATE
void PopulateRenderers();
115 SAL_DLLPRIVATE
void RenderNextFrameInAllRenderers();
116 SAL_DLLPRIVATE
void PruneMarkedRenderers();
117 SAL_DLLPRIVATE
bool IsAnyRendererActive();
119 SAL_DLLPRIVATE
void ImplRestartTimer(sal_uLong nTimeout
);
120 DECL_DLLPRIVATE_LINK(ImplTimeoutHdl
, Timer
*, void);
123 #endif // INCLUDED_VCL_ANIMATE_ANIMATION_HXX
125 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */