All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.badlogic.gdx.tools.hiero.unicodefont.effects.OutlineEffect Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 * Copyright 2011 See AUTHORS file.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 ******************************************************************************/

package com.badlogic.gdx.tools.hiero.unicodefont.effects;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.badlogic.gdx.tools.hiero.unicodefont.Glyph;
import com.badlogic.gdx.tools.hiero.unicodefont.UnicodeFont;

/** Strokes glyphs with an outline.
 * @author Nathan Sweet */
public class OutlineEffect implements ConfigurableEffect {
	private float width = 2;
	private Color color = Color.black;
	private int join = BasicStroke.JOIN_BEVEL;
	private Stroke stroke;

	public OutlineEffect () {
	}

	public OutlineEffect (int width, Color color) {
		this.width = width;
		this.color = color;
	}

	public void draw (BufferedImage image, Graphics2D g, UnicodeFont unicodeFont, Glyph glyph) {
		g = (Graphics2D)g.create();
		if (stroke != null)
			g.setStroke(stroke);
		else
			g.setStroke(getStroke());
		g.setColor(color);
		g.draw(glyph.getShape());
		g.dispose();
	}

	public float getWidth () {
		return width;
	}

	/** Sets the width of the outline. The glyphs will need padding so the outline doesn't get clipped. */
	public void setWidth (int width) {
		this.width = width;
	}

	public Color getColor () {
		return color;
	}

	public void setColor (Color color) {
		this.color = color;
	}

	public int getJoin () {
		return join;
	}

	public Stroke getStroke () {
		if (stroke == null) return new BasicStroke(width, BasicStroke.CAP_SQUARE, join);
		return stroke;
	}

	/** Sets the stroke to use for the outline. If this is set, the other outline settings are ignored. */
	public void setStroke (Stroke stroke) {
		this.stroke = stroke;
	}

	/** Sets how the corners of the outline are drawn. This is usually only noticeable at large outline widths.
	 * @param join One of: {@link BasicStroke#JOIN_BEVEL}, {@link BasicStroke#JOIN_MITER}, {@link BasicStroke#JOIN_ROUND} */
	public void setJoin (int join) {
		this.join = join;
	}

	public String toString () {
		return "Outline";
	}

	public List getValues () {
		List values = new ArrayList();
		values.add(EffectUtil.colorValue("Color", color));
		values.add(EffectUtil.floatValue("Width", width, 0.1f, 999, "This setting controls the width of the outline. "
			+ "The glyphs will need padding so the outline doesn't get clipped."));
		values.add(EffectUtil.optionValue("Join", String.valueOf(join),
			new String[][] {{"Bevel", BasicStroke.JOIN_BEVEL + ""}, {"Miter", BasicStroke.JOIN_MITER + ""},
				{"Round", BasicStroke.JOIN_ROUND + ""}},
			"This setting defines how the corners of the outline are drawn. "
				+ "This is usually only noticeable at large outline widths."));
		return values;
	}

	public void setValues (List values) {
		for (Iterator iter = values.iterator(); iter.hasNext();) {
			Value value = (Value)iter.next();
			if (value.getName().equals("Color")) {
				color = (Color)value.getObject();
			} else if (value.getName().equals("Width")) {
				width = ((Float)value.getObject()).floatValue();
			} else if (value.getName().equals("Join")) {
				join = Integer.parseInt((String)value.getObject());
			}
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy