WpfSpriteFontContent.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #region Using ステートメント
  2. using Microsoft.Xna.Framework;
  3. using Microsoft.Xna.Framework.Content;
  4. using Microsoft.Xna.Framework.Content.Pipeline;
  5. using Microsoft.Xna.Framework.Content.Pipeline.Graphics;
  6. using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler;
  7. using System.Collections.Generic;
  8. #endregion
  9. namespace WpfFontPipeline
  10. {
  11. /// <summary>
  12. /// WPFスプライトコンテント
  13. /// </summary>
  14. /// <remarks>
  15. /// XNBファイルフォーマットドキュメントに書かれているSpriteFontと同じ物だが、
  16. /// SpriteFontContentのフィールドは全て非公開フィールドなので、同じものを宣言している
  17. /// http://create.msdn.com/en-US/sample/xnb_format
  18. /// </remarks>
  19. public class WpfSpriteFontContent
  20. {
  21. #region プロパティ
  22. /// <summary>
  23. /// テクスチャの取得/設定
  24. /// </summary>
  25. public Texture2DContent Texture { get; set; }
  26. /// <summary>
  27. /// 文字グリフ領域の取得/設定
  28. /// </summary>
  29. public List<Rectangle> Glyphs { get; set; }
  30. /// <summary>
  31. /// 文字グリフクリップ領域の取得/設定
  32. /// </summary>
  33. public List<Rectangle> Cropping { get; set; }
  34. /// <summary>
  35. /// 文字マップの取得/設定
  36. /// </summary>
  37. public List<char> CharacterMap { get; set; }
  38. /// <summary>
  39. /// 行間スペースの取得/設定
  40. /// </summary>
  41. public int LineSpacing { get; set; }
  42. /// <summary>
  43. /// 文字間スペースの取得/設定
  44. /// </summary>
  45. public float Spacing { get; set; }
  46. /// <summary>
  47. /// カーニングの取得/設定
  48. /// </summary>
  49. public List<Vector3> Kerning { get; set; }
  50. /// <summary>
  51. /// デフォルト文字の取得/設定
  52. /// </summary>
  53. [ContentSerializer(AllowNull = true)]
  54. public char? DefaultCharacter { get; set; }
  55. #endregion
  56. #region 初期化
  57. public WpfSpriteFontContent()
  58. {
  59. Texture = new Texture2DContent();
  60. Glyphs = new List<Rectangle>();
  61. Cropping = new List<Rectangle>();
  62. CharacterMap = new List<char>();
  63. Kerning = new List<Vector3>();
  64. }
  65. #endregion
  66. }
  67. /// <summary>
  68. /// WpfSpriteFontContentをXNBファイルへ出力するContentWriter
  69. /// </summary>
  70. [ContentTypeWriter]
  71. class WpfSpriteFontWriter : ContentTypeWriter<WpfSpriteFontContent>
  72. {
  73. /// <summary>
  74. /// XNBファイルへ出力する
  75. /// </summary>
  76. protected override void Write(ContentWriter output,
  77. WpfSpriteFontContent value)
  78. {
  79. output.WriteObject(value.Texture);
  80. output.WriteObject(value.Glyphs);
  81. output.WriteObject(value.Cropping);
  82. output.WriteObject(value.CharacterMap);
  83. output.Write(value.LineSpacing);
  84. output.Write(value.Spacing);
  85. output.WriteObject(value.Kerning);
  86. output.Write(value.DefaultCharacter.HasValue);
  87. if (value.DefaultCharacter.HasValue)
  88. {
  89. output.Write(value.DefaultCharacter.Value);
  90. }
  91. }
  92. /// <summary>
  93. /// ランタイム・リーダーの指定
  94. /// </summary>
  95. /// <returns></returns>
  96. public override string GetRuntimeReader(TargetPlatform targetPlatform)
  97. {
  98. // XNA標準のSpriteFontReaderの型名をフルネームで指定する事で
  99. // 実行時にはSpriteFontとして使えるようになっている。
  100. // XNAのバージョンによってPublickKeyTokenの値が変わることに注意
  101. return "Microsoft.Xna.Framework.Content.SpriteFontReader, " +
  102. "Microsoft.Xna.Framework.Graphics, Version=4.0.0.0, " +
  103. "Culture=neutral, PublicKeyToken=842cf8be1de50553";
  104. }
  105. }
  106. }