< prev index next >

modules/graphics/src/main/java/javafx/scene/shape/Shape3D.java

Print this page




  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  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.shape;
  27 
  28 import com.sun.javafx.geom.BaseBounds;
  29 import com.sun.javafx.geom.BoxBounds;
  30 import com.sun.javafx.geom.transform.BaseTransform;
  31 import com.sun.javafx.jmx.MXNodeAlgorithm;
  32 import com.sun.javafx.jmx.MXNodeAlgorithmContext;
  33 import com.sun.javafx.scene.DirtyBits;

  34 import com.sun.javafx.sg.prism.NGShape3D;
  35 import javafx.application.ConditionalFeature;
  36 import javafx.application.Platform;
  37 import javafx.beans.property.ObjectProperty;
  38 import javafx.beans.property.SimpleObjectProperty;
  39 import javafx.beans.value.ChangeListener;
  40 import javafx.beans.value.ObservableValue;
  41 import javafx.beans.value.WeakChangeListener;
  42 import javafx.scene.Node;
  43 import javafx.scene.paint.Material;
  44 import javafx.scene.paint.PhongMaterial;
  45 import sun.util.logging.PlatformLogger;
  46 
  47 
  48 /**
  49  * The {@code Shape3D} base class provides definitions of common properties for
  50  * objects that represent some form of 3D geometric shape.  These properties
  51  * include:
  52  * <ul>
  53  * <li>The {@link Material} to be applied to the fillable interior of the


  98         return material == null ? null : material.get();
  99     }
 100 
 101     public final ObjectProperty<Material> materialProperty() {
 102         if (material == null) {
 103             material = new SimpleObjectProperty<Material>(Shape3D.this,
 104                     "material") {
 105 
 106                 private Material old = null;
 107                 private final ChangeListener<Boolean> materialChangeListener =
 108                         (observable, oldValue, newValue) -> {
 109                             if (newValue) {
 110                                 impl_markDirty(DirtyBits.MATERIAL);
 111                             }
 112                         };
 113                 private final WeakChangeListener<Boolean> weakMaterialChangeListener =
 114                         new WeakChangeListener(materialChangeListener);
 115 
 116                 @Override protected void invalidated() {
 117                     if (old != null) {
 118                         old.impl_dirtyProperty().removeListener(weakMaterialChangeListener);
 119                     }
 120                     Material newMaterial = get();
 121                     if (newMaterial != null) {
 122                         newMaterial.impl_dirtyProperty().addListener(weakMaterialChangeListener);
 123                     }
 124                     impl_markDirty(DirtyBits.MATERIAL);
 125                     impl_geomChanged();
 126                     old = newMaterial;
 127                 }
 128             };
 129         }
 130         return material;
 131     }
 132 
 133     /**
 134      * Defines the draw mode used to render this {@code Shape3D}.
 135      * {@link DrawMode.LINE} is not available on embedded platforms.
 136      * If {@code drawMode} is set to {@link DrawMode.LINE} on an embedded
 137      * platform the default value of {@link DrawMode.FILL} will be used instead.
 138      *
 139      * @defaultValue DrawMode.FILL
 140      */
 141     private ObjectProperty<DrawMode> drawMode;
 142 


 206      * @treatAsPrivate implementation detail
 207      * @deprecated This is an internal API that is not intended for use and will be removed in the next version
 208      */
 209     @Deprecated
 210     @Override
 211     protected boolean impl_computeContains(double localX, double localY) {
 212         return false;
 213     }
 214 
 215     /**
 216      * @treatAsPrivate implementation detail
 217      * @deprecated This is an internal API that is not intended for use and will be removed in the next version
 218      */
 219     @Deprecated
 220     @Override
 221     public void impl_updatePeer() {
 222         super.impl_updatePeer();
 223         final NGShape3D peer = impl_getPeer();
 224         if (impl_isDirty(DirtyBits.MATERIAL)) {
 225             Material mat = getMaterial() == null ? DEFAULT_MATERIAL : getMaterial();
 226             mat.impl_updatePG(); // new material should be updated
 227             peer.setMaterial(mat.impl_getNGMaterial());
 228         }
 229         if (impl_isDirty(DirtyBits.NODE_DRAWMODE)) {
 230             peer.setDrawMode(getDrawMode() == null ? DrawMode.FILL : getDrawMode());
 231         }
 232         if (impl_isDirty(DirtyBits.NODE_CULLFACE)) {
 233             peer.setCullFace(getCullFace() == null ? CullFace.BACK : getCullFace());
 234         }
 235     }
 236 
 237     /**
 238      * @treatAsPrivate implementation detail
 239      * @deprecated This is an internal API that is not intended for use and will be removed in the next version
 240      */
 241     @Deprecated
 242     @Override
 243     public Object impl_processMXNode(MXNodeAlgorithm alg, MXNodeAlgorithmContext ctx) {
 244         throw new UnsupportedOperationException("Not supported yet.");
 245     }
 246 
 247 }


  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  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.shape;
  27 
  28 import com.sun.javafx.geom.BaseBounds;
  29 import com.sun.javafx.geom.BoxBounds;
  30 import com.sun.javafx.geom.transform.BaseTransform;
  31 import com.sun.javafx.jmx.MXNodeAlgorithm;
  32 import com.sun.javafx.jmx.MXNodeAlgorithmContext;
  33 import com.sun.javafx.scene.DirtyBits;
  34 import com.sun.javafx.scene.paint.MaterialHelper;
  35 import com.sun.javafx.sg.prism.NGShape3D;
  36 import javafx.application.ConditionalFeature;
  37 import javafx.application.Platform;
  38 import javafx.beans.property.ObjectProperty;
  39 import javafx.beans.property.SimpleObjectProperty;
  40 import javafx.beans.value.ChangeListener;
  41 import javafx.beans.value.ObservableValue;
  42 import javafx.beans.value.WeakChangeListener;
  43 import javafx.scene.Node;
  44 import javafx.scene.paint.Material;
  45 import javafx.scene.paint.PhongMaterial;
  46 import sun.util.logging.PlatformLogger;
  47 
  48 
  49 /**
  50  * The {@code Shape3D} base class provides definitions of common properties for
  51  * objects that represent some form of 3D geometric shape.  These properties
  52  * include:
  53  * <ul>
  54  * <li>The {@link Material} to be applied to the fillable interior of the


  99         return material == null ? null : material.get();
 100     }
 101 
 102     public final ObjectProperty<Material> materialProperty() {
 103         if (material == null) {
 104             material = new SimpleObjectProperty<Material>(Shape3D.this,
 105                     "material") {
 106 
 107                 private Material old = null;
 108                 private final ChangeListener<Boolean> materialChangeListener =
 109                         (observable, oldValue, newValue) -> {
 110                             if (newValue) {
 111                                 impl_markDirty(DirtyBits.MATERIAL);
 112                             }
 113                         };
 114                 private final WeakChangeListener<Boolean> weakMaterialChangeListener =
 115                         new WeakChangeListener(materialChangeListener);
 116 
 117                 @Override protected void invalidated() {
 118                     if (old != null) {
 119                         MaterialHelper.dirtyProperty(old).removeListener(weakMaterialChangeListener);
 120                     }
 121                     Material newMaterial = get();
 122                     if (newMaterial != null) {
 123                         MaterialHelper.dirtyProperty(newMaterial).addListener(weakMaterialChangeListener);
 124                     }
 125                     impl_markDirty(DirtyBits.MATERIAL);
 126                     impl_geomChanged();
 127                     old = newMaterial;
 128                 }
 129             };
 130         }
 131         return material;
 132     }
 133 
 134     /**
 135      * Defines the draw mode used to render this {@code Shape3D}.
 136      * {@link DrawMode.LINE} is not available on embedded platforms.
 137      * If {@code drawMode} is set to {@link DrawMode.LINE} on an embedded
 138      * platform the default value of {@link DrawMode.FILL} will be used instead.
 139      *
 140      * @defaultValue DrawMode.FILL
 141      */
 142     private ObjectProperty<DrawMode> drawMode;
 143 


 207      * @treatAsPrivate implementation detail
 208      * @deprecated This is an internal API that is not intended for use and will be removed in the next version
 209      */
 210     @Deprecated
 211     @Override
 212     protected boolean impl_computeContains(double localX, double localY) {
 213         return false;
 214     }
 215 
 216     /**
 217      * @treatAsPrivate implementation detail
 218      * @deprecated This is an internal API that is not intended for use and will be removed in the next version
 219      */
 220     @Deprecated
 221     @Override
 222     public void impl_updatePeer() {
 223         super.impl_updatePeer();
 224         final NGShape3D peer = impl_getPeer();
 225         if (impl_isDirty(DirtyBits.MATERIAL)) {
 226             Material mat = getMaterial() == null ? DEFAULT_MATERIAL : getMaterial();
 227             MaterialHelper.updatePG(mat); // new material should be updated
 228             peer.setMaterial(MaterialHelper.getNGMaterial(mat));
 229         }
 230         if (impl_isDirty(DirtyBits.NODE_DRAWMODE)) {
 231             peer.setDrawMode(getDrawMode() == null ? DrawMode.FILL : getDrawMode());
 232         }
 233         if (impl_isDirty(DirtyBits.NODE_CULLFACE)) {
 234             peer.setCullFace(getCullFace() == null ? CullFace.BACK : getCullFace());
 235         }
 236     }
 237 
 238     /**
 239      * @treatAsPrivate implementation detail
 240      * @deprecated This is an internal API that is not intended for use and will be removed in the next version
 241      */
 242     @Deprecated
 243     @Override
 244     public Object impl_processMXNode(MXNodeAlgorithm alg, MXNodeAlgorithmContext ctx) {
 245         throw new UnsupportedOperationException("Not supported yet.");
 246     }
 247 
 248 }
< prev index next >