#region Using ステートメント
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Content.Pipeline;
using Microsoft.Xna.Framework.Content.Pipeline.Graphics;
using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler;
using System.Collections.Generic;
#endregion
namespace WpfFontPipeline
{
///
/// WPFスプライトコンテント
///
///
/// XNBファイルフォーマットドキュメントに書かれているSpriteFontと同じ物だが、
/// SpriteFontContentのフィールドは全て非公開フィールドなので、同じものを宣言している
/// http://create.msdn.com/en-US/sample/xnb_format
///
public class WpfSpriteFontContent
{
#region プロパティ
///
/// テクスチャの取得/設定
///
public Texture2DContent Texture { get; set; }
///
/// 文字グリフ領域の取得/設定
///
public List Glyphs { get; set; }
///
/// 文字グリフクリップ領域の取得/設定
///
public List Cropping { get; set; }
///
/// 文字マップの取得/設定
///
public List CharacterMap { get; set; }
///
/// 行間スペースの取得/設定
///
public int LineSpacing { get; set; }
///
/// 文字間スペースの取得/設定
///
public float Spacing { get; set; }
///
/// カーニングの取得/設定
///
public List Kerning { get; set; }
///
/// デフォルト文字の取得/設定
///
[ContentSerializer(AllowNull = true)]
public char? DefaultCharacter { get; set; }
#endregion
#region 初期化
public WpfSpriteFontContent()
{
Texture = new Texture2DContent();
Glyphs = new List();
Cropping = new List();
CharacterMap = new List();
Kerning = new List();
}
#endregion
}
///
/// WpfSpriteFontContentをXNBファイルへ出力するContentWriter
///
[ContentTypeWriter]
class WpfSpriteFontWriter : ContentTypeWriter
{
///
/// XNBファイルへ出力する
///
protected override void Write(ContentWriter output,
WpfSpriteFontContent value)
{
output.WriteObject(value.Texture);
output.WriteObject(value.Glyphs);
output.WriteObject(value.Cropping);
output.WriteObject(value.CharacterMap);
output.Write(value.LineSpacing);
output.Write(value.Spacing);
output.WriteObject(value.Kerning);
output.Write(value.DefaultCharacter.HasValue);
if (value.DefaultCharacter.HasValue)
{
output.Write(value.DefaultCharacter.Value);
}
}
///
/// ランタイム・リーダーの指定
///
///
public override string GetRuntimeReader(TargetPlatform targetPlatform)
{
// XNA標準のSpriteFontReaderの型名をフルネームで指定する事で
// 実行時にはSpriteFontとして使えるようになっている。
// XNAのバージョンによってPublickKeyTokenの値が変わることに注意
return "Microsoft.Xna.Framework.Content.SpriteFontReader, " +
"Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, " +
"Culture=neutral, PublicKeyToken=842cf8be1de50553";
}
}
}