package org.andengine.opengl.font;
import java.util.ArrayList;
import java.util.HashMap;
import org.andengine.opengl.util.GLState;
/**
* (c) 2010 Nicolas Gramlich
* (c) 2011 Zynga Inc.
*
* @author Nicolas Gramlich
* @since 17:48:46 - 08.03.2010
*/
public class FontManager {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private final ArrayList<Font> mFontsManaged = new ArrayList<Font>();
private final ArrayList<BitmapFont> mBitmapFontsManaged = new ArrayList<BitmapFont>();
private final HashMap<String, IFont> mFontsMapped = new HashMap<String, IFont>();
// ===========================================================
// Constructors
// ===========================================================
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
// ===========================================================
// Methods
// ===========================================================
public void onCreate() {
}
public synchronized void onDestroy() {
final ArrayList<Font> managedFonts = this.mFontsManaged;
for (int i = managedFonts.size() - 1; i >= 0; i--) {
managedFonts.get(i).invalidateLetters();
}
this.mFontsManaged.clear();
this.mBitmapFontsManaged.clear();
this.mFontsMapped.clear();
}
public synchronized boolean hasMappedFont(final String pID) {
if (pID == null) {
throw new IllegalArgumentException("pID must not be null!");
}
return this.mFontsMapped.containsKey(pID);
}
public synchronized IFont getMappedFont(final String pID) {
if (pID == null) {
throw new IllegalArgumentException("pID must not be null!");
}
return this.mFontsMapped.get(pID);
}
public synchronized void addMappedFont(final String pID, final IFont pFont) throws IllegalArgumentException {
if (pID == null) {
throw new IllegalArgumentException("pID must not be null!");
} else if (pFont == null) {
throw new IllegalArgumentException("pFont must not be null!");
} else if (this.mFontsMapped.containsKey(pID)) {
throw new IllegalArgumentException("Collision for pID: '" + pID + "'.");
}
this.mFontsMapped.put(pID, pFont);
}
public synchronized IFont removedMappedFont(final String pID) {
if (pID == null) {
throw new IllegalArgumentException("pID must not be null!");
}
return this.mFontsMapped.remove(pID);
}
public synchronized void loadFont(final Font pFont) {
if (pFont == null) {
throw new IllegalArgumentException("pFont must not be null!");
}
this.mFontsManaged.add(pFont);
}
public synchronized void loadFont(final BitmapFont pBitmapFont) {
if (pBitmapFont == null) {
throw new IllegalArgumentException("pBitmapFont must not be null!");
}
this.mBitmapFontsManaged.add(pBitmapFont);
}
public synchronized void loadFonts(final Font ... pFonts) {
for (int i = 0; i < pFonts.length; i++) {
this.loadFont(pFonts[i]);
}
}
public synchronized void loadFonts(final BitmapFont ... pBitmapFonts) {
for (int i = 0; i < pBitmapFonts.length; i++) {
this.loadFont(pBitmapFonts[i]);
}
}
public synchronized void unloadFont(final Font pFont) {
if (pFont == null) {
throw new IllegalArgumentException("pFont must not be null!");
}
this.mFontsManaged.remove(pFont);
}
public synchronized void unloadFont(final BitmapFont pBitmapFont) {
if (pBitmapFont == null) {
throw new IllegalArgumentException("pBitmapFont must not be null!");
}
this.mBitmapFontsManaged.remove(pBitmapFont);
}
public synchronized void unloadFonts(final Font ... pFonts) {
for (int i = 0; i < pFonts.length; i++) {
this.unloadFont(pFonts[i]);
}
}
public synchronized void unloadFonts(final BitmapFont ... pBitmapFonts) {
for (int i = 0; i < pBitmapFonts.length; i++) {
this.unloadFont(pBitmapFonts[i]);
}
}
public synchronized void updateFonts(final GLState pGLState) {
final ArrayList<Font> fonts = this.mFontsManaged;
final int fontCount = fonts.size();
if (fontCount > 0) {
for (int i = fontCount - 1; i >= 0; i--) {
fonts.get(i).update(pGLState);
}
}
}
public synchronized void onReload() {
final ArrayList<Font> managedFonts = this.mFontsManaged;
for (int i = managedFonts.size() - 1; i >= 0; i--) {
managedFonts.get(i).invalidateLetters();
}
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}