1 /*---------------------------------------------------------------------------*
2   Project:  NintendoWare
3   File:     font_ArchiveFont.h
4 
5   Copyright (C)2009-2011 Nintendo/HAL Laboratory, Inc.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain proprietary
8   information of Nintendo and/or its licensed developers and are protected by
9   national and international copyright laws. They may not be disclosed to third
10   parties or copied or duplicated in any form, in whole or in part, without the
11   prior written consent of Nintendo.
12 
13   The content herein is highly confidential and should be handled accordingly.
14 
15   $Revision: 31311 $
16  *---------------------------------------------------------------------------*/
17 
18 #ifndef NW_FONT_ARCHIVEFONT_H_
19 #define NW_FONT_ARCHIVEFONT_H_
20 
21 #include <nn/types.h>
22 #include <nw/font/font_ArchiveFontBase.h>
23 
24 
25 namespace nw {
26 namespace font {
27 
28 //---------------------------------------------------------------------------
29 //! @brief        グリフグループが定義されているフォントリソースから、
30 //!               指定したグリフグループのみを抽出したフォントを構築します。
31 //---------------------------------------------------------------------------
32 class ArchiveFont : public ArchiveFontBase
33 {
34 public:
35     /* ------------------------------------------------------------------------
36             関数
37        ------------------------------------------------------------------------ */
38 
39     //! @name コンストラクタ / デストラクタ
40     //@{
41 
42     //! コンストラクタです。
43                     ArchiveFont();
44 
45     //! デストラクタです。
46     virtual         ~ArchiveFont();
47 
48     //@}
49 
50 
51     //! @name リソースの関連付け/解除
52     //@{
53 
54     //! @brief      フォントを構築するのに必要なバッファサイズを計算します。
55     //!
56     //! @param[in]  bfnt         フォントリソースの先頭部分へのポインタ。
57     //! @param[in]  glyphGroups  ロードするグリフグループを指定する文字列。
58     //!
59     //! @return     Construct() 関数または InitStreamingConstruct() 関数で、
60     //!             フォントを構築する場合に必要なバッファのサイズを返します。@n
61     //!             リソース @a bfnt が不正である等の理由で、
62     //!             バッファサイズが計算できなかった場合は 0 を返します。
63     //!
64     static u32      GetRequireBufferSize(
65                         const void*         bfnt,
66                         const char*         glyphGroups = LOAD_GLYPH_ALL
67                     );
68 
69     //! @brief      アーカイブフォントからグリフグループを抽出しフォントを構築します。
70     //!
71     //! @param[out] pBuffer     このインスタンスに関連付けるバッファへのポインタ。
72     //!                         128byte アライメントされている必要があります。
73     //! @param[in]  bufferSize  @a pBuffer が指すバッファのサイズ。
74     //! @param[in]  bfnt        メモリ上にロード済みのバイナリリソース (bfnt) へのポインタ。
75     //! @param[in]  glyphGroups ロードするグリフグループを指定する文字列。
76     //!
77     //! @return     フォントの構築が成功したなら true を、そうでなければ false を返します。@n
78     //!             アーカイブフォント @a bfnt が不正であったりバッファサイズが小さすぎると
79     //!             失敗します。
80     //!
81     bool            Construct(
82                         void*               pBuffer,
83                         u32                 bufferSize,
84                         const void*         bfnt,
85                         const char*         glyphGroups = LOAD_GLYPH_ALL
86                     );
87 
88     //! @brief      アーカイブフォントから順次読み込みでグリフグループを抽出し、
89     //!             フォントを構築するための初期化を行います。
90     //! @param[out] pContext    初期化するストリーミング構築コンテキストへのポインタ。
91     //! @param[out] pBuffer     このインスタンスに関連付けるバッファへのポインタ。
92     //!                         128byte アライメントされている必要があります。
93     //! @param[in]  bufferSize  @a pBuffer が指すバッファのサイズ。
94     //! @param[in]  glyphGroups ロードするグリフグループを指定する文字列。
95     //!
96     void            InitStreamingConstruct(
97                         ConstructContext*   pContext,
98                         void*               pBuffer,
99                         u32                 bufferSize,
100                         const char*         glyphGroups = LOAD_GLYPH_ALL
101                     );
102 
103     //! @brief      アーカイブフォントから順次読み込みでフォントを構築します。
104     //!
105     //! @param[out] pContext    InitStreamingConstruct() 関数で初期化した
106     //!                         ストリーミング構築コンテキストへのポインタ。
107     //! @param[in]  stream      アーカイブフォントの一部を格納したバッファへのポインタ。
108     //! @param[in]  streamSize  @a stream が指すバッファに格納されているデータのバイト数。
109     //!
110     //! @return     構築処理の経過状態を返します。
111     //!
112     ConstructResult StreamingConstruct(
113                         ConstructContext*   pContext,
114                         const void*         stream,
115                         u32                 streamSize);
116 
117     //! @brief      フォントを破棄します。
118     //!
119     //! @return     Construct() 関数または InitStreamingConstruct() 関数で、
120     //!             このインスタンスに割り当てたメモリ領域へのポインタを返します。
121     //!
122     void*           Destroy();
123 
124     //@}
125 
126     //! @name 文字情報の取得
127     //@{
128 
129     //! @brief      グリフデータを取得します。
130     //!
131     //! @param[out] pGlyph   グリフデータを受け取るバッファへのポインタ
132     //! @param[in]  c       グリフデータを取得する文字の文字コード
133     //!
134     virtual void    GetGlyph(
135                         Glyph*      pGlyph,
136                         CharCode    c
137                     ) const;
138 
139     //@}
140 
141 private:
142     /* ------------------------------------------------------------------------
143             関数
144        ------------------------------------------------------------------------ */
145     //---- グリフインデックス
146 
147     //! @brief      グリフインデックスに対応するグリフデータを取得します。
148     //!
149     //! @param[out] pGlyph  グリフデータを格納するバッファへのポインタ。
150     //! @param[in]  index  取得するグリフデータのグリフインデックス。
151     //!
152     void            GetGlyphFromIndex(
153                         Glyph*      pGlyph,
154                         GlyphIndex  index
155                     ) const;
156 };
157 
158 }   // namespace font
159 }   // namespace nw
160 
161 #endif //  NW_FONT_ARCHIVEFONT_H_
162