diff options
author | Alan Alpert <alan.alpert@nokia.com> | 2012-01-18 10:32:33 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-27 06:17:51 +0100 |
commit | 15c00d747e24dae3b2681e6af07cfba3bdb6f74c (patch) | |
tree | 3b79f3fed858ac0a7e7568d79c93f8454b3c0e13 /src/quick/items/qquickspriteengine.cpp | |
parent | 3a03373ad29ee3f66878e008eb7f56156cbbd06f (diff) |
Update Sprite API
Added the following properties
frameSync (replaces duration: -1)
frameRate
frameRateVariation
frameDuration
frameDurationVariation
frameX (not yet implemented)
frameY (not yet implemented)
reverse (not yet implemented)
Started the process of duration meaning animation duration instead of
frameDuration, but some grace period is being allowed for the transition
Change-Id: I0771a55d1708ba999483f76796f0323043b8a4db
Reviewed-by: Alan Alpert <alan.alpert@nokia.com>
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'src/quick/items/qquickspriteengine.cpp')
-rw-r--r-- | src/quick/items/qquickspriteengine.cpp | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/src/quick/items/qquickspriteengine.cpp b/src/quick/items/qquickspriteengine.cpp index 38be93f1ce..470aa6d160 100644 --- a/src/quick/items/qquickspriteengine.cpp +++ b/src/quick/items/qquickspriteengine.cpp @@ -139,12 +139,12 @@ int QQuickSpriteEngine::spriteState(int sprite) if (!m_sprites[state]->m_generatedCount) return state; int extra; - if (m_sprites[state]->duration() < 0) { + if (m_sprites[state]->frameSync()) { extra = m_startTimes[sprite]; } else { if (!m_duration[sprite]) return state; - int rowDuration = m_duration[sprite] * m_sprites[state]->m_framesPerRow; + int rowDuration = m_duration[sprite] * m_sprites[state]->m_framesPerRow / m_sprites[state]->m_frames; extra = (m_timeOffset - m_startTimes[sprite])/rowDuration; } return state + extra; @@ -157,7 +157,7 @@ int QQuickSpriteEngine::spriteStart(int sprite) int state = m_things[sprite]; if (!m_sprites[state]->m_generatedCount) return m_startTimes[sprite]; - int rowDuration = m_duration[sprite] * m_sprites[state]->m_framesPerRow; + int rowDuration = m_duration[sprite] * m_sprites[state]->m_framesPerRow / m_sprites[state]->m_frames; int extra = (m_timeOffset - m_startTimes[sprite])/rowDuration; return m_startTimes[sprite] + extra*rowDuration; } @@ -168,12 +168,12 @@ int QQuickSpriteEngine::spriteFrames(int sprite) if (!m_sprites[state]->m_generatedCount) return m_sprites[state]->frames(); int extra; - if (m_sprites[state]->duration() < 0) { + if (m_sprites[state]->frameSync()) { extra = m_startTimes[sprite]; } else { if (!m_duration[sprite]) return state; - int rowDuration = m_duration[sprite] * m_sprites[state]->m_framesPerRow; + int rowDuration = m_duration[sprite] * m_sprites[state]->m_framesPerRow / m_sprites[state]->m_frames; extra = (m_timeOffset - m_startTimes[sprite])/rowDuration; } if (extra == m_sprites[state]->m_generatedCount - 1)//last state @@ -188,11 +188,11 @@ int QQuickSpriteEngine::spriteDuration(int sprite)//Full duration, not per frame return m_duration[sprite]; int state = m_things[sprite]; if (!m_sprites[state]->m_generatedCount) - return m_duration[sprite] * m_sprites[state]->frames(); - int rowDuration = m_duration[sprite] * m_sprites[state]->m_framesPerRow; + return m_duration[sprite]; + int rowDuration = m_duration[sprite] * m_sprites[state]->m_framesPerRow / m_sprites[state]->m_frames; int extra = (m_timeOffset - m_startTimes[sprite])/rowDuration; if (extra == m_sprites[state]->m_generatedCount - 1)//last state - return (m_duration[sprite] * m_sprites[state]->frames()) % rowDuration; + return m_duration[sprite] % rowDuration; else return rowDuration; } @@ -203,12 +203,12 @@ int QQuickSpriteEngine::spriteY(int sprite) if (!m_sprites[state]->m_generatedCount) return m_sprites[state]->m_rowY; int extra; - if (m_sprites[state]->duration() < 0) { + if (m_sprites[state]->frameSync()) { extra = m_startTimes[sprite]; } else { if (!m_duration[sprite]) return state; - int rowDuration = m_duration[sprite] * m_sprites[state]->m_framesPerRow; + int rowDuration = m_duration[sprite] * m_sprites[state]->m_framesPerRow / m_sprites[state]->m_frames; extra = (m_timeOffset - m_startTimes[sprite])/rowDuration; } return m_sprites[state]->m_rowY + m_sprites[state]->m_frameHeight * extra; @@ -397,7 +397,7 @@ void QQuickStochasticEngine::restart(int index) m_startTimes[index] = m_timeOffset; if (m_addAdvance) m_startTimes[index] += m_advanceTime.elapsed(); - int time = m_duration[index] * m_states[m_things[index]]->frames() + m_startTimes[index]; + int time = m_duration[index] + m_startTimes[index]; for (int i=0; i<m_stateUpdates.count(); i++) m_stateUpdates[i].second.removeAll(index); if (m_duration[index] >= 0) @@ -406,7 +406,7 @@ void QQuickStochasticEngine::restart(int index) void QQuickSpriteEngine::restart(int index) //Reimplemented to recognize and handle pseudostates { - if (m_sprites[m_things[index]]->duration() < 0) {//Manually advanced + if (m_sprites[m_things[index]]->frameSync()) {//Manually advanced m_startTimes[index] = 0; } else { m_startTimes[index] = m_timeOffset; @@ -436,7 +436,7 @@ void QQuickSpriteEngine::advance(int idx) //Reimplemented to recognize and handl if (idx >= m_things.count()) return;//TODO: Proper fix(because this has happened and I just ignored it) if (m_duration[idx] == 0) { - if (m_sprites[m_things[idx]]->duration() < 0) { + if (m_sprites[m_things[idx]]->frameSync()) { //Manually called, advance inner substate count m_startTimes[idx]++; if (m_startTimes[idx] < m_sprites[m_things[idx]]->m_generatedCount) { @@ -446,8 +446,8 @@ void QQuickSpriteEngine::advance(int idx) //Reimplemented to recognize and handl } } //just go past the pseudostate logic - } else if (m_startTimes[idx] + m_duration[idx] * m_states[m_things[idx]]->frames() - > m_timeOffset + (m_addAdvance ? m_advanceTime.elapsed() : 0)) { + } else if (m_startTimes[idx] + m_duration[idx] + > int(m_timeOffset + (m_addAdvance ? m_advanceTime.elapsed() : 0))) { //only a pseduostate ended emit stateChanged(idx); addToUpdateList(m_timeOffset + spriteDuration(idx), idx); |