14 int zoomedWidth =
static_cast<int>(
static_cast<float>(size.width()) *
m_hzoom);
15 int zoomedHeight =
static_cast<int>(
static_cast<float>(size.height()) *
m_vzoom);
22 y = -zoomedHeight / 2;
break;
26 y = -size.height() / 2;
break;
30 y = size.height() - (zoomedHeight / 2);
break;
38 x = -zoomedWidth / 2;
break;
42 x = -size.width() / 2;
break;
46 x = size.width() - (zoomedWidth / 2);
break;
49 return {x, y, zoomedWidth, zoomedHeight};
54 if (
GetMythDB()->GetBoolSetting(
"SmoothTransitions",
true))
93 setStartValue(animation->startValue());
94 setEndValue(animation->endValue());
95 setEasingCurve(animation->easingCurve());
96 setDuration(animation->duration());
110 int offset = (direction() == Forward) ? interval.count() : -interval.count();
111 setCurrentTime(currentTime() + offset);
113 if (endValue() == currentValue())
115 if (direction() == Forward)
118 setDirection(Backward);
123 else if (startValue() == currentValue())
125 if (direction() == Backward)
128 setDirection(Forward);
137 if (curve ==
"Linear") setEasingCurve(QEasingCurve::Linear);
138 else if (curve ==
"InQuad") setEasingCurve(QEasingCurve::InQuad);
139 else if (curve ==
"OutQuad") setEasingCurve(QEasingCurve::OutQuad);
140 else if (curve ==
"InOutQuad") setEasingCurve(QEasingCurve::InOutQuad);
141 else if (curve ==
"OutInQuad") setEasingCurve(QEasingCurve::OutInQuad);
142 else if (curve ==
"InCubic") setEasingCurve(QEasingCurve::InCubic);
143 else if (curve ==
"OutCubic") setEasingCurve(QEasingCurve::OutCubic);
144 else if (curve ==
"InOutCubic") setEasingCurve(QEasingCurve::InOutCubic);
145 else if (curve ==
"OutInCubic") setEasingCurve(QEasingCurve::OutInCubic);
146 else if (curve ==
"InQuart") setEasingCurve(QEasingCurve::InQuart);
147 else if (curve ==
"OutQuart") setEasingCurve(QEasingCurve::OutQuart);
148 else if (curve ==
"InOutQuart") setEasingCurve(QEasingCurve::InOutQuart);
149 else if (curve ==
"OutInQuart") setEasingCurve(QEasingCurve::OutInQuart);
150 else if (curve ==
"InQuint") setEasingCurve(QEasingCurve::InQuint);
151 else if (curve ==
"OutQuint") setEasingCurve(QEasingCurve::OutQuint);
152 else if (curve ==
"InOutQuint") setEasingCurve(QEasingCurve::InOutQuint);
153 else if (curve ==
"OutInQuint") setEasingCurve(QEasingCurve::OutInQuint);
154 else if (curve ==
"InSine") setEasingCurve(QEasingCurve::InSine);
155 else if (curve ==
"OutSine") setEasingCurve(QEasingCurve::OutSine);
156 else if (curve ==
"InOutSine") setEasingCurve(QEasingCurve::InOutSine);
157 else if (curve ==
"OutInSine") setEasingCurve(QEasingCurve::OutInSine);
158 else if (curve ==
"InExpo") setEasingCurve(QEasingCurve::InExpo);
159 else if (curve ==
"OutExpo") setEasingCurve(QEasingCurve::OutExpo);
160 else if (curve ==
"InOutExpo") setEasingCurve(QEasingCurve::InOutExpo);
161 else if (curve ==
"OutInExpo") setEasingCurve(QEasingCurve::OutInExpo);
162 else if (curve ==
"InCirc") setEasingCurve(QEasingCurve::InCirc);
163 else if (curve ==
"OutCirc") setEasingCurve(QEasingCurve::OutCirc);
164 else if (curve ==
"InOutCirc") setEasingCurve(QEasingCurve::InOutCirc);
165 else if (curve ==
"OutInCirc") setEasingCurve(QEasingCurve::OutInCirc);
166 else if (curve ==
"InElastic") setEasingCurve(QEasingCurve::InElastic);
167 else if (curve ==
"OutElastic") setEasingCurve(QEasingCurve::OutElastic);
168 else if (curve ==
"InOutElastic") setEasingCurve(QEasingCurve::InOutElastic);
169 else if (curve ==
"OutInElastic") setEasingCurve(QEasingCurve::OutInElastic);
170 else if (curve ==
"InBack") setEasingCurve(QEasingCurve::InBack);
171 else if (curve ==
"OutBack") setEasingCurve(QEasingCurve::OutBack);
172 else if (curve ==
"InOutBack") setEasingCurve(QEasingCurve::InOutBack);
173 else if (curve ==
"OutInBack") setEasingCurve(QEasingCurve::OutInBack);
174 else if (curve ==
"InBounce") setEasingCurve(QEasingCurve::InBounce);
175 else if (curve ==
"OutBounce") setEasingCurve(QEasingCurve::OutBounce);
176 else if (curve ==
"InOutBounce") setEasingCurve(QEasingCurve::InOutBounce);
177 else if (curve ==
"OutInBounce") setEasingCurve(QEasingCurve::OutInBounce);
178 else if (curve ==
"InCurve") setEasingCurve(QEasingCurve::InCurve);
179 else if (curve ==
"OutCurve") setEasingCurve(QEasingCurve::OutCurve);
180 else if (curve ==
"SineCurve") setEasingCurve(QEasingCurve::SineCurve);
181 else if (curve ==
"CosineCurve") setEasingCurve(QEasingCurve::CosineCurve);
200 QString
t = element.attribute(
"trigger",
"AboutToShow");
202 if (
"AboutToHide" ==
t)
205 for (QDomNode child = element.firstChild(); !child.isNull();
206 child = child.nextSibling())
208 QDomElement section = child.toElement();
209 if (section.isNull())
211 if (section.tagName() ==
"section")
219 int duration = element.attribute(
"duration",
"500").toInt();
220 QString centre = element.attribute(
"centre",
"Middle");
221 for (QDomNode child = element.firstChild(); !child.isNull();
222 child = child.nextSibling())
224 QDomElement effect = child.toElement();
229 int effectduration = duration;
231 QString effect_duration = effect.attribute(
"duration",
"");
232 if (!effect_duration.isEmpty())
233 effectduration = effect_duration.toInt();
235 bool looped =
parseBool(effect.attribute(
"looped",
"false"));
236 bool reversible =
parseBool(effect.attribute(
"reversible",
"false"));
237 QString easingcurve = effect.attribute(
"easingcurve",
"Linear");
241 QString fxtype = effect.tagName();
242 if (fxtype ==
"alpha")
247 else if (fxtype ==
"position")
252 else if (fxtype ==
"angle")
257 else if (fxtype ==
"zoom")
262 else if (fxtype ==
"horizontalzoom")
267 else if (fxtype ==
"verticalzoom")
278 a->setStartValue(start);
280 a->setDuration(effectduration);
281 a->SetEasingCurve(easingcurve);
282 a->SetCentre(centre);
283 a->SetLooped(looped);
284 a->SetReversible(reversible);
292 QVariant& startValue, QVariant& endValue)
294 startValue = element.attribute(
"start",
"0").toInt();
295 endValue = element.attribute(
"end",
"0").toInt();
299 QVariant& startValue, QVariant& endValue,
327 QVariant& startValue, QVariant& endValue)
329 startValue = element.attribute(
"start",
"0").toFloat() / 100.0F;
330 endValue = element.attribute(
"end",
"0").toFloat() /100.0F;
334 QVariant& startValue, QVariant& endValue)
336 startValue = element.attribute(
"start",
"0").toFloat();
337 endValue = element.attribute(
"end",
"0").toFloat();
Wrapper around QPoint allowing us to handle percentage and other relative values for positioning in m...
void CalculatePoint(QRect parentArea)
void setY(const QString &sY)
void setX(const QString &sX)
QPoint toQPoint(void) const
void CopyFrom(const MythUIAnimation *animation)
static void ParseSection(const QDomElement &element, MythUIType *parent, Trigger trigger)
static void parseAngle(const QDomElement &element, QVariant &startValue, QVariant &endValue)
void SetEasingCurve(const QString &curve)
void SetCentre(const QString ¢re)
UIEffects::Centre m_centre
static void ParseElement(const QDomElement &element, MythUIType *parent)
MythUIAnimation(MythUIType *parent=nullptr, Trigger trigger=AboutToShow, Type type=Alpha)
static void parseZoom(const QDomElement &element, QVariant &startValue, QVariant &endValue)
static void parsePosition(const QDomElement &element, QVariant &startValue, QVariant &endValue, MythUIType *parent)
static void parseAlpha(const QDomElement &element, QVariant &startValue, QVariant &endValue)
void updateCurrentValue(const QVariant &value) override
void IncrementCurrentTime(void)
std::chrono::milliseconds m_lastUpdate
The base class on which all widgets and screens are based.
void SetAngle(float angle)
void SetVerticalZoom(float zoom)
virtual MythRect GetArea(void) const
If the object has a minimum area defined, return it, other wise return the default area.
QList< MythUIAnimation * > * GetAnimations(void)
void SetPosition(int x, int y)
Convenience method, calls SetPosition(const MythPoint&) Override that instead to change functionality...
void SetAlpha(int newalpha)
void SetCentre(UIEffects::Centre centre)
void SetHorizontalZoom(float zoom)
QRect GetExtent(QSize size) const
static MythPoint parsePoint(const QString &text, bool normalize=true)
static bool parseBool(const QString &text)
std::chrono::milliseconds currentMSecsSinceEpochAsDuration(void)
QDateTime current(bool stripped)
Returns current Date and Time in UTC.
static eu8 clamp(eu8 value, eu8 low, eu8 high)