Timeline: fix problem setting the duration of a frame range

This commit is contained in:
David Capello 2013-12-22 16:30:04 -03:00
parent b31f568488
commit 076be1f22f
5 changed files with 12 additions and 6 deletions

View File

@ -139,7 +139,7 @@ void FramePropertiesCommand::onExecute(Context* context)
ContextWriter writer(reader);
UndoTransaction undoTransaction(writer.context(), "Frame Duration");
if (firstFrame != lastFrame)
writer.document()->getApi().setConstantFrameRate(writer.sprite(), firstFrame, lastFrame, num);
writer.document()->getApi().setFrameRangeDuration(writer.sprite(), firstFrame, lastFrame, num);
else
writer.document()->getApi().setFrameDuration(writer.sprite(), firstFrame, num);
undoTransaction.commit();

View File

@ -381,7 +381,7 @@ void DocumentApi::setFrameDuration(Sprite* sprite, FrameNumber frame, int msecs)
m_document->notifyObservers<DocumentEvent&>(&DocumentObserver::onFrameDurationChanged, ev);
}
void DocumentApi::setConstantFrameRate(Sprite* sprite, FrameNumber from, FrameNumber to, int msecs)
void DocumentApi::setFrameRangeDuration(Sprite* sprite, FrameNumber from, FrameNumber to, int msecs)
{
ASSERT(from >= FrameNumber(0));
ASSERT(from < to);
@ -395,7 +395,7 @@ void DocumentApi::setConstantFrameRate(Sprite* sprite, FrameNumber from, FrameNu
}
// Do the action.
sprite->setDurationForAllFrames(msecs);
sprite->setFrameRangeDuration(from, to, msecs);
}
void DocumentApi::moveFrameBefore(Sprite* sprite, FrameNumber frame, FrameNumber beforeFrame)

View File

@ -69,7 +69,7 @@ namespace app {
void removeFrame(Sprite* sprite, FrameNumber frame);
void setTotalFrames(Sprite* sprite, FrameNumber frames);
void setFrameDuration(Sprite* sprite, FrameNumber frame, int msecs);
void setConstantFrameRate(Sprite* sprite, FrameNumber from, FrameNumber to, int msecs);
void setFrameRangeDuration(Sprite* sprite, FrameNumber from, FrameNumber to, int msecs);
void moveFrameBefore(Sprite* sprite, FrameNumber frame, FrameNumber beforeFrame);
// Cels API

View File

@ -327,6 +327,13 @@ void Sprite::setFrameDuration(FrameNumber frame, int msecs)
m_frlens[frame] = MID(1, msecs, 65535);
}
void Sprite::setFrameRangeDuration(FrameNumber from, FrameNumber to, int msecs)
{
std::fill(
m_frlens.begin()+(size_t)from,
m_frlens.begin()+(size_t)to+1, MID(1, msecs, 65535));
}
void Sprite::setDurationForAllFrames(int msecs)
{
std::fill(m_frlens.begin(), m_frlens.end(), MID(1, msecs, 65535));

View File

@ -111,8 +111,7 @@ namespace raster {
int getFrameDuration(FrameNumber frame) const;
void setFrameDuration(FrameNumber frame, int msecs);
// Sets a constant frame-rate.
void setFrameRangeDuration(FrameNumber from, FrameNumber to, int msecs);
void setDurationForAllFrames(int msecs);
////////////////////////////////////////