- From: Rik Cabanier <cabanier@gmail.com>
- Date: Wed, 2 Jul 2014 09:02:10 +0200
- To: Brian Birtles <bbirtles@mozilla.com>
- Cc: Domenic Denicola <domenic@domenicdenicola.com>, "public-fx@w3.org" <public-fx@w3.org>, Cameron McCormack <cam@mcc.id.au>, Boris Zbarsky <bzbarsky@mit.edu>
- Message-ID: <CAGN7qDA_M=YAys6c8nbdaRyviOQGg2xfxFS6ECXQq2RGNCOoOA@mail.gmail.com>
On Wed, Jul 2, 2014 at 8:08 AM, Brian Birtles <bbirtles@mozilla.com> wrote: > Dear Domenic / public-fx, > > Having seen the recent discussion on public-script-coord about > DOMRectReadOnly[1], a pattern I blindly copied into Web Animations last > week,[2] I wonder if you can advise how we should arrange timing objects in > Web Animations? > > Currently we have the following arrangement: > > interface AnimationTimingReadOnly { > readonly attribute FillMode fill; > readonly attribute (unrestricted double or DOMString) duration; > ... > }; > > interface AnimationTiming : AnimationTimingReadOnly { > inherit attribute FillMode fill; > inherit attribute (unrestricted double or DOMString) duration; > ... > }; > > interface ComputedAnimationTiming : AnimationTimingReadOnly { > readonly attribute unrestricted double timeFraction; > ... > }; > > // Abstract interface inherited by Animation, AnimationGroup etc. > interface AnimationNode { > readonly attribute AnimationTiming timing; > readonly attribute ComputedAnimationTiming computedTiming; > ... > }; > > // Passed to the ctor of Animation, AnimationGroup etc. > dictionary AnimationTimingInput { > FillMode fill = "auto"; > (unrestricted double or DOMString) duration = "auto"; > ... > }; > > A few points of explanation: > > * None of these have constructors. I'll fix that (except AnimationNode > which is an abstract interface inherited by Animation, AnimationGroup etc.) > Don't do that just yet. Making them constructable will push their name in the global namespace. As you know, exposing a new name is a Big Deal. It's also unclear if anyone will call that constructor so this is just for theoretical purity. Instead, just mark them as [NoInterfaceObject] > * Unlike DOMRectReadOnly, the members of AnimationTimingReadOnly are > actually used as-is by ComputedAnimationTiming so it's slightly different > in that regard. > > * What we are *trying* to do here is expose both the specified timing > (which is input/output) and calculated timing (which is purely an output). > Many of the fields are the same but sometimes the range of values differs. > For example, the |duration| member of a returned ComputedAnimationTiming > object will always be a double, not a string. Likewise, the |fill| value > will never be "auto". > > * We've also added some attributes onto ComputedAnimationTiming that > aren't on AnimationTiming(ReadOnly) like timeFraction etc. Perhaps they > don't belong there since they're more about *current* state rather than the > result of resolving timing parameters but maybe it's ok? > > Questions: > > * What do you think of this hierarchy? Is there a better way of keeping > AnimationTiming and ComputedAnimationTiming in sync without introducing > AnimationTimingReadOnly? > > * Or should computedTiming just return a snapshot object with different > object identity every time it changes? Perhaps a method that returns a > dictionary object? > > * I guess AnimationNode.timing should not be readonly? I think making it > [Replaceable] might be problematic from a performance point of view but if > we define setting as doing a member-wise copy is that idiomatic? > > For example, is this better? > > [Constructor (AnimationTimingInput timing)] > interface AnimationTiming { > attribute FillMode fill; > attribute (unrestricted double or DOMString) duration; > ... > }; > > dictionary AnimationTimingInput { > FillMode fill = "auto"; > (unrestricted double or DOMString) duration = "auto"; > ... > }; > > dictionary ComputedAnimationTiming : AnimationTimingInput { > unrestricted double timeFraction; > ... > }; > > interface AnimationNode { > attribute AnimationTiming timing; > ComputedAnimationTiming getComputedTiming(); > ... > }; > > > We'll probably have similar questions with regards to AnimationPlayers and > AnimationNodes. We talked about making AnimationNodes generated from CSS be > read-only so you'd have to clone it if you wanted to modify it rather than > ending up in a situation where the object is partly live due to being > partially overridden by script. That's a separate discussion but your > suggestions to the above will probably help guide that. > > Best regards, > > Brian > > [1] http://lists.w3.org/Archives/Public/public-script-coord/ > 2014AprJun/0267.html > [2] http://dev.w3.org/fxtf/web-animations/#idl-def-AnimationTimingReadOnly > >
Received on Wednesday, 2 July 2014 07:02:39 UTC