зеркало из https://github.com/mozilla/pjs.git
Bug 492081: In SVG Animation (SMIL), update pause start time during setCurrentTime calls. r+sr=roc
This commit is contained in:
Родитель
ee0fba4163
Коммит
42595da179
|
@ -120,10 +120,12 @@ nsSMILTimeContainer::SetCurrentTime(nsSMILTime aSeekTo)
|
|||
// #getCurrentTime_setCurrentTime_undefined_before_document_timeline_begin
|
||||
// which says that if SetCurrentTime is called before the document timeline
|
||||
// has begun we should still adjust the offset.
|
||||
mParentOffset = GetParentTime() - aSeekTo;
|
||||
nsSMILTime parentTime = GetParentTime();
|
||||
mParentOffset = parentTime - aSeekTo;
|
||||
|
||||
if (mPauseState) {
|
||||
mNeedsPauseSample = PR_TRUE;
|
||||
mPauseStart = parentTime;
|
||||
}
|
||||
|
||||
// Force an update to the current time in case we get a call to GetCurrentTime
|
||||
|
|
|
@ -46,6 +46,7 @@ include $(topsrcdir)/config/rules.mk
|
|||
_TEST_FILES = test_smilRestart.xhtml \
|
||||
test_smilGetStartTime.xhtml \
|
||||
test_smilGetSimpleDuration.xhtml \
|
||||
test_smilSetCurrentTime.xhtml \
|
||||
test_smilSync.xhtml \
|
||||
test_smilSyncTransform.xhtml \
|
||||
$(NULL)
|
||||
|
|
|
@ -0,0 +1,75 @@
|
|||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Test for setCurrentTime Behavior </title>
|
||||
<script type="text/javascript" src="/MochiKit/packed.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
<svg id="svg" xmlns="http://www.w3.org/2000/svg" />
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
<![CDATA[
|
||||
/** Test for basic setCurrentTime / getCurrentTime Behavior **/
|
||||
|
||||
/* Global Variables & Constants */
|
||||
const PRECISION_LEVEL = 0.0000001; // Allow small level of floating-point error
|
||||
const gTimes = [0, 1.5, 0.2, 0.99, -400.5, 10000000, -1];
|
||||
const gWaitTime = 20;
|
||||
var gSvg = document.getElementById("svg");
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
function main() {
|
||||
// Pause our document, so that the setCurrentTime calls are the only
|
||||
// thing affecting document time
|
||||
gSvg.pauseAnimations();
|
||||
|
||||
// Test that seeking takes effect immediately
|
||||
for (var i = 0; i < gTimes.length; i++) {
|
||||
gSvg.setCurrentTime(gTimes[i]);
|
||||
assertFloatsEqual(gSvg.getCurrentTime(), gTimes[i]);
|
||||
}
|
||||
|
||||
// Test that seeking isn't messed up by timeouts
|
||||
// (using tail recursion to set up the chain of timeout function calls)
|
||||
var func = function() {
|
||||
checkTimesAfterIndex(0);
|
||||
}
|
||||
setTimeout(func, gWaitTime);
|
||||
}
|
||||
|
||||
/* This method seeks to the time at gTimes[index],
|
||||
* and then sets up a timeout to...
|
||||
* - verify that the seek worked
|
||||
* - make a recursive call for the next index.
|
||||
*/
|
||||
function checkTimesAfterIndex(index) {
|
||||
if (index == gTimes.length) {
|
||||
// base case -- we're done!
|
||||
SimpleTest.finish();
|
||||
return;
|
||||
}
|
||||
|
||||
gSvg.setCurrentTime(gTimes[index]);
|
||||
var func = function() {
|
||||
assertFloatsEqual(gSvg.getCurrentTime(), gTimes[index]);
|
||||
checkTimesAfterIndex(index + 1);
|
||||
}
|
||||
setTimeout(func, gWaitTime);
|
||||
}
|
||||
|
||||
function assertFloatsEqual(aVal, aExpected) {
|
||||
ok(Math.abs(aVal - aExpected) <= PRECISION_LEVEL,
|
||||
"getCurrentTime returned " + aVal + " after seeking to " + aExpected)
|
||||
}
|
||||
|
||||
window.addEventListener("load", main, false);
|
||||
]]>
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
Загрузка…
Ссылка в новой задаче