www.pudn.com > MobiCraft_src.rar > FontManager.java
// style: tabs, tabsize=4, style=ANSI
//+----------------------------------------------------------------------+
// Copyright (c) 2006 Company Name
// Made by Andrew and Zahar
//+----------------------------------------------------------------------+
// Filename: FontManager.java
//+----------------------------------------------------------------------+
// Comment: Manager of fonts. Load any only once and deletes when not needed more.
//+----------------------------------------------------------------------+
package fonts;
import app.MainCanvas;
import java.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
public class FontManager
{
public final static int BIG= 0;
public final static int SMALL= 1;
public final static int TOTAL= 2;
PngFont mFonts[];
int mUseFonts[]; // Хранит сколько классов используют объект.
public MainCanvas mMainCanvas; // Link to shared MainCanvas
public FontManager(MainCanvas m)
{
mMainCanvas = m;
mFonts = new PngFont[TOTAL];
for (int i=0; i= TOTAL)
return;
if (mUseFonts[ifont] >0 )
{
// Шрифт уже загружен.
mUseFonts[ifont]++;
return;
}
if (mFonts[ifont]==null)
mFonts[ifont] = new PngFont();
try
{
switch (ifont)
{
case BIG: mFonts[ifont].Init(null, "fonts/font_big_normal.png", "fonts/font_big_selected.png", 8, 12); break;
case SMALL: mFonts[ifont].Init("fonts/font_small_color.png", "fonts/font_small_normal.png", "fonts/font_small_selected.png", 6, 8); break;
default : break; // can't be
}
}
catch(Throwable e)
{
mMainCanvas.mMIDlet.mErrorReporter.ShowError("FontManager.LoadFont()", e.toString());
}
mUseFonts[ifont]++;
}
public void UnLoadFont(int ifont)
{
if (ifont<0 || ifont >= TOTAL)
return;
mUseFonts[ifont]--;
if (mUseFonts[ifont] <= 0 )
{
// Шрифт уже не используется и нужно выгрузить.
if (mFonts[ifont] != null)
{
mFonts[ifont].Destroy();
mFonts[ifont] = null;
}
}
}
public void Print(int ifont, Graphics g, String s, int x, int y)
{
Print(ifont, g, s, x, y, -1, -1, -1, false, 0);
}
// Вывод текста.
// x_wrap - перенос символов после той позиции по x
// х_max - максимальная возомжная позиция по х ( кол-во символов до обрезания )
// y_max - максимальная возомжная позиция по y
// -1 для этих значений значит неативные параметры
// enters позволять ли переносить строки через \n и \r. Иначе просто игнорировать
// skip - сколько строк пропустить перед выводом
public void Print(int ifont, Graphics g, String s, int x, int y, int x_max, int y_max, int x_wrap, boolean enters, int skip)
{
if (ifont<0 || ifont >= TOTAL)
return;
if (mUseFonts[ifont] <=0 )
return; // Шрифт не загружен.
if (mFonts[ifont] == null )
return; // Шрифт не загружен.
mFonts[ifont].Print(g, s, x, y, x_max, y_max, x_wrap, enters, skip);
}
// Подсчитывает сколько строк займет вывод, параметры одинаковые с Print(), кроме отсутствия Graphics g и int skip
public static int CountLines( String s, int x, int y, int x_max, int y_max, int x_wrap, boolean enters)
{
return PngFont.CountLines(s, x, y, x_max, y_max, x_wrap, enters);
}
// Подсчитывает количество символов в одной строке без переносов, пропуская цвета
public static int GetStringLength( String s )
{
return PngFont.GetStringLength( s );
}
}