MGL::Render::FontResource#

概要#

MGL::Render::FontResourceはフォントリソースを実装するための基底クラスです。

このクラスはフォントリソースを極力自前で実装する際に使用するクラスです。テキスト整形やタグによる装飾に対応させたい場合はMGL::Render::IndexedFontResourceの利用を検討してください。

フォントリソースの実装方法の詳細についてはフォントリソースの作成(準備中)を参照してください。

宣言#

namespace MGL::Render
{
    class FontResource;
}

メンバ情報#

種類

名前

内容

バージョン

関数

コンストラクタ

1.0.0+

純粋仮想関数

HasFontFace

指定した書体を保持しているかを取得

1.0.0+

純粋仮想関数

IsValid

このフォントリソースの有効状態を取得

1.0.0+

仮想関数

Print

文字列を表示

1.0.0+

仮想関数

ToIndexedCharacter

文字をインデックス文字に変換

1.0.0+

仮想関数

ToUTF32

インデックス文字をUTF-32の文字に変換

1.0.0+

仮想関数

GetGlyph

グリフの取得

1.1.5+

関数

GetIndexConverter

インデックス文字列のコンバータを取得

1.0.0+

関数

IsEnabled

フォント機能の有効状態を取得

1.1.5+

関数

GetOriginType

フォントの原点タイプを取得

1.1.5+

関数

SetEnabled

フォント機能の有効状態を設定

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:
        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:
    // ... 省略

    // デフォルトの書体のみを保持しているフォントリソースでの実装例
    virtual bool HasFontFace(MGL::Render::FontFaceType faceType) const noexcept override
    {
        if (faceType == MGL::Render::FontFaceType::Default)
        {
            return true;
        }

        return false;
    }

    // ... 省略
};

バージョン情報#

MGL 1.1.5から利用可能

関連#


IsValid#

このフォントリソースの有効状態を取得

宣言#

namespace MGL::Render
{
    class FontResource
    {
    public:
        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();
    }

    // 有効状態を返す
    virtual bool IsValid() const noexcept override
    {
        return _isValid;
    }

    /*
        ... 省略
     */

private:
    bool _isValid;
};

バージョン情報#

MGL 1.0.0から利用可能


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 = Text::FormatArgs()) noexcept;


        // (2) インデックス文字列を表示
        virtual bool Print(
            FontWorkdata &workdata,
            const FontOption &option,
            const Text::IndexedCharacter *indexedString,
            const Text::FormatArgs &formatArgs = Text::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::IndexedCharactertrueに設定してください。

workdataは描画に使用するパラメータのうち描画実行後に更新され得る値が格納された構造体です。フォントリソース側ではこの値を用いて描画を行い、実行後にMGL::Render::Font::Printを連続して描画できるよう適切な値に更新してください。

戻り値には指定された文字列が最後まで描画できたか否かを返します。描画中に表示上限数に達して中断した場合や、描画そのものを実行できなかった場合はfalseを返してください。

利用例#

実装方法についてはフォントリソースの作成(準備中)を参照してください。

呼び出し側の例はフォントの利用方法登録したフォントの利用方法を参照してください。

バージョン情報#

MGL 1.0.0から利用可能

MGL 1.1.6にて引数と戻り値を変更

関連#


ToIndexedCharacter#

文字をインデックス文字に変換

宣言#

namespace MGL::Render
{
    class FontResource
    {
    public:
        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::IndexedCharactertrueに設定してください。

対応したインデックス文字が存在しない場合はMGL::Text::kIndexedCharacterInvalidまたは代替文字を返してください。

利用例#

継承先
class YourFontResource : MGL::Render::FontResource
{
public:
    /*
        ... 省略
     */

    // 文字をインデックス文字に変換
    virtual 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から利用可能。

引数faceTypeは1.1.5から追加。

関連#


ToUTF32#

インデックス文字をUTF-32の文字に変換

宣言#

namespace MGL::Render
{
    class FontResource
    {
    public:
        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::IndexedCharactertrueに設定してください。

対応したインデックス文字が存在しない場合はNUL文字(\0)または代替文字を返してください。

利用例#

継承先
class YourFontResource : MGL::Render::FontResource
{
public:
    /*
        ... 省略
     */

    // 文字をインデックス文字に変換
    virtual 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から利用可能。

引数faceTypeは1.1.5から追加。


GetGlyph#

グリフの取得

宣言#

namespace MGL::Render
{
    class FontResource
    {
    public:
        // (1) UTF-32文字からグリフを取得
        virtual const FontGlyph *GetGlyph(
                char32_t character,
                FontFaceType faceType,
                const FontOption &option) const noexcept

        // (2) インデックス文字からグリフを取得
        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::GetGlyphtrueに設定してください。

対応したグリフが見つからない場合はnullptrを返してください。

利用例#

継承先
class YourFontResource : MGL::Render::FontResource
{
public:
    /*
        ... 省略
     */

    // UTF-32に対応したグリフを取得
    virtual 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);
    }

    // インデックス文字に対応したグリフを取得
    virtual 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から利用可能

関連#


GetIndexConverter#

インデックス文字列のコンバータを取得

宣言#

namespace MGL::Render
{
    class FontResource
    {
    public:
        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から利用可能

関連#


IsEnabled#

フォント機能の有効状態を取得

宣言#

namespace MGL::Render
{
    class FontResource
    {
    public:
        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()で取得可能。

関連#


GetOriginType#

フォントの原点タイプを取得

宣言#

namespace MGL::Render
{
    class FontResource
    {
    public:
        constexpr FontOrigin GetOriginType() const noexcept;
    };
}

戻り値#

MGL::Render::FontOrigin

このフォントリソースの原点

説明#

このフォントリソースの原点のタイプを取得します。この関数はMGL::Render::Font::GetOriginTypeを呼び出した際に内部で呼び出されます。

この値はコンストラクタの引数に設定した値がそのまま返ります。

利用例#

MGL::Render::Font::GetOriginTypeの利用例を参照してください。

バージョン情報#

MGL 1.1.5から利用可能

関連#


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から利用可能

関連#