20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package javafx.scene.transform;
27
28 import java.util.Iterator;
29
30 import com.sun.javafx.geometry.BoundsUtils;
31 import javafx.event.EventDispatchChain;
32
33 import javafx.scene.Node;
34
35 import com.sun.javafx.util.WeakReferenceQueue;
36 import com.sun.javafx.binding.ExpressionHelper;
37 import com.sun.javafx.event.EventHandlerManager;
38 import com.sun.javafx.geom.transform.Affine3D;
39 import com.sun.javafx.geom.transform.BaseTransform;
40 import com.sun.javafx.scene.transform.TransformHelper;
41 import com.sun.javafx.scene.transform.TransformUtils;
42 import java.lang.ref.SoftReference;
43 import javafx.beans.InvalidationListener;
44 import javafx.beans.property.ObjectProperty;
45 import javafx.beans.property.ReadOnlyBooleanProperty;
46 import javafx.beans.property.SimpleObjectProperty;
47 import javafx.beans.value.ChangeListener;
48 import javafx.event.Event;
49 import javafx.event.EventHandler;
50 import javafx.event.EventTarget;
51 import javafx.event.EventType;
52 import javafx.geometry.Bounds;
53 import javafx.geometry.Point2D;
54 import javafx.geometry.Point3D;
55
56 // PENDING_DOC_REVIEW of this whole class
57 /**
58 * This class is a base class for different affine transformations.
59 * It provides factory methods for the simple transformations - rotating,
2051
2052 void add(final Node node) {
2053 nodes.add(node);
2054 }
2055
2056 void remove(final Node node) {
2057 nodes.remove(node);
2058 }
2059
2060 /**
2061 * This method must be called by all transforms whenever any of their
2062 * parameters changes. It is typically called when any of the transform's
2063 * properties is invalidated (it is OK to skip the call if an invalid
2064 * property is set).
2065 * @since JavaFX 8.0
2066 */
2067 protected void transformChanged() {
2068 inverseCache = null;
2069 final Iterator iterator = nodes.iterator();
2070 while (iterator.hasNext()) {
2071 ((Node) iterator.next()).impl_transformsChanged();
2072 }
2073
2074 if (type2D != null) {
2075 type2D.invalidate();
2076 }
2077
2078 if (identity != null) {
2079 identity.invalidate();
2080 }
2081
2082 if (internalEventDispatcher != null) {
2083 // need to validate all properties for the event to be fired next time
2084 validate();
2085 Event.fireEvent(this, new TransformChangedEvent(this, this));
2086 }
2087 }
2088
2089 /**
2090 * Visitor from {@code Affine} class which provides an efficient
2091 * {@code append} operation for the subclasses.
|
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 package javafx.scene.transform;
27
28 import java.util.Iterator;
29
30 import com.sun.javafx.geometry.BoundsUtils;
31 import javafx.event.EventDispatchChain;
32
33 import javafx.scene.Node;
34
35 import com.sun.javafx.util.WeakReferenceQueue;
36 import com.sun.javafx.binding.ExpressionHelper;
37 import com.sun.javafx.event.EventHandlerManager;
38 import com.sun.javafx.geom.transform.Affine3D;
39 import com.sun.javafx.geom.transform.BaseTransform;
40 import com.sun.javafx.scene.NodeHelper;
41 import com.sun.javafx.scene.transform.TransformHelper;
42 import com.sun.javafx.scene.transform.TransformUtils;
43 import java.lang.ref.SoftReference;
44 import javafx.beans.InvalidationListener;
45 import javafx.beans.property.ObjectProperty;
46 import javafx.beans.property.ReadOnlyBooleanProperty;
47 import javafx.beans.property.SimpleObjectProperty;
48 import javafx.beans.value.ChangeListener;
49 import javafx.event.Event;
50 import javafx.event.EventHandler;
51 import javafx.event.EventTarget;
52 import javafx.event.EventType;
53 import javafx.geometry.Bounds;
54 import javafx.geometry.Point2D;
55 import javafx.geometry.Point3D;
56
57 // PENDING_DOC_REVIEW of this whole class
58 /**
59 * This class is a base class for different affine transformations.
60 * It provides factory methods for the simple transformations - rotating,
2052
2053 void add(final Node node) {
2054 nodes.add(node);
2055 }
2056
2057 void remove(final Node node) {
2058 nodes.remove(node);
2059 }
2060
2061 /**
2062 * This method must be called by all transforms whenever any of their
2063 * parameters changes. It is typically called when any of the transform's
2064 * properties is invalidated (it is OK to skip the call if an invalid
2065 * property is set).
2066 * @since JavaFX 8.0
2067 */
2068 protected void transformChanged() {
2069 inverseCache = null;
2070 final Iterator iterator = nodes.iterator();
2071 while (iterator.hasNext()) {
2072 NodeHelper.transformsChanged(((Node) iterator.next()));
2073 }
2074
2075 if (type2D != null) {
2076 type2D.invalidate();
2077 }
2078
2079 if (identity != null) {
2080 identity.invalidate();
2081 }
2082
2083 if (internalEventDispatcher != null) {
2084 // need to validate all properties for the event to be fired next time
2085 validate();
2086 Event.fireEvent(this, new TransformChangedEvent(this, this));
2087 }
2088 }
2089
2090 /**
2091 * Visitor from {@code Affine} class which provides an efficient
2092 * {@code append} operation for the subclasses.
|