- From: Erik Dahlstrom <ed@opera.com>
- Date: Tue, 05 Jan 2010 11:11:59 +0100
- To: "Alex Danilo" <alex@abbra.com>, "Jeff Schiller" <codedread@gmail.com>
- Cc: www-svg <www-svg@w3.org>
On Tue, 05 Jan 2010 09:18:17 +0100, Alex Danilo <alex@abbra.com> wrote:
> --Original Message--:
>> Hi www-svg,
>>
>> This is an email I forwarded to Erik Dahlstrom to question about Opera
>> behavior, but thought it appropriate for general SVG WG discussion.
...
>> The spec says userSpaceOnUse "shall represent values in the coordinate
>> system that results from taking the current user coordinate system in
>> place at the time when the gradient element is referenced".
>>
>> Can someone please clarify what is the correct behavior here?
Just to test for consistency I also verified that moving the transform
attribute from the rect in the example Jeff posted up to a surrounding g
element does the same thing. Basically confirming that the current user
space includes the transform on the element itself too. All viewers I
tested displayed the gradients it the same way as in Jeff's original
example.
I also added a couple of lines to illustrate what the spec says the
gradient vector should be.
Modified example:
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<linearGradient id="g1" x1="0" y1="0" x2="400" y2="50"
gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="red"/>
<stop offset="0.5" stop-color="green"/>
<stop offset="1.0" stop-color="blue"/>
</linearGradient>
<linearGradient id="g2" x1="0" y1="100" x2="100" y2="150"
gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="red"/>
<stop offset="0.5" stop-color="green"/>
<stop offset="1.0" stop-color="blue"/>
</linearGradient>
</defs>
<g transform="translate(100,100)">
<g transform="scale(0.25,1)">
<rect width="400" height="50" fill="url(#g1)" />
<!-- show the gradient vector in current user space -->
<line x1="0" y1="0" x2="400" y2="50" stroke="black"/>
</g>
<rect y="100" width="100" height="50" fill="url(#g2)" />
<!-- show the gradient vector in current user space -->
<line x1="0" y1="100" x2="100" y2="150" stroke="black"/>
</g>
</svg>
...
> There is clarification for the weird perpendicular behaviour of
> the gradients for 'objectBoundingBox' where they 'squish' for
> non-square areas, but no mention of what is expected for
> 'userSpaceOnUse'.
>
> Personally, I would interpret a gradient vector as being
> the vector along which the gradient stops are placed and
> also being a vector, that the gradient itself be perpendicular
> to that vector.
I agree that it makes sense to make the gradient perpendicular to the
gradient vector for both 'objectBoundingBox' and 'userSpaceOnUse'.
Cheers
/Erik
--
Erik Dahlstrom, Core Technology Developer, Opera Software
Co-Chair, W3C SVG Working Group
Personal blog: http://my.opera.com/macdev_ed
Received on Tuesday, 5 January 2010 10:09:23 UTC