From c6c727a8a24f74ae0d7db98caea57c308b2cf6ab Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Mon, 31 Jul 2017 14:36:25 -0700 Subject: [PATCH 1/4] Change bean type to Object --- .../main/java/org/fxmisc/richtext/CssProperties.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/CssProperties.java b/richtextfx/src/main/java/org/fxmisc/richtext/CssProperties.java index 6121c9be9..1ea58c2f3 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/CssProperties.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/CssProperties.java @@ -10,8 +10,6 @@ import javafx.scene.paint.Paint; import javafx.util.Duration; -import java.util.function.Supplier; - /** * CSS stuff related to {@link GenericStyledArea}. @@ -33,23 +31,23 @@ public EditableProperty(R region) { private static class CustomStyleablePropertyBase extends StyleableObjectProperty { - private final GenericStyledArea area; + private final Object bean; private final String name; private final CssMetaData cssMetaData; public CustomStyleablePropertyBase(T initialValue, String name, - GenericStyledArea area, + Object bean, CssMetaData cssMetaData) { super(initialValue); - this.area = area; + this.bean = bean; this.name = name; this.cssMetaData = cssMetaData; } @Override public Object getBean() { - return area; + return bean; } @Override From 329e3c20cf33e05f6272460d2ae10881de91eaab Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Mon, 31 Jul 2017 14:50:39 -0700 Subject: [PATCH 2/4] Extract CustomStyleableProperty to own class; remove subclasses --- .../org/fxmisc/richtext/CssProperties.java | 59 ------------------- .../richtext/CustomStyleableProperty.java | 36 +++++++++++ .../fxmisc/richtext/GenericStyledArea.java | 6 +- 3 files changed, 39 insertions(+), 62 deletions(-) create mode 100644 richtextfx/src/main/java/org/fxmisc/richtext/CustomStyleableProperty.java diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/CssProperties.java b/richtextfx/src/main/java/org/fxmisc/richtext/CssProperties.java index 1ea58c2f3..c91d6c3ab 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/CssProperties.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/CssProperties.java @@ -29,63 +29,4 @@ public EditableProperty(R region) { } } - private static class CustomStyleablePropertyBase extends StyleableObjectProperty { - - private final Object bean; - private final String name; - private final CssMetaData cssMetaData; - - public CustomStyleablePropertyBase(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; - } - - } - - 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..ccb4a0c88 100644 --- a/richtextfx/src/main/java/org/fxmisc/richtext/GenericStyledArea.java +++ b/richtextfx/src/main/java/org/fxmisc/richtext/GenericStyledArea.java @@ -279,20 +279,20 @@ 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); From 72c3a72cf49a291ab1e8c0d67a56711697dd4ed6 Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Mon, 31 Jul 2017 14:53:14 -0700 Subject: [PATCH 3/4] Implement EditableProperty in-line; remove CssProperties Note: the pseudo class was changed from "readonly" to "read-only" --- .../org/fxmisc/richtext/CssProperties.java | 32 ------------------- .../fxmisc/richtext/GenericStyledArea.java | 8 ++++- 2 files changed, 7 insertions(+), 33 deletions(-) delete mode 100644 richtextfx/src/main/java/org/fxmisc/richtext/CssProperties.java 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 c91d6c3ab..000000000 --- a/richtextfx/src/main/java/org/fxmisc/richtext/CssProperties.java +++ /dev/null @@ -1,32 +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; - - -/** - * 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()); - } - } - -} diff --git a/richtextfx/src/main/java/org/fxmisc/richtext/GenericStyledArea.java b/richtextfx/src/main/java/org/fxmisc/richtext/GenericStyledArea.java index ccb4a0c88..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"); @@ -295,7 +296,12 @@ private static int clamp(int min, int val, int max) { = 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; } From 76b579274e456eeaec52db4c52da74dd42e75d8b Mon Sep 17 00:00:00 2001 From: Jordan Martinez Date: Mon, 31 Jul 2017 14:58:23 -0700 Subject: [PATCH 4/4] Reduce boilerplate by using CustomStyleableProperty --- .../java/org/fxmisc/richtext/TextExt.java | 106 ++++-------------- 1 file changed, 20 insertions(+), 86 deletions(-) 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);