Author: abelevich
Date: 2008-02-20 08:53:36 -0500 (Wed, 20 Feb 2008)
New Revision: 6205
Added:
trunk/framework/impl/src/main/java/org/richfaces/renderkit/html/BaseGradient.java
trunk/framework/impl/src/main/java/org/richfaces/renderkit/html/GradientA.java
Log:
Added: trunk/framework/impl/src/main/java/org/richfaces/renderkit/html/BaseGradient.java
===================================================================
--- trunk/framework/impl/src/main/java/org/richfaces/renderkit/html/BaseGradient.java
(rev 0)
+++
trunk/framework/impl/src/main/java/org/richfaces/renderkit/html/BaseGradient.java 2008-02-20
13:53:36 UTC (rev 6205)
@@ -0,0 +1,245 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces - Ajax4jsf Component Library
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.renderkit.html;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.GradientPaint;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.geom.Rectangle2D;
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.faces.context.FacesContext;
+
+import org.ajax4jsf.resource.GifRenderer;
+import org.ajax4jsf.resource.InternetResourceBuilder;
+import org.ajax4jsf.resource.Java2Dresource;
+import org.ajax4jsf.resource.ResourceContext;
+import org.ajax4jsf.util.HtmlColor;
+import org.ajax4jsf.util.Zipper2;
+import org.richfaces.skin.Skin;
+import org.richfaces.skin.SkinFactory;
+
+/**
+ * @author Nick Belaevski - nbelaevski(a)exadel.com
+ * created 02.02.2007
+ *
+ */
+public class BaseGradient extends Java2Dresource {
+
+ private int width;
+ private int height;
+ private int gradientHeight;
+ private String baseColor;
+ private String gradientColor;
+ private boolean horizontal = false;
+
+ public BaseGradient(int width, int height, int gradientHeight) {
+ super();
+ this.width = width;
+ this.height = height;
+ this.gradientHeight = gradientHeight;
+
+ setRenderer(new GifRenderer());
+ setLastModified(new Date(InternetResourceBuilder.getInstance().getStartTime()));
+ }
+
+ public BaseGradient(int width, int height, int gradientHeight, String baseColor, String
gradientColor) {
+ this(width, height, gradientHeight);
+ this.baseColor = baseColor;
+ this.gradientColor = gradientColor;
+ }
+
+ public BaseGradient(int width, int height) {
+ this(width, height, height);
+ }
+
+ public BaseGradient(int width, int height, String baseColor, String gradientColor) {
+ this(width, height, height);
+ this.baseColor = baseColor;
+ this.gradientColor = gradientColor;
+ }
+
+ public BaseGradient() {
+ this(30, 50, 20);
+ }
+
+ public BaseGradient(String baseColor, String gradientColor) {
+ this(30, 50, 20);
+ this.baseColor = baseColor;
+ this.gradientColor = gradientColor;
+ }
+
+ public BaseGradient(int width, int height, int gradientHeight, boolean horizontal) {
+ this(width, height, gradientHeight);
+ this.horizontal = horizontal;
+ }
+
+ public BaseGradient(int width, int height, int gradientHeight, String baseColor,
String gradientColor, boolean horizontal) {
+ this(width, height, gradientHeight);
+ this.baseColor = baseColor;
+ this.gradientColor = gradientColor;
+ this.horizontal = horizontal;
+ }
+
+ public BaseGradient(int width, int height, boolean horizontal) {
+ this(width, height, horizontal?width:height);
+ this.horizontal = horizontal;
+ }
+
+ public BaseGradient(int width, int height, String baseColor, String gradientColor,
boolean horizontal) {
+ this(width, height, horizontal?width:height);
+ this.baseColor = baseColor;
+ this.gradientColor = gradientColor;
+ this.horizontal = horizontal;
+ }
+
+ public BaseGradient(boolean horizontal) {
+ this(30, 50, 20);
+ this.horizontal = horizontal;
+ }
+
+ public BaseGradient(String baseColor, String gradientColor, boolean horizontal) {
+ this(30, 50, 20);
+ this.baseColor = baseColor;
+ this.gradientColor = gradientColor;
+ this.horizontal = horizontal;
+ }
+
+ public Dimension getDimensions(FacesContext facesContext, Object data) {
+ return new Dimension(width, height);
+ }
+
+ protected Dimension getDimensions(ResourceContext resourceContext) {
+ return getDimensions(null, restoreData(resourceContext));
+ }
+
+ protected void paint(ResourceContext resourceContext, Graphics2D g2d) {
+ g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
+ g2d.setRenderingHint(RenderingHints.KEY_DITHERING,
RenderingHints.VALUE_DITHER_ENABLE);
+ g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING,
RenderingHints.VALUE_COLOR_RENDER_QUALITY);
+ Data dataToStore = (Data) restoreData(resourceContext);
+ if (dataToStore != null && dataToStore.headerBackgroundColor!=null &&
dataToStore.headerGradientColor!=null) {
+ Color baseColor = new Color(dataToStore.headerBackgroundColor.intValue());
+ Dimension dim =getDimensions(resourceContext);
+ Rectangle2D rect =
+ new Rectangle2D.Float(
+ 0,
+ 0,
+ dim.width,
+ dim.height);
+ int gradStart = 0;
+ int gradEnd = gradientHeight;
+ Color alternateColor = new Color(dataToStore.headerGradientColor.intValue());
+ GradientPaint gragient;
+ if (horizontal) {
+ gragient = new GradientPaint(gradStart, 0, baseColor, gradEnd, 0,
alternateColor);
+ } else {
+ gragient = new GradientPaint(0, gradStart, baseColor, 0, gradEnd,
alternateColor);
+ }
+ g2d.setPaint(gragient);
+ g2d.fill(rect);
+ }
+ }
+
+ protected Object deserializeData(byte[] objectArray) {
+ Data data = new Data();
+ if (objectArray != null) {
+ Zipper2 zipper2 = new Zipper2(objectArray);
+ data.headerBackgroundColor = new Integer(zipper2.nextIntColor());
+ data.headerGradientColor = new Integer(zipper2.nextIntColor());
+ }
+
+ return data;
+ }
+
+ protected Object getDataToStore(FacesContext context, Object data) {
+ if (baseColor == null) {
+ return new Data(context).toByteArray();
+ } else {
+ return new Data(context, baseColor, gradientColor).toByteArray();
+ }
+ }
+
+ public boolean isCacheable() {
+ return true;
+ }
+
+ protected static class Data implements Serializable {
+ public Data() {
+ }
+
+ protected Data(FacesContext context) {
+ this(context, Skin.headerBackgroundColor, "headerGradientColor");
+ }
+
+ protected Data(FacesContext context, String baseColor, String gradientColor) {
+ this.headerBackgroundColor = getColorValueParameter(context, baseColor, false);
+ this.headerGradientColor = getColorValueParameter(context, gradientColor, false);
+
+ if (!(this.headerBackgroundColor == null && this.headerGradientColor == null))
{
+ if (this.headerBackgroundColor == null) {
+ this.headerBackgroundColor = getColorValueParameter(context, baseColor, true);
+ }
+
+ if (this.headerGradientColor == null) {
+ this.headerGradientColor = getColorValueParameter(context, gradientColor, true);
+ }
+ }
+ }
+
+ private Integer getColorValueParameter(FacesContext context, String name, boolean
useDefault) {
+ Skin skin;
+ if (useDefault) {
+ skin = SkinFactory.getInstance().getDefaultSkin(context);
+ } else {
+ skin = SkinFactory.getInstance().getSkin(context);
+ }
+
+ String tmp = (String) skin.getParameter(context,name);
+ if (tmp!=null && tmp.length() != 0) {
+ return new Integer(HtmlColor.decode(tmp).getRGB());
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1732700513743861250L;
+ protected Integer headerBackgroundColor;
+ protected Integer headerGradientColor;
+ public byte[] toByteArray() {
+ if (headerBackgroundColor != null && headerGradientColor != null) {
+ byte[] ret = new byte[6];
+ new
Zipper2(ret).addColor(headerBackgroundColor.intValue()).addColor(headerGradientColor.intValue());
+ return ret;
+ } else {
+ return null;
+ }
+ }
+ }
+
+}
Added: trunk/framework/impl/src/main/java/org/richfaces/renderkit/html/GradientA.java
===================================================================
--- trunk/framework/impl/src/main/java/org/richfaces/renderkit/html/GradientA.java
(rev 0)
+++
trunk/framework/impl/src/main/java/org/richfaces/renderkit/html/GradientA.java 2008-02-20
13:53:36 UTC (rev 6205)
@@ -0,0 +1,28 @@
+/**
+ * License Agreement.
+ *
+ * JBoss RichFaces - Ajax4jsf Component Library
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.renderkit.html;
+
+public class GradientA extends BaseGradient {
+ public GradientA() {
+ super(30, 50, 20, "headerGradientColor", "headerBackgroundColor");
+ }
+}
\ No newline at end of file