diff --git a/modules/javafx.graphics/src/main/java/javafx/scene/image/ImageView.java b/modules/javafx.graphics/src/main/java/javafx/scene/image/ImageView.java index 6d5f4b3221..01fe8e362b 100644 --- a/modules/javafx.graphics/src/main/java/javafx/scene/image/ImageView.java +++ b/modules/javafx.graphics/src/main/java/javafx/scene/image/ImageView.java @@ -27,6 +27,11 @@ import com.sun.javafx.beans.event.AbstractNotifyListener; import com.sun.javafx.css.StyleManager; +import javafx.css.ParsedValue; +import javafx.css.StyleableBooleanProperty; +import javafx.css.StyleableDoubleProperty; +import javafx.css.converter.BooleanConverter; +import javafx.css.converter.SizeConverter; import javafx.css.converter.URLConverter; import com.sun.javafx.geom.BaseBounds; import com.sun.javafx.geom.transform.BaseTransform; @@ -47,6 +52,8 @@ import javafx.geometry.Rectangle2D; import javafx.scene.AccessibleRole; import javafx.scene.Node; +import javafx.scene.text.Font; + import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -421,7 +428,7 @@ public final double getFitWidth() { public final DoubleProperty fitWidthProperty() { if (fitWidth == null) { - fitWidth = new DoublePropertyBase() { + fitWidth = new StyleableDoubleProperty() { @Override protected void invalidated() { @@ -430,6 +437,11 @@ protected void invalidated() { NodeHelper.geomChanged(ImageView.this); } + @Override + public CssMetaData getCssMetaData() { + return StyleableProperties.FIT_WIDTH; + } + @Override public Object getBean() { return ImageView.this; @@ -469,7 +481,7 @@ public final double getFitHeight() { public final DoubleProperty fitHeightProperty() { if (fitHeight == null) { - fitHeight = new DoublePropertyBase() { + fitHeight = new StyleableDoubleProperty() { @Override protected void invalidated() { @@ -478,6 +490,11 @@ protected void invalidated() { NodeHelper.geomChanged(ImageView.this); } + @Override + public CssMetaData getCssMetaData() { + return StyleableProperties.FIT_HEIGHT; + } + @Override public Object getBean() { return ImageView.this; @@ -534,7 +551,7 @@ public final boolean isPreserveRatio() { public final BooleanProperty preserveRatioProperty() { if (preserveRatio == null) { - preserveRatio = new BooleanPropertyBase() { + preserveRatio = new StyleableBooleanProperty() { @Override protected void invalidated() { @@ -543,6 +560,11 @@ protected void invalidated() { NodeHelper.geomChanged(ImageView.this); } + @Override + public CssMetaData getCssMetaData() { + return StyleableProperties.PRESERVE_RATIO; + } + @Override public Object getBean() { return ImageView.this; @@ -586,13 +608,18 @@ public final boolean isSmooth() { public final BooleanProperty smoothProperty() { if (smooth == null) { - smooth = new BooleanPropertyBase(SMOOTH_DEFAULT) { + smooth = new StyleableBooleanProperty(SMOOTH_DEFAULT) { @Override protected void invalidated() { NodeHelper.markDirty(ImageView.this, DirtyBits.NODE_SMOOTH); } + @Override + public CssMetaData getCssMetaData() { + return StyleableProperties.SMOOTH; + } + @Override public Object getBean() { return ImageView.this; @@ -826,13 +853,77 @@ public StyleableProperty getStyleableProperty(ImageView n) { } }; - private static final List> STYLEABLES; - static { + private static final CssMetaData FIT_WIDTH = + new CssMetaData("-fx-fit-width", + SizeConverter.getInstance(), 0.0) { + + @Override + public boolean isSettable(ImageView n) { + return n.fitWidth == null || !n.fitWidth.isBound(); + } + + @Override + public StyleableProperty getStyleableProperty(ImageView n) { + return (StyleableProperty)n.fitWidthProperty(); + } + }; + + private static final CssMetaData FIT_HEIGHT = + new CssMetaData("-fx-fit-height", + SizeConverter.getInstance(), 0.0) { + + @Override + public boolean isSettable(ImageView n) { + return n.fitHeight == null || !n.fitHeight.isBound(); + } + + @Override + public StyleableProperty getStyleableProperty(ImageView n) { + return (StyleableProperty)n.fitHeightProperty(); + } + }; + + private static final CssMetaData SMOOTH = + new CssMetaData("-fx-smooth", + BooleanConverter.getInstance(), SMOOTH_DEFAULT) { + + @Override + public boolean isSettable(ImageView n) { + return n.smooth == null || !n.smooth.isBound(); + } + + @Override + public StyleableProperty getStyleableProperty(ImageView n) { + return (StyleableProperty)n.smoothProperty(); + } + }; + + private static final CssMetaData PRESERVE_RATIO = + new CssMetaData("-fx-preserve-ratio", + BooleanConverter.getInstance(), Boolean.FALSE) { + + @Override + public boolean isSettable(ImageView n) { + return n.preserveRatio == null || !n.preserveRatio.isBound(); + } + + @Override + public StyleableProperty getStyleableProperty(ImageView n) { + return (StyleableProperty)n.preserveRatioProperty(); + } + }; + + private static final List> STYLEABLES; + static { final List> styleables = new ArrayList>(Node.getClassCssMetaData()); styleables.add(IMAGE); + styleables.add(FIT_WIDTH); + styleables.add(FIT_HEIGHT); + styleables.add(SMOOTH); + styleables.add(PRESERVE_RATIO); STYLEABLES = Collections.unmodifiableList(styleables); - } + } } /** diff --git a/modules/javafx.graphics/src/test/java/test/javafx/scene/image/ImageView_cssMethods_Test.java b/modules/javafx.graphics/src/test/java/test/javafx/scene/image/ImageView_cssMethods_Test.java index 7c3b4dde10..cc0eb66395 100644 --- a/modules/javafx.graphics/src/test/java/test/javafx/scene/image/ImageView_cssMethods_Test.java +++ b/modules/javafx.graphics/src/test/java/test/javafx/scene/image/ImageView_cssMethods_Test.java @@ -47,6 +47,7 @@ public final class ImageView_cssMethods_Test extends CssMethodsTestBase { private static final ImageView TEST_IMAGE_VIEW = new ImageView(); private static final String TEST_IMAGE_URL1 = "file:test_image_1.png"; private static final String TEST_IMAGE_URL2 = "file:test_image_2.png"; + public static final boolean SMOOTH_DEFAULT = Toolkit.getToolkit().getDefaultImageSmooth(); private static final ValueComparator IMAGE_COMPARATOR = new ValueComparator() { @@ -81,7 +82,15 @@ public static Collection data() { TestImages.TEST_IMAGE_32x32, "-fx-image", TEST_IMAGE_URL2, IMAGE_COMPARATOR), config(TEST_IMAGE_VIEW, "translateX", 0.0, - "-fx-translate-x", 10.0) + "-fx-translate-x", 10.0), + config(TEST_IMAGE_VIEW, "fitWidth", 0, + "-fx-fit-width", 1.0), + config(TEST_IMAGE_VIEW, "fitHeight", 0, + "-fx-fit-height", 1.0), + config(TEST_IMAGE_VIEW, "smooth", SMOOTH_DEFAULT, + "-fx-smooth", !SMOOTH_DEFAULT), + config(TEST_IMAGE_VIEW, "preserveRatio", false, + "-fx-preserve-ratio", true) }); }