<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<!--
Copyright 2001 The Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- ========================================================================= -->
<!-- This tests validates the filter region processing for the top level -->
<!-- filter nodes and filter primitives. For each test, a filter is invoked -->
<!-- to render in a region specified by the filter region. In addition, a -->
<!-- control rectangle, bounding the expected filter region is rendered on top -->
<!-- of the filter. -->
<!-- -->
<!-- @author [email protected] -->
<!-- @version $Id: filterRegions.svg,v 1.5 2004/08/18 07:11:50 vhardy Exp $ -->
<!-- ========================================================================= -->
<?xml-stylesheet type="text/css" href="../resources/test.css" ?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="body" width="450" height="500" viewBox="0 0 450 500">
<title>FilterRegions test</title>
<text x="225" y="40" class="title">
Filter Regions
</text>
<style type="text/css">
<![CDATA[
.filterRegionControl {
fill: none;
stroke: black;
stroke-opacity: .5;
stroke-width: 1;
}
.filterRegionControlLabel {
fill: black;
font-family: Verdana;
font-size: 10px;
text-anchor: middle;
}
]]>
</style>
<defs>
<!-- ======================================================== -->
<!-- ======================================================== -->
<!-- userSpaceOnUser for filter chain and for filterPrimitive -->
<!-- ======================================================== -->
<!-- ======================================================== -->
<!-- ======================================================== -->
<!-- filterRegion_0 -->
<!-- chain region: [objectBoundingBox], undefined -->
<!-- flood region: [userSpaceOnUse], undefined -->
<!-- -->
<!-- Expected fill region: (0, 0, 450, 450) in user space -->
<!-- ======================================================== -->
<filter id="filterRegion_0" >
<feFlood style="flood-color:red;" />
</filter>
<!-- ======================================================== -->
<!-- filterRegion_1 -->
<!-- chain region: userSpaceOnUse, (20, 30, 50, 40) -->
<!-- flood region: userSpaceOnUse, undefined -->
<!-- -->
<!-- Expected fill region: (20, 30, 50, 40) in user space -->
<!-- ======================================================== -->
<filter id="filterRegion_1" filterUnits="userSpaceOnUse"
primitiveUnits="userSpaceOnUse"
x="20" y="30" width="50" height="40">
<feFlood style="flood-color:red" />
</filter>
<!-- ======================================================== -->
<!-- filterRegion_2 -->
<!-- chain region: userSpaceOnUse, (20, 30, 50, 40) -->
<!-- flood region: userSpaceOnUse, (25, 35, 50, 40) -->
<!-- -->
<!-- Expected fill region: (25, 35, 45, 35) in user space -->
<!-- ======================================================== -->
<filter id="filterRegion_2" filterUnits="userSpaceOnUse"
primitiveUnits="userSpaceOnUse"
x="20" y="30" width="50" height="40">
<feFlood style="flood-color:red" x="25" y="35" width="50" height="40"/>
</filter>
<!-- ======================================================== -->
<!-- filterRegion_3 -->
<!-- chain region: userSpaceOnUse, (20, 30, 50, 40) -->
<!-- flood region: userSpaceOnUse, (XX, XX, XX, 20) -->
<!-- -->
<!-- Expected fill region: (20, 30, 50, 20) in user space -->
<!-- ======================================================== -->
<filter id="filterRegion_3" filterUnits="userSpaceOnUse"
primitiveUnits="userSpaceOnUse"
x="20" y="30" width="50" height="40">
<feFlood style="flood-color:red" height="20"/>
</filter>
<!-- ======================================================== -->
<!-- filterRegion_4 -->
<!-- chain region: userSpaceOnUse, (20, 30, 50, 40) -->
<!-- flood region: userSpaceOnUse, (XX, XX, 25, XX) -->
<!-- -->
<!-- Expected fill region: (20, 30, 25, 40) in user space -->
<!-- ======================================================== -->
<filter id="filterRegion_4" filterUnits="userSpaceOnUse"
primitiveUnits="userSpaceOnUse"
x="20" y="30" width="50" height="40">
<feFlood style="flood-color:red" width="25"/>
</filter>
<!-- ======================================================== -->
<!-- filterRegion_5 -->
<!-- chain region: userSpaceOnUse, (20, 30, 50, 40) -->
<!-- flood region: userSpaceOnUse, (XX, 10, XX, XX) -->
<!-- -->
<!-- Expected fill region: (20, 30, 50, 20) in user space -->
<!-- ======================================================== -->
<filter id="filterRegion_5" filterUnits="userSpaceOnUse"
primitiveUnits="userSpaceOnUse"
x="20" y="30" width="50" height="40">
<feFlood style="flood-color:red" y="10"/>
</filter>
<!-- ======================================================== -->
<!-- filterRegion_6 -->
<!-- chain region: userSpaceOnUse, (20, 30, 50, 40) -->
<!-- flood region: userSpaceOnUse, (10, XX, XX, XX) -->
<!-- -->
<!-- Expected fill region: (20, 30, 40, 40) in user space -->
<!-- ======================================================== -->
<filter id="filterRegion_6" filterUnits="userSpaceOnUse"
primitiveUnits="userSpaceOnUse"
x="20" y="30" width="50" height="40">
<feFlood style="flood-color:red" x="10"/>
</filter>
<!-- ======================================================== -->
<!-- ======================================================== -->
<!-- userSpaceOnUse for filter chain and object bounding box -->
<!-- for filter primitive -->
<!-- ======================================================== -->
<!-- ======================================================== -->
<!-- ======================================================== -->
<!-- filterRegion_2_0 -->
<!-- chain region: [objectBoundingBox], undefined -->
<!-- flood region: undefined -->
<!-- -->
<!-- Expected fill region: (-10%, -10%, 120%, 120%) in user -->
<!-- space -->
<!-- ======================================================== -->
<filter id="filterRegion_2_0" primitiveUnits="objectBoundingBox">
<feFlood style="flood-color:red;" />
</filter>
<!-- ======================================================== -->
<!-- filterRegion_2_1 -->
<!-- chain region: userSpaceOnUse, undefined -->
<!-- flood region: objectBoundingBox, (0, 0, 1, 1) -->
<!-- -->
<!-- Expected fill region: (0, 0, 1, 1) in object bbox space -->
<!-- ======================================================== -->
<filter id="filterRegion_2_1" filterUnits="userSpaceOnUse"
primitiveUnits="objectBoundingBox">
<feFlood style="flood-color:red;" x="0" y="0" width="1" height="1"/>
</filter>
<!-- ======================================================== -->
<!-- filterRegion_2_2 -->
<!-- chain region: userSpaceOnUse, undefined -->
<!-- flood region: objectBoundingBox, (0%, 0%, 100%, 100%) -->
<!-- -->
<!-- Expected fill region: (0, 0, 1, 1) in object bbox space -->
<!-- ======================================================== -->
<filter id="filterRegion_2_2" filterUnits="userSpaceOnUse"
primitiveUnits="objectBoundingBox">
<feFlood style="flood-color:red" x="0%" y="0%" width="100%" height="100%"/>
</filter>
<!-- ======================================================== -->
<!-- filterRegion_2_3 -->
<!-- chain region: userSpaceOnUse, undefined -->
<!-- flood region: objectBoundingBox, (.25, 50%, .5, 25%) -->
<!-- -->
<!-- Expected fill region: (.25, .5, .5, .25) in object bbox -->
<!-- space -->
<!-- ======================================================== -->
<filter id="filterRegion_2_3" filterUnits="userSpaceOnUse"
primitiveUnits="objectBoundingBox">
<feFlood style="flood-color:red" x=".25" y="50%" width=".5" height="25%"/>
</filter>
<!-- ======================================================== -->
<!-- filterRegion_2_4 -->
<!-- chain region: userSpaceOnUse, undefined -->
<!-- flood region: objectBoundingBox, (25%, .5, 50%, .25) -->
<!-- -->
<!-- Expected fill region: (.25, .5, .5, .25) in object bbox -->
<!-- space -->
<!-- ======================================================== -->
<filter id="filterRegion_2_4" filterUnits="userSpaceOnUse"
primitiveUnits="objectBoundingBox">
<feFlood style="flood-color:red" x="25%" y=".5" width="50%" height=".25"/>
</filter>
<!-- ======================================================== -->
<!-- filterRegion_2_5 -->
<!-- chain region: userSpaceOnUse, (20, 30, 50, 40) -->
<!-- flood region: objectBoundingBox, (XX, .5, XX, .25) -->
<!-- -->
<!-- Expected fill region: (XX, .5, XX, .25) in object bbox -->
<!-- (20, XX, 50, XX) in user space -->
<!-- ======================================================== -->
<filter id="filterRegion_2_5" filterUnits="userSpaceOnUse"
primitiveUnits="objectBoundingBox"
x="20" y="30" width="50" height="40">
<feFlood style="flood-color:red" y=".5" height=".25"/>
</filter>
<!-- ======================================================== -->
<!-- ======================================================== -->
<!-- userSpaceOnUse for primitive, objectBoundingBox for -->
<!-- filter chain. -->
<!-- ======================================================== -->
<!-- ======================================================== -->
<!-- ======================================================== -->
<!-- filterRegion_3_0 -->
<!-- chain region: objectBoundingBox, region undefined -->
<!-- flood region: unspecified, region undefined -->
<!-- -->
<!-- Expected fill region: (0, 0, 1, 1) in object bbox space -->
<!-- ======================================================== -->
<filter id="filterRegion_3_0" filterUnits="objectBoundingBox" >
<feFlood style="flood-color:red;" />
</filter>
<!-- ======================================================== -->
<!-- filterRegion_3_1 -->
<!-- chain region: objectBoundingBox, region undefined -->
<!-- flood region: userSpaceOnUse (20, 30, 20, 25) -->
<!-- -->
<!-- Expected fill region: intersection of (0, 0, 1, 1) in -->
<!-- bbox space and (20, 30, 20, 25) in -->
<!-- user space. -->
<!-- ======================================================== -->
<filter id="filterRegion_3_1" filterUnits="objectBoundingBox"
primitiveUnits="userSpaceOnUse">
<feFlood style="flood-color:red" x="20" y="30" width="20" height="25"/>
</filter>
<!-- ======================================================== -->
<!-- filterRegion_3_2 -->
<!-- chain region: objectBoundingBox (-1, -1, 2, 2) -->
<!-- flood region: userSpaceOnUse undefined -->
<!-- -->
<!-- Expected fill region:(-1, -1, 2, 2) in -->
<!-- bbox space -->
<!-- ======================================================== -->
<filter id="filterRegion_3_2" filterUnits="objectBoundingBox"
primitiveUnits="userSpaceOnUse"
x="-1" y="-1" width="2" height="2">
<feFlood style="flood-color:red" />
</filter>
<!-- ======================================================== -->
<!-- filterRegion_3_3 -->
<!-- chain region: objectBoundingBox (-50%, -50%, 75%, 75% -->
<!-- flood region: userSpaceOnUse undefined -->
<!-- -->
<!-- Expected fill region:(-.5, -.5, .75, .75) in -->
<!-- bbox space -->
<!-- ======================================================== -->
<filter id="filterRegion_3_3" filterUnits="objectBoundingBox"
primitiveUnits="userSpaceOnUse"
x="-50%" y="-50%" width="75%" height="75%">
<feFlood style="flood-color:red" />
</filter>
</defs>
<g transform="translate(30, 50)">
<!-- ============================ -->
<!-- filterRegion_0 -->
<!-- ============================ -->
<g transform="translate(240, 95)">
<rect x="0" y="0" width="100" height="50" style="filter:url(#filterRegion_0);" />
<rect class="filterRegionControl" x="-10" y="-5" width="120" height="60" />
<text x="45" y="-10" class="filterRegionControlLabel">filterRegion_0</text>
</g>
<!-- ============================ -->
<!-- filterRegion_1 -->
<!-- ============================ -->
<rect x="0" y="3000" width="20000000" height="25" style="filter:url(#filterRegion_1);" />
<rect class="filterRegionControl" x="20" y="30" width="50" height="40" />
<text x="45" y="25" class="filterRegionControlLabel">filterRegion_1</text>
<!-- ============================ -->
<!-- filterRegion_2 -->
<!-- ============================ -->
<g transform="translate(100, 0)">
<rect x="0" y="3000" width="20000000" height="25" style="filter:url(#filterRegion_2);" />
<rect class="filterRegionControl" x="25" y="35" width="45" height="35" />
<text x="45" y="25" class="filterRegionControlLabel">filterRegion_2</text>
</g>
<!-- ============================ -->
<!-- filterRegion_3 -->
<!-- ============================ -->
<g transform="translate(200, 0)">
<rect x="0" y="3000" width="20000000" height="25" style="filter:url(#filterRegion_3);" />
<rect class="filterRegionControl" x="20" y="30" width="50" height="20" />
<text x="45" y="25" class="filterRegionControlLabel">filterRegion_3</text>
</g>
<!-- ============================ -->
<!-- filterRegion_4 -->
<!-- ============================ -->
<g transform="translate(300, 0)">
<rect x="0" y="3000" width="20000000" height="25" style="filter:url(#filterRegion_4);" />
<rect class="filterRegionControl" x="20" y="30" width="25" height="40" />
<text x="45" y="25" class="filterRegionControlLabel">filterRegion_4</text>
</g>
<!-- ============================ -->
<!-- filterRegion_5 -->
<!-- ============================ -->
<g transform="translate(0, 75)">
<rect x="0" y="3000" width="20000000" height="25" style="filter:url(#filterRegion_5);" />
<rect class="filterRegionControl" x="20" y="30" width="50" height="20" />
<text x="45" y="25" class="filterRegionControlLabel">filterRegion_5</text>
</g>
<!-- ============================ -->
<!-- filterRegion_6 -->
<!-- ============================ -->
<g transform="translate(100, 75)" style="filter:url(#filterRegion_6);">
<rect x="0" y="3000" width="20000000" height="25"/>
</g>
<g transform="translate(100, 75)" >
<rect class="filterRegionControl" x="20" y="30" width="40" height="40" />
<text x="45" y="25" class="filterRegionControlLabel">filterRegion_6</text>
</g>
<!-- ============================ -->
<!-- filterRegion_2_0 -->
<!-- ============================ -->
<g transform="translate(120, 280)">
<rect x="0" y="0" width="50" height="25" style="filter:url(#filterRegion_2_0);" />
<rect class="filterRegionControl" x="-5" y="-2.5" width="60" height="30" />
<text x="25" y="-20" class="filterRegionControlLabel">filterRegion_2_0</text>
</g>
<!-- ============================ -->
<!-- filterRegion_2_1 -->
<!-- ============================ -->
<g transform="translate(0, 160)" style="filter:url(#filterRegion_2_1);">
<rect x="20" y="30" width="50" height="40" />
</g>
<g transform="translate(0, 160)">
<rect class="filterRegionControl" x="20" y="30" width="50" height="40" />
<text x="45" y="25" class="filterRegionControlLabel">filterRegion_2_1</text>
</g>
<!-- ============================ -->
<!-- filterRegion_2_2 -->
<!-- ============================ -->
<g transform="translate(100, 160)" >
<rect x="20" y="30" width="50" height="40" style="filter:url(#filterRegion_2_2);"/>
</g>
<g transform="translate(100, 160)">
<rect class="filterRegionControl" x="20" y="30" width="50" height="40" />
<text x="45" y="25" class="filterRegionControlLabel">filterRegion_2_2</text>
</g>
<!-- ============================ -->
<!-- filterRegion_2_3 -->
<!-- ============================ -->
<g transform="translate(200, 160)" style="filter:url(#filterRegion_2_3);">
<rect x="20" y="30" width="50" height="40" />
</g>
<g transform="translate(200, 160)">
<rect class="filterRegionControl" x="32.5" y="50" width="25" height="10" />
<text x="45" y="25" class="filterRegionControlLabel">filterRegion_2_3</text>
</g>
<!-- ============================ -->
<!-- filterRegion_2_4 -->
<!-- ============================ -->
<g transform="translate(300, 160)" style="filter:url(#filterRegion_2_4);">
<rect x="20" y="30" width="50" height="40" />
</g>
<g transform="translate(300, 160)">
<rect class="filterRegionControl" x="32.5" y="50" width="25" height="10" />
<text x="45" y="25" class="filterRegionControlLabel">filterRegion_2_4</text>
</g>
<!-- ============================ -->
<!-- filterRegion_2_5 -->
<!-- ============================ -->
<g transform="translate(0, 245)" style="filter:url(#filterRegion_2_5);">
<rect x="20" y="30" width="50" height="40" />
</g>
<g transform="translate(0, 245)">
<rect class="filterRegionControl" x="20" y="50" width="50" height="10" />
<text x="45" y="25" class="filterRegionControlLabel">filterRegion_2_5</text>
</g>
<!-- ============================ -->
<!-- filterRegion_3_1 -->
<!-- ============================ -->
<g transform="translate(0, 330)" style="filter:url(#filterRegion_3_1);">
<rect x="0" y="0" width="450" height="450" />
</g>
<g transform="translate(0, 330)">
<rect class="filterRegionControl" x="20" y="30" width="20" height="25" />
<text x="45" y="25" class="filterRegionControlLabel">filterRegion_3_1</text>
</g>
<!-- ============================ -->
<!-- filterRegion_3_0 -->
<!-- ============================ -->
<g transform="translate(320, 330)" style="filter:url(#filterRegion_3_0);">
<rect x="0" y="0" width="40" height="50" />
</g>
<g transform="translate(320, 330)">
<rect class="filterRegionControl" x="-4" y="-5" width="48" height="60" />
<text x="45" y="25" class="filterRegionControlLabel">filterRegion_3_0</text>
</g>
<!-- ============================ -->
<!-- filterRegion_3_2 -->
<!-- ============================ -->
<g transform="translate(100, 330)" style="filter:url(#filterRegion_3_2);">
<rect x="50" y="40" width="50" height="40" />
</g>
<g transform="translate(100, 330)">
<rect class="filterRegionControl" x="0" y="0" width="100" height="80" />
<text x="45" y="25" class="filterRegionControlLabel">filterRegion_3_2</text>
</g>
<!-- ============================ -->
<!-- filterRegion_3_3 -->
<!-- ============================ -->
<g transform="translate(200, 330)" style="filter:url(#filterRegion_3_3);">
<rect x="50" y="40" width="50" height="40" />
</g>
<g transform="translate(200, 330)">
<rect class="filterRegionControl" x="25" y="20" width="37.5" height="30" />
<text x="45" y="25" class="filterRegionControlLabel">filterRegion_3_3</text>
</g>
</g>
<!-- ============================================================= -->
<!-- Batik sample mark -->
<!-- ============================================================= -->
<use xlink:href="../resources/batikLogo.svg#Batik_Tag_Box" />
</svg>