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

com.uwsoft.editor.renderer.components.label.LabelComponent Maven / Gradle / Ivy

Go to download

overlap2d-runtime-libgdx provides functionality to load, manipulate and render scenes generated by Overlap2D.

The newest version!
package com.uwsoft.editor.renderer.components.label;

import com.badlogic.ashley.core.Component;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.BitmapFontCache;
import com.badlogic.gdx.graphics.g2d.GlyphLayout;
import com.badlogic.gdx.scenes.scene2d.ui.Label.LabelStyle;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.utils.Align;
import com.badlogic.gdx.utils.StringBuilder;

public class LabelComponent implements Component {
	public  LabelStyle style;
	public final GlyphLayout layout = new GlyphLayout();
	public BitmapFontCache cache;

	public final StringBuilder text = new StringBuilder();
	public String fontName;
	public int fontSize;
	public int labelAlign = Align.center;
	public int lineAlign = Align.center;
	public boolean wrap;
	public float fontScaleX = 1f;
	public float fontScaleY = 1f;

	
	public LabelComponent (CharSequence text, Skin skin) {
		this(text, skin.get(LabelStyle.class));
	}

	public LabelComponent (CharSequence text, Skin skin, String styleName) {
		this(text, skin.get(styleName, LabelStyle.class));
	}

	/** Creates a label, using a {@link LabelStyle} that has a BitmapFont with the specified name from the skin and the specified
	 * color. */
	public LabelComponent (CharSequence text, Skin skin, String fontName, Color color) {
		this(text, new LabelStyle(skin.getFont(fontName), color));
	}

	/** Creates a label, using a {@link LabelStyle} that has a BitmapFont with the specified name and the specified color from the
	 * skin. */
	public LabelComponent (CharSequence text, Skin skin, String fontName, String colorName) {
		this(text, new LabelStyle(skin.getFont(fontName), skin.getColor(colorName)));
	}

	public LabelComponent (CharSequence text, LabelStyle style) {
		if (text != null) this.text.append(text);
		setStyle(style);
	}

	public void setStyle (LabelStyle style) {
		if (style == null) throw new IllegalArgumentException("style cannot be null.");
		if (style.font == null) throw new IllegalArgumentException("Missing LabelStyle font.");
		this.style = style;
		cache = style.font.newFontCache();
	}
	
	public LabelStyle getStyle () {
		return style;
	}

	/** @param newText May be null, "" will be used. */
	public void setText (CharSequence newText) {
		if (newText == null) newText = "";
		if (newText instanceof StringBuilder) {
			if (text.equals(newText)) return;
			text.setLength(0);
			text.append((StringBuilder)newText);
		} else {
			if (textEquals(newText)) return;
			text.setLength(0);
			text.append(newText);
		}
	}
	
	public boolean textEquals (CharSequence other) {
		int length = text.length;
		char[] chars = text.chars;
		if (length != other.length()) return false;
		for (int i = 0; i < length; i++)
			if (chars[i] != other.charAt(i)) return false;
		return true;
	}

	public StringBuilder getText () {
		return text;
	}
	
	public GlyphLayout getGlyphLayout () {
		return layout;
	}

	/** If false, the text will only wrap where it contains newlines (\n). The preferred size of the label will be the text bounds.
	 * If true, the text will word wrap using the width of the label. The preferred width of the label will be 0, it is expected
	 * that the something external will set the width of the label. Wrapping will not occur when ellipsis is true. Default is
	 * false.
	 * 

* When wrap is enabled, the label's preferred height depends on the width of the label. In some cases the parent of the label * will need to layout twice: once to set the width of the label and a second time to adjust to the label's new preferred * height. */ public void setWrap (boolean wrap) { this.wrap = wrap; } /** @param alignment Aligns each line of text horizontally and all the text vertically. * @see Align */ public void setAlignment (int alignment) { setAlignment(alignment, alignment); } /** @param labelAlign Aligns all the text with the label widget. * @param lineAlign Aligns each line of text (left, right, or center). * @see Align */ public void setAlignment (int labelAlign, int lineAlign) { this.labelAlign = labelAlign; if ((lineAlign & Align.left) != 0) this.lineAlign = Align.left; else if ((lineAlign & Align.right) != 0) this.lineAlign = Align.right; else this.lineAlign = Align.center; } public void setFontScale (float fontScale) { this.fontScaleX = fontScale; this.fontScaleY = fontScale; } public void setFontScale (float fontScaleX, float fontScaleY) { this.fontScaleX = fontScaleX; this.fontScaleY = fontScaleY; } public float getFontScaleX () { return fontScaleX; } public void setFontScaleX (float fontScaleX) { this.fontScaleX = fontScaleX; } public float getFontScaleY () { return fontScaleY; } public void setFontScaleY (float fontScaleY) { this.fontScaleY = fontScaleY; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy