W3C home > Mailing lists > Public > www-style@w3.org > July 2011

Re: [css3-images] Premultiplication switch

From: Alan Gresley <alan@css-class.com>
Date: Fri, 29 Jul 2011 22:39:38 +1000
Message-ID: <4E32AA0A.2050601@css-class.com>
To: Brian Manthos <brianman@microsoft.com>
CC: Leif Arne Storset <lstorset@opera.com>, Brad Kemper <brad.kemper@gmail.com>, "www-style@w3.org" <www-style@w3.org>
On 29/07/2011 3:01 AM, Brian Manthos wrote:
> Leif Arne Storset:

>> Then again, if the author knows enough about premultiplication to care,
>> he
>> or she (or the editor) is probably knowledgeable enough to just code
>> everything unpremultiplied. (As I far as I can see premultiplying is
>> only
>> done so authors can use the intuitive "transparent" keyword - it
>> doesn't
>> enable any additional effects.)
> At the F2F, Elika hinted at one issue:
> Premultiplied
> 	linear-gradient(red, transparent, blue);
> Nonpremultiplied
> 	linear-gradient(red, rgba(255,0,0,0) 50%, rgba(0,0,255,0) 50%, blue);

There are other ways to do the non-premultiplied version with one single 
midpoint color stop.

    linear-gradient(red, rgba(0,0,0,0), blue);

    linear-gradient(red, rgba(255,255,255,0), blue);

    linear-gradient(red, rgba(255,0,255,0), blue)

    linear-gradient(red, rgba(127,0,127,0), blue)

The way Opera interpolates this gradient,

    linear-gradient(red, transparent, blue)

suggest that internally, a double color stop (as shown below) is generated.

    rgba(255,0,0,0) 50%, rgba(0,0,255,0) 50%

So in affect, the keyword 'transparent' is already behaving as a switch.

> That's a simple enough translation.
> Now do it with animations...
> Premultiplied
> 	from - linear-gradient(red, transparent, blue);
> 	to - linear-gradient(black, transparent, green);
> Nonpremultiplied
> 	from - linear-gradient(red, rgba(255,0,0,0) 50%, rgba(0,0,255,0) 50%, blue);
> 	to - linear-gradient(black, rgba(0,0,0,0) 50%, rgba(0,255,0,0) 50%, green);

I see this as the real issue that this debate is about. Interpolation 
between gradients of different colors. I see know reason why authors 
should not be able to have such interpolation between different 
gradients done in premutiplied space.

As I see it, 'transparent' is already behaving as a switch but Opera and 
IE10 does one better in using rgba(0,0,0,0), rgba(255,255,255,0) and all 
the the other transparent color points as switches. I see no reason for 
such a behavior to happen.

I would rather see 'transparent' within a gradient act as the switch 
from non-premultiplied to premultiplied space. If this was done, then I 
do believe (with my limited understanding the internal workings of UAs) 
there would be no issues or problems to solve.

> Furthermore, when currentColor is involved in your
> gradient there is no way to translate from
> premultiplied to nonpremultiplied.  You'd need
> something like color-variant-opacity(currentColor, 0%)
> as a<color>.

Just simply not allow translation from premultiplied to nonpremultiplied.

Alan Gresley
Received on Friday, 29 July 2011 12:40:04 UTC

This archive was generated by hypermail 2.4.0 : Monday, 23 January 2023 02:14:02 UTC