Editeur de dégradés de couleurs linéaires ou radial (java 6)

Description

Une fois de plus, voici une source qui fera partit d'une source beaucoup plus ambitieuse que je mettrais une fois finie. Vu que ce composant est assez intéressant, et coupé du reste de la source, autant le publier tel quel afin que ceux que ca intéresse puisse avoir accès uniquement à l'éditeur de dégradé et non toute la source complète.

Cette source est un éditeur de dégradé tout simple : vous définissez le nombre de couleurs, les couleurs, leurs positions dans le dégradé (de 0 à 100), l'angle du dégradé linéaire, ou si vous voulez un dégradé radial (cercle), et ma classe vous construit le MultiGradientPaint correspondant.

Attention, ma source utilise les common components de l2fprod (des composants gratuits que vous pouvez télécharger ici : http://www.l2fprod.com/rw/default/).
Attention aussi : cette source n'est compatible qu'avec les version de java supérieures à la version 6.0 : la classe MultiGradientPaint (et surtout la classe RadialGradientPaint) ne sont apparus qu'à partir de cette version apparement.

Source / Exemple :


import java.awt.Color;
import java.awt.LinearGradientPaint;
import java.awt.MultipleGradientPaint;
import java.awt.RadialGradientPaint;
import java.awt.Rectangle;
import java.awt.geom.Point2D;
import java.util.ArrayList;
import java.util.Collections;

public class CGradient extends ArrayList<CGradientColor> {

	private static final long serialVersionUID = 1L;

	private int _angle = 0;
	private boolean _radial = false; 
	
	public CGradient() {
		super();
	}
		
	public CGradient(int angle, boolean radial) {
		this();
		_angle = angle;
		_radial = radial;
	}
	
	public int getAngle() {
		return _angle;
	}
	
	public void setAngle(int angle) {
		_angle = angle;
	}
		
	public boolean isRadial() {
		return _radial;
	}
	
	public void setRadial(boolean radial) {
		_radial = radial;
	}

	@SuppressWarnings("unchecked")
	public MultipleGradientPaint getPaint(Rectangle position) {
		Collections.sort(this);
		
		float[] fraction = new float[size()];
		Color[] colors = new Color[size()];
		float temp = -1f;
		for (int i = 0; i < size(); ++i) {
			if (get(i).getPosition() / 100.0f > temp) {
				fraction[i] = get(i).getPosition() / 100.0f;
			} else {
				if (temp < 1) {
					fraction[i] = temp + 0.001f;
				}
			}
			temp = fraction[i];
			colors[i] = get(i).getColor();
		}
		
		MultipleGradientPaint gradient;
		if (_radial) {
			float rayon = 0;
			if (position.width > position.height) {
				rayon = position.height;
			} else {
				rayon = position.width;
			}
			gradient = new RadialGradientPaint(new Point2D.Double(position.x + position.width / 2, position.y + position.height / 2), rayon, fraction, colors);
		} else {
			float angle = (2.0f * new Float(Math.PI) / 360.0f) * _angle;
			Point2D start = new Point2D.Double((position.x + position.width / 2) + Math.cos(angle) * position.width / 2, (position.y + position.height / 2) + Math.sin(angle) * position.height / 2);
			Point2D end = new Point2D.Double((position.x + position.width / 2) + Math.cos(Math.PI + angle) * position.width / 2, (position.y + position.height / 2) + Math.sin(Math.PI + angle) * position.height / 2);
			gradient = new LinearGradientPaint(start, end, fraction, colors);
		}
		return gradient;
	}
}

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.