
org.richfaces.renderkit.html.BaseGradient Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of richfaces-core Show documentation
Show all versions of richfaces-core Show documentation
The RichFaces core framework.
The newest version!
/*
* JBoss, Home of Professional Open Source
* Copyright 2013, Red Hat, Inc. and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This 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; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.richfaces.renderkit.html;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import javax.faces.context.FacesContext;
import org.richfaces.renderkit.html.images.GradientType;
import org.richfaces.renderkit.html.images.GradientType.BiColor;
import org.richfaces.resource.AbstractJava2DUserResource;
import org.richfaces.resource.DynamicUserResource;
import org.richfaces.resource.PostConstructResource;
import org.richfaces.resource.ResourceParameter;
import org.richfaces.resource.StateHolderResource;
import org.richfaces.skin.Skin;
import org.richfaces.skin.SkinFactory;
/**
* @author Nick Belaevski - [email protected] created 02.02.2007
*/
@DynamicUserResource
public class BaseGradient extends AbstractJava2DUserResource implements StateHolderResource {
protected Integer headerBackgroundColor;
protected Integer headerGradientColor;
protected GradientType gradientType;
private Integer width;
private Integer height;
private Integer gradientHeight;
private String baseColor;
private String gradientColor;
private boolean horizontal;
public BaseGradient(int width, int height, int gradientHeight, String baseColor, String gradientColor, boolean horizontal) {
super(null);
this.setWidth(width);
this.setHeight(height);
this.setGradientHeight(gradientHeight);
this.setBaseColorParam(baseColor);
this.setGradientColorParam(gradientColor);
this.setHorizontal(horizontal);
}
public BaseGradient(int width, int height, int gradientHeight) {
this(width, height, gradientHeight, null, null, false);
}
public BaseGradient(int width, int height, int gradientHeight, String baseColor, String gradientColor) {
this(width, height, gradientHeight, baseColor, gradientColor, false);
}
public BaseGradient(int width, int height) {
this(width, height, height);
}
public BaseGradient(int width, int height, String baseColor, String gradientColor) {
this(width, height, height, baseColor, gradientColor);
}
public BaseGradient() {
this(30, 50, 20);
}
public BaseGradient(String baseColor, String gradientColor) {
this(30, 50, 20, baseColor, gradientColor);
}
public BaseGradient(int width, int height, int gradientHeight, boolean horizontal) {
this(width, height, gradientHeight, null, null, horizontal);
}
public BaseGradient(int width, int height, boolean horizontal) {
this(width, height, horizontal ? width : height, null, null, horizontal);
}
public BaseGradient(int width, int height, String baseColor, String gradientColor, boolean horizontal) {
this(width, height, horizontal ? width : height, baseColor, gradientColor, horizontal);
}
public BaseGradient(boolean horizontal) {
this(30, 50, 20, null, null, horizontal);
}
public BaseGradient(String baseColor, String gradientColor, boolean horizontal) {
this(30, 50, 20, baseColor, gradientColor, horizontal);
}
protected void initializeProperties(FacesContext context, Skin skin) {
}
@PostConstructResource
public final void initialize() {
FacesContext context = FacesContext.getCurrentInstance();
Skin skin = SkinFactory.getInstance(context).getSkin(context);
String gradientTypeString = null;
if (gradientTypeString == null || gradientTypeString.length() == 0) {
gradientTypeString = (String) skin.getParameter(context, Skin.GRADIENT_TYPE);
}
this.gradientType = GradientType.getByParameter(gradientTypeString);
initializeProperties(context, skin);
this.headerBackgroundColor = skin.getColorParameter(context, baseColor);
this.headerGradientColor = skin.getColorParameter(context, gradientColor);
}
@ResourceParameter(defaultValue = "30")
public final void setWidth(Integer width) {
this.width = width;
}
@ResourceParameter(defaultValue = "50")
public final void setHeight(Integer height) {
this.height = height;
}
@ResourceParameter(defaultValue = "20")
public final void setGradientHeight(Integer gradientHeight) {
this.gradientHeight = gradientHeight;
}
@ResourceParameter(defaultValue = Skin.HEADER_BACKGROUND_COLOR)
public final void setBaseColorParam(String paramName) {
this.baseColor = paramName;
}
@ResourceParameter(defaultValue = Skin.HEADER_GRADIENT_COLOR)
public final void setGradientColorParam(String paramName) {
this.gradientColor = paramName;
}
@ResourceParameter(defaultValue = "false")
public final void setHorizontal(boolean horizontal) {
this.horizontal = horizontal;
}
public final void setGradientType(GradientType gradientType) {
this.gradientType = gradientType;
}
public Dimension getDimension() {
return new Dimension(getSafeWidth(), getSafeHeight());
}
/**
* @return the gradientHeight
*/
protected Integer getGradientHeight() {
return gradientHeight;
}
protected Integer getHeight() {
return height;
}
protected Integer getWidth() {
return width;
}
protected Integer getSafeGradientHeight() {
return gradientHeight == null ? 0 : gradientHeight;
}
protected Integer getSafeHeight() {
return height == null ? 0 : height;
}
protected Integer getSafeWidth() {
return width == null ? 0 : width;
}
/**
* @return the baseColor
*/
protected String getBaseColor() {
return baseColor;
}
/**
* @return the gradientColor
*/
protected String getGradientColor() {
return gradientColor;
}
/**
* @return the horizontal
*/
protected boolean isHorizontal() {
return horizontal;
}
protected void drawGradient(Graphics2D g2d, Shape shape, BiColor colors, int height) {
if (colors != null) {
GradientPaint gragient = new GradientPaint(0, 0, colors.getTopColor(), 0, height, colors.getBottomColor());
g2d.setPaint(gragient);
g2d.fill(shape);
}
}
public void paint(Graphics2D graphics2d) {
graphics2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
graphics2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
graphics2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
graphics2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
graphics2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
paintGradient(graphics2d, getDimension());
}
/**
* @param g2d
* @param dim
*/
protected void paintGradient(Graphics2D g2d, Dimension dim) {
if (headerBackgroundColor != null && headerGradientColor != null && gradientType != null) {
BiColor biColor = new GradientType.BiColor(headerBackgroundColor, headerGradientColor);
BiColor firstLayer = gradientType.getFirstLayerColors(biColor);
BiColor secondLayer = gradientType.getSecondLayerColors(biColor);
if (horizontal) {
// x -> y, y -> x
g2d.transform(new AffineTransform(0, 1, 1, 0, 0, 0));
dim.setSize(dim.height, dim.width);
}
int localGradientHeight = this.gradientHeight;
if (localGradientHeight < 0) {
localGradientHeight = dim.height;
}
Rectangle2D rect = new Rectangle2D.Float(0, 0, dim.width, dim.height);
drawGradient(g2d, rect, firstLayer, localGradientHeight);
int smallGradientHeight = localGradientHeight / 2;
rect = new Rectangle2D.Float(0, 0, dim.width, smallGradientHeight);
drawGradient(g2d, rect, secondLayer, smallGradientHeight);
}
}
public void readState(FacesContext context, DataInput dataInput) throws IOException {
this.width = readIntegerParameterAsShort(dataInput);
this.height = readIntegerParameterAsShort(dataInput);
this.gradientHeight = readIntegerParameterAsShort(dataInput);
this.headerBackgroundColor = readIntegerParameter(dataInput);
this.headerGradientColor = readIntegerParameter(dataInput);
this.horizontal = dataInput.readBoolean();
this.gradientType = GradientType.values()[dataInput.readByte()];
}
public void writeState(FacesContext context, DataOutput dataOutput) throws IOException {
writeIntegerParameterAsShort(dataOutput, this.width);
writeIntegerParameterAsShort(dataOutput, this.height);
writeIntegerParameterAsShort(dataOutput, this.gradientHeight);
writeIntegerParameter(dataOutput, this.headerBackgroundColor);
writeIntegerParameter(dataOutput, this.headerGradientColor);
dataOutput.writeBoolean(this.horizontal);
dataOutput.writeByte((byte) this.gradientType.ordinal());
}
protected void writeIntegerParameterAsShort(DataOutput dataOutput, Integer parameter) throws IOException {
if (parameter != null) {
dataOutput.writeBoolean(true);
dataOutput.writeShort(parameter);
} else {
dataOutput.writeBoolean(false);
}
}
protected Integer readIntegerParameterAsShort(DataInput dataInput) throws IOException {
if (dataInput.readBoolean()) {
return (int) dataInput.readShort();
} else {
return null;
}
}
protected void writeIntegerParameter(DataOutput dataOutput, Integer parameter) throws IOException {
if (parameter != null) {
dataOutput.writeBoolean(true);
dataOutput.writeInt(parameter);
} else {
dataOutput.writeBoolean(false);
}
}
protected Integer readIntegerParameter(DataInput dataInput) throws IOException {
if (dataInput.readBoolean()) {
return dataInput.readInt();
} else {
return null;
}
}
public boolean isTransient() {
return false;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy