- From: Brian Birtles <bbirtles@mozilla.com>
- Date: Fri, 10 Aug 2012 13:27:05 +0900
- To: "public-fx@w3.org" <public-fx@w3.org>
Web Animations minutes, 9 / 10 August 2012
Etherpad: https://etherpad.mozilla.org/ep/pad/view/ro.FxQ8wHYc9oJ/latest
Present: Dmitry Baranovskiy, Alex Danilo, Shane Stephens, Brian Birtles
Agenda:
1. Template classes
2. Removing the Timing interface
3. Seek revisited
1. TEMPLATE CLASSES
-------------------
See: https://etherpad.mozilla.org/07VpfyGtdw
> After much (fruitful) discussion, we're inclined to keep templates in
some form. We would make them optional. Much of the difficulty surrounds
group templates and allowing children to target different elements. We
are thinking of adding functionality to AnimGroupTemplate to allow this
target element selection strategy to be defined there. Under that scheme
templates diverge from instances further which supports the idea of
templates being optional--they are utility objects for advanced users
and CSS/SVG rather than being fundamental to the model.
> Shane is going to prototype some ideas on how to decide on element
references when (1) instantiating an AnimGroupTemplate hierarchy and (2)
modifying an AnimGroupTemplate hierarchy with existing instances for
next Wednesday (/ Tuesday)
> We also agree with the approach put forward by François of throwing
exceptions when attempting to modify a linked instance, and requiring an
explicit call to unlink in order to modify the instance.
> With regards to making templates optional, an Anim that is created
directly would still have a template property but it would be null. An
Anim created from an AnimTemplate would have a template property that
points back to the template.
We will add convenience methods / constructors for cloning existing
animations and possibly producing templates from them so that new
animations could share information with existing ones.
Much of the difficulty with filling in the template property always is
when it comes with groups.
Discussion of possible convenience methods:
e.g. one possible convenience method
? animA.template // null
animB = animateAndTieTogether(animA)
animB.template === animA.template !== null
// i.e. animateAndTieTogether is a convenience method to create the
template and tie two together
This option was not so popular
e.g. 2, two methods
? animA.template // null
template <- animA.templatize()
? animA.template !== null
animB = animateLinked(animA.template)
animB.template === animA.template !== null
This option is more popular
This would probably only work for animations and not groups
So, should unlink set the template property to null?
Yes. <dmitry> and also return the template from unlink().
2. REMOVING THE Timing INTERFACE
--------------------------------
See notes from last time: https://etherpad.mozilla.org/bfJdTefySR
Brian: I spoke with roc and Cameron McCormack (editor of WebIDL) about
using methods in place of attributes for some of the calculated
attributes. They thought it was not a good idea.
roc pointed to the precedent of HTMLMediaElement.currentTime (which,
by the way, is also set-able). He thinks attributes should be fine so
long as reading the attribute doesn't have side effects.
Cameron suggested that JS coders have not had accessor properties
long enough to get a feel for how sophisticated they can be.
Dmitry: I am strongly disagree on arguments. Actually I don’t see
any arguments. :)
Regarding folding the Timing interface into TimedItem and TimedTemplate,
we're basically making a trade-off:
a) Defining stuff twice (although we'd just use a property-by-property
cross-reference) and blurring the line between specified inputs to the
model and calculated outputs (some of which are overrideable), OR
b) Having 1 additional interface (and the additional flicking backwards
and forwards that introduces), and the confusion of remembering, "does
this property hang off the TimedItem or the timing property?"
Brian: Another thought occurred to me, although I prefer (a) above, we
could go with (b) and rename Timing to TimingFunc. Rename the existing
TimingFunction to ScalingFunc. Then a simplified view of the animation
looks like:
interface Anim {
TimingFunc timingFunc;
AnimFunc animFunc;
}
Since we've decided that seek works on item time, we basically
re-inforce that everything inside TimingFunc is inside that item time
(i.e. weaken even drop the idea of animation time). TimingFunc acts as a
black box in a sense, so of course Anim.seek includes the start delay
(since that's part of the timingFunc).
In a sense, timingFunc is the timing model (obviously there's actually a
lot more to the timing model than that) and animFunc is the animation
model (again, not really true).
> Problem is animation-timing-function in CSS Animations refers to just
the scaling function. We might cause confusion if we use "TimingFunc" to
refer to something that includes the delay etc.
> Decided to keep the Timing interface. Not sure about renaming.
> Shane to mail to fx group about renaming Timing to TimingFunc
3. SEEK REVISITED
-----------------
In light of the HTMLMediaElement.currentTime precedent I'd (Brian) like
to get rid of seek and just make animationTime writeable.
BUT animationTime is different to item time in two ways:
a) It is the time AFTER adding the startDelay.
b) It is clamped to [0, animationDuration].
So, maybe it makes sense to expose itemTime instead since it isn't
clamped (e.g. you can set it to something negative). It also matches
what we agreed was the "correct" input to seek().
Dmitry: Could we make animationTime negative?
Brian: We could. It would mean re-defining a lot of things, but I think
we want to use the item time anyway.
Shane: With the caveat that we must expose itemTime I'm happy with this.
Brian: I don't understand. Do you mean that we have to expose this
regardless?
Issues:
* We have animationDuration which doesn't include the startDelay. i.e.
if you want to see if an animation has finished, you need to check
itemTime + startDelay >= animationDuration. Is that ok?
Shane: itemDuration? (= animationDuration + startDelay)
* itemTime is yet another term to deal with. Can we call it currentTime?
Shane: Uh, no, because that would be confusing in light of
HTMLMediaElement.currentTime :)
Brian: And, HTMLMediaElement.currentTime is iterationTime right? Fair
enough. That's a shame.
Next meeting: 14 Aug 18:20 PDT / 15 Aug 11:20 AEST / 15 Aug 10:20 JST @
https://etherpad.mozilla.org/IW8zT9yCin
Received on Friday, 10 August 2012 04:27:38 UTC