javauis/m2g_qt/javasrc/org/w3c/dom/svg/SVGLocatableElement.java
author hgs
Fri, 15 Oct 2010 12:29:39 +0300
changeset 80 d6dafc5d983f
parent 56 abc41079b313
permissions -rw-r--r--
v2.2.19_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     1
/*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     3
* All rights reserved.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     8
*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     9
* Initial Contributors:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    11
*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    12
* Contributors:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    13
*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    14
* Description:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    15
*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    16
*/
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    17
package org.w3c.dom.svg;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    18
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    19
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    20
/**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    21
 * This interface represents an SVGLocatableElement. It is implemented by all drawable SVG elements
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    22
 * in the document tree. Drawable elements are: <rect>, <circle>, <ellipse>,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    23
 * <line>, <path> <use> <image> <text>, <svg>, <a>,
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    24
 * and &lt;g&gt;. <b>Note</b> that animations will have an effect on the values of bounding box.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    25
 *
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    26
 * <br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    27
 * <br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    28
 * <br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    29
 *The following example further clarify the behavior of the getBBox()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    30
 *method. The example have a short explanation, an SVG fragment and are
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    31
 *followed by a set of bounding box values which have the following
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    32
 *format:<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    33
 *<tt><br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    34
 *[elementId] : {x, y, width, height} | {null}</tt><br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    35
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    36
 *where x, y, width and height define the values of the SVGRect object's
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    37
 *returned from a getBBox call on the element with the specified id.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    38
 *There are a few cases where the bounding box may be null (see example
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    39
 *6).<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    40
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    41
 *<h3>Example #1: Simple groups and bounds</h3>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    42
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    43
 *This first example shows the values returned by the getBBox method for
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    44
 *various simple basic shapes and groups. In particular, it shows that
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    45
 *the transform, on an element, does not change the value of its user
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    46
 *space bounding box.<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    47
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    48
 *<tt>&lt;g id="group1" transform="translate(10, 20)" fill="red" &gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    49
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    50
 *&nbsp;&lt;rect id="rect1" transform="scale(2)" x="10" y="10" width="50"
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    51
 *height="50"/&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    52
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    53
 *&nbsp;&lt;rect id="rect2" x="10" y="10" width="100" height="100"/&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    54
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    55
 *&nbsp;&lt;g id="group2" transform="translate(10, 20)" &gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    56
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    57
 *&nbsp;&nbsp; &lt;rect id="rect3" x="0" y="10" width="150" height="50"/&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    58
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    59
 *&nbsp;&nbsp; &lt;circle id="circle1" cx="20" cy="20" r="100" /&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    60
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    61
 *&nbsp;&lt;/g&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    62
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    63
 *&lt;/g&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    64
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    65
 *</tt><br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    66
 *<tt>[group1] : {-70.0, -60.0, 230.0, 200.0}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    67
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    68
 *[rect1] : {10.0, 10.0, 50.0, 50.0}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    69
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    70
 *[rect2] : {10.0, 10.0, 100.0, 100.0}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    71
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    72
 *[group2] : {-80.0, -80.0, 230.0, 200.0}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    73
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    74
 *[rect3] : {0.0, 10.0, 150.0, 50.0}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    75
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    76
 *[circle1] : {-80.0, -80.0, 200.0, 200.0}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    77
 *</tt><br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    78
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    79
 *<h3>Example #2: Bounding box on zero width or height rectangle<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    80
 *</h3>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    81
 *This example illustrates that the bounding box on elements is based on
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    82
 *the element's geometry coordinates. For example, the bounding box on a
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    83
 *zero-width rectangle is defined (see below), even though the rectangle
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    84
 *is not rendered.<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    85
 *<pre><tt>&lt;g id="group1" transform="translate(10, 20)" fill="red" &gt;</tt></pre>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    86
 *<pre><tt>&nbsp;&nbsp; </tt>&lt;rect id="rect2" x="10" y="10" width="400" height="0"/&gt;</pre>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    87
 *<pre wrap=""><tt>   &lt;g id="group2" transform="translate(10, 20)" &gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    88
 *      &lt;rect id="rect3" x="0" y="10" width="150" height="50"/&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    89
 *   &lt;/g&gt;</tt><tt>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    90
 *&lt;/g&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    91
 *</tt></pre>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    92
 *<pre><tt>[group1] : {10.0, 10.0, 400.0, 70.0}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    93
 *</tt>[rect2] : {10.0, 10.0, 400.0, 0.0}<tt>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    94
 *</tt>[group2] : {0.0, 10.0, 150.0, 50.0}<tt>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    95
 *[rect3] : {0.0, 10.0, 150.0, 50.0}</tt>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    96
 *</pre>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    97
 *<h3>Example #3: Bounding Box on zero radius ellipses.</h3>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    98
 *This is another example of how bounding boxes are based on the
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    99
 *element's geometry. Here, the bounding box of an ellipse with a zero
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   100
 *x-axis radius is still defined, even though the ellipse is not rendered.<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   101
 *<pre wrap="">&lt;svg id="mySVG" width="10" height="20"&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   102
 *&lt;g id="group1" transform="translate(10, 20)" fill="red" &gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   103
 *  &lt;rect id="rect1" x="10" y="10" width="100" height="100"/&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   104
 *  &lt;ellipse id="ellipse1" cx="20" cy="20" rx="0" ry="70" /&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   105
 *&lt;/g&gt;</pre>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   106
 *<tt>[mySVG] : {20.0, -30.0, 100.0, 160.0}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   107
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   108
 *[group1] : {10.0, -50.0, 100.0, 160.0}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   109
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   110
 *[rect1] : {10.0, 10.0, 100.0, 100.0}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   111
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   112
 *[ellipse1] : {20.0, -50.0, 0.0, 140.0}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   113
 *</tt><br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   114
 *<h3>Example #4: Viewports do not clip bounding boxes</h3>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   115
 *This example shows that no matter what the viewport is on the root SVG
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   116
 *element, the bounding boxes, based on the geometry, are still defined.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   117
 *Here, even though the root svg has a zero width, the bounding boxes for
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   118
 *the root itself and its children is precisely defined.<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   119
 *<pre wrap="">&lt;svg id="mySVG" width="0" height="50"&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   120
 *  &lt;g id="group1" transform="translate(10, 20)" fill="red" &gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   121
 *    &lt;rect id="rect1" x="10" y="10" width="50" height="50"/&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   122
 *    &lt;g id="group2" transform="translate(10, 20)" &gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   123
 *      &lt;rect id="rect2" x="0" y="10" width="150" height="0"/&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   124
 *      &lt;circle id="circle1" cx="20" cy="20" r="500" /&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   125
 *    &lt;/g&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   126
 *  &lt;/g&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   127
 *&lt;/svg&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   128
 *</pre>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   129
 *<tt>[mySVG] : {-460.0, -440.0, 1000.0, 1000.0}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   130
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   131
 *[group1] : {-470.0, -460.0, 1000.0, 1000.0}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   132
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   133
 *[rect1] : {10.0, 10.0, 50.0, 50.0}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   134
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   135
 *[group2] : {-480.0, -480.0, 1000.0, 1000.0}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   136
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   137
 *[rect2] : {0.0, 10.0, 150.0, 0.0}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   138
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   139
 *[circle1] : {-480.0, -480.0, 1000.0, 1000.0}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   140
 *</tt><br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   141
 *<h3>Example #5: getBBox on &lt;use&gt;</h3>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   142
 *This example shows that the bounding box for a &lt;use&gt; element
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   143
 *accounts for the x and y attributes defined on the element, just like
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   144
 *the x and y attributes impact the bounding box computation on a
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   145
 *&lt;rect&gt; or on an &lt;image&gt; element.<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   146
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   147
 *<tt>&lt;svg&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   148
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   149
 *&nbsp; &lt;defs&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   150
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   151
 *&nbsp;&nbsp;&nbsp;&nbsp; &lt;rect id="myRect" x="0" y="0" width="60" height="40" /&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   152
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   153
 *&nbsp; &lt;/defs&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   154
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   155
 *&nbsp; &lt;use id="myUse" xlink:href="#myRect" x="-30" y="-20" /&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   156
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   157
 *&lt;/svg&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   158
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   159
 *</tt>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   160
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   161
 *<tt>[myRect] : {0.0, 0.0, 60.0, 40.0}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   162
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   163
 *[myUse] : {-30.0, -20.0, 60.0, 40.0}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   164
 *</tt><br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   165
 *<h3>Example #6: Empty group</h3>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   166
 *This example shows that the bounding box for an empty group is null. By
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   167
 *the same token, the bounding box of a &lt;path&gt; with an empty
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   168
 *SVGPath (i.e., one with no path commands, which may happen after
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   169
 *creating a new &lt;path&gt; element with a Document.createElementNS
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   170
 *call) is also null.<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   171
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   172
 *<tt>&lt;g id="emptyG" /&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   173
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   174
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   175
 *[emptyG] : {null}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   176
 *</tt><br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   177
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   178
 *<h3>Example #7: Impact of display='none' and visibility='hidden'<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   179
 *</h3>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   180
 *This example shows how the bounding box of children with display='none'
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   181
 *are not accounted for in the computation of their parent's bounding
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   182
 *box. This reflects the definition of the display property and its
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   183
 *impact on rendering and bounding box computation. The example also
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   184
 *shows that elements with a 'hidden' visibility still contribute to
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   185
 *their parent's bounding box computation.<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   186
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   187
 *<tt>&lt;g id="g1"&gt; <br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   188
 *&nbsp;&nbsp;&nbsp; &lt;g id="g1.1.display.none" display="none"&gt; <br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   189
 *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;rect id="rect1" x="10" y="10" width="40" height="40"/&gt;<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   190
 *&nbsp;&nbsp;&nbsp; &lt;g/&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   191
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   192
 *&nbsp;&nbsp;&nbsp; &lt;rect id="rect2.visibility.hidden" visibility="hidden" <br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   193
 *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x="30" y="60" width="10" height="20"/&gt;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   194
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   195
 *&lt;/g&gt;</tt><br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   196
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   197
 *<tt>[g1] : {30.0, 60.0, 10.0, 20.0} <br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   198
 *[g1.1.display.none] : {10.0, 10.0, 40.0, 40.0}<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   199
 *[rect1] : {10.0, 10.0, 40.0, 40.0}<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   200
 *[rec2.visibility.hidden] : {30.0, 60.0, 10.0, 20.0}</tt><br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   201
 *<h3>Example #8: Concatenating bounding boxes in the container's user
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   202
 *space.<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   203
 *</h3>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   204
 *This example shows how the concatenation and computation of bounding
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   205
 *boxes for container element happens in the container's user space.<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   206
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   207
 *<tt>&lt;g id="g1"&gt;<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   208
 *&nbsp; &lt;line id="line1" x2="100" y2="100" transform="rotate(-45)"/&gt;<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   209
 *&lt;/g&gt;</tt><br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   210
 *<tt><br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   211
 *[g1] : {0.0, 0.0, 141.42136, 0}<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   212
 *[line1] : {0.0, 0.0, 100.0, 100.0}</tt><br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   213
 *<h3>Example #9: No influence of stroke-width.</h3>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   214
 *This example illustrates that stroking has no impact on the computation
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   215
 *of bounding boxes.<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   216
 *<tt><br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   217
 *&lt;g&gt;<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   218
 *&nbsp;&nbsp; &lt;line id="thickLine" stroke-width="10" x2="100" y2="0" /&gt;<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   219
 *&lt;/g&gt;</tt><br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   220
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   221
 *[thickLine] : {0.0, 0.0, 100.0, 0.0}<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   222
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   223
 *<h3>Example #10: No influence of viewBox.</h3>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   224
 *This example illustrates that viewBox has no impact on the computation
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   225
 *of bounding boxes.<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   226
 *<tt><br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   227
 *&lt;svg id="rootSvg" width="500" height="300" viewBox="0 0 200 100" &gt;<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   228
 *&nbsp;&nbsp; &lt;rect x="-100" y="-200" width="500" height="100" /&gt;<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   229
 *&lt;/svg&gt;</tt><br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   230
 *<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   231
 *[rootSVG] : {-100, -200, 500, 100}<br>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   232
 *
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   233
 *
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   234
 */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   235
public interface SVGLocatableElement extends SVGElement
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   236
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   237
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   238
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   239
     * <p>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   240
     * Returns the tight bounding box in current user coordinate space. Tight bounding box is the smallest
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   241
     * possible rectangle that includes the geometry of all contained graphics elements excluding stroke.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   242
     * The calculation is done in the user coordinate space of the element. When bounding box
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   243
     * is calculated elements with display property (trait) set to none are ignored. Exact rules for the bounding
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   244
     * box calculation are given in the <a href="http://www.w3.org/TR/SVG/coords.html#ObjectBoundingBox">SVG spec</a>.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   245
     * </p>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   246
     *
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   247
     * @return the tight bounding box in current user coordinate space.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   248
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   249
    public SVGRect getBBox();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   250
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   251
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   252
     * <p>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   253
     * Returns the transformation matrix from current user units (i.e., after application of the transform attribute, if any)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   254
     * to the parent user agent's notion of a "pixel". For display devices, ideally this represents a physical screen pixel.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   255
     * For other devices or environments where physical pixel sizes are not known, then an algorithm similar to the CSS2
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   256
     * definition of a "pixel" can be used instead. Note that <code>null</code> is returned if this element is not hooked into the
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   257
     * document tree.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   258
     * </p>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   259
     *
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   260
     * @return the transformation matrix from current user units to the parent user agent's notion of a "pixel".
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   261
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   262
    public SVGMatrix getScreenCTM();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   263
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   264
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   265
     * <p>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   266
     * Returns the tight bounding box in screen coordinate space. Tight bounding box is the smallest
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   267
     * possible rectangle that includes the geometry of all contained graphics elements excluding stroke.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   268
     * The box coordinates are in the screen coordinate space, which is connected to the current user
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   269
     * coordinate space by the matrix returned by {@link org.w3c.dom.svg.SVGLocatableElement#getScreenCTM getScreenCTM} method.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   270
     * Note that <code>null</code> is returned if this element is not hooked into the
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   271
     * document tree.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   272
     * </p>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   273
     *
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   274
     * @return the tight bounding box in screen coordinate space.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   275
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   276
    public SVGRect getScreenBBox();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   277
}