- From: Glenn Adams <glenn@skynav.com>
- Date: Wed, 12 Mar 2025 14:10:45 -0500
- To: Alexander Cerutti <cerutti.alexander@gmail.com>
- Cc: public-tt@w3.org
- Message-ID: <CACQ=j+djfy4_HX3JXAG231H1yJLfxnjvFqg+6Kxxi0yZ3vmnhw@mail.gmail.com>
On Wed, Mar 12, 2025 at 1:14 PM Alexander Cerutti < cerutti.alexander@gmail.com> wrote: > Another example, which should NOT be treated as an error is > > <animate tts:textOutline="red 10px 10px; blue; green"/> > > since it does not imply a change for thickness or blur radius components > (in the second and third animation values). > > > Which seems to be kind of counter intuitive to me, especially for what > concerns the blue and green <animation-value>. > Sorry, this was a typo, since, as I have stated elsewhere, each value must be syntactically valid according to the property definition. The correct usage would have to be: <animate tts:textOutline="red 10px 10px; green 10px 10px; blue 10px 10px"/> One might think that you could use <animate tts:textOutline="red 10px 10px; green 10px; blue 10px"/> However, this would imply a continuous change for the blur radius, since if blur radius is not specified, 0px is used per the spec. > I mean, I would expect this to be an error, because (in the case of > tts:textOutline) color is an optional attribute, so I'd expect at least the > mandatory attributes for the targeted style (tho, repeated - otherwise is > an error). > But I see what you mean: what is the sense of repeating attributes that > won't (must not) change with a continuous animation? > > I would totally agree with you IF the animatable attributes would be > mandatory in the style expression. > > You are fine with allowing non-continuously-animatable property components >> (like border width) if there is no implication of continuously adjusting >> such value? > > > I believe that is what I said. > > > Okay, it wasn't exactly clear what you meant by "no implication", but > according to the context in this discussion, I understand now that you > still referenced about the fact that discretely animatable attributes (with > a continuous animation) should not change at all, like we said previously. > > I'm not sure what you mean by <shadow>. Are you asking about animating > color on the textShadow property? > > > Exactly. I was comparing the different rules and what an > <animation-value-list> should contain in each <animation-value> for each > property. > > In the case of <shadow>, from the <text-shadow>, the component <color> is > optional and at the end of the expression. > > So, according to what I understood until now, with a tts:textShadow in the > animation, in order for it to be valid, it must be one of these two: > > <animation tts:textShadow="10% -20% 5% red; green; blue"> (however, this > could be invalid, see below) > <animation tts:textShadow="10% -20% 5% red; 10% -20% 5% green; 10% -20% > 5% blue"> > Only the second of these would be valid. > Therefore, we are saying that in an <animation-value-list> for a style > property that contains at least one continuously-animatable component, each > <animation-value> could contain exclusively the continuously-animatable > property instead of the full syntax (so, either this, or the full rule with > the discrete values unchanged), even if this implies to not respect the > exact position in the style syntax? (continues below). > > The overriding constraint here is that each value in an animation value > list must adhere to the syntax animated style property. This rules out a > number of your options below. > > > I meant to say "syntax of the animated style property", i.e., each value > of an <animation-value-list> must satisfy the syntax prescribed for that > value as determined by the style property whose value is expressed as an > <animation-value-list>. > > > I think I got it and that you are referring to this paragraph of the specs: > > *"The syntax of an <animation-value> in an <animation-value-list> > expression must satisfy all syntax requirements that apply to the attribute > targeted by the animation."* > > However, what I still don't understand is: if a style property determines > a specific syntax that should be used when defining the style itself, both > for animation and normal usage (all components, optionals included or > excluded), and such syntax should be used for each <animation-value> (as > you and the specs are saying) in a <animation-value-list>, how can > specifying only the color be considered valid for properties that do not > specify the OR (so <text-outline> and <text-shadow>)? > > I feel like the first animation example above for <text-shadow> should be > considered invalid instead, but I based it on the one of textOutline you > provided me previously (see below). > > Another example, which should NOT be treated as an error is > > <animate tts:textOutline="red 10px 10px; blue; green"/> > > since it does not imply a change for thickness or blur radius components > (in the second and third animation values). > > > Thank you again, > Alexander > > Il giorno 12 mar 2025, alle ore 00:19, Glenn Adams <glenn@skynav.com> ha > scritto: > > > > On Tue, Mar 11, 2025 at 2:46 PM Alexander Cerutti < > cerutti.alexander@gmail.com> wrote: > >> The overriding constraint here is that each value in an animation value >> list must adhere to the syntax animated style property. This rules out a >> number of your options below. >> >> >> Could you please expand on what you exactly mean for "syntax animated >> style property"? >> > > I meant to say "syntax of the animated style property", i.e., each value > of an <animation-value-list> must satisfy the syntax prescribed for that > value as determined by the style property whose value is expressed as an > <animation-value-list>. > > > >> You perhaps mean <animation-value> or the Animatable row in the >> properties tables or what else that I'm not getting? I gave a look in the >> specs for "animated style property" as well as in the SVG 1.1 standard but >> couldn't find what is the actual syntax you are referring to. >> >> Can't ignore, so illegal. >> >> >> Got it, won't propose ignoring property components any longer. >> >> >> Considering the outcome of above, IMO having two different formats for >>> each element of the <animation-value-list>, between (<border>, >>> <text-emphasis>) and (<text-outline>, <shadow>) for each would create a >>> confusing situation. >>> >>> In the second group, the non-continuously-animatable properties in each >>> <animation-value> would get ignored (or treated as discrete) - and I think >>> there is not other way. >>> >> >> Can't ignore if specified. >> >> >> So, if we take for example an animation of<text-outline> like this: >> >> <animate tts:textOutline="red 10px 10px; blue 10px 10px; green 10px 10px" >> /> >> >> This is be fine because there are no changes between the various <length> >> > > correct, it should NOT be treated as an error > > >> but this one wouldn't be fine and should throw an error, isn't it? >> >> <animate tts:textOutline="red 10px 10px; blue 12px 10px; green 12px 14px" >> /> >> > > correct, it SHOULD be treated as an error > > Another example, which should NOT be treated as an error is > > <animate tts:textOutline="red 10px 10px; blue; green"/> > > since it does not imply a change for thickness or blur radius components > (in the second and third animation values). > > > >> >> >> In the first group, instead, the non-continuously-animatable properties >>> would be forbidden. >> >> >> I'm fine with allowing the non-continuously-animatable property >> components (not properties) provided there is no implication of >> continuously adjusting a component's value (such as border width). >> >> >> I'm sorry, there is something that is short-circuiting in my mind by >> reading this phrase, so I cannot understand its exact meaning. >> >> You are fine with allowing non-continuously-animatable property >> components (like border width) if there is no implication of continuously >> adjusting such value? >> > > I believe that is what I said. > > >> >> You mean this would be something depending from property to property and >> only if (like, at presentation level) everything doesn't get disrupted or >> what other kind of implications you have in mind? >> > > The determination of which components in a multiple-component style > property's value is dependent upon the style property, so, yes, it will > vary. The validity can be determined prior to presentation time. > > >> >> >> Just follow these rules: >> >> 1. if a value of an animation value list is syntactically invalid, then >> the animation is invalid >> 2. if a property component in a multi-component property value in an >> animation value list implies a continuous change from another value and >> that component is not continuously animatable, then the animation is invalid >> >> >> >> 1. "a value of an animation value list", which is the definition of the >> style itself, right? Or you mean the what you mentioned above "syntax >> animated style property"? >> > > See above. > > >> 2. So a multi-component property (like <border>) should have only the >> <color> in the expression >> > > No, that's not what rule 2 says. It can contain a border style and border > width component provided no change of value is implied. For example, (1) > specify the non-changing components in the first animation value, or (2) > repeat the non-changing components in each animation value. > > >> , because it allows so (thought the OR). But are you considering also >> <text-outline> as a multi-component as well? >> > > Yes, textOutline is multi-component, because it allows or requires one to > specify multiple component values that have distinct semantics. For > example, textOutline has an optional color component, a required length > component, and a second, optional, length component. Per definition, the > color component is continuously animatable, while the length components are > only discretely animatable. If one were to combine all three components in > an <animate> element with a calcMode other than discrete, then the length > components cannot be animated continuously, as would be implied by > something like: > > <animate tts:textOutline="red 10px; green 20px"/> > > which has an implied linear calcMode. > > >> Just to be on the same page. Because if you are considering >> <text-outline> a multi-component, then tts:Outline cannot be animated at >> all to me, because that would mean that the example i wrote above (and that >> I'm reporting here below), is invalid... unless there you can only specify >> the <color> - but otherwise, this would mean that in case of <shadow>, you >> can specify only the <color> as well, even if at the end of the list of >> components? >> >> <animate tts:textOutline="red 10px 10px; blue 10px 10px; green 10px 10px" >> /> (was valid) >> > > This is valid, as I detail above. > > >> <animate tts:textOutline="red 10px 10px; blue 12px 10px; green 12px 14px" >> /> (was invalid) >> > > This is not valid, since it implies a linear change to both thickness and > blur radius components (calcMode defaults to linear). > > I'm not sure what you mean by <shadow>. Are you asking about animating > color on the textShadow property? > > >> >> >> Thank you, >> Alexander >> >> >> Il giorno 11 mar 2025, alle ore 01:38, Glenn Adams <glenn@skynav.com> ha >> scritto: >> >> >> >> On Mon, Mar 10, 2025 at 7:03 PM Alexander Cerutti < >> cerutti.alexander@gmail.com> wrote: >> >>> Hi Glenn, >>> thank you for your reply. >>> >>> For what concerns specifically <border> and <text-emphasis>, both Option >>> #1 and Option #2 sound quite chaotic to me, in terms of parsing and >>> understanding the attributes on different levels, but I understand how such >>> situations COULD be possible to encounter, as both styles are defined as a >>> unordered non-repeated set of properties (in "OR"). >>> >>> However, this doesn't seem to not apply to <text-outline> and >>> <text-shadow>, as both have <color> in a specific position, even if >>> optional. >>> >>> >>> >>> <text-outline> = (<color> <lwsp>)? <length> (<lwsp> <length>)? >>> >>> <text-shadow> = <shadow> (<lwsp>? "," <lwsp>? <shadow>)* >>> >>> <shadow> = <length> <lwsp> <length> (<lwsp> <color>)? | ... >>> >>> >>> >>> I have a doubt: is there any possible "limit" or rule for which an >>> expression that doesn't have any "||" (OR) could be splitted and still >>> remain valid in the context of animation? I don't think so, but I wouldn't >>> wonder if I missed it in the specification. >>> >>> >> The overriding constraint here is that each value in an animation value >> list must adhere to the syntax animated style property. This rules out a >> number of your options below. >> >> >>> I feel like in Option #1, <text-outline> and <text-shadow> would require >>> the whole expression repeated "again and again" after semicolons, as >>> <color> is optional but <length> isn't. Furthermore, <color> has a specific >>> position. >>> >>> So, unless (at least for what concerns <text-outline>), the animation >>> expression is considered still valid when limited to the (originally >>> optional) <color>, I think what I wrote above applies. >>> >>> Allowing <text-outline> to work with Option #1 would mean to have >>> something like: >>> >>> >>> <animate tts:textOutline="red; green; blue 10px" /> >>> >>> or >>> >>> <animate tts:textOutline="red 10px 10px; blue 10px 10px; green 10px >>> 10px" /> >>> >>> >>> And of these two, I feel like the second is the one that should be used, >>> unlike <text-shadow>, for which having <color> as the last attribute of >>> <shadow>, doesn't even allow to think to the first possibility. >>> >>> In the second option, of course, discrete attributes (<length>) would >>> get completely ignored or animated as discrete (this applies as well to the >>> Option #2). >>> >>> or >>>> >>>> tts:border="2px solid red; green; blue" >>>> >>>> >>> This too is arguably well-defined since it does not imply a transition >>> for border width or border style, and each value in the animation value >>> list adheres to the syntax of tts:border. >>> >>> >>> So, according to the non-specific order of elements in <border> and >>> <text-emphasis> AND the composition of <animation-value-list>, would you >>> consider these valid as well? >>> >>> tts:border="red; green; blue 2px solid" >>> >> >> If the style and width is otherwise specified as "solid 2px", then yes; >> otherwise, no, if calcMode is linear, paced, spline. >> >> >>> tts:border="solid red; green; blue 2px" >>> >> >> If the style and width is otherwise specified as "solid 2px", then yes; >> otherwise, no, if calcMode is linear, paced, spline. >> >> >>> >>> >> >>> Note that there are no semicolons between animation attributes list and >>> the rest. >>> Supporting these possibilities, sounds very chaotic... still doable, but >>> chaotic in terms of understanding what is what. >>> >>> Furthermore, assuming the first case is the right one or at least one of >>>> the two supported, let's take the following example: >>>> >>>> >>>> tts:border="2px solid red; 5px solid green; 10px dashed blue" >>>> >>>> >>> I would consider this to be not well defined (an error) if specified on >>> an animate element, since it implies a linear animation of border width >>> and border style (the default calcMode is linear). >>> >>> >>> Unless ignoring the non continuously-animatable attributes changes (or >>> treat them as discrete even if calcMode is a continuous one). >>> >> >> Can't ignore, so illegal. This applies to the following questions/options >> as well. >> >> >>> >>> Considering the outcome of above, IMO having two different formats for >>> each element of the <animation-value-list>, between (<border>, >>> <text-emphasis>) and (<text-outline>, <shadow>) for each would create a >>> confusing situation. >>> >>> In the second group, the non-continuously-animatable properties in each >>> <animation-value> would get ignored (or treated as discrete) - and I think >>> there is not other way. >>> >> >> Can't ignore if specified. >> >> >>> In the first group, instead, the non-continuously-animatable properties >>> would be forbidden. >>> >> >> I'm fine with allowing the non-continuously-animatable property >> components (not properties) provided there is no implication of >> continuously adjusting a component's value (such as border width). >> >> >>> >>> Then, there might be some other situations and properties that we might >>> not be considering that might change everything. >>> >> >> Just follow these rules: >> >> 1. if a value of an animation value list is syntactically invalid, then >> the animation is invalid >> 2. if a property component in a multi-component property value in an >> animation value list implies a continuous change from another value and >> that component is not continuously animatable, then the animation is invalid >> >> >>> >>> Thank you, >>> Alexander >>> >>> >>> Il giorno 10 mar 2025, alle ore 03:40, Glenn Adams <glenn@skynav.com> >>> ha scritto: >>> >>> Hi Alexander, >>> >>> Thanks for asking these excellent questions. It certainly wouldn't hurt >>> to elaborate on this matter in a future edition of TTML2. See my inline >>> comments below for details. >>> >>> On Sat, Mar 8, 2025 at 2:39 PM Alexander Cerutti < >>> cerutti.alexander@gmail.com> wrote: >>> >>>> Hello, >>>> I was facing the introduction of discrete and continuous animations in >>>> my ttml engine. >>>> >>>> I saw animate tag requires style-namespace properties to adhere to the >>>> <animation-value-list> and then the <animation-value> properties. >>>> >>>> So, for example, for what concerns tts:color, we can have something >>>> like this (took from specs): >>>> >>>> <animate xml:id="a1" keyTimes="0;0.2;1" tts:color="red;green;blue"/> >>>> >>>> In the definitions of animatable styles, I saw some that are not >>>> exactly clear and for which I found no tests nor examples. >>>> >>>> These following properties, report the "color only" marker on the >>>> "Animatable" row: >>>> >>>> - tts:border >>>> - tts:textEmphasis >>>> - tts:textOutline >>>> - tts:textShadow >>>> >>>> As their color is animatable, I was wondering about the following >>>> details: >>>> >>>> 1) the "color only" applies only on continuous animation, so either on >>>> <set> element or <animate> with calcMode = "linear" | "paced" | "spline". >>>> Is this correct? >>>> >>> >>> Yes, though continuous animation doesn't apply to the set element. >>> >>> >>>> 2) What is the syntax that one should write when, for example, >>>> tts:border is animated? Reporting all the attributes for each keyTime? For >>>> example: >>>> >>>> tts:border="2px solid red; 2px solid green; 2px solid blue" >>>> >>> >>> This is arguably well defined, since it does not imply a change to >>> border width or style. >>> >>> To accomplish this, I would use one of two approaches: >>> >>> Option #1 - set fixed, non-animated styles as default border style, >>> animating color only >>> >>> <p tts:border="2x solid"> >>> <animate tts:border="red; green; blue"/> >>> A paragraph with a 2px, solid border with a linear animated border >>> color transitioning from red to green to blue >>> over implied keyTimes="0;0.5;1". >>> </p> >>> >>> Option #2 - use a combination of discrete (set) and continuous (animate) >>> animation elements >>> >>> <p> >>> <set tts:border="2x solid"/> >>> <animate tts:border="red; green; blue"/> >>> A paragraph with a 2px, solid border with a linear animated border >>> color transitioning from red to green to blue >>> over implied keyTimes="0;0.5;1". >>> </p> >>> >>> There are other ways to accomplish this as well, such as using >>> out-of-line animation. >>> >>> >>>> or >>>> >>>> tts:border="2px solid red; green; blue" >>>> >>>> >>> This too is arguably well-defined since it does not imply a transition >>> for border width or border style, and each value in the animation value >>> list adheres to the syntax of tts:border. >>> >>> >>>> In my ignorance, both could be fine (even the second sounds weird, if I >>>> give a look at <animation-value-list>) >>>> >>> >>> IMO, yes. >>> >>> >>>> >>>> >>>> Furthermore, assuming the first case is the right one or at least one >>>> of the two supported, let's take the following example: >>>> >>>> >>>> tts:border="2px solid red; 5px solid green; 10px dashed blue" >>>> >>>> >>> I would consider this to be not well defined (an error) if specified on >>> an animate element, since it implies a linear animation of border width >>> and border style (the default calcMode is linear). >>> >>> >>>> >>>> I see three possible outcomes with this expression, when a continuous >>>> calcMode is used: >>>> >>>> - this is an error: only color should be supported >>>> - this is valid but only color is kept in consideration: when the >>>> keyTimes progresses, we'll have both "2px solid green" and "2px solid blue" >>>> - this is valid but only color is animated continuously. The rest of >>>> the properties are animated discreetly. >>>> >>>> Which of the above is correct? >>>> >>> >>> See my responses above. Note that a good point raised by your questions >>> is what does it mean if multiple animation styles independently set or >>> animate different components of a multi-component style property (such as >>> tts:border). I don't recall the group (or myself) discussing this >>> previously. >>> >>> >>>> Thank you very much for your support, >>>> Alexander >>>> >>> >
Received on Wednesday, 12 March 2025 19:11:02 UTC