1 /*---------------------------------------------------------------------------*
2   Project:  NintendoWare
3   File:     lyt_FontContainer.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_LYT_FONTCONTAINER_H_
19 #define NW_LYT_FONTCONTAINER_H_
20 
21 #include <nw/types.h>
22 
23 #include <nw/ut/ut_LinkList.h>
24 #include <nw/lyt/lyt_ResourceAccessor.h>
25 #include <cstddef>
26 
27 namespace nw
28 {
29 namespace lyt
30 {
31 
32 //---------------------------------------------------------------------------
33 //! :private
34 //!
35 //! @brief フォントオブジェクトを保持するクラスです。
36 //!
37 //! @sa FontContainer
38 //!
39 //! @since 2009/09/18 初版。
40 //---------------------------------------------------------------------------
41 class FontRefLink
42 {
43 public:
44     //! フォントリソース名の最大です。
45     static const int FONTNAMEBUF_MAX = 128;
46 
47     //----------------------------------------
48     //! @name コンストラクタ/デストラクタ
49     //@{
50 
51     //! @brief コンストラクタです。
52     //!
53     //! @since 2009/09/18 初版。
54     //!
55     FontRefLink();
56 
57     //! @brief デストラクタです。
58     //!
59     //! @details
60     //! 所有の指定されたフォントオブジェクトを破棄します。
61     //!
62     //! @since 2009/09/18 初版。
63     //! @date 2010/01/26 所有の指定されたフォントオブジェクトは破棄する仕様に変更しました。
64     //!
65     ~FontRefLink();
66 
67     //@}
68 
69     //----------------------------------------
70     //! @name 設定/取得
71     //@{
72 
73     //! @brief 情報を設定します。
74     //!
75     //! @param name  フォントリソースの名前です。
76     //! @param pFont  フォントオブジェクトへのポインタです。
77     //! @param own  コンテナがフォントオブジェクトを所有するか指定します。
78     //!             true を指定した場合にはコンテナがフォントオブジェクトを破棄します。
79     //!
80     //! @since 2009/09/18 初版。
81     //! @date 2010/01/26 own 引数を追加しました。
82     //!
83     void Set(
84         const char* name,
85         font::Font* pFont,
86         bool own
87     );
88 
89     //! @brief 関連付けられているフォント名を取得します。
90     //!
91     //! @return 関連付けられているフォント名を返します。
92     //!
93     //! @since 2009/09/18 初版。
94     //!
GetFontName()95     const char* GetFontName() const
96     {
97         return m_FontName;
98     }
99 
100     //! @brief 設定されているフォントオブジェクトを取得します。
101     //!
102     //! @return フォントオブジェクトへのポインタを返します。
103     //!
104     //! @since 2009/09/18 初版。
105     //!
GetFont()106     font::Font* GetFont() const
107     {
108         return m_pFont;
109     }
110 
111     //@}
112 
113     //! :private
114     //! リストのリンク情報です。
115     ut::LinkListNode m_Link;
116 
117 protected:
118     //! @details :private
119     char m_FontName[FONTNAMEBUF_MAX];
120 
121     //! @details :private
122     font::Font* m_pFont;
123 
124     //! @details :private
125     bool m_Own;
126 };
127 
128 //---------------------------------------------------------------------------
129 //! :category リソースアクセサ
130 //!
131 //! @brief フォントを保持するクラスです。
132 //!
133 //! @details
134 //! ResourceAccessor の実装でフォントを保持するのに利用されます。
135 //!
136 //! @sa ResourceAccessor
137 //!
138 //! @since 2010/01/26 初版。
139 //---------------------------------------------------------------------------
140 class FontContainer : public ut::LinkList<FontRefLink, offsetof(FontRefLink, m_Link)>
141 {
142 public:
143     //----------------------------------------
144     //! @name コンストラクタ/デストラクタ
145     //@{
146 
147     //! @brief デストラクタです。
148     //!
149     //! @details
150     //! 所有しているフォントオブジェクトも破棄します。
151     //!
152     //! @since 2010/01/26 初版。
153     //!
154     ~FontContainer();
155 
156     // @}
157 
158     //----------------------------------------
159     //! @name 登録/破棄
160     //@{
161 
162     //! @brief 登録を抹消します。
163     //!
164     //! @details
165     //! 所有しているフォントオブジェクトを破棄します。
166     //!
167     //! @since 2010/01/26 初版。
168     //!
169     void Finalize();
170 
171     //! @brief フォントを登録します。
172     //!
173     //! @param name フォントリソースの名前です。
174     //! @param pFont  フォントオブジェクトです。
175     //! @param own  フォントオブジェクトを所有するか指定します。
176     //!             true を指定した場合にはコンテナがフォントオブジェクトを破棄します。
177     //!
178     //! @return 登録キーを返します。キーは登録の抹消に使用します。
179     //!
180     //! @since 2010/01/26 初版。
181     //!
182     FontKey RegistFont(const char* name, font::Font* pFont, bool own);
183 
184     //! @brief フォントの登録を抹消します。
185     //!
186     //! @param key  登録時に取得した登録キーを指定します。
187     //!
188     //! @since 2010/01/26 初版。
189     //!
190     void UnregistFont(FontKey key);
191 
192     //@}
193 
194     //----------------------------------------
195     //! @name 検索
196     //@{
197 
198     //! @brief フォントを検索します。
199     //!
200     //! @param name  検索するフォントの名前です。
201     //!
202     //! @return 見つかったフォント、または NULL を返します。
203     //!
204     //! @since 2010/01/26 初版。
205     //!
206     nw::font::Font* FindFontByName(
207         const char* name
208     );
209 
210     //! @brief フォントを検索します。
211     //!
212     //! @param key  検索するフォントの登録キーです。
213     //!
214     //! @return 見つかったフォント、または NULL を返します。
215     //!
216     //! @since 2010/11/30 初版。
217     //!
218     nw::font::Font* FindFontByKey(
219         FontKey key
220     );
221 
222     //@}
223 };
224 
225 }   // namespace lyt
226 }   // namespace nw
227 
228 /* NW_LYT_FONTCONTAINER_H_ */
229 #endif
230