diff -r 18bb34950eab javafx-ui-common/src/com/sun/javafx/css/parser/CSSParser.java --- a/javafx-ui-common/src/com/sun/javafx/css/parser/CSSParser.java Fri Jan 18 11:11:18 2013 -0800 +++ b/javafx-ui-common/src/com/sun/javafx/css/parser/CSSParser.java Fri Jan 18 13:00:12 2013 -0800 @@ -1379,6 +1379,8 @@ return parseRepeatingImagePattern(root); } else if ("ladder".regionMatches(true, 0, fcn, 0, 6)) { return parseLadder(root); + } else if ("region".regionMatches(true, 0, fcn, 0, 6)) { + return parseRegion(root); } else if ("url".regionMatches(true, 0, fcn, 0, 3)) { return parseURI(root); } else { @@ -3298,7 +3300,35 @@ return new ParsedValueImpl[],BorderWidths>[],BorderWidths[]> (layers, BorderImageWidthsSequenceConverter.getInstance()); } - + // parse a Region value + // i.e., region(".styleClassForRegion") or region("#idForRegion") + public static final String SPECIAL_REGION_URL_PREFIX = "http://SPECIAL-REGION-URL/"; + private ParsedValueImpl parseRegion(Term root) + throws ParseException { + // first term in the chain is the function name... + final String fn = (root.token != null) ? root.token.getText() : null; + if (!"region".regionMatches(true, 0, fn, 0, 6)) { + error(root,"Expected \'region\'"); + } + + Term arg = root.firstArg; + if (arg == null) error(root, "Expected \'region(\"\")\'"); + + if (arg.token == null || + arg.token.getType() != CSSLexer.STRING || + arg.token.getText() == null || + arg.token.getText().isEmpty()) error(root, "Expected \'region(\"\")\'"); + + String styleClassOrId = arg.token.getText(); + if (styleClassOrId.charAt(0) == '\"') styleClassOrId = styleClassOrId.substring(1); + if (styleClassOrId.charAt(styleClassOrId.length()-1) == '\"') styleClassOrId = styleClassOrId.substring(0,styleClassOrId.length()-1); + styleClassOrId = SPECIAL_REGION_URL_PREFIX+styleClassOrId; + ParsedValueImpl[] uriValues = new ParsedValueImpl[] { + new ParsedValueImpl(styleClassOrId, StringConverter.getInstance()), + new ParsedValueImpl(sourceOfStylesheet, null) + }; + return new ParsedValueImpl(uriValues, URLConverter.getInstance()); + } // parse a URI value // i.e., url("") diff -r 18bb34950eab javafx-ui-controls/src/javafx/scene/control/Labeled.java --- a/javafx-ui-controls/src/javafx/scene/control/Labeled.java Fri Jan 18 11:11:18 2013 -0800 +++ b/javafx-ui-controls/src/javafx/scene/control/Labeled.java Fri Jan 18 13:00:12 2013 -0800 @@ -32,6 +32,7 @@ import com.sun.javafx.css.converters.PaintConverter; import com.sun.javafx.css.converters.SizeConverter; import com.sun.javafx.css.converters.StringConverter; +import com.sun.javafx.css.parser.CSSParser; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; @@ -41,7 +42,6 @@ import javafx.beans.property.BooleanProperty; import javafx.beans.property.DoubleProperty; import javafx.beans.property.ObjectProperty; -import javafx.beans.property.ObjectPropertyBase; import javafx.beans.property.ReadOnlyObjectProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleStringProperty; @@ -52,6 +52,7 @@ import javafx.scene.Node; import javafx.scene.image.Image; import javafx.scene.image.ImageView; +import javafx.scene.layout.Region; import javafx.scene.paint.Color; import javafx.scene.paint.Paint; import javafx.scene.text.Font; @@ -414,28 +415,35 @@ if (imageUrl == null) { imageUrl = new StyleableStringProperty() { - @Override - public void applyStyle(StyleOrigin origin, String v) { - - super.applyStyle(origin, v); - - String imageUrl = null; - if (v != null) { + @Override + public void applyStyle(StyleOrigin origin, String v) { + super.applyStyle(origin, v); + if (v == null) { + ((StyleableProperty)graphicProperty()).applyStyle(origin, null); + } else if (v.startsWith(CSSParser.SPECIAL_REGION_URL_PREFIX)) { + final Region region = new Region(); + final String styleClassOrId = v.substring(CSSParser.SPECIAL_REGION_URL_PREFIX.length()); + if (styleClassOrId.length() > 0) { + if (styleClassOrId.charAt(0) == '#') { + region.setId(styleClassOrId.substring(1)); + } else if (styleClassOrId.charAt(0) == '.') { + region.getStyleClass().add(styleClassOrId.substring(1)); + } + } + ((StyleableProperty)graphicProperty()).applyStyle(origin, region); + } else { URL url = null; try { url = new URL(v); } catch (MalformedURLException malf) { - // This may be a relative URL, so try resolving - // it using the application classloader + // This may be a relative URL, so try resolving it using the application classloader final ClassLoader cl = Thread.currentThread().getContextClassLoader(); url = cl.getResource(v); } if (url != null) { - ((StyleableProperty)graphicProperty()).applyStyle(origin, new ImageView(new Image(url.toExternalForm()))); + ((StyleableProperty)graphicProperty()).applyStyle(origin, new ImageView(new Image(url.toExternalForm()))); } - } else { - ((StyleableProperty)graphicProperty()).applyStyle(origin, null); - } + } } @Override