MGL::Render::FontResource
Contents
MGL::Render::FontResource#
概要#
MGL::Render::FontResourceはフォントリソースを実装するための基底クラスです。
このクラスはフォントリソースを極力自前で実装する際に使用するクラスです。テキスト整形やタグによる装飾に対応させたい場合はMGL::Render::IndexedFontResourceの利用を検討してください。
フォントリソースの実装方法の詳細についてはフォントリソースの作成(準備中)を参照してください。
宣言#
namespace MGL::Render
{
class FontResource;
}
メンバ情報#
種類 |
名前 |
内容 |
バージョン |
---|---|---|---|
関数 |
1.0.0+ |
||
純粋仮想関数 |
指定した書体を保持しているかを取得 |
1.0.0+ |
|
純粋仮想関数 |
このフォントリソースの有効状態を取得 |
1.0.0+ |
|
仮想関数 |
文字列を表示 |
1.0.0+ |
|
仮想関数 |
文字をインデックス文字に変換 |
1.0.0+ |
|
仮想関数 |
インデックス文字をUTF-32の文字に変換 |
1.0.0+ |
|
仮想関数 |
グリフの取得 |
1.1.5+ |
|
関数 |
インデックス文字列のコンバータを取得 |
1.0.0+ |
|
関数 |
フォント機能の有効状態を取得 |
1.1.5+ |
|
関数 |
フォントの原点タイプを取得 |
1.1.5+ |
|
関数 |
フォント機能の有効状態を設定 |
1.1.5+ |
コンストラクタ#
宣言#
namespace MGL::Render
{
class FontResource
{
public:
constexpr FontResource(FontOrigin originType) noexcept;
};
}
引数#
- MGL::Render::FontOrigin originType
このフォントリソースの原点位置
説明#
このクラスのコンストラクタです。引数にはこのフォントリソースが扱う原点の位置を指定します。
原点の位置についてはMGL::Render::FontOriginの説明を参照してください。
利用例#
class YourFontResource : public MGL::Render::FontResource
{
public:
// コンストラクタで原点にベースラインを設定
constexpr YourFontResource() noexcept
: MGL::Render::FontResource(MGL::Render::FontOrigin::BaseLine)
{
}
};
バージョン情報#
- MGL 1.1.5
初回リリース
関連#
HasFontFace#
指定した書体を保持しているかを取得
宣言#
namespace MGL::Render
{
class FontResource
{
public:
[[nodiscard]] virtual bool HasFontFace(FontFaceType faceType) const noexcept = 0;
};
}
引数#
- MGL::Render::FontFaceType faceType
書体の種類
戻り値#
- bool
書体を保持していれば
true
、そうでなければfalse
説明#
このフォントリソースが指定された書体を保持しているかを取得します。
継承先においては、MGL::Render::FontFaceType::Default
は常にtrue
を返し、それ以外の書体については保持している場合にのみtrue
を返してください。
利用例#
- 継承先
class YourFontResource : MGL::Render::FontResource { public: // ... 省略 // デフォルトの書体のみを保持しているフォントリソースでの実装例 [[nodiscard]] bool HasFontFace(MGL::Render::FontFaceType faceType) const noexcept override { if (faceType == MGL::Render::FontFaceType::Default) { return true; } return false; } // ... 省略 };
バージョン情報#
- MGL 1.1.5
初回リリース
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
関連#
IsValid#
このフォントリソースの有効状態を取得
宣言#
namespace MGL::Render
{
class FontResource
{
public:
[[nodiscard]] virtual bool IsValid() const noexcept = 0;
};
}
戻り値#
- bool
有効な場合に
true
、無効な場合にfalse
説明#
このフォントリソースが有効であるかを取得するための関数です。この関数の戻り値はそのままMGL::Render::Font::IsValidの戻り値となります。
継承先においては、フォントリソースが利用可能な場合にtrue
を返すように実装してください。
利用例#
- 継承先
class YourFontResource : MGL::Render::FontResource { public: // コンストラクタ YourFontResource() noexcept : MGL::Render::FontResource(MGL::Render::FontOption::BaseLine) { _isValid = Initialize(); } // 有効状態を返す [[nodiscard]] bool IsValid() const noexcept override { return _isValid; } /* ... 省略 */ private: bool _isValid; };
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
Print#
文字列を表示
宣言#
namespace MGL::Render
{
class FontResource
{
public:
// (1) UTF-8文字列を表示
virtual bool Print(FontWorkdata &workdata,
const FontOption &option,
const char *text,
const Text::FormatArgs &formatArgs) noexcept;
// (2) インデックス文字列を表示
virtual bool Print(FontWorkdata &workdata,
const FontOption &option,
const Text::IndexedCharacter *indexedString,
const Text::FormatArgs &formatArgs) noexcept;
};
}
引数#
- (1) UTF-8文字列を表示
- MGL::Render::FontWorkdata &workdata
描画に使用するワークデータ
- const MGL::Render::FontOption &option
フォントの描画オプション
- const char *text
表示する文字列(UTF-8エンコーディング)
- const MGL::Text::FormatArgs &formatArgs
テキスト整形の引数
- (2) インデックス文字列を表示
- MGL::Render::FontWorkdata &workdata
描画に使用するワークデータ
- const MGL::Render::FontOption &option
フォントの描画オプション
- const MGL::Text::IndexedCharacter *indexedString
表示する文字列(インデックス文字列)
- const MGL::Text::FormatArgs &formatArgs
テキスト整形の引数
戻り値#
- bool
指定した文字列を最後まで表示できた場合は
true
、途中で中断された場合はfalse
説明#
指定された文字列を描画するための関数です。この関数はMGL::Render::Font::Printによって呼び出されます。
(1)と(2)の違いは、指定された文字列がUTF-8エンコーディングかインデックス文字列であるかの違いになります。フォントリソースをインデックス文字列に対応させる場合は(2)を実装したうえで、SetEnabledを用いてMGL::Render::FontFeature::IndexedCharacter
をtrue
に設定してください。
workdata
は描画に使用するパラメータのうち描画実行後に更新され得る値が格納された構造体です。フォントリソース側ではこの値を用いて描画を行い、実行後にMGL::Render::Font::Printを連続して描画できるよう適切な値に更新してください。
戻り値には指定された文字列が最後まで描画できたか否かを返します。描画中に表示上限数に達して中断した場合や、描画そのものを実行できなかった場合はfalse
を返してください。
利用例#
実装方法についてはフォントリソースの作成(準備中)を参照してください。
呼び出し側の例はフォントの利用方法の登録したフォントの利用方法を参照してください。
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.6
引数と戻り値を変更
- MGL 1.1.13
引数
formatArgs
のデフォルト引数を削除
関連#
ToIndexedCharacter#
文字をインデックス文字に変換
宣言#
namespace MGL::Render
{
class FontResource
{
public:
[[nodiscard]] virtual Text::IndexedCharacter ToIndexedCharacter(
char32_t character,
FontFaceType faceType) const noexcept;
};
}
引数#
- char32_t character
変換元のUTF-32文字
- MGL::Render::FontFaceType faceType
書体の指定
戻り値#
- MGL::Text::IndexedCharacter
変換後のインデックス文字
説明#
UTF-32エンコーディングの文字をインデックス文字に変換します。フォントリソースをインデックス文字列に対応させる場合は、この関数を実装したうえでSetEnabledを用いてMGL::Render::FontFeature::IndexedCharacter
をtrue
に設定してください。
対応したインデックス文字が存在しない場合はMGL::Text::kIndexedCharacterInvalid
または代替文字を返してください。
利用例#
- 継承先
class YourFontResource : MGL::Render::FontResource { public: /* ... 省略 */ // 文字をインデックス文字に変換 [[nodiscard]] MGL::Text::IndexedCharacter ToIndexedCharacter( char32_t character, MGL::Render::FontFaceType faceType) const noexcept override { // 保持していない書体は無効なインデックス文字を返す if (!HasFontFace(faceType)) { return MGL::Text::kIndexedCharacterInvalid; } return /* characterに対応したインデックス文字を返す */; } /* ... 省略 */ };
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.5
引数
faceType
を追加
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
関連#
ToUTF32#
インデックス文字をUTF-32の文字に変換
宣言#
namespace MGL::Render
{
class FontResource
{
public:
[[nodiscard]] virtual char32_t ToUTF32(
Text::IndexedCharacter indexedCharacter,
FontFaceType faceType) const noexcept;
};
}
引数#
- MGL::Text::IndexedCharacter indexedCharacter
変換元のインデックス文字
- MGL::Render::FontFaceType faceType
書体の指定
戻り値#
- char32_t
変換後のUTF-32文字
説明#
インデックス文字をUTF-32エンコーディングの文字に変換します。フォントリソースをインデックス文字列に対応させる場合は、この関数を実装したうえでSetEnabledを用いてMGL::Render::FontFeature::IndexedCharacter
をtrue
に設定してください。
対応したインデックス文字が存在しない場合はNUL文字(\0
)または代替文字を返してください。
利用例#
- 継承先
class YourFontResource : MGL::Render::FontResource { public: /* ... 省略 */ // 文字をインデックス文字に変換 [[nodiscard]] char32_t ToUTF32( MGL::Text::IndexedCharacter indexedCharacter, MGL::Render::FontFaceType faceType) const noexcept override { // 保持していない書体はNUL文字を返す if (!HasFontFace(faceType)) { return '\0'; } return /* indexedCharacterに対応したUTF-32文字を返す */; } /* ... 省略 */ };
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.5
引数
faceType
を追加
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
GetGlyph#
グリフの取得
宣言#
namespace MGL::Render
{
class FontResource
{
public:
// (1) UTF-32文字からグリフを取得
[[nodiscard]] virtual const FontGlyph *GetGlyph(
char32_t character,
FontFaceType faceType,
const FontOption &option) const noexcept
// (2) インデックス文字からグリフを取得
[[nodiscard]] virtual const FontGlyph *GetGlyph(
Text::IndexedCharacter character,
FontFaceType faceType,
const FontOption &option) const noexcept
};
}
引数#
- (1) UTF-32文字からグリフを取得
- char32_t character
UTF-32エンコーディングの文字
- MGL::Render::FontFaceType faceType
書体
- const MGL::Render::FontOption &option
フォント描画オプション
- (2) インデックス文字からグリフを取得
- MGL::Text::IndexedCharacter character
インデックス文字
- MGL::Render::FontFaceType faceType
書体
- const MGL::Render::FontOption &option
フォント描画オプション
戻り値#
- const MGL::Render::FontGlyph *
引数に対応したグリフ情報のアドレス。見つからない場合は
nullptr
説明#
UTF-32文字またはインデックス文字からグリフ情報を取得する関数です。フォントリソースをグリフ情報の取得に対応させる場合は、この関数を実装したうえでSetEnabledを用いてMGL::Render::FontFeature::GetGlyph
をtrue
に設定してください。
対応したグリフが見つからない場合はnullptr
を返してください。
利用例#
- 継承先
class YourFontResource : MGL::Render::FontResource { public: /* ... 省略 */ // UTF-32に対応したグリフを取得 [[nodiscard]] const MGL::Render::FontGlyph *GetGlyph( char32_t character, MGL::Render::FontFaceType faceType, const MGL::Render::FontOption &option) const noexcept override { // インデックス文字に変換して取得 return GetGlyph(ToIndexedCharacter(character, faceType), faceType, option); } // インデックス文字に対応したグリフを取得 [[nodiscard]] const FontGlyph *GetGlyph( MGL::Text::IndexedCharacter character, MGL::Render::FontFaceType faceType, const MGL::Render::FontOption &option) const noexcept override { // テーブルサイズを超えている場合は失敗 if (size_t(character) <= _glyphTableSize) { return nullptr; } // 対応したグリフ情報を返す return &_glyphTable[size_t(character)]; } /* ... 省略 */ private: // これらをグリフ情報のテーブルとし、有効なデータで初期化済みと仮定する MGL::STL::unique_ptr<MGL::Render::FontGlyph []> _glyphTable; // テーブル size_t _glyphTableSize; // テーブルサイズ };
バージョン情報#
- MGL 1.1.5
初回リリース
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
関連#
GetIndexConverter#
インデックス文字列のコンバータを取得
宣言#
namespace MGL::Render
{
class FontResource
{
public:
[[nodiscard]] constexpr const Text::IndexConverter &GetIndexConverter() const noexcept
};
}
戻り値#
- MGL::Text::IndexConverter
インデックス文字列に変換するためのコンバータクラス
説明#
UTF-8エンコーディングの文字列からこのフォントリソース向けのインデックス文字列に変換するためのコンバータクラスを取得します。フォントリソースがインデックス文字列に対応しており、ToIndexedCharacterおよびToUTF32が実装されている場合は有効なコンバータが取得可能となっています。
MGL::Render::Font::ToIndexedStringを呼び出した場合、内部でこの関数が呼び出されます。
利用例#
MGL::Render::Font::ToIndexedStringの利用例を参照してください。
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
関連#
IsEnabled#
フォント機能の有効状態を取得
宣言#
namespace MGL::Render
{
class FontResource
{
public:
[[nodiscard]] constexpr bool IsEnabled(FontFeature feature) const noexcept;
};
}
引数#
- MGL::Render::FontFeature feature
チェックするフォント機能
戻り値#
- bool
引数で指定した機能が有効であれば
true
、無効であればfalse
説明#
指定したフォント機能がこのフォントリソースで有効であるかを取得します。この関数はMGL::Render::Font::IsEnabledを呼び出した際に内部で呼び出されます。
初期状態では全ての機能にfalse
が設定されています。フォントリソースクラスの実装においては、対応している機能を必要に応じてSetEnabledを用いてtrue
に設定してください。
利用例#
MGL::Render::Font::IsEnabledの利用例を参照してください。
バージョン情報#
- MGL 1.1.5
初回リリース
MGL 1.1.4まではインデックス文字の対応可否のみ
CanConvertIndexedString()
で取得可能
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
関連#
GetOriginType#
フォントの原点タイプを取得
宣言#
namespace MGL::Render
{
class FontResource
{
public:
[[nodiscard]] constexpr FontOrigin GetOriginType() const noexcept;
};
}
戻り値#
- MGL::Render::FontOrigin
このフォントリソースの原点
説明#
このフォントリソースの原点のタイプを取得します。この関数はMGL::Render::Font::GetOriginTypeを呼び出した際に内部で呼び出されます。
この値はコンストラクタの引数に設定した値がそのまま返ります。
利用例#
MGL::Render::Font::GetOriginTypeの利用例を参照してください。
バージョン情報#
- MGL 1.1.5
初回リリース
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
関連#
SetEnabled#
フォント機能の有効状態を設定
宣言#
namespace MGL::Render
{
class FontResource
{
protected:
constexpr void SetEnabled(FontFeature feature, bool isEnabled) noexcept;
};
}
引数#
- MGL::Render::FontFeature feature
設定するフォント機能
- bool isEnabled
true
で有効化、false
で無効化
説明#
フォントリソースが対応しているフォント機能を設定するための関数です。
標準では全ての機能にfalse
が設定された状態です。機能を有効にしたい場合、必要な処理を実装したうえで、この関数でtrue
を指定してください。
この関数はprotected
であるため、継承先以外からは機能の有効状態を変更することはできません。
利用例#
// インデックス文字を有効化
SetEnabled(MGL::Render::FontFeature::IndexedCharacter, true);
// グリフの取得を有効化
SetEnabled(MGL::Render::FontFeature::GetGlyph, true);
バージョン情報#
- MGL 1.1.5
初回リリース