effects: Properly reset present times in coverswitch and flipswitch effects
The last presentation timestamps should be reset when all animations finish rather than when the effect finishes. Otherwise, the calculated time diff for the first animation frame will be too big. BUG: 433471
This commit is contained in:
parent
0292c4a74c
commit
5839e59e24
2 changed files with 21 additions and 20 deletions
|
@ -106,15 +106,14 @@ void CoverSwitchEffect::reconfigure(ReconfigureFlags)
|
|||
|
||||
void CoverSwitchEffect::prePaintScreen(ScreenPrePaintData& data, std::chrono::milliseconds presentTime)
|
||||
{
|
||||
std::chrono::milliseconds delta = std::chrono::milliseconds::zero();
|
||||
if (lastPresentTime.count()) {
|
||||
delta = presentTime - lastPresentTime;
|
||||
}
|
||||
lastPresentTime = presentTime;
|
||||
|
||||
if (mActivated || stop || stopRequested) {
|
||||
data.mask |= Effect::PAINT_SCREEN_WITH_TRANSFORMED_WINDOWS;
|
||||
if (animation || start || stop) {
|
||||
std::chrono::milliseconds delta = std::chrono::milliseconds::zero();
|
||||
if (lastPresentTime.count()) {
|
||||
delta = presentTime - lastPresentTime;
|
||||
}
|
||||
lastPresentTime = presentTime;
|
||||
timeLine.update(delta);
|
||||
}
|
||||
if (selected_window == nullptr)
|
||||
|
@ -284,6 +283,7 @@ void CoverSwitchEffect::postPaintScreen()
|
|||
if ((mActivated && (animation || start)) || stop || stopRequested) {
|
||||
if (timeLine.done()) {
|
||||
timeLine.reset();
|
||||
lastPresentTime = std::chrono::milliseconds::zero();
|
||||
if (stop) {
|
||||
stop = false;
|
||||
effects->setActiveFullScreenEffect(nullptr);
|
||||
|
@ -292,7 +292,6 @@ void CoverSwitchEffect::postPaintScreen()
|
|||
}
|
||||
referrencedWindows.clear();
|
||||
currentWindowList.clear();
|
||||
lastPresentTime = std::chrono::milliseconds::zero();
|
||||
if (startRequested) {
|
||||
startRequested = false;
|
||||
mActivated = true;
|
||||
|
|
|
@ -97,20 +97,21 @@ void FlipSwitchEffect::reconfigure(ReconfigureFlags)
|
|||
void FlipSwitchEffect::prePaintScreen(ScreenPrePaintData& data, std::chrono::milliseconds presentTime)
|
||||
{
|
||||
int time = 0;
|
||||
if (m_lastPresentTime.count()) {
|
||||
time = (presentTime - m_lastPresentTime).count();
|
||||
if (m_animation || m_start || m_stop) {
|
||||
if (m_lastPresentTime.count()) {
|
||||
time = (presentTime - m_lastPresentTime).count();
|
||||
}
|
||||
m_lastPresentTime = presentTime;
|
||||
}
|
||||
m_lastPresentTime = presentTime;
|
||||
|
||||
if (m_active) {
|
||||
data.mask |= PAINT_SCREEN_WITH_TRANSFORMED_WINDOWS;
|
||||
if (m_start)
|
||||
m_startStopTimeLine.setCurrentTime(m_startStopTimeLine.currentTime() + time);
|
||||
if (m_stop && m_scheduledDirections.isEmpty())
|
||||
m_startStopTimeLine.setCurrentTime(m_startStopTimeLine.currentTime() - time);
|
||||
if (m_animation)
|
||||
m_timeLine.setCurrentTime(m_timeLine.currentTime() + time);
|
||||
}
|
||||
data.mask |= PAINT_SCREEN_WITH_TRANSFORMED_WINDOWS;
|
||||
if (m_start)
|
||||
m_startStopTimeLine.setCurrentTime(m_startStopTimeLine.currentTime() + time);
|
||||
if (m_stop && m_scheduledDirections.isEmpty())
|
||||
m_startStopTimeLine.setCurrentTime(m_startStopTimeLine.currentTime() - time);
|
||||
if (m_animation)
|
||||
m_timeLine.setCurrentTime(m_timeLine.currentTime() + time);
|
||||
|
||||
effects->prePaintScreen(data, presentTime);
|
||||
}
|
||||
|
||||
|
@ -325,7 +326,6 @@ void FlipSwitchEffect::postPaintScreen()
|
|||
m_stop = false;
|
||||
m_active = false;
|
||||
m_captionFrame->free();
|
||||
m_lastPresentTime = std::chrono::milliseconds::zero();
|
||||
effects->setActiveFullScreenEffect(nullptr);
|
||||
effects->addRepaintFull();
|
||||
qDeleteAll(m_windows);
|
||||
|
@ -351,6 +351,8 @@ void FlipSwitchEffect::postPaintScreen()
|
|||
}
|
||||
if (m_start || m_stop || m_animation)
|
||||
effects->addRepaintFull();
|
||||
else
|
||||
m_lastPresentTime = std::chrono::milliseconds::zero();
|
||||
}
|
||||
effects->postPaintScreen();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue