/**
 * システム拡張
 */
class System
{
	/**
	 * レンダリング済みフォントデータをファイルに保存する
	 *
	 * @param storage    保存するファイル名
	 * @param characters 保存する文字（キャラクタコード）の入った配列
	 * @param callback   情報とイメージを取得するコールバック
	 *                   キャラクタコードを引数に取り，レイヤ(PreRenderedFontImage)を返す関数であること
	 *                   function(ch) { return layer; }
	 */
	function savePreRenderedFont(storage, characters, callback);

	/**
	 * レンダリング済みフォントデータをファイルから読み込む
	 *
	 * @param storage    読み込みファイル名
	 * @param characters 一覧の文字を受け取るための配列
	 * @param callback   将来的に画像イメージを受け取るコールバックが実装される予定(現状では必ずvoidを渡すこと）
	 */
	function loadPreRenderedFont(storage, characters, callback);
}

/**
 * @description フォントイメージ（※このクラスは実際には存在しません！）
 *
 * callbackで返すレイヤオブジェクトに付加する追加情報を定義します。
 * 普通のレイヤオブジェクトに対して，値を代入して渡してください。
 * レイヤの画像は(0,0)-(blackbox_x-1,blackbox_y-1)の領域のα情報のみ参照され，65段階（0〜64）にリサンプルされます。
 *
 * callbackの返り値として同じインスタンスを何度も使いまわしても問題ありません。
 */
class PreRenderedFontImage extends Layer
{
	// GLYPHMETRICS.gmBlackBoxX
	property blackbox_x; 
	// GLYPHMETRICS.gmBlackBoxY
	property blackbox_y; 
	// GLYPHMETRICS.gmptGlyphOrigin.x
	property origin_x;   
	// GLYPHMETRICS.gmptGlyphOrigin.y
	property origin_y;   
	// GLYPHMETRICS.gmCellIncX
	property inc_x;      
	// GLYPHMETRICS.gmCellIncY
	property inc_y;      
	// GetTextExtentPoint32 の返すサイズの SIZE.cx
	property inc;        
}

/**
 * レイヤ拡張
 */
class Layer
{
	/**
	 * System.savePreRenderedFont用の文字を描画する
	 * @param ch   キャラクタコード
	 *
	 * @description 自分自身のオブジェクトの PreRenderedFontImage のプロパティを更新します
	 */
	function drawGlyph(ch);

	/**
	 * グリフ情報を設定する
	 * @param ch   キャラクタコード
	 *
	 * @description 自身のオブジェクトの PreRenderedFontImage のプロパティのみを更新します
	 * （drawGlyph のグリフ画像を描画しない関数です）
	 */
	function setGlyphInfo(ch);
}

