From 75591fa4916772b79fd10fb447a661a79b6701e5 Mon Sep 17 00:00:00 2001 From: David Capello <davidcapello@gmail.com> Date: Sat, 26 Apr 2014 12:06:11 -0300 Subject: [PATCH] Fix animation playback in MiniEditor: now it handles frame duration correctly --- src/app/ui/mini_editor.cpp | 40 +++++++++++++++++++------------------- src/app/ui/mini_editor.h | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/app/ui/mini_editor.cpp b/src/app/ui/mini_editor.cpp index 6e31f57e6..a9f1f2823 100644 --- a/src/app/ui/mini_editor.cpp +++ b/src/app/ui/mini_editor.cpp @@ -170,7 +170,20 @@ void MiniEditorWindow::onClose(ui::CloseEvent& ev) void MiniEditorWindow::onPlayClicked() { - resetTimer(); + if (m_playButton->isPlaying()) { + Editor* miniEditor = (m_docView ? m_docView->getEditor(): NULL); + if (miniEditor && miniEditor->getDocument() != NULL) + m_nextFrameTime = miniEditor->getSprite()->getFrameDuration(miniEditor->getFrame()); + else + m_nextFrameTime = -1; + + m_curFrameTick = ji_clock; + + m_playTimer.start(); + } + else { + m_playTimer.stop(); + } } void MiniEditorWindow::updateUsingEditor(Editor* editor) @@ -214,22 +227,6 @@ void MiniEditorWindow::hideWindow() closeWindow(NULL); } -void MiniEditorWindow::resetTimer() -{ - if (m_playButton->isPlaying()) { - m_playTimer.start(); - - Editor* miniEditor = (m_docView ? m_docView->getEditor(): NULL); - if (miniEditor && miniEditor->getDocument() != NULL) - m_nextFrameTime = miniEditor->getSprite()->getFrameDuration(miniEditor->getFrame()); - else - m_nextFrameTime = -1; - } - else { - m_playTimer.stop(); - } -} - void MiniEditorWindow::onPlaybackTick() { Editor* miniEditor = (m_docView ? m_docView->getEditor(): NULL); @@ -237,15 +234,18 @@ void MiniEditorWindow::onPlaybackTick() return; if (m_nextFrameTime >= 0) { - m_nextFrameTime -= 10; // onPlaybackTick() - if (m_nextFrameTime <= 0) { + m_nextFrameTime -= (ji_clock - m_curFrameTick); + + while (m_nextFrameTime <= 0) { FrameNumber frame = miniEditor->getFrame().next(); if (frame > miniEditor->getSprite()->getLastFrame()) frame = FrameNumber(0); miniEditor->setFrame(frame); - m_nextFrameTime = miniEditor->getSprite()->getFrameDuration(miniEditor->getFrame()); + m_nextFrameTime += miniEditor->getSprite()->getFrameDuration(miniEditor->getFrame()); } + + m_curFrameTick = ji_clock; } invalidate(); } diff --git a/src/app/ui/mini_editor.h b/src/app/ui/mini_editor.h index 3e4f25c9e..3585676e3 100644 --- a/src/app/ui/mini_editor.h +++ b/src/app/ui/mini_editor.h @@ -44,7 +44,6 @@ namespace app { void onPlayClicked(); void onPlaybackTick(); void hideWindow(); - void resetTimer(); bool m_isEnabled; DocumentView* m_docView; @@ -54,6 +53,7 @@ namespace app { // Number of milliseconds to go to the next frame if m_playTimer // is activated. int m_nextFrameTime; + int m_curFrameTick; }; } // namespace app