#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"; } } }