MythTV master
gallerytransitions.h
Go to the documentation of this file.
1
3
4#ifndef GALLERYTRANSITIONS_H
5#define GALLERYTRANSITIONS_H
6
7#include <utility>
8
9// MythTV headers
10#include "galleryslide.h"
11
12
14enum ImageTransitionType : std::uint8_t {
15 // First transition must be 0 and useable by all painters
23 kLastTransSentinel = 7 // Must be last
24};
25
26
28class Transition : public QObject
29{
30 Q_OBJECT
31public:
32 explicit Transition(const QString& name);
33 ~Transition() override = default;
34
35 virtual void Start(Slide &from, Slide &to, bool forwards, float speed = 1.0);
36 virtual void SetSpeed(float /*speed*/) {}
37 virtual void Pulse() = 0;
38 virtual void Initialise() {}
39 virtual void Finalise() {}
40
41protected slots:
42 virtual void Finished();
43
44signals:
45 void finished();
46
47protected:
49 std::chrono::milliseconds m_duration {1s};
52 Slide *m_old {nullptr};
55 Slide *m_new {nullptr};
56 // Transitions play forwards or backwards. Symmetric transitions can
57 // define a one-way transition in terms of "prev" & "next" (as in
58 // position rather than time). The reverse transition can then be
59 // achieved by playing it backwards.
60 // When played forwards next replaces prev, ie. prev = old, next = new
61 // When played backwards prev replaces next, ie. prev = new, next = old
63 Slide *m_prev {nullptr};
65 Slide *m_next {nullptr};
66};
67
68
69using TransitionMap = QMap<int, Transition*>;
70
71
74{
75public:
77 void Start(Slide &from, Slide &to,
78 bool forwards, float speed = 1.0) override; // Transition
79 void Pulse() override {} // Transition
80};
81
82
85{
86public:
87 GroupTransition(GroupAnimation *animation, const QString& name);
88 ~GroupTransition() override;
89 void Start(Slide &from, Slide &to,
90 bool forwards, float speed = 1.0) override; // Transition
91 void SetSpeed(float speed) override; // Transition
92 void Pulse() override; // Transition
93 void Initialise() override = 0; // Transition
94 void Finalise() override = 0; // Transition
95
96protected:
98};
99
100
103{
104public:
106 Transition::tr("Blend")) {}
107 void Initialise() override; // GroupTransition
108 void Finalise() override; // GroupTransition
109};
110
111
114{
115public:
117 Transition::tr("Twist")) {}
118 void Initialise() override; // GroupTransition
119 void Finalise() override; // GroupTransition
120};
121
122
125{
126public:
128 Transition::tr("Slide")) {}
129 void Initialise() override; // GroupTransition
130 void Finalise() override; // GroupTransition
131};
132
133
136{
137public:
139 Transition::tr("Zoom")) {}
140 void Initialise() override; // GroupTransition
141 void Finalise() override; // GroupTransition
142};
143
144
147{
148public:
149 TransitionSpin() { setObjectName(Transition::tr("Spin")); }
150 void Initialise() override; // TransitionBlend
151 void Finalise() override; // TransitionBlend
152};
153
154
157{
158 Q_OBJECT
159public:
160 explicit TransitionRandom(QList<Transition*> peers)
161 : Transition(Transition::tr("Random")), m_peers(std::move(peers)) {}
162 void Start(Slide &from, Slide &to, bool forwards, float speed = 1.0) override; // Transition
163 void SetSpeed(float speed) override // Transition
164 { if (m_current) m_current->SetSpeed(speed); }
165 void Pulse() override // Transition
166 { if (m_current) m_current->Pulse(); }
167 void Initialise() override // Transition
168 { if (m_current) m_current->Initialise(); }
169 void Finalise() override // Transition
170 { if (m_current) m_current->Finalise(); }
171
172protected slots:
173 void Finished() override; // Transition
174
175protected:
177 QList<Transition*> m_peers;
180};
181
182
185{
186public:
187 explicit TransitionRegistry(bool includeAnimations);
188 ~TransitionRegistry() { qDeleteAll(m_map); }
189 TransitionMap GetAll() const { return m_map; }
190 Transition &Select(int setting);
191
194
195private:
198};
199
200
201#endif // GALLERYTRANSITIONS_H
Abstract class for groups of animations.
Definition: galleryslide.h:91
Abstract class implementing sequential & parallel animations.
void Start(Slide &from, Slide &to, bool forwards, float speed=1.0) override
Start group transition.
void Finalise() override=0
void Initialise() override=0
void Pulse() override
Update group transition.
void SetSpeed(float speed) override
Change transition speed.
GroupTransition(GroupAnimation *animation, const QString &name)
Create group transition.
~GroupTransition() override
Destroy group transition.
GroupAnimation * m_animation
A group of animations to be played simultaneously.
Definition: galleryslide.h:129
A group of animations to be played sequentially.
Definition: galleryslide.h:111
A specialised image for slideshows.
Definition: galleryslide.h:157
Image blends into the next by fading.
void Finalise() override
Reset Blend transition.
void Initialise() override
Set up Blend transition.
Switches images instantly with no effects.
void Pulse() override
void Start(Slide &from, Slide &to, bool forwards, float speed=1.0) override
Switch images.
Invokes random transitions.
void SetSpeed(float speed) override
void Finalise() override
TransitionRandom(QList< Transition * > peers)
void Pulse() override
void Finished() override
Invoked when peer transition completes.
Transition * m_current
Selected transition.
void Start(Slide &from, Slide &to, bool forwards, float speed=1.0) override
Starts a random transition from a set of its peer transitions,.
void Initialise() override
QList< Transition * > m_peers
Set of distinct transitions.
Manages transitions available to s psinter.
Transition & Select(int setting)
Returns the requested transition or an alternative if it is not suitable for the painter.
TransitionRegistry(bool includeAnimations)
Constructor.
TransitionNone m_immediate
A transition that updates instantly.
TransitionMap GetAll() const
TransitionMap m_map
All possible transitions.
Slide on from right, then off to left.
void Initialise() override
Set up Slide transition.
void Finalise() override
Reset Slide transition.
Images blend whilst rotating.
void Initialise() override
Set up Spin transition.
void Finalise() override
Reset Spin transition.
Image twists into the next.
void Finalise() override
Reset Twist transition.
void Initialise() override
Set up Twist transition.
Zooms from right, then away to left.
void Finalise() override
Reset Zoom transition.
void Initialise() override
Set up Zoom transition.
Base class of an animated transition that can be accelerated & reversed.
virtual void Finished()
Transition has completed.
virtual void Finalise()
virtual void Start(Slide &from, Slide &to, bool forwards, float speed=1.0)
Start base transition.
void finished()
virtual void Initialise()
Transition(const QString &name)
Slide * m_next
The image occurring later in the slideshow sequence.
Slide * m_prev
The image occurring earlier in the slideshow sequence.
virtual void Pulse()=0
std::chrono::milliseconds m_duration
Seconds transition will last.
Slide * m_new
The new image that will replace the current one (whatever the transition direction)
virtual void SetSpeed(float)
Slide * m_old
The image currently displayed, which will be replaced (whatever the transition direction)
~Transition() override=default
Defines specialised images used by the Gallery slideshow and the animation framework used by transfor...
ImageTransitionType
Available transitions.
@ kSpinTransition
@ kNoTransition
@ kSlideTransition
@ kLastTransSentinel
@ kRandomTransition
@ kZoomTransition
@ kTwistTransition
@ kBlendTransition
QMap< int, Transition * > TransitionMap
STL namespace.