diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/CssProperties.java b/richtextfx/src/main/java/org/fxmisc/richtext/CssProperties.java deleted file mode 100644 index 6121c9be9..000000000 --- a/richtextfx/src/main/java/org/fxmisc/richtext/CssProperties.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.fxmisc.richtext; - -import javafx.beans.property.SimpleBooleanProperty; -import javafx.css.CssMetaData; -import javafx.css.PseudoClass; -import javafx.css.Styleable; -import javafx.css.StyleableObjectProperty; -import javafx.scene.layout.Region; -import javafx.scene.paint.Color; -import javafx.scene.paint.Paint; -import javafx.util.Duration; - -import java.util.function.Supplier; - - -/** - * CSS stuff related to {@link GenericStyledArea}. - */ -class CssProperties { - - static final PseudoClass PSEUDO_CLASS_READONLY - = PseudoClass.getPseudoClass("readonly"); - - static class EditableProperty extends SimpleBooleanProperty { - public EditableProperty(R region) { - super(region, "editable", true); - } - - @Override protected void invalidated() { - ((Region) getBean()).pseudoClassStateChanged(PSEUDO_CLASS_READONLY, !get()); - } - } - - private static class CustomStyleablePropertyBase extends StyleableObjectProperty { - - private final GenericStyledArea area; - private final String name; - private final CssMetaData cssMetaData; - - public CustomStyleablePropertyBase(T initialValue, - String name, - GenericStyledArea area, - CssMetaData cssMetaData) { - super(initialValue); - this.area = area; - this.name = name; - this.cssMetaData = cssMetaData; - } - - @Override - public Object getBean() { - return area; - } - - @Override - public String getName() { - return name; - } - - @Override - public CssMetaData getCssMetaData() { - return cssMetaData; - } - - } - - static class HighlightFillProperty extends CustomStyleablePropertyBase { - - public HighlightFillProperty(GenericStyledArea area, - CssMetaData cssMetaDataSupplier) { - super(Color.DODGERBLUE, "highlightFill", area, cssMetaDataSupplier); - } - - } - - static class HighlightTextFillProperty extends CustomStyleablePropertyBase { - - public HighlightTextFillProperty(GenericStyledArea area, - CssMetaData cssMetaData) { - super(Color.WHITE, "highlightTextFill", area, cssMetaData); - } - - } - - static class CaretBlinkRateProperty extends CustomStyleablePropertyBase { - - public CaretBlinkRateProperty(GenericStyledArea area, - CssMetaData cssMetaData) { - super(Duration.millis(500), "caretBlinkRate", area, cssMetaData); - } - - } -} diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/CustomStyleableProperty.java b/richtextfx/src/main/java/org/fxmisc/richtext/CustomStyleableProperty.java new file mode 100644 index 000000000..e63e5a637 --- /dev/null +++ b/richtextfx/src/main/java/org/fxmisc/richtext/CustomStyleableProperty.java @@ -0,0 +1,36 @@ +package org.fxmisc.richtext; + +import javafx.css.CssMetaData; +import javafx.css.Styleable; +import javafx.css.StyleableObjectProperty; + +public class CustomStyleableProperty extends StyleableObjectProperty { + + private final Object bean; + private final String name; + private final CssMetaData cssMetaData; + + public CustomStyleableProperty(T initialValue, String name, Object bean, + CssMetaData cssMetaData) { + super(initialValue); + this.bean = bean; + this.name = name; + this.cssMetaData = cssMetaData; + } + + @Override + public Object getBean() { + return bean; + } + + @Override + public String getName() { + return name; + } + + @Override + public CssMetaData getCssMetaData() { + return cssMetaData; + } + +} \ No newline at end of file diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/GenericStyledArea.java b/richtextfx/src/main/java/org/fxmisc/richtext/GenericStyledArea.java index 2d2009d14..c7692f7ee 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/GenericStyledArea.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/GenericStyledArea.java @@ -259,6 +259,7 @@ private static int clamp(int min, int val, int max) { : val; } + private static final PseudoClass READ_ONLY = PseudoClass.getPseudoClass("read-only"); private static final PseudoClass HAS_CARET = PseudoClass.getPseudoClass("has-caret"); private static final PseudoClass FIRST_PAR = PseudoClass.getPseudoClass("first-paragraph"); private static final PseudoClass LAST_PAR = PseudoClass.getPseudoClass("last-paragraph"); @@ -279,23 +280,28 @@ private static int clamp(int min, int val, int max) { * Background fill for highlighted text. */ private final StyleableObjectProperty highlightFill - = new CssProperties.HighlightFillProperty(this, HIGHLIGHT_FILL); + = new CustomStyleableProperty<>(Color.DODGERBLUE, "highlightFill", this, HIGHLIGHT_FILL); /** * Text color for highlighted text. */ private final StyleableObjectProperty highlightTextFill - = new CssProperties.HighlightTextFillProperty(this, HIGHLIGHT_TEXT_FILL); + = new CustomStyleableProperty<>(Color.WHITE, "highlightTextFill", this, HIGHLIGHT_TEXT_FILL); /** * Controls the blink rate of the caret, when one is displayed. Setting * the duration to zero disables blinking. */ private final StyleableObjectProperty caretBlinkRate - = new CssProperties.CaretBlinkRateProperty(this, CARET_BLINK_RATE); + = new CustomStyleableProperty<>(javafx.util.Duration.millis(500), "caretBlinkRate", this, CARET_BLINK_RATE); // editable property - private final BooleanProperty editable = new CssProperties.EditableProperty<>(this); + private final BooleanProperty editable = new SimpleBooleanProperty(this, "editable", true) { + @Override + protected void invalidated() { + ((Region) getBean()).pseudoClassStateChanged(READ_ONLY, !get()); + } + }; @Override public final boolean isEditable() { return editable.get(); } @Override public final void setEditable(boolean value) { editable.set(value); } @Override public final BooleanProperty editableProperty() { return editable; } diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/TextExt.java b/richtextfx/src/main/java/org/fxmisc/richtext/TextExt.java index c8904cadc..921e8e0bb 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/TextExt.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/TextExt.java @@ -46,92 +46,26 @@ public class TextExt extends Text { CSS_META_DATA_LIST = Collections.unmodifiableList(styleables); } - - private final StyleableObjectProperty backgroundColor = new StyleableObjectProperty(null) { - @Override - public Object getBean() { - return TextExt.this; - } - - @Override - public String getName() { - return "backgroundColor"; - } - - @Override - public CssMetaData getCssMetaData() { - return StyleableProperties.BACKGROUND_COLOR; - } - }; - - private final StyleableObjectProperty underlineColor = new StyleableObjectProperty(null) { - @Override - public Object getBean() { - return TextExt.this; - } - - @Override - public String getName() { - return "underlineColor"; - } - - @Override - public CssMetaData getCssMetaData() { - return StyleableProperties.UNDERLINE_COLOR; - } - }; - - private final StyleableObjectProperty underlineWidth = new StyleableObjectProperty(null) { - @Override - public Object getBean() { - return TextExt.this; - } - - @Override - public String getName() { - return "underlineWidth"; - } - - @Override - public CssMetaData getCssMetaData() { - return StyleableProperties.UNDERLINE_WIDTH; - } - }; - - private final StyleableObjectProperty underlineDashArray = new StyleableObjectProperty(null) { - @Override - public Object getBean() { - return TextExt.this; - } - - @Override - public String getName() { - return "underlineDashArray"; - } - - @Override - public CssMetaData getCssMetaData() { - return StyleableProperties.UNDERLINE_DASH_ARRAY; - } - }; - - - private final StyleableObjectProperty underlineCap = new StyleableObjectProperty(null) { - @Override - public Object getBean() { - return TextExt.this; - } - - @Override - public String getName() { - return "underlineCap"; - } - - @Override - public CssMetaData getCssMetaData() { - return StyleableProperties.UNDERLINE_CAP; - } - }; + + private final StyleableObjectProperty backgroundColor = new CustomStyleableProperty<>( + null, "backgroundColor", this, StyleableProperties.BACKGROUND_COLOR + ); + + private final StyleableObjectProperty underlineColor = new CustomStyleableProperty<>( + null, "underlineColor", this, StyleableProperties.UNDERLINE_COLOR + ); + + private final StyleableObjectProperty underlineWidth = new CustomStyleableProperty<>( + null, "underlineWidth", this, StyleableProperties.UNDERLINE_WIDTH + ); + + private final StyleableObjectProperty underlineDashArray = new CustomStyleableProperty<>( + null, "underlineDashArray", this, StyleableProperties.UNDERLINE_DASH_ARRAY + ); + + private final StyleableObjectProperty underlineCap = new CustomStyleableProperty<>( + null, "underlineCap", this, StyleableProperties.UNDERLINE_CAP + ); public TextExt(String text) { super(text);