W3C home > Mailing lists > Public > www-svg@w3.org > May 2002

Unclear use and set relationship

From: Rick Anderson <rianders@rci.rutgers.edu>
Date: Wed, 1 May 2002 23:30:02 -0400 (EDT)
To: www-svg@w3.org
Message-ID: <Pine.GSO.4.44.0205012329080.18643-100000@amenti.rutgers.edu>

It seems impossible to refer to inner objects invoked by using the <use>
tag. In the example below the only way to create a fill affect is to
directly set the fill on the rectangle inside the group, inside the
<defs>. This however causes all references to the rectangle to be filled
with the same color.

In batik using the DOM viewer it shows that the <use> tag has no children.
Which might explain why affects can only be performed directly on the
linked object.

Can an object truly be copied using the <use> tag? If so how do you
reference that copy? The example below demonstrates this problem.

--Rick Anderson
______________________________________________________
"With that amount of fixing it really ought to be better."

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/SVG/DTD/svg10.dtd">
<svg width="336" height="100">

<!-- Rick Anderson rianders@rci.rutgers.edu -->
<!-- simple rollover and button test -->
<!-- problem: the set does not work on the use tag. -->
<!-- problem: the mouseover changes both objects -->
<!-- question: Is there a way to clone objects? -->
<defs>
<g id="foo">
        <rect id="bar"  width="50" height="16" fill="red">
<!-- These do nothing. They do work in a rectangle all by itself. Outside of defs.
         <set xlink:href="#bar" attributeName="fill"  to="green" begin="mouseover" end="mouseout" />
         <set xlink:href="#bar" attributeName="fill"  to="green" begin="footext.mouseover" end="footext.mouseout" />
         <set xlink:href="#footext" attributeName="fill"  to="yellow" begin="bar.mouseover" end="bar.mouseout" />
         <set xlink:href="#footext" attributeName="fill"  to="yellow" begin="mouseover" end="mouseout" />

-->
        </rect>
    <!--  text must appear outside of rect so that it is not coverd by rect. -->
    <text id="footext" x="10" y="12" style="text-decoration:underline;fill:black">blah</text>

</g>

<g id="text0" >
<text id="innertext" x="75" y="25" style="text-decoration:underline;fill:black">inside</text>


</g>

</defs>

<use id="test0" xlink:href="#foo" x="24" y="10" >
<!-- Will only perform the fill on #bar, filling #test0, and #foo does nothing.-->
<set xlink:href="#bar" attributeName="fill"  to="green" begin="test0.mouseover" end="test0.mouseout" />
</use>

<!-- uses the rectangle -->
<use id="test1" xlink:href="#bar" x="24" y="30" />

<!-- uses only the text -->
<use id="test1a" xlink:href="#footext" x="24" y="45" />

<!-- Uses text group -->
<use id="test2" xlink:href="#text0" />
<!-- This directly references #innertext. This causes a color change. -->
<!--However, it causes all #innertexts to change color. -->
<set xlink:href="#innertext" attributeName="fill"  to="green" begin="test2.mouseover" end="test2.mouseout" />


<!-- green is not activated when this text field is entered by mouse -->
<use id="test3" xlink:href="#text0" x="75" y="45" />


</svg>
Received on Wednesday, 1 May 2002 23:30:07 GMT

This archive was generated by hypermail 2.3.1 : Friday, 8 March 2013 15:54:22 GMT