/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2002-2008, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
*/
package org.geotools.styling;
import java.awt.Color;
import org.geotools.filter.ConstantExpression;
import org.opengis.filter.expression.Expression;
import org.opengis.style.StyleVisitor;
/**
* The Fill object encapsulates the graphical-symbolization parameters for
* areas of geometries.
*
* <p>
* There are two types of fill: solid-color and repeated graphic fill.
* </p>
*
* <p>
* The details of this object are taken from the <a
* href="https://portal.opengeospatial.org/files/?artifact_id=1188"> OGC
* Styled-Layer Descriptor Report (OGC 02-070) version 1.0.0.</a>:
* <pre><code>
* <xsd:element name="Fill">
* <xsd:annotation>
* <xsd:documentation>
* A "Fill" specifies the pattern for filling an area geometry.
* The allowed CssParameters are: "fill" (color) and "fill-opacity".
* </xsd:documentation>
* </xsd:annotation>
* <xsd:complexType>
* <xsd:sequence>
* <xsd:element ref="sld:GraphicFill" minOccurs="0"/>
* <xsd:element ref="sld:CssParameter" minOccurs="0"
* maxOccurs="unbounded"/>
* </xsd:sequence>
* </xsd:complexType>
* </xsd:element>
* </code></pre>
* </p>
*
* <p>
* Renderers can use this information when displaying styled features, though
* it must be remembered that not all renderers will be able to fully
* represent strokes as set out by this interface. For example, opacity may
* not be supported.
* </p>
*
* <p>
* Notes:
*
* <ul>
* <li>
* The graphical parameters and their values are derived from SVG/CSS2
* standards with names and semantics which are as close as possible.
* </li>
* </ul>
* </p>
*
* @author James Macgill, CCG
* @source $URL$
* @version $Id$
*/
public interface Fill extends org.opengis.style.Fill{
static final Fill DEFAULT = new ConstantFill() {
private void cannotModifyConstant() {
throw new UnsupportedOperationException("Constant Stroke may not be modified");
}
final Expression COLOR = ConstantExpression.color(new Color(128, 128, 128));
final Expression BGCOLOR = ConstantExpression.color(new Color(255, 255, 255, 0));
final Expression OPACITY = ConstantExpression.ONE;
public Expression getColor() {
return COLOR;
}
public Expression getBackgroundColor() {
return BGCOLOR;
}
public Expression getOpacity() {
return OPACITY;
}
public Graphic getGraphicFill() {
return Graphic.NULL;
}
public Object accept(StyleVisitor visitor, Object extraData) {
cannotModifyConstant();
return null;
}
};
static final Fill NULL = new ConstantFill() {
private void cannotModifyConstant() {
throw new UnsupportedOperationException("Constant Stroke may not be modified");
}
public Expression getColor() {
return ConstantExpression.NULL;
}
public Expression getBackgroundColor() {
return ConstantExpression.NULL;
}
public Expression getOpacity() {
return ConstantExpression.NULL;
}
public Graphic getGraphicFill() {
return Graphic.NULL;
}
public Object accept(StyleVisitor visitor, Object extraData) {
cannotModifyConstant();
return null;
}
};
/**
* This parameter gives the solid color that will be used for a Fill.<br>
* The color value is RGB-encoded using two hexidecimal digits per
* primary-color component, in the order Red, Green, Blue, prefixed with
* the hash (#) sign. The hexidecimal digits beetween A and F may be in
* either upper or lower case. For example, full red is encoded as
* "#ff0000" (with no quotation marks). The default color is defined to
* be 50% gray ("#808080"). Note: in CSS this parameter is just called
* Fill and not Color.
*
* @return The color of the Fill encoded as a hexidecimal RGB value.
*/
Expression getColor();
/**
* This parameter gives the solid color that will be used for a Fill.<br>
* The color value is RGB-encoded using two hexidecimal digits per
* primary-color component, in the order Red, Green, Blue, prefixed with
* the hash (#) sign. The hexidecimal digits beetween A and F may be in
* either upper or lower case. For example, full red is encoded as
* "#ff0000" (with no quotation marks).
*
* @param color solid color that will be used for a Fill
*/
void setColor(Expression color);
/**
* This parameter gives the solid color that will be used as a background
* for a Fill.<br>
* The color value is RGB-encoded using two hexidecimal digits per
* primary-color component, in the order Red, Green, Blue, prefixed with
* the hash (#) sign. The hexidecimal digits beetween A and F may be in
* either upper or lower case. For example, full red is encoded as
* "#ff0000" (with no quotation marks). The default color is defined to
* be transparent.
*
* @return The background color of the Fill encoded as a hexidecimal RGB value.
*
* @deprecated value is not used, please use getColor()
*/
Expression getBackgroundColor();
/**
* This parameter gives the solid color that will be used as a background
* for a Fill.<br>
* The color value is RGB-encoded using two hexidecimal digits per
* primary-color component, in the order Red, Green, Blue, prefixed with
* the hash (#) sign. The hexidecimal digits beetween A and F may be in
* either upper or lower case. For example, full red is encoded as
* "#ff0000" (with no quotation marks).
*
* @param backgroundColor solid color that will be used as a background
* @deprecated Please use setColor( Expression )
*/
void setBackgroundColor(Expression backgroundColor);
/**
* This specifies the level of translucency to use when rendering the fill. <br>
* The value is encoded as a floating-point value between 0.0 and 1.0 with
* 0.0 representing totally transparent and 1.0 representing totally
* opaque, with a linear scale of translucency for intermediate values.<br>
* For example, "0.65" would represent 65% opacity. The default value is
* 1.0 (opaque).
*
* @return The opacity of the fill, where 0.0 is completely transparent and
* 1.0 is completely opaque.
*/
Expression getOpacity();
/**
* This specifies the level of translucency to use when rendering the fill. <br>
* The value is encoded as a floating-point value between 0.0 and 1.0 with
* 0.0 representing totally transparent and 1.0 representing totally
* opaque, with a linear scale of translucency for intermediate values.<br>
* For example, "0.65" would represent 65% opacity.
*/
void setOpacity(Expression opacity);
/**
* This parameter indicates that a stipple-fill repeated graphic will be
* used and specifies the fill graphic to use.
*
* @return The graphic to use as a stipple fill. If null then no stipple
* fill should be used.
*/
Graphic getGraphicFill();
/**
* This parameter indicates that a stipple-fill repeated graphic will be
* used and specifies the fill graphic to use.
*/
void setGraphicFill(org.opengis.style.Graphic graphicFill);
void accept(org.geotools.styling.StyleVisitor visitor);
}
abstract class ConstantFill implements Fill {
private void cannotModifyConstant() {
throw new UnsupportedOperationException("Constant Fill may not be modified");
}
public void setColor(Expression color) {
cannotModifyConstant();
}
public void setBackgroundColor(Expression backgroundColor) {
cannotModifyConstant();
}
public void setOpacity(Expression opacity) {
cannotModifyConstant();
}
public void setGraphicFill(org.opengis.style.Graphic graphicFill) {
cannotModifyConstant();
}
public void accept(org.geotools.styling.StyleVisitor visitor) {
cannotModifyConstant();
}
public Object accept(org.opengis.style.StyleVisitor visitor,Object data) {
cannotModifyConstant();
return null;
}
};