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.itf;
31  
32  import org.vectomatic.dom.svg.OMSVGElement;
33  import org.vectomatic.dom.svg.OMSVGMatrix;
34  import org.vectomatic.dom.svg.OMSVGRect;
35  
36  import com.google.gwt.core.client.JavaScriptException;
37  
38    /**
39     * Interface {@link org.vectomatic.dom.svg.itf.ISVGLocatable} is for all elements
40     * which either have a <code>transform</code> attribute or don't have a <code>transform</code>
41     * attribute but whose content can have a bounding box in current user space.
42     */
43  public interface ISVGLocatable {
44    /**
45     * The element which established the current viewport. Often, the nearest
46     * ancestor <a href='http://www.w3.org/TR/SVG11/struct.html#SVGElement' title='svg
47     * element specification'>svg</a> element. Null if the current element is
48     * the outermost <a href='http://www.w3.org/TR/SVG11/struct.html#SVGElement'
49     * title='svg element specification'>svg</a> element.
50     */
51    public OMSVGElement getNearestViewportElement();
52    /**
53     * The farthest ancestor <a href='http://www.w3.org/TR/SVG11/struct.html#SVGElement'
54     * title='svg element specification'>svg</a> element. Null if the current
55     * element is the outermost <a href='http://www.w3.org/TR/SVG11/struct.html#SVGElement'
56     * title='svg element specification'>svg</a> element.
57     */
58    public OMSVGElement getFarthestViewportElement();
59    /**
60     * Returns the tight bounding box in current user space (i.e., after application
61     * of the <code>transform</code> attribute, if any) on the geometry of all
62     * contained graphics elements, exclusive of stroking, clipping, masking and
63     * filter effects). Note that getBBox must return the actual bounding box
64     * at the time the method was called, even in case the element has not yet
65     * been rendered.
66     * @return An {@link org.vectomatic.dom.svg.OMSVGRect} object that defines
67     * the bounding box.
68     */
69    public OMSVGRect getBBox();
70    /**
71     * Returns the transformation matrix from current user units (i.e., after
72     * application of the <code>transform</code> attribute, if any) to the viewport
73     * coordinate system for the {@link org.vectomatic.dom.svg.itf.ISVGLocatable#getNearestViewportElement()}.
74     * @return An {@link org.vectomatic.dom.svg.OMSVGMatrix} object that defines
75     * the CTM.
76     */
77    public OMSVGMatrix getCTM();
78    /**
79     * Returns the transformation matrix from current user units (i.e., after
80     * application of the <code>transform</code> attribute, if any) to the parent
81     * user agent's notice of a "pixel". For display devices, ideally this represents
82     * a physical screen pixel. For other devices or environments where physical
83     * pixel sizes are not known, then an algorithm similar to the CSS2 definition
84     * of a "pixel" can be used instead.  Note that null is returned if this element
85     * is not hooked into the document tree. This method would have been more
86     * aptly named as <code>getClientCTM</code>, but the name <code>getScreenCTM</code>
87     * is kept for historical reasons.
88     * @return An {@link org.vectomatic.dom.svg.OMSVGMatrix} object that defines
89     * the given   transformation matrix.
90     */
91    public OMSVGMatrix getScreenCTM();
92    /**
93     * Returns the transformation matrix from the user coordinate system on the
94     * current element (after application of the <code>transform</code> attribute,
95     * if any) to the user coordinate system on parameter <var>element</var> (after
96     * application of its <code>transform</code> attribute, if any).
97     * @param element The target element.
98     * @return An {@link org.vectomatic.dom.svg.OMSVGMatrix} object that defines
99     * the transformation.
100    * @throws SVGException(SVG_MATRIX_NOT_INVERTABLE) Raised if the currently
101    * defined transformation matrices make it impossible to compute the   given
102    * matrix (e.g., because one of the transformations is singular).
103    */
104   public OMSVGMatrix getTransformToElement(OMSVGElement element) throws JavaScriptException;
105 }