Server Notice:

hide

Public Pad Latest text of pad zpceSKJxfS Saved March 14, 2013

 
Web animations minutes, 14 / 15 March 2013
 
Present: Dmitry, Doug, Shane, Steve, Brian
 
Agenda:
1.  Status update
2. The specified TimingDictionary
3. Reverse behaviour
4. Is it add or accumulate?
5. How do we implement accumulating?
 
1. STATUS UPDATE
================
 
Brian:
 - Merged 'separate-api' back to 'default'
 - Still rewriting the spec, currently up to 'Animation values' (section 17)
   - Is GroupedAnimationEffect going away?
Shane: Yes, I think so. But we should consider either allowing KeyFramesAnimationEffect to target multiple properties or allow an Animation to have a list of effects.
> Brian to investigate what to do in place of GroupedAnimationEffect
   - Ok to rename SplineTimingFunction to CubicBezierTimingFunction?
> Seems ok
 - Interesting email thread for the week: http://lists.w3.org/Archives/Public/public-webapps/2013JanMar/0634.html - reflections on IndexedDB API
 - Dirk Schulze is offering to help port our changes to respec to the current version on github (v3) -- yay! Thanks Dirk!
 
Doug:
 - Polyfill stuff... naming is closer to spec.
 - Polyfill now works in Firefox and IE9/10!
 
Steve
 - Fixed a few polyfill bugs
 - Added basics of media integration
 - Merged new test framework
 
Shane
 - Polyfill stuff
 - new test framework works in firefox and IE9/10
 - getting close to switching over to new framework
 
 
2. THE 'specified' TIMING DICTIONARY
===============================
 
Recap: dictionaries in WebIDL are static. So we can't just reuse the TimingDictionary interface for representing timing parameters on TimedItem.
 
Options:
(a) Make a Timing interface to mirror the dictionary but which is live
(b) Put the members directly onto TimedItem
(c) Put the members directly onto TimedItem and put computed timing in another object - ComputedTiming
(d) (a) and (c) -- i.e. put specified and computed timing in other interfaces
(e) Have a method to update specified timing: updateSpecifiedTiming(dictionary)
(f) Extend WebIDL (+1)
(g) Sidestep the problem with a different WebIDL construct or ECMAScript-specifics - see http://www.w3.org/TR/geolocation-API/#position_options_interface and http://www.w3.org/TR/2010/WD-WebIDL-20101021/#Callback
 
> Brian to email Cameron to see what our options are
> Shane to follow up with Elliot and others
 
 
3. REVERSE BEHAVIOUR
====================
 
Recap: We had/have Player.reverse() but Brian thinks its useful to have a means of reversing something so that if it has already finished, it begins reversing from the end. So, if it finished 3s ago, it doesn't wait 3s, but starts reversing straight away. If it's in the middle of its animation, it just reverses from its current point.
 
But that makes Player depend on its source content which currently its not.
 
Strawman proposal:
 
Add methods that are explicitly dependent on the source content?
 
Player.reverseSource()?
Player.pauseSource()?
 
That might remove the expectation that calling reverseSource() twice is a no-op even after the item has finished.
 
pauseSource() if added could provide the previously defined behavior that doesn't pause outside the source's active interval.
 
if (player.currentTime > player.source.endTime) {
    player.currentTime = player.source.endTime;
}
player.playbackRate *= -1;
 
Opposition to adding reverseSource. Brian to add an issue about the possibility of adding this method. Will revisit based on usage in the wild.
 
 
4. IS IT add OR accumulate?
========================
 
accumulateOperation is the name of the property that describes how animation values are calculated from iteration values. Add is the name of the operation used.
 
 
5. HOW DO WE IMPLEMENT ACCUMULATING?
======================================
 
Accumulate to be a boolean that is implemented inside Effect (i.e. before the value gets sent to the compositor stack).
 
 
6. CLARIFYING THE MAPPING RE: TO-ANIMATION
=========================================
 
If I have:
  var anim = new Animation({ top: '200px' }, 3);
do I get a to-animation? Yes: ['200px', '200px'] merge
 
What about 
  var anim = new Animation({ top: [ '200px' ] }, 3); ? No: ['0px, '200px']
or
  var anim = new Animation({ top: [ '0', '200px' ] }, 3); ? No: ['0px', '200px']  
 
new Animation({ top: [ '200px' ] , operator: "merge"}, 3); not a to-animation
new Animation({ top: [ '200px' ] , operator: "add"}, 3); adds 200px over 3 seconds
 
Brian's proposal: Change this so that we flat-extend out to 0 and 1 from the closest specified keyframe (i.e [{0.6: '200px'}] acts like ['200px', '200px'] and [{0.3: '100px'}, {0.6: '200px'}] becomes [{0: '100px'}, {0.3: '100px'}, {0.6: '200px'}, {1: '200px'}]
 
Brian: Looking at CSS, it fills in 0% and 100% (if needed) with a keyframe that corresponds to the current computed value of the property. (makes sense)
 
Decided we will try to mimick CSS here. Basically, if there is no keyframe at the endpoints then the animation effect generates the suitable value and tells the compositor to use a merge operation. Basically, it will do what CSS does here.
 
Revisiting earlier examples:
  var anim = new Animation({ top: '200px' }, 3);
Gives you:
  { 1: '200px' }
Which will perform a merge (since there's no 0)
 
But:
  var anim = new Animation({ top: '200px', operation 'add' }, 3);
Still gives you a merge (since there's no 0-keyframe rule)
 
> Continue next week
 
7. getCurrentPlayers/getCurrentAnimations
 
> Next week