Class CompositeGraphicsNode

  • All Implemented Interfaces:
    java.lang.Iterable, java.util.Collection, java.util.List, GraphicsNode
    Direct Known Subclasses:
    CanvasGraphicsNode, ImageNode, RootGraphicsNode

    public class CompositeGraphicsNode
    extends AbstractGraphicsNode
    implements java.util.List
    A CompositeGraphicsNode is a graphics node that can contain graphics nodes.
    Note: this class is a 'little bit aware of' other threads, but not really threadsafe.
    Version:
    $Id: CompositeGraphicsNode.java 1808023 2017-09-11 12:43:22Z ssteiner $
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      private class  CompositeGraphicsNode.Itr
      An implementation of the java.util.Iterator interface.
      private class  CompositeGraphicsNode.ListItr
      An implementation of the java.util.ListIterator interface.
    • Constructor Summary

      Constructors 
      Constructor Description
      CompositeGraphicsNode()
      Constructs a new empty CompositeGraphicsNode.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void add​(int index, java.lang.Object o)
      Inserts the specified graphics node at the specified position in this children list.
      boolean add​(java.lang.Object o)
      Adds the specified graphics node to this composite graphics node.
      boolean addAll​(int index, java.util.Collection c)
      Not supported - Throws UnsupportedOperationException exception.
      boolean addAll​(java.util.Collection c)
      Not supported - Throws UnsupportedOperationException exception.
      private void checkRange​(int index)
      Checks if the given index is in range.
      void clear()
      Not supported - Throws UnsupportedOperationException exception.
      boolean contains​(java.awt.geom.Point2D p)
      Returns true if the specified Point2D is inside the boundary of this node, false otherwise.
      boolean contains​(java.lang.Object node)
      Returns true if this composite graphics node contains the specified graphics node, false otherwise.
      boolean containsAll​(java.util.Collection c)
      Returns true if this composite graphics node contains all the graphics node in the specified collection, false otherwise.
      void ensureCapacity​(int minCapacity)
      Increases the capacity of the children list, if necessary, to ensure that it can hold at least the number of graphics nodes specified by the minimum capacity argument.
      java.lang.Object get​(int index)
      Returns the graphics node at the specified position in the children list.
      java.awt.geom.Rectangle2D getBackgroundEnable()
      Returns the region defining the background enable property.
      java.util.List getChildren()
      Returns the list of children.
      java.awt.geom.Rectangle2D getGeometryBounds()
      Returns the bounds of the area covered by this node, without taking any of its rendering attributes into account.
      java.awt.Shape getOutline()
      Returns the outline of this node.
      java.awt.geom.Rectangle2D getPrimitiveBounds()
      Returns the bounds of the area covered by this node's primitive paint.
      java.awt.geom.Rectangle2D getSensitiveBounds()
      Returns the bounds of the sensitive area covered by this node, This includes the stroked area but does not include the effects of clipping, masking or filtering.
      static java.awt.geom.Rectangle2D getTransformedBBox​(java.awt.geom.Rectangle2D r2d, java.awt.geom.AffineTransform t)
      Transforms a Rectangle 2D by an affine transform.
      java.awt.geom.Rectangle2D getTransformedGeometryBounds​(java.awt.geom.AffineTransform txf)
      Returns the bounds of the area covered by this node, without taking any of its rendering attribute into accoun.
      java.awt.geom.Rectangle2D getTransformedPrimitiveBounds​(java.awt.geom.AffineTransform txf)
      Returns the bounds of this node's primitivePaint after applying the input transform (if any), concatenated with this node's transform (if any).
      java.awt.geom.Rectangle2D getTransformedSensitiveBounds​(java.awt.geom.AffineTransform txf)
      Returns the bounds of the sensitive area covered by this node, This includes the stroked area but does not include the effects of clipping, masking or filtering.
      int indexOf​(java.lang.Object node)
      Returns the index in the children list of the specified graphics node or -1 if the children list does not contain this graphics node.
      protected void invalidateGeometryCache()
      Invalidates the cached geometric bounds.
      boolean isEmpty()
      Returns true if this composite graphics node does not contain graphics node, false otherwise.
      java.util.Iterator iterator()
      Returns an iterator over the children of this graphics node.
      int lastIndexOf​(java.lang.Object node)
      Returns the index in this children list of the last occurence of the specified graphics node, or -1 if the list does not contain this graphics node.
      java.util.ListIterator listIterator()
      Returns an iterator over the children of this graphics node.
      java.util.ListIterator listIterator​(int index)
      Returns an iterator over the children of this graphics node, starting at the specified position in the children list.
      GraphicsNode nodeHitAt​(java.awt.geom.Point2D p)
      Returns the GraphicsNode containing point p if this node or one of its children is sensitive to mouse events at p.
      void primitivePaint​(java.awt.Graphics2D g2d)
      Paints this node without applying Filter, Mask, Composite, and clip.
      java.lang.Object remove​(int index)
      Removes the graphics node at the specified position in the children list.
      boolean remove​(java.lang.Object o)
      Removes the first instance of the specified graphics node from the children list.
      boolean removeAll​(java.util.Collection c)
      Not supported - Throws UnsupportedOperationException exception.
      boolean retainAll​(java.util.Collection c)
      Not supported - Throws UnsupportedOperationException exception.
      java.lang.Object set​(int index, java.lang.Object o)
      Replaces the graphics node at the specified position in the children list with the specified graphics node.
      void setBackgroundEnable​(java.awt.geom.Rectangle2D bgRgn)
      Sets the enable background property to the specified rectangle.
      protected void setRoot​(RootGraphicsNode newRoot)
      Sets the root node of this grahics node and modify all its children.
      void setVisible​(boolean isVisible)
      Sets if this node is visible or not depending on the specified value.
      int size()
      Returns the number of children of this composite graphics node.
      java.util.List subList​(int fromIndex, int toIndex)
      Not supported - Throws UnsupportedOperationException exception.
      java.lang.Object[] toArray()
      Returns an array containing all of the graphics node in the children list of this composite graphics node in the correct order.
      java.lang.Object[] toArray​(java.lang.Object[] a)
      Returns an array containing all of the graphics node in the children list of this composite graphics node in the correct order.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface java.util.Collection

        parallelStream, removeIf, stream, toArray
      • Methods inherited from interface java.lang.Iterable

        forEach
      • Methods inherited from interface java.util.List

        equals, hashCode, replaceAll, sort, spliterator
    • Field Detail

      • VIEWPORT

        public static final java.awt.geom.Rectangle2D VIEWPORT
      • NULL_RECT

        public static final java.awt.geom.Rectangle2D NULL_RECT
      • children

        protected GraphicsNode[] children
        The children of this composite graphics node.
      • count

        protected volatile int count
        The number of children of this composite graphics node.
      • modCount

        protected volatile int modCount
        The number of times the children list has been structurally modified.
      • backgroundEnableRgn

        protected java.awt.geom.Rectangle2D backgroundEnableRgn
        This flag indicates if this node has BackgroundEnable = 'new'. If so traversal of the gvt tree can halt here.
      • geometryBounds

        private volatile java.awt.geom.Rectangle2D geometryBounds
        Internal Cache: Geometry bounds for this node, not taking into account any of its children rendering attributes into account
      • primitiveBounds

        private volatile java.awt.geom.Rectangle2D primitiveBounds
        Internal Cache: Primitive bounds.
      • sensitiveBounds

        private volatile java.awt.geom.Rectangle2D sensitiveBounds
        Internal Cache: Sensitive bounds.
      • outline

        private java.awt.Shape outline
        Internal Cache: the outline.
    • Constructor Detail

      • CompositeGraphicsNode

        public CompositeGraphicsNode()
        Constructs a new empty CompositeGraphicsNode.
    • Method Detail

      • getChildren

        public java.util.List getChildren()
        Returns the list of children.
      • setBackgroundEnable

        public void setBackgroundEnable​(java.awt.geom.Rectangle2D bgRgn)
        Sets the enable background property to the specified rectangle.
        Parameters:
        bgRgn - the region that defines the background enable property
      • getBackgroundEnable

        public java.awt.geom.Rectangle2D getBackgroundEnable()
        Returns the region defining the background enable property.
      • setVisible

        public void setVisible​(boolean isVisible)
        Sets if this node is visible or not depending on the specified value. Don't fire a graphicsNodeChange event because this doesn't really effect us (it effects our children through CSS inheritence).
        Specified by:
        setVisible in interface GraphicsNode
        Overrides:
        setVisible in class AbstractGraphicsNode
        Parameters:
        isVisible - If true this node is visible
      • primitivePaint

        public void primitivePaint​(java.awt.Graphics2D g2d)
        Paints this node without applying Filter, Mask, Composite, and clip.
        Specified by:
        primitivePaint in interface GraphicsNode
        Parameters:
        g2d - the Graphics2D to use
      • invalidateGeometryCache

        protected void invalidateGeometryCache()
        Invalidates the cached geometric bounds. This method is called each time an attribute that affects the bounds of this node changed.
        Overrides:
        invalidateGeometryCache in class AbstractGraphicsNode
      • getPrimitiveBounds

        public java.awt.geom.Rectangle2D getPrimitiveBounds()
        Returns the bounds of the area covered by this node's primitive paint.
        Specified by:
        getPrimitiveBounds in interface GraphicsNode
      • getTransformedBBox

        public static java.awt.geom.Rectangle2D getTransformedBBox​(java.awt.geom.Rectangle2D r2d,
                                                                   java.awt.geom.AffineTransform t)
        Transforms a Rectangle 2D by an affine transform. It assumes the transform is only scale/translate so there is no loss of precision over transforming the source geometry.
      • getTransformedPrimitiveBounds

        public java.awt.geom.Rectangle2D getTransformedPrimitiveBounds​(java.awt.geom.AffineTransform txf)
        Returns the bounds of this node's primitivePaint after applying the input transform (if any), concatenated with this node's transform (if any).
        Specified by:
        getTransformedPrimitiveBounds in interface GraphicsNode
        Overrides:
        getTransformedPrimitiveBounds in class AbstractGraphicsNode
        Parameters:
        txf - the affine transform with which this node's transform should be concatenated. Should not be null.
      • getGeometryBounds

        public java.awt.geom.Rectangle2D getGeometryBounds()
        Returns the bounds of the area covered by this node, without taking any of its rendering attributes into account. That is, exclusive of any clipping, masking, filtering or stroking, for example.
        Specified by:
        getGeometryBounds in interface GraphicsNode
      • getTransformedGeometryBounds

        public java.awt.geom.Rectangle2D getTransformedGeometryBounds​(java.awt.geom.AffineTransform txf)
        Returns the bounds of the area covered by this node, without taking any of its rendering attribute into accoun. That is, exclusive of any clipping, masking, filtering or stroking, for example. The returned value is transformed by the concatenation of the input transform and this node's transform.
        Specified by:
        getTransformedGeometryBounds in interface GraphicsNode
        Overrides:
        getTransformedGeometryBounds in class AbstractGraphicsNode
        Parameters:
        txf - the affine transform with which this node's transform should be concatenated. Should not be null.
      • getSensitiveBounds

        public java.awt.geom.Rectangle2D getSensitiveBounds()
        Returns the bounds of the sensitive area covered by this node, This includes the stroked area but does not include the effects of clipping, masking or filtering.
        Specified by:
        getSensitiveBounds in interface GraphicsNode
      • getTransformedSensitiveBounds

        public java.awt.geom.Rectangle2D getTransformedSensitiveBounds​(java.awt.geom.AffineTransform txf)
        Returns the bounds of the sensitive area covered by this node, This includes the stroked area but does not include the effects of clipping, masking or filtering. The returned value is transformed by the concatenation of the input transform and this node's transform.
        Specified by:
        getTransformedSensitiveBounds in interface GraphicsNode
        Overrides:
        getTransformedSensitiveBounds in class AbstractGraphicsNode
        Parameters:
        txf - the affine transform with which this node's transform should be concatenated. Should not be null.
      • contains

        public boolean contains​(java.awt.geom.Point2D p)
        Returns true if the specified Point2D is inside the boundary of this node, false otherwise.
        Specified by:
        contains in interface GraphicsNode
        Overrides:
        contains in class AbstractGraphicsNode
        Parameters:
        p - the specified Point2D in the user space
      • nodeHitAt

        public GraphicsNode nodeHitAt​(java.awt.geom.Point2D p)
        Returns the GraphicsNode containing point p if this node or one of its children is sensitive to mouse events at p.
        Specified by:
        nodeHitAt in interface GraphicsNode
        Overrides:
        nodeHitAt in class AbstractGraphicsNode
        Parameters:
        p - the specified Point2D in the user space
      • getOutline

        public java.awt.Shape getOutline()
        Returns the outline of this node.
        Specified by:
        getOutline in interface GraphicsNode
      • setRoot

        protected void setRoot​(RootGraphicsNode newRoot)
        Sets the root node of this grahics node and modify all its children.
        Overrides:
        setRoot in class AbstractGraphicsNode
        Parameters:
        newRoot - the new root node of this node
      • size

        public int size()
        Returns the number of children of this composite graphics node.
        Specified by:
        size in interface java.util.Collection
        Specified by:
        size in interface java.util.List
      • isEmpty

        public boolean isEmpty()
        Returns true if this composite graphics node does not contain graphics node, false otherwise.
        Specified by:
        isEmpty in interface java.util.Collection
        Specified by:
        isEmpty in interface java.util.List
      • contains

        public boolean contains​(java.lang.Object node)
        Returns true if this composite graphics node contains the specified graphics node, false otherwise.
        Specified by:
        contains in interface java.util.Collection
        Specified by:
        contains in interface java.util.List
        Parameters:
        node - the node to check
      • iterator

        public java.util.Iterator iterator()
        Returns an iterator over the children of this graphics node.
        Specified by:
        iterator in interface java.util.Collection
        Specified by:
        iterator in interface java.lang.Iterable
        Specified by:
        iterator in interface java.util.List
      • toArray

        public java.lang.Object[] toArray()
        Returns an array containing all of the graphics node in the children list of this composite graphics node in the correct order.
        Specified by:
        toArray in interface java.util.Collection
        Specified by:
        toArray in interface java.util.List
      • toArray

        public java.lang.Object[] toArray​(java.lang.Object[] a)
        Returns an array containing all of the graphics node in the children list of this composite graphics node in the correct order. If the children list fits in the specified array, it is returned therein. Otherwise, a new array is allocated.
        Specified by:
        toArray in interface java.util.Collection
        Specified by:
        toArray in interface java.util.List
        Parameters:
        a - the array to fit if possible
      • get

        public java.lang.Object get​(int index)
        Returns the graphics node at the specified position in the children list.
        Specified by:
        get in interface java.util.List
        Parameters:
        index - the index of the graphics node to return
        Throws:
        java.lang.IndexOutOfBoundsException - if the index is out of range
      • set

        public java.lang.Object set​(int index,
                                    java.lang.Object o)
        Replaces the graphics node at the specified position in the children list with the specified graphics node.
        Specified by:
        set in interface java.util.List
        Parameters:
        index - the index of the graphics node to replace
        o - the graphics node to be stored at the specified position
        Returns:
        the graphics node previously at the specified position
        Throws:
        java.lang.IndexOutOfBoundsException - if the index is out of range
        java.lang.IllegalArgumentException - if the node is not an instance of GraphicsNode
      • add

        public boolean add​(java.lang.Object o)
        Adds the specified graphics node to this composite graphics node.
        Specified by:
        add in interface java.util.Collection
        Specified by:
        add in interface java.util.List
        Parameters:
        o - the graphics node to add
        Returns:
        true (as per the general contract of Collection.add)
        Throws:
        java.lang.IllegalArgumentException - if the node is not an instance of GraphicsNode
      • add

        public void add​(int index,
                        java.lang.Object o)
        Inserts the specified graphics node at the specified position in this children list. Shifts the graphics node currently at that position (if any) and any subsequent graphics nodes to the right (adds one to their indices).
        Specified by:
        add in interface java.util.List
        Parameters:
        index - the position at which the specified graphics node is to be inserted.
        o - the graphics node to be inserted.
        Throws:
        java.lang.IndexOutOfBoundsException - if the index is out of range
        java.lang.IllegalArgumentException - if the node is not an instance of GraphicsNode
      • addAll

        public boolean addAll​(java.util.Collection c)
        Not supported - Throws UnsupportedOperationException exception.
        Specified by:
        addAll in interface java.util.Collection
        Specified by:
        addAll in interface java.util.List
      • addAll

        public boolean addAll​(int index,
                              java.util.Collection c)
        Not supported - Throws UnsupportedOperationException exception.
        Specified by:
        addAll in interface java.util.List
      • remove

        public boolean remove​(java.lang.Object o)
        Removes the first instance of the specified graphics node from the children list.
        Specified by:
        remove in interface java.util.Collection
        Specified by:
        remove in interface java.util.List
        Parameters:
        o - the node the remove
        Returns:
        true if the children list contains the specified graphics node
        Throws:
        java.lang.IllegalArgumentException - if the node is not an instance of GraphicsNode
        java.lang.IndexOutOfBoundsException - when o is not in children list
      • remove

        public java.lang.Object remove​(int index)
        Removes the graphics node at the specified position in the children list. Shifts any subsequent graphics nodes to the left (subtracts one from their indices).
        Specified by:
        remove in interface java.util.List
        Parameters:
        index - the position of the graphics node to remove
        Returns:
        the graphics node that was removed
        Throws:
        java.lang.IndexOutOfBoundsException - if index out of range
      • removeAll

        public boolean removeAll​(java.util.Collection c)
        Not supported - Throws UnsupportedOperationException exception.
        Specified by:
        removeAll in interface java.util.Collection
        Specified by:
        removeAll in interface java.util.List
      • retainAll

        public boolean retainAll​(java.util.Collection c)
        Not supported - Throws UnsupportedOperationException exception.
        Specified by:
        retainAll in interface java.util.Collection
        Specified by:
        retainAll in interface java.util.List
      • clear

        public void clear()
        Not supported - Throws UnsupportedOperationException exception.
        Specified by:
        clear in interface java.util.Collection
        Specified by:
        clear in interface java.util.List
      • containsAll

        public boolean containsAll​(java.util.Collection c)
        Returns true if this composite graphics node contains all the graphics node in the specified collection, false otherwise.
        Specified by:
        containsAll in interface java.util.Collection
        Specified by:
        containsAll in interface java.util.List
        Parameters:
        c - the collection to be checked for containment
      • indexOf

        public int indexOf​(java.lang.Object node)
        Returns the index in the children list of the specified graphics node or -1 if the children list does not contain this graphics node.
        Specified by:
        indexOf in interface java.util.List
        Parameters:
        node - the graphics node to search for
      • lastIndexOf

        public int lastIndexOf​(java.lang.Object node)
        Returns the index in this children list of the last occurence of the specified graphics node, or -1 if the list does not contain this graphics node.
        Specified by:
        lastIndexOf in interface java.util.List
        Parameters:
        node - the graphics node to search for
      • listIterator

        public java.util.ListIterator listIterator()
        Returns an iterator over the children of this graphics node.
        Specified by:
        listIterator in interface java.util.List
      • listIterator

        public java.util.ListIterator listIterator​(int index)
        Returns an iterator over the children of this graphics node, starting at the specified position in the children list.
        Specified by:
        listIterator in interface java.util.List
        Parameters:
        index - the index of the first graphics node to return from the children list
      • subList

        public java.util.List subList​(int fromIndex,
                                      int toIndex)
        Not supported - Throws UnsupportedOperationException exception.
        Specified by:
        subList in interface java.util.List
      • checkRange

        private void checkRange​(int index)
        Checks if the given index is in range. If not, throws an appropriate runtime exception.
        Parameters:
        index - the index to check
      • ensureCapacity

        public void ensureCapacity​(int minCapacity)
        Increases the capacity of the children list, if necessary, to ensure that it can hold at least the number of graphics nodes specified by the minimum capacity argument.
        Parameters:
        minCapacity - the desired minimum capacity.