- From: Dirk Schulze <dschulze@adobe.com>
- Date: Mon, 14 Oct 2013 23:05:02 -0700
- To: Brian Birtles <bbirtles@mozilla.com>
- CC: "public-fx@w3.org" <public-fx@w3.org>, Shane Stephens <shans@google.com>
On Oct 15, 2013, at 3:30 AM, Brian Birtles <bbirtles@mozilla.com> wrote:
> (2013/10/15 10:17), Shane Stephens wrote:
>> Some animatable values have closed bounds (e.g. SVG and CSS width and
>> height values can't be less than 0). When animating these, we have a
>> choice to either:
>> * enforce the boundedness within our animations; or
>> * enforce the boundedness when applying the result back into CSS or SVG
>>
>> I propose we choose the latter, so that things like:
>> new Animation(target, [{width: -50px, composite: add}, {width: 50px,
>> composite: add}], 1);
>> modify the element from 50px smaller than current size to 50px larger
>> than current size.
>
> In terms of compatibility, for SVG the latter behaviour is "recommended"
> in SMIL:
>
> "Some attributes that support additive animation have a defined legal
> range for values (e.g., an opacity attribute may allow values between 0
> and 1). In some cases, an animation function may yield out of range
> values. It is recommended that implementations clamp the results to the
> legal range as late as possible, before applying them to the
> presentation value. Ideally, the effect of all the animations active or
> frozen at a given point should be combined, before any clamping is
> performed. Although individual animation functions may yield out of
> range values, the combination of additive animations may still be legal.
> Clamping only the final result and not the effect of the individual
> animation functions provides support for these cases. Intermediate
> results may be clamped when necessary although this is not optimal. The
> host language must define the clamping semantics for each attribute that
> can be animated."[1]
>
>> Some animatable values have open bounds (e.g. CSS column-width values
>> must be larger than 0).
>> What should we do when an animation results in a value outside these
>> open bounds? Currently we're thinking that we should set the value to
>> the smallest representable value larger than the boundary edge, but this
>> seems somewhat hacky.
>
> Let me check I understand the issue. In light of these open bounds its
> tempting to say that for both open and closed bounds, "don't do any
> clamping, treat out of range values as invalid (and do whatever is
> defined in that case)." But that's bad because in some cases it's
> visually jarring and it puts the burden on authors to keep values in
> range to avoid those effects.
>
> Does that sound right?
>
> (For rectangles it doesn't actually make a difference--SVG2 says that a
> rect with width/height=0 is not rendered and the lacuna value for both
> is 0 so whether we clamp to 0 or treat negative values as invalid and
> fall back to the lacuna value of 0, you still get a discontinuity where
> the rectangle disappears--something that is noticeable, for example, if
> you have a stroke.)
>
> Perhaps we should just define clamping behaviour per-property or
> per-property type (similar to how SMIL says, "the clamping semantics for
> each attribute that can be animated")?
>
> For example, what is the most natural behaviour when shrinking a
> column-width? Does clamping it to 0.00001 make sense? Or should it
> disappear altogether? (And can be actually achieve that without tweaking
> other properties?)
The shrinking should be after the animation step.
If the user defines and animation of 'width' from 300 to -300, the -300 should not be fixed to 0 during the animation and animate from 300 to 0. This seems unexpected.
So the property itself should handle the shrinking after the animation process. Means I am in favor for "enforce the boundedness when applying the result back into CSS or SVG".
Greetings,
Dirk
>
> Thanks,
>
> Brian
>
>
> [1] http://www.w3.org/TR/smil-animation/#AnimationSandwichModel
>
Received on Tuesday, 15 October 2013 06:05:30 UTC