View Javadoc

1   /**********************************************
2    * Copyright (C) 2010 Lukas Laag
3    * This file is part of lib-gwt-svg.
4    * 
5    * libgwtsvg is free software: you can redistribute it and/or modify
6    * it under the terms of the GNU Lesser General Public License as published by
7    * the Free Software Foundation, either version 3 of the License, or
8    * (at your option) any later version.
9    * 
10   * libgwtsvg is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   * GNU Lesser General Public License for more details.
14   * 
15   * You should have received a copy of the GNU Lesser General Public License
16   * along with libgwtsvg.  If not, see http://www.gnu.org/licenses/
17   **********************************************/
18  /*
19   * Copyright (c) 2004 World Wide Web Consortium,
20   *
21   * (Massachusetts Institute of Technology, European Research Consortium for
22   * Informatics and Mathematics, Keio University). All Rights Reserved. This
23   * work is distributed under the W3C(r) Software License [1] in the hope that
24   * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
25   * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
26   *
27   * [1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
28   */
29  
30  package org.vectomatic.dom.svg.impl;
31  
32  import org.vectomatic.dom.svg.OMSVGAnimatedBoolean;
33  import org.vectomatic.dom.svg.OMSVGAnimatedNumber;
34  import org.vectomatic.dom.svg.OMSVGAnimatedTransformList;
35  import org.vectomatic.dom.svg.OMSVGMatrix;
36  import org.vectomatic.dom.svg.OMSVGPathSegArcAbs;
37  import org.vectomatic.dom.svg.OMSVGPathSegArcRel;
38  import org.vectomatic.dom.svg.OMSVGPathSegClosePath;
39  import org.vectomatic.dom.svg.OMSVGPathSegCurvetoCubicAbs;
40  import org.vectomatic.dom.svg.OMSVGPathSegCurvetoCubicRel;
41  import org.vectomatic.dom.svg.OMSVGPathSegCurvetoCubicSmoothAbs;
42  import org.vectomatic.dom.svg.OMSVGPathSegCurvetoCubicSmoothRel;
43  import org.vectomatic.dom.svg.OMSVGPathSegCurvetoQuadraticAbs;
44  import org.vectomatic.dom.svg.OMSVGPathSegCurvetoQuadraticRel;
45  import org.vectomatic.dom.svg.OMSVGPathSegCurvetoQuadraticSmoothAbs;
46  import org.vectomatic.dom.svg.OMSVGPathSegCurvetoQuadraticSmoothRel;
47  import org.vectomatic.dom.svg.OMSVGPathSegLinetoAbs;
48  import org.vectomatic.dom.svg.OMSVGPathSegLinetoHorizontalAbs;
49  import org.vectomatic.dom.svg.OMSVGPathSegLinetoHorizontalRel;
50  import org.vectomatic.dom.svg.OMSVGPathSegLinetoRel;
51  import org.vectomatic.dom.svg.OMSVGPathSegLinetoVerticalAbs;
52  import org.vectomatic.dom.svg.OMSVGPathSegLinetoVerticalRel;
53  import org.vectomatic.dom.svg.OMSVGPathSegList;
54  import org.vectomatic.dom.svg.OMSVGPathSegMovetoAbs;
55  import org.vectomatic.dom.svg.OMSVGPathSegMovetoRel;
56  import org.vectomatic.dom.svg.OMSVGPoint;
57  import org.vectomatic.dom.svg.OMSVGRect;
58  import org.vectomatic.dom.svg.OMSVGStringList;
59  
60  import com.google.gwt.core.client.JavaScriptException;
61  
62  /**
63   * The {@link org.vectomatic.dom.svg.impl.SVGPathElement} interface corresponds
64   * to the <a href='http://www.w3.org/TR/SVG11/paths.html#PathElement' title='path
65   * element specification'>path</a> element.
66   */
67  public class SVGPathElement extends SVGElement {
68    protected SVGPathElement() {
69    }
70  
71    // Implementation of the svg::SVGPathElement W3C IDL interface
72    /**
73     * Corresponds to attribute {@link org.vectomatic.dom.svg.impl.SVGPathElement#getPathLength()}
74     * on the given <a href='http://www.w3.org/TR/SVG11/paths.html#PathElement'
75     * title='path element specification'>path</a> element.
76     */
77    public final native OMSVGAnimatedNumber getPathLength() /*-{
78      return this.pathLength;
79    }-*/;
80    /**
81     * Returns the user agent's computed value for the total length of the path
82     * using the user agent's distance-along-a-path algorithm, as a distance in
83     * the current user coordinate system.
84     * @return The total length of the path.
85     */
86    public final native float getTotalLength() /*-{
87      return this.getTotalLength();
88    }-*/;
89    /**
90     * Returns the (x,y) coordinate in user space which is <var>distance</var>
91     * units along the path, utilizing the user agent's distance-along-a-path
92     * algorithm.
93     * @param distance The distance along the path, relative to the start of 
94     * the path, as a distance in the current user coordinate system.
95     * @return The returned point in user space.
96     */
97    public final native OMSVGPoint getPointAtLength(float distance) /*-{
98      return this.getPointAtLength(distance);
99    }-*/;
100   /**
101    * Returns the index into {@link org.vectomatic.dom.svg.itf.ISVGAnimatedPathData#getPathSegList()}
102    * which is <var>distance</var> units along the path, utilizing the user agent's
103    * distance-along-a-path algorithm.
104    * @param distance The distance along the path, relative to the start of 
105    * the path, as a distance in the current user coordinate system.
106    * @return The index of the path segment, where the first path segment is
107    * number 0.
108    */
109   public final native int getPathSegAtLength(float distance) /*-{
110     return this.getPathSegAtLength(distance);
111   }-*/;
112   /**
113    * Returns a stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegClosePath}
114    * object.
115    * @return A stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegClosePath}
116    * object.
117    */
118   public final native OMSVGPathSegClosePath createSVGPathSegClosePath() /*-{
119     return this.createSVGPathSegClosePath();
120   }-*/;
121   /**
122    * Returns a stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegMovetoAbs}
123    * object.
124    * @param x The absolute X coordinate for the end point of this path segment.
125    * @param y The absolute Y coordinate for the end point of this path segment.
126    * @return A stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegMovetoAbs}
127    * object.
128    */
129   public final native OMSVGPathSegMovetoAbs createSVGPathSegMovetoAbs(float x, float y) /*-{
130     return this.createSVGPathSegMovetoAbs(x, y);
131   }-*/;
132   /**
133    * Returns a stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegMovetoRel}
134    * object.
135    * @param x The relative X coordinate for the end point of this path segment.
136    * @param y The relative Y coordinate for the end point of this path segment.
137    * @return A stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegMovetoRel}
138    * object.
139    */
140   public final native OMSVGPathSegMovetoRel createSVGPathSegMovetoRel(float x, float y) /*-{
141     return this.createSVGPathSegMovetoRel(x, y);
142   }-*/;
143   /**
144    * Returns a stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegLinetoAbs}
145    * object.
146    * @param x The absolute X coordinate for the end point of this path segment.
147    * @param y The absolute Y coordinate for the end point of this path segment.
148    * @return A stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegLinetoAbs}
149    * object.
150    */
151   public final native OMSVGPathSegLinetoAbs createSVGPathSegLinetoAbs(float x, float y) /*-{
152     return this.createSVGPathSegLinetoAbs(x, y);
153   }-*/;
154   /**
155    * Returns a stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegLinetoRel}
156    * object.
157    * @param x The relative X coordinate for the end point of this path segment.
158    * @param y The relative Y coordinate for the end point of this path segment.
159    * @return A stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegLinetoRel}
160    * object.
161    */
162   public final native OMSVGPathSegLinetoRel createSVGPathSegLinetoRel(float x, float y) /*-{
163     return this.createSVGPathSegLinetoRel(x, y);
164   }-*/;
165   /**
166    * Returns a stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegCurvetoCubicAbs}
167    * object.
168    * @param x The absolute X coordinate for the end point of this path segment.
169    * @param y The absolute Y coordinate for the end point of this path segment.
170    * @param x1 The absolute X coordinate for the first control point.
171    * @param y1 The absolute Y coordinate for the first control point.
172    * @param x2 The absolute X coordinate for the second control point.
173    * @param y2 The absolute Y coordinate for the second control point.
174    * @return A stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegCurvetoCubicAbs}
175    * object.
176    */
177   public final native OMSVGPathSegCurvetoCubicAbs createSVGPathSegCurvetoCubicAbs(float x, float y, float x1, float y1, float x2, float y2) /*-{
178     return this.createSVGPathSegCurvetoCubicAbs(x, y, x1, y1, x2, y2);
179   }-*/;
180   /**
181    * Returns a stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegCurvetoCubicRel}
182    * object.
183    * @param x The relative X coordinate for the end point of this path segment.
184    * @param y The relative Y coordinate for the end point of this path segment.
185    * @param x1 The relative X coordinate for the first control point.
186    * @param y1 The relative Y coordinate for the first control point.
187    * @param x2 The relative X coordinate for the second control point.
188    * @param y2 The relative Y coordinate for the second control point.
189    * @return A stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegCurvetoCubicRel}
190    * object.
191    */
192   public final native OMSVGPathSegCurvetoCubicRel createSVGPathSegCurvetoCubicRel(float x, float y, float x1, float y1, float x2, float y2) /*-{
193     return this.createSVGPathSegCurvetoCubicRel(x, y, x1, y1, x2, y2);
194   }-*/;
195   /**
196    * Returns a stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegCurvetoQuadraticAbs}
197    * object.
198    * @param x The absolute X coordinate for the end point of this path segment.
199    * @param y The absolute Y coordinate for the end point of this path segment.
200    * @param x1 The absolute X coordinate for the first control point.
201    * @param y1 The absolute Y coordinate for the first control point.
202    * @return A stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegCurvetoQuadraticAbs}
203    * object.
204    */
205   public final native OMSVGPathSegCurvetoQuadraticAbs createSVGPathSegCurvetoQuadraticAbs(float x, float y, float x1, float y1) /*-{
206     return this.createSVGPathSegCurvetoQuadraticAbs(x, y, x1, y1);
207   }-*/;
208   /**
209    * Returns a stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegCurvetoQuadraticRel}
210    * object.
211    * @param x The relative X coordinate for the end point of this path segment.
212    * @param y The relative Y coordinate for the end point of this path segment.
213    * @param x1 The relative X coordinate for the first control point.
214    * @param y1 The relative Y coordinate for the first control point.
215    * @return A stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegCurvetoQuadraticRel}
216    * object.
217    */
218   public final native OMSVGPathSegCurvetoQuadraticRel createSVGPathSegCurvetoQuadraticRel(float x, float y, float x1, float y1) /*-{
219     return this.createSVGPathSegCurvetoQuadraticRel(x, y, x1, y1);
220   }-*/;
221   /**
222    * Returns a stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegArcAbs}
223    * object.
224    * @param x The absolute X coordinate for the end point of this path segment.
225    * @param y The absolute Y coordinate for the end point of this path segment.
226    * @param r1 The x-axis radius for the ellipse (i.e., r1).
227    * @param r2 The y-axis radius for the ellipse (i.e., r2).
228    * @param angle The rotation angle in degrees for the ellipse's x-axis relative
229    * to the x-axis of the user coordinate system.
230    * @param largeArcFlag The value of the large-arc-flag parameter.
231    * @param sweepFlag The value of the large-arc-flag parameter.
232    * @return A stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegArcAbs}
233    * object.
234    */
235   public final native OMSVGPathSegArcAbs createSVGPathSegArcAbs(float x, float y, float r1, float r2, float angle, boolean largeArcFlag, boolean sweepFlag) /*-{
236     return this.createSVGPathSegArcAbs(x, y, r1, r2, angle, largeArcFlag, sweepFlag);
237   }-*/;
238   /**
239    * Returns a stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegArcRel}
240    * object.
241    * @param x The relative X coordinate for the end point of this path segment.
242    * @param y The relative Y coordinate for the end point of this path segment.
243    * @param r1 The x-axis radius for the ellipse (i.e., r1).
244    * @param r2 The y-axis radius for the ellipse (i.e., r2).
245    * @param angle The rotation angle in degrees for the ellipse's x-axis relative
246    * to the x-axis of the user coordinate system.
247    * @param largeArcFlag The value of the large-arc-flag parameter.
248    * @param sweepFlag The value of the large-arc-flag parameter.
249    * @return A stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegArcRel}
250    * object.
251    */
252   public final native OMSVGPathSegArcRel createSVGPathSegArcRel(float x, float y, float r1, float r2, float angle, boolean largeArcFlag, boolean sweepFlag) /*-{
253     return this.createSVGPathSegArcRel(x, y, r1, r2, angle, largeArcFlag, sweepFlag);
254   }-*/;
255   /**
256    * Returns a stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegLinetoHorizontalAbs}
257    * object.
258    * @param x The absolute X coordinate for the end point of this path segment.
259    * @return A stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegLinetoHorizontalAbs}
260    * object.
261    */
262   public final native OMSVGPathSegLinetoHorizontalAbs createSVGPathSegLinetoHorizontalAbs(float x) /*-{
263     return this.createSVGPathSegLinetoHorizontalAbs(x);
264   }-*/;
265   /**
266    * Returns a stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegLinetoHorizontalRel}
267    * object.
268    * @param x The relative X coordinate for the end point of this path segment.
269    * @return A stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegLinetoHorizontalRel}
270    * object.
271    */
272   public final native OMSVGPathSegLinetoHorizontalRel createSVGPathSegLinetoHorizontalRel(float x) /*-{
273     return this.createSVGPathSegLinetoHorizontalRel(x);
274   }-*/;
275   /**
276    * Returns a stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegLinetoVerticalAbs}
277    * object.
278    * @param y The absolute Y coordinate for the end point of this path segment.
279    * @return A stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegLinetoVerticalAbs}
280    * object.
281    */
282   public final native OMSVGPathSegLinetoVerticalAbs createSVGPathSegLinetoVerticalAbs(float y) /*-{
283     return this.createSVGPathSegLinetoVerticalAbs(y);
284   }-*/;
285   /**
286    * Returns a stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegLinetoVerticalRel}
287    * object.
288    * @param y The relative Y coordinate for the end point of this path segment.
289    * @return A stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegLinetoVerticalRel}
290    * object.
291    */
292   public final native OMSVGPathSegLinetoVerticalRel createSVGPathSegLinetoVerticalRel(float y) /*-{
293     return this.createSVGPathSegLinetoVerticalRel(y);
294   }-*/;
295   /**
296    * Returns a stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegCurvetoCubicSmoothAbs}
297    * object.
298    * @param x The absolute X coordinate for the end point of this path segment.
299    * @param y The absolute Y coordinate for the end point of this path segment.
300    * @param x2 The absolute X coordinate for the second control point.
301    * @param y2 The absolute Y coordinate for the second control point.
302    * @return A stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegCurvetoCubicSmoothAbs}
303    * object.
304    */
305   public final native OMSVGPathSegCurvetoCubicSmoothAbs createSVGPathSegCurvetoCubicSmoothAbs(float x, float y, float x2, float y2) /*-{
306     return this.createSVGPathSegCurvetoCubicSmoothAbs(x, y, x2, y2);
307   }-*/;
308   /**
309    * Returns a stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegCurvetoCubicSmoothRel}
310    * object.
311    * @param x The relative X coordinate for the end point of this path segment.
312    * @param y The relative Y coordinate for the end point of this path segment.
313    * @param x2 The relative X coordinate for the second control point.
314    * @param y2 The relative Y coordinate for the second control point.
315    * @return A stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegCurvetoCubicSmoothRel}
316    * object.
317    */
318   public final native OMSVGPathSegCurvetoCubicSmoothRel createSVGPathSegCurvetoCubicSmoothRel(float x, float y, float x2, float y2) /*-{
319     return this.createSVGPathSegCurvetoCubicSmoothRel(x, y, x2, y2);
320   }-*/;
321   /**
322    * Returns a stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegCurvetoQuadraticSmoothAbs}
323    * object.
324    * @param x The absolute X coordinate for the end point of this path segment.
325    * @param y The absolute Y coordinate for the end point of this path segment.
326    * @return A stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegCurvetoQuadraticSmoothAbs}
327    * object.
328    */
329   public final native OMSVGPathSegCurvetoQuadraticSmoothAbs createSVGPathSegCurvetoQuadraticSmoothAbs(float x, float y) /*-{
330     return this.createSVGPathSegCurvetoQuadraticSmoothAbs(x, y);
331   }-*/;
332   /**
333    * Returns a stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegCurvetoQuadraticSmoothRel}
334    * object.
335    * @param x The relative X coordinate for the end point of this path segment.
336    * @param y The relative Y coordinate for the end point of this path segment.
337    * @return A stand-alone, parentless {@link org.vectomatic.dom.svg.OMSVGPathSegCurvetoQuadraticSmoothRel}
338    * object.
339    */
340   public final native OMSVGPathSegCurvetoQuadraticSmoothRel createSVGPathSegCurvetoQuadraticSmoothRel(float x, float y) /*-{
341     return this.createSVGPathSegCurvetoQuadraticSmoothRel(x, y);
342   }-*/;
343 
344   // Implementation of the svg::SVGAnimatedPathData W3C IDL interface
345   /**
346    * Provides access to the base (i.e., static) contents of the <span class='attr-name'>'d'</span>
347    * attribute in a form which matches one-for-one with SVG's syntax. Thus,
348    * if the <span class='attr-name'>'d'</span> attribute has an "absolute moveto
349    * (M)" and an "absolute arcto (A)" command, then {@link org.vectomatic.dom.svg.itf.ISVGAnimatedPathData#getPathSegList()}
350    * will have two entries: a SVG_PATHSEG_MOVETO_ABS and a SVG_PATHSEG_ARC_ABS.
351    */
352   public final native OMSVGPathSegList getPathSegList() /*-{
353     return @org.vectomatic.dom.svg.OMNode::convertList(Lcom/google/gwt/core/client/JavaScriptObject;)(this.pathSegList);
354   }-*/;
355   /**
356    * <p>Provides access to the base (i.e., static) contents of the <span class='attr-name'>'d'</span>
357    * attribute in a form where all path data commands are expressed in terms
358    * of the following subset of {@link org.vectomatic.dom.svg.OMSVGPathSeg}
359    * types: SVG_PATHSEG_MOVETO_ABS (M), SVG_PATHSEG_LINETO_ABS (L), SVG_PATHSEG_CURVETO_CUBIC_ABS
360    * (C) and SVG_PATHSEG_CLOSEPATH (z). Thus, if the <span class='attr-name'>'d'</span>
361    * attribute has an "absolute moveto (M)" and an "absolute arcto (A)" command,
362    * then pathSegList will have one SVG_PATHSEG_MOVETO_ABS entry followed by
363    * a series of SVG_PATHSEG_LINETO_ABS entries which approximate the arc. This
364    * alternate representation is available to provide a simpler interface to
365    * developers who would benefit from a more limited set of commands.</p> <p>The
366    * only valid {@link org.vectomatic.dom.svg.OMSVGPathSeg} types are SVG_PATHSEG_MOVETO_ABS
367    * (M), SVG_PATHSEG_LINETO_ABS (L), SVG_PATHSEG_CURVETO_CUBIC_ABS (C) and
368    * SVG_PATHSEG_CLOSEPATH (z).</p>
369    */
370   public final native OMSVGPathSegList getNormalizedPathSegList() /*-{
371     return @org.vectomatic.dom.svg.OMNode::convertList(Lcom/google/gwt/core/client/JavaScriptObject;)(this.normalizedPathSegList);
372   }-*/;
373   /**
374    * Provides access to the current animated contents of the <span class='attr-name'>'d'</span>
375    * attribute in a form which matches one-for-one with SVG's syntax. If the
376    * given attribute or property is being animated, contains the current animated
377    * value of the attribute or property, and both the object itself and its
378    * contents are read only. If the given attribute or property is not currently
379    * being animated, contains the same value as {@link org.vectomatic.dom.svg.itf.ISVGAnimatedPathData#getPathSegList()}.
380    */
381   public final native OMSVGPathSegList getAnimatedPathSegList() /*-{
382     return @org.vectomatic.dom.svg.OMNode::convertList(Lcom/google/gwt/core/client/JavaScriptObject;)(this.animatedPathSegList);
383   }-*/;
384   /**
385    * Provides access to the current animated contents of the <span class='attr-name'>'d'</span>
386    * attribute in a form where all path data commands are expressed in terms
387    * of the following subset of {@link org.vectomatic.dom.svg.OMSVGPathSeg}
388    * types: SVG_PATHSEG_MOVETO_ABS (M), SVG_PATHSEG_LINETO_ABS (L), SVG_PATHSEG_CURVETO_CUBIC_ABS
389    * (C) and SVG_PATHSEG_CLOSEPATH (z). If the given attribute or property is
390    * being animated, contains the current animated value of the attribute or
391    * property, and both the object itself and its contents are read only. If
392    * the given attribute or property is not currently being animated, contains
393    * the same value as {@link org.vectomatic.dom.svg.itf.ISVGAnimatedPathData#getNormalizedPathSegList()}.
394    */
395   public final native OMSVGPathSegList getAnimatedNormalizedPathSegList() /*-{
396     return @org.vectomatic.dom.svg.OMNode::convertList(Lcom/google/gwt/core/client/JavaScriptObject;)(this.animatedNormalizedPathSegList);
397   }-*/;
398 
399   // Implementation of the svg::SVGExternalResourcesRequired W3C IDL interface
400   /**
401    * Corresponds to attribute {@link org.vectomatic.dom.svg.itf.ISVGExternalResourcesRequired#getExternalResourcesRequired()}
402    * on the given element. Note that the SVG DOM defines the attribute {@link
403    * org.vectomatic.dom.svg.itf.ISVGExternalResourcesRequired#getExternalResourcesRequired()}
404    * as being of type {@link org.vectomatic.dom.svg.OMSVGAnimatedBoolean}, whereas
405    * the SVG language definition says that {@link org.vectomatic.dom.svg.itf.ISVGExternalResourcesRequired#getExternalResourcesRequired()}
406    * is not animated. Because the SVG language definition states that {@link
407    * org.vectomatic.dom.svg.itf.ISVGExternalResourcesRequired#getExternalResourcesRequired()}
408    * cannot be animated, the {@link org.vectomatic.dom.svg.OMSVGAnimatedBoolean#getAnimVal()}
409    * will always be the same as the {@link org.vectomatic.dom.svg.OMSVGAnimatedBoolean#getBaseVal()}.
410    */
411   public final native OMSVGAnimatedBoolean getExternalResourcesRequired() /*-{
412     return this.externalResourcesRequired;
413   }-*/;
414 
415   // Implementation of the svg::SVGLangSpace W3C IDL interface
416   /**
417    * Corresponds to attribute <code>xml:lang</code> on the given element.
418    */
419   public final native String getXmllang() /*-{
420     return this.xmllang;
421   }-*/;
422   /**
423    * Corresponds to attribute <code>xml:lang</code> on the given element.
424    * @throws DOMException(NO_MODIFICATION_ALLOWED_ERR) Raised on an   attempt
425    * to change the value of a <a href="svgdom.html#ReadOnlyNodes">read only
426    * attribute</a>.
427    */
428   public final native void setXmllang(String value) throws JavaScriptException /*-{
429     this.xmllang = value;
430   }-*/;
431   /**
432    * Corresponds to attribute <code>xml:space</code> on the given element.
433    */
434   public final native String getXmlspace() /*-{
435     return this.xmlspace;
436   }-*/;
437   /**
438    * Corresponds to attribute <code>xml:space</code> on the given element.
439    * @throws DOMException(NO_MODIFICATION_ALLOWED_ERR) Raised on an   attempt
440    * to change the value of a <a href="svgdom.html#ReadOnlyNodes">read only
441    * attribute</a>.
442    */
443   public final native void setXmlspace(String value) throws JavaScriptException /*-{
444     this.xmlspace = value;
445   }-*/;
446 
447   // Implementation of the svg::SVGLocatable W3C IDL interface
448   /**
449    * The element which established the current viewport. Often, the nearest
450    * ancestor <a href='http://www.w3.org/TR/SVG11/struct.html#SVGElement' title='svg
451    * element specification'>svg</a> element. Null if the current element is
452    * the outermost <a href='http://www.w3.org/TR/SVG11/struct.html#SVGElement'
453    * title='svg element specification'>svg</a> element.
454    */
455   public final native SVGElement getNearestViewportElement() /*-{
456     return this.nearestViewportElement;
457   }-*/;
458   /**
459    * The farthest ancestor <a href='http://www.w3.org/TR/SVG11/struct.html#SVGElement'
460    * title='svg element specification'>svg</a> element. Null if the current
461    * element is the outermost <a href='http://www.w3.org/TR/SVG11/struct.html#SVGElement'
462    * title='svg element specification'>svg</a> element.
463    */
464   public final native SVGElement getFarthestViewportElement() /*-{
465     return this.farthestViewportElement;
466   }-*/;
467   /**
468    * Returns the tight bounding box in current user space (i.e., after application
469    * of the <code>transform</code> attribute, if any) on the geometry of all
470    * contained graphics elements, exclusive of stroking, clipping, masking and
471    * filter effects). Note that getBBox must return the actual bounding box
472    * at the time the method was called, even in case the element has not yet
473    * been rendered.
474    * @return An {@link org.vectomatic.dom.svg.OMSVGRect} object that defines
475    * the bounding box.
476    */
477   public final native OMSVGRect getBBox() /*-{
478     return this.getBBox();
479   }-*/;
480   /**
481    * Returns the transformation matrix from current user units (i.e., after
482    * application of the <code>transform</code> attribute, if any) to the viewport
483    * coordinate system for the {@link org.vectomatic.dom.svg.itf.ISVGLocatable#getNearestViewportElement()}.
484    * @return An {@link org.vectomatic.dom.svg.OMSVGMatrix} object that defines
485    * the CTM.
486    */
487   public final native OMSVGMatrix getCTM() /*-{
488     return this.getCTM();
489   }-*/;
490   /**
491    * Returns the transformation matrix from current user units (i.e., after
492    * application of the <code>transform</code> attribute, if any) to the parent
493    * user agent's notice of a "pixel". For display devices, ideally this represents
494    * a physical screen pixel. For other devices or environments where physical
495    * pixel sizes are not known, then an algorithm similar to the CSS2 definition
496    * of a "pixel" can be used instead.  Note that null is returned if this element
497    * is not hooked into the document tree. This method would have been more
498    * aptly named as <code>getClientCTM</code>, but the name <code>getScreenCTM</code>
499    * is kept for historical reasons.
500    * @return An {@link org.vectomatic.dom.svg.OMSVGMatrix} object that defines
501    * the given   transformation matrix.
502    */
503   public final native OMSVGMatrix getScreenCTM() /*-{
504     return this.getScreenCTM();
505   }-*/;
506   /**
507    * Returns the transformation matrix from the user coordinate system on the
508    * current element (after application of the <code>transform</code> attribute,
509    * if any) to the user coordinate system on parameter <var>element</var> (after
510    * application of its <code>transform</code> attribute, if any).
511    * @param element The target element.
512    * @return An {@link org.vectomatic.dom.svg.OMSVGMatrix} object that defines
513    * the transformation.
514    * @throws SVGException(SVG_MATRIX_NOT_INVERTABLE) Raised if the currently
515    * defined transformation matrices make it impossible to compute the   given
516    * matrix (e.g., because one of the transformations is singular).
517    */
518   public final native OMSVGMatrix getTransformToElement(SVGElement element) throws JavaScriptException /*-{
519     return this.getTransformToElement(element);
520   }-*/;
521 
522   // Implementation of the svg::SVGTests W3C IDL interface
523   /**
524    * Corresponds to attribute {@link org.vectomatic.dom.svg.itf.ISVGTests#getRequiredFeatures()}
525    * on the given element.
526    */
527   public final native OMSVGStringList getRequiredFeatures() /*-{
528     return @org.vectomatic.dom.svg.OMNode::convertList(Lcom/google/gwt/core/client/JavaScriptObject;)(this.requiredFeatures);
529   }-*/;
530   /**
531    * Corresponds to attribute {@link org.vectomatic.dom.svg.itf.ISVGTests#getRequiredExtensions()}
532    * on the given element.
533    */
534   public final native OMSVGStringList getRequiredExtensions() /*-{
535     return @org.vectomatic.dom.svg.OMNode::convertList(Lcom/google/gwt/core/client/JavaScriptObject;)(this.requiredExtensions);
536   }-*/;
537   /**
538    * Corresponds to attribute {@link org.vectomatic.dom.svg.itf.ISVGTests#getSystemLanguage()}
539    * on the given element.
540    */
541   public final native OMSVGStringList getSystemLanguage() /*-{
542     return @org.vectomatic.dom.svg.OMNode::convertList(Lcom/google/gwt/core/client/JavaScriptObject;)(this.systemLanguage);
543   }-*/;
544   /**
545    * Returns true if the user agent supports the given extension, specified
546    * by a URI.
547    * @param extension The name of the extension, expressed as a URI.
548    * @return True or false, depending on whether the given extension is   supported.
549    */
550   public final native boolean hasExtension(String extension) /*-{
551     return this.hasExtension(extension);
552   }-*/;
553 
554   // Implementation of the svg::SVGTransformable W3C IDL interface
555   /**
556    * Corresponds to attribute {@link org.vectomatic.dom.svg.itf.ISVGTransformable#getTransform()}
557    * on the given element.
558    */
559   public final native OMSVGAnimatedTransformList getTransform() /*-{
560     return this.transform;
561   }-*/;
562 
563 }