All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.fxmisc.richtext.TextExt Maven / Gradle / Ivy

The newest version!
package org.fxmisc.richtext;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javafx.beans.property.ObjectProperty;
import javafx.css.converter.SizeConverter;
import javafx.css.CssMetaData;
import javafx.css.StyleConverter;
import javafx.css.Styleable;
import javafx.css.StyleableObjectProperty;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import javafx.scene.shape.StrokeLineCap;
import javafx.scene.shape.StrokeType;
import javafx.scene.text.Text;

/**
 * A class which adds some more RichTextFX-specific styleable properties to JavaFX's {@link Text} class.
 *
 * The extra items can be styled using the properties (and accessors/mutators) or via CSS.
 * Each property is documented with its CSS property. Each CSS property begins with the "-rtfx"
 * prefix.
 *
 * 

Note that the underline properties specified here are orthogonal to the {@link #underlineProperty()} inherited * from {@link Text}. The underline properties defined here in {@link TextExt} will cause an underline to be * drawn if {@link #underlineWidthProperty()} is non-null and greater than zero, regardless of * the value of {@link #underlineProperty()}.

*/ public class TextExt extends Text { private static final List> CSS_META_DATA_LIST; static { // Get list value and make it modifiable List> styleables = new ArrayList<>(Text.getClassCssMetaData()); // Add new properties styleables.add(StyleableProperties.BACKGROUND_COLOR); styleables.add(StyleableProperties.BORDER_COLOR); styleables.add(StyleableProperties.BORDER_WIDTH); styleables.add(StyleableProperties.BORDER_TYPE); styleables.add(StyleableProperties.BORDER_DASH_ARRAY); styleables.add(StyleableProperties.UNDERLINE_COLOR); styleables.add(StyleableProperties.UNDERLINE_WIDTH); styleables.add(StyleableProperties.UNDERLINE_OFFSET); styleables.add(StyleableProperties.UNDERLINE_WAVE_RADIUS); styleables.add(StyleableProperties.UNDERLINE_DASH_ARRAY); styleables.add(StyleableProperties.UNDERLINE_CAP); CSS_META_DATA_LIST = Collections.unmodifiableList(styleables); } private final StyleableObjectProperty backgroundColor = new CustomStyleableProperty<>( null, "backgroundColor", this, StyleableProperties.BACKGROUND_COLOR ); private final StyleableObjectProperty borderStrokeColor = new CustomStyleableProperty<>( null, "borderStrokeColor", this, StyleableProperties.BORDER_COLOR ); private final StyleableObjectProperty borderStrokeWidth = new CustomStyleableProperty<>( null, "borderStrokeWidth", this, StyleableProperties.BORDER_WIDTH ); private final StyleableObjectProperty borderStrokeType = new CustomStyleableProperty<>( null, "borderStrokeType", this, StyleableProperties.BORDER_TYPE ); private final StyleableObjectProperty borderStrokeDashArray = new CustomStyleableProperty<>( null, "borderStrokeDashArray", this, StyleableProperties.BORDER_DASH_ARRAY ); 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 underlineOffset = new CustomStyleableProperty<>( null, "underlineOffset", this, StyleableProperties.UNDERLINE_OFFSET ); private final StyleableObjectProperty underlineWaveRadius = new CustomStyleableProperty<>( null, "underlineWaveRadius", this, StyleableProperties.UNDERLINE_WAVE_RADIUS ); 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); } public TextExt() { super(); } @Override public List> getCssMetaData() { return CSS_META_DATA_LIST; } public Paint getBackgroundColor() { return backgroundColor.get(); } public void setBackgroundColor(Paint fill) { backgroundColor.set(fill); } /** * The background color of the section of text. By default, JavaFX doesn't * support a background for Text (as it is a Shape item), but RichTextFX * does support drawing a different background for different sections of text. * *

Note that this is actually a Paint type, so you can specify gradient or image fills * rather than a flat colour. But due to line wrapping, it's possible that * the fill may be used multiple times on separate lines even for the same * segment of text.

* * Can be styled from CSS using the "-rtfx-background-color" property. */ public ObjectProperty backgroundColorProperty() { return backgroundColor; } public Paint getBorderStrokeColor() { return borderStrokeColor.get(); } public void setBorderStrokeColor(Paint fill) { borderStrokeColor.set(fill); } /** * The border stroke color of the section of text. By default, JavaFX doesn't * support a border for Text (as it is a Shape item), but RichTextFX * does support drawing a different background for different sections of text. The border * will only be drawn if this has a non-null value and {@link #borderStrokeWidthProperty()} * a positive value * *

Note that this is actually a Paint type, so you can specify gradient or image fills * rather than a flat colour. But due to line wrapping, it's possible that * the fill may be used multiple times on separate lines even for the same * segment of text.

* * Can be styled from CSS using the "-rtfx-border-stroke-color" property. */ public ObjectProperty borderStrokeColorProperty() { return borderStrokeColor; } // Width of the text underline public Number getBorderStrokeWidth() { return borderStrokeWidth.get(); } public void setBorderStrokeWidth(Number width) { borderStrokeWidth.set(width); } /** * The width of the border stroke. The border stroke will only be drawn * if borderStrokeColorProperty() (which determines the color) has a non-null value. * See {@link #borderStrokeColorProperty()} for more details. * * Can be styled from CSS using the "-rtfx-border-stroke-width" property. */ public ObjectProperty borderStrokeWidthProperty() { return borderStrokeWidth; } public StrokeType getBorderStrokeType() { return borderStrokeType.get(); } public void setBorderStrokeType(StrokeType type) { borderStrokeType.set(type); } /** * The stroke type of the border stroke. The border stroke will only be drawn * if borderStrokeColorProperty() (which determines the color) has a non-null value. * See {@link #borderStrokeColorProperty()} for more details. * * Can be styled from CSS using the "-rtfx-border-stroke-type" property. */ public ObjectProperty borderStrokeTypeProperty() { return borderStrokeType; } public Number[] getBorderStrokeDashArray() { return borderStrokeDashArray.get(); } public void setBorderStrokeDashArray(Number[] array) { borderStrokeDashArray.set(array); } /** * The dash array used for drawing the border for a section of text. The border stroke will only be drawn * if borderStrokeColorProperty() (which determines the color) has a non-null value. * See {@link #borderStrokeColorProperty()} for more details. * * Can be styled from CSS using the "-rtfx-border-stroke-dash-array" property. */ public ObjectProperty borderStrokeDashArrayProperty() { return borderStrokeDashArray; } // Color of the text underline (-fx-underline is already defined by JavaFX) public Paint getUnderlineColor() { return underlineColor.get(); } public void setUnderlineColor(Paint fill) { underlineColor.set(fill); } /** * The underline color of the section of text. * *

Note that this is actually a Paint type, so you can specify gradient or image fills * rather than a flat colour. But due to line wrapping, it's possible that * the fill may be used multiple times on separate lines even for the * same segment of text.

* * Can be styled from CSS using the "-rtfx-underline-color" property * (not to be confused with JavaFX's separate "-fx-underline" property). * *

Note that the underline properties specified here are orthogonal to the {@link #underlineProperty()} inherited * from {@link Text}. The underline properties defined here in {@link TextExt} will cause an underline to be * drawn if {@link #underlineWidthProperty()} is non-null and greater than zero, regardless of * the value of {@link #underlineProperty()}.

*/ public ObjectProperty underlineColorProperty() { return underlineColor; } // Width of the text underline public Number getUnderlineWidth() { return underlineWidth.get(); } public void setUnderlineWidth(Number width) { underlineWidth.set(width); } /** * The width of the underline for a section of text. If null or zero, * the underline will not be drawn. * * Can be styled from CSS using the "-rtfx-underline-width" property. * *

Note that the underline properties specified here are orthogonal to the {@link #underlineProperty()} inherited * from {@link Text}. The underline properties defined here in {@link TextExt} will cause an underline to be * drawn if {@link #underlineWidthProperty()} is non-null and greater than zero, regardless of * the value of {@link #underlineProperty()}.

*/ public ObjectProperty underlineWidthProperty() { return underlineWidth; } public Number getUnderlineOffset() { return underlineOffset.get(); } public void setUnderlineOffset(Number width) { underlineOffset.set(width); } /** * The offset of the underline for a section of text. If null or zero, * the underline will be drawn along the baseline of the text. * * Can be styled from CSS using the "-rtfx-underline-offset" property. * *

Note that the underline properties specified here are orthogonal to the {@link #underlineProperty()} inherited * from {@link Text}. The underline properties defined here in {@link TextExt} will cause an underline to be * drawn if {@link #underlineWidthProperty()} is non-null and greater than zero, regardless of * the value of {@link #underlineProperty()}.

*/ public ObjectProperty underlineOffsetProperty() { return underlineOffset; } public Number getUnderlineWaveRadius() { return underlineWaveRadius.get(); } public void setUnderlineWaveRadius(Number radius) { underlineWaveRadius.set(radius); } /** * The arc radius used to draw a wavy underline. If null or zero, the * underline will be a simple line. * * Can be styled from CSS using the "-rtfx-underline-wave-radius" property. * *

Note that the underline properties specified here are orthogonal to the {@link #underlineProperty()} inherited * from {@link Text}. The underline properties defined here in {@link TextExt} will cause an underline to be * drawn if {@link #underlineWidthProperty()} is non-null and greater than zero, regardless of * the value of {@link #underlineProperty()}.

*/ public ObjectProperty underlineWaveRadiusProperty() { return underlineWaveRadius; } // Dash array for the text underline public Number[] getUnderlineDashArray() { return underlineDashArray.get(); } public void setUnderlineDashArray(Number[] dashArray) { underlineDashArray.set(dashArray); } /** * The dash array used for drawing the underline for a section of text. * * Can be styled from CSS using the "-rtfx-underline-dash-array" property. * *

Note that the underline properties specified here are orthogonal to the {@link #underlineProperty()} inherited * from {@link Text}. The underline properties defined here in {@link TextExt} will cause an underline to be * drawn if {@link #underlineWidthProperty()} is non-null and greater than zero, regardless of * the value of {@link #underlineProperty()}.

*/ public ObjectProperty underlineDashArrayProperty() { return underlineDashArray; } // The end cap style of each dash in a dashed underline public StrokeLineCap getUnderlineCap() { return underlineCap.get(); } public void setUnderlineCap(StrokeLineCap cap) { underlineCap.set(cap); } /** * The end cap style used for drawing each dash in a dashed underline for a section of text. * * Can be styled from CSS using the "-rtfx-underline-cap" property. * *

Note that the underline properties specified here are orthogonal to the {@link #underlineProperty()} inherited * from {@link Text}. The underline properties defined here in {@link TextExt} will cause an underline to be * drawn if {@link #underlineWidthProperty()} is non-null and greater than zero, regardless of * the value of {@link #underlineProperty()}.

*/ public ObjectProperty underlineCapProperty() { return underlineCap; } private static class StyleableProperties { private static final CssMetaData BACKGROUND_COLOR = new CustomCssMetaData<>( "-rtfx-background-color", StyleConverter.getPaintConverter(), Color.TRANSPARENT, n -> n.backgroundColor ); private static final CssMetaData BORDER_COLOR = new CustomCssMetaData<>( "-rtfx-border-stroke-color", StyleConverter.getPaintConverter(), Color.TRANSPARENT, n -> n.borderStrokeColor ); private static final CssMetaData BORDER_WIDTH = new CustomCssMetaData<>( "-rtfx-border-stroke-width", StyleConverter.getSizeConverter(), 0, n -> n.borderStrokeWidth ); private static final CssMetaData BORDER_TYPE = new CustomCssMetaData<>( "-rtfx-border-stroke-type", (StyleConverter) StyleConverter.getEnumConverter(StrokeType.class), StrokeType.INSIDE, n -> n.borderStrokeType ); private static final CssMetaData BORDER_DASH_ARRAY = new CustomCssMetaData<>( "-rtfx-border-stroke-dash-array", SizeConverter.SequenceConverter.getInstance(), new Double[0], n -> n.borderStrokeDashArray ); private static final CssMetaData UNDERLINE_COLOR = new CustomCssMetaData<>( "-rtfx-underline-color", StyleConverter.getPaintConverter(), Color.TRANSPARENT, n -> n.underlineColor ); private static final CssMetaData UNDERLINE_WIDTH = new CustomCssMetaData<>( "-rtfx-underline-width", StyleConverter.getSizeConverter(), 0, n -> n.underlineWidth ); private static final CssMetaData UNDERLINE_OFFSET = new CustomCssMetaData<>( "-rtfx-underline-offset", StyleConverter.getSizeConverter(), 0, n -> n.underlineOffset ); private static final CssMetaData UNDERLINE_WAVE_RADIUS = new CustomCssMetaData<>( "-rtfx-underline-wave-radius", StyleConverter.getSizeConverter(), 0, n -> n.underlineWaveRadius ); private static final CssMetaData UNDERLINE_DASH_ARRAY = new CustomCssMetaData<>( "-rtfx-underline-dash-array", SizeConverter.SequenceConverter.getInstance(), new Double[0], n -> n.underlineDashArray ); private static final CssMetaData UNDERLINE_CAP = new CustomCssMetaData<>( "-rtfx-underline-cap", (StyleConverter) StyleConverter.getEnumConverter(StrokeLineCap.class), StrokeLineCap.SQUARE, n -> n.underlineCap ); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy