summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/kitfox/salamander/svg/docStruct/SVGElementInstance.java
blob: 5867872388c6032e9481f6e9b8694e6fab23e5cd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/*
 * SVGElementInstance.java
 *
 * Created on April 12, 2007, 6:24 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package com.kitfox.salamander.svg.docStruct;

import com.kitfox.salamander.svg.basic.SVGElement;
import org.w3c.dom.events.EventTarget;

/**
 * 
 * For each 'use' element, the SVG DOM maintains a shadow tree (the "instance tree") of objects of type SVGElementInstance. A SVGElementInstance  represents a single node in the instance tree. The root object in the instance tree is pointed to by the instanceRoot attribute on the SVGUseElement object for the corresponding 'use' element.
 * 
 * If the 'use' element references a simple graphics element such as a 'rect', then there is only a single SVGElementInstance object, and the correspondingElement attribute on this SVGElementInstance object is the SVGRectElement that corresponds to the referenced 'rect' element.
 * 
 * If the 'use' element references a 'g' which contains two 'rect' elements, then the instance tree contains three SVGElementInstance objects, a root SVGElementInstance object whose correspondingElement is the SVGGElement object for the 'g', and then two child SVGElementInstance objects, each of which has its correspondingElement that is an SVGRectElement object.
 * 
 * If the referenced object is itself a 'use', or if there are 'use' subelements within the referenced object, the instance tree will contain recursive expansion of the indirect references to form a complete tree. For example, if a 'use' element references a 'g', and the 'g' itself contains a 'use', and that 'use' references a 'rect', then the instance tree for the original (outermost) 'use' will consist of a hierarchy of SVGElementInstance objects, as follows:
 * <CODE>
 * SVGElementInstance #1 (parentNode=null, firstChild=#2, correspondingElement is the 'g')
 *  SVGElementInstance #2 (parentNode=#1, firstChild=#3, correspondingElement is the other 'use')
 *    SVGElementInstance #3 (parentNode=#2, firstChild=null, corresponding Element is the 'rect')
 * </CODE>
 * @author kitfox
 */
public interface SVGElementInstance extends EventTarget
{
    /**
     * The corresponding element to which this object is an instance. For example, if a 'use' element references a 'rect' element, then an SVGElementInstance  is created, with its correspondingElement being the SVGElementInstance object for the 'rect' element.
     */
    public SVGElement getCorrespondingElement();
    /**
     * The corresponding 'use' element to which this SVGElementInstance object belongs. When 'use' elements are nested (e.g., a 'use' references another 'use' which references a graphics element such as a 'rect'), then the correspondingUseElement is the outermost 'use' (i.e., the one which indirectly references the 'rect', not the one with the direct reference).
     */
    public SVGUseElement getCorrespondingUseElement();
    /**
     * The parent of this SVGElementInstance within the instance tree. All SVGElementInstance  objects have a parent except the SVGElementInstance which corresponds to the element which was directly referenced by the 'use' element, in which case parentNode is null.
     */
    public SVGElementInstance getParentNode();
    /**
     * An SVGElementInstanceList  that contains all children of this SVGElementInstance within the instance tree. If there are no children, this is an SVGElementInstanceList  containing no entries (i.e., an empty list).
     */
    public SVGElementInstanceList getChildNodes();
    /**
     * The first child of this SVGElementInstance within the instance tree. If there is no such SVGElementInstance, this returns null.
     */
    public SVGElementInstance getFirstChild();
    /**
     * The last child of this SVGElementInstance within the instance tree. If there is no such SVGElementInstance, this returns null.
     */
    public SVGElementInstance getLastChild();
    /**
     * The SVGElementInstance  immediately preceding this SVGElementInstance. If there is no such SVGElementInstance, this returns null.
     */
    public SVGElementInstance getPreviousSibling();
    /**
     * The SVGElementInstance  immediately following this SVGElementInstance. If there is no such SVGElementInstance, this returns null.
     */
    public SVGElementInstance getNextSibling();
}