MGL::Render::IndexedFontResource#

概要#

MGL::Render::IndexedFontResourceはインデックス文字に対応したフォントリソースを簡潔に実装するための基底クラスです。

このクラスを継承したフォントリソースクラスは文字の描画処理を記述する必要はありません。文字に対応したグリフのインデックスを取得する処理と、そのインデックスからグリフ情報を得る処理の記述が主な実装内容となります。また、テキスト整形やタグの解析にも対応しています。

反面、このクラスが扱えるフォントリソースはビットマップフォントのみであり、頂点情報からなるスケーラブルなフォントリソースには対応していません。

より細かく描画処理を制御したい場合はMGL::Render::FontResourceを継承してフォントリソースを作成してください。

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

宣言#

namespace MGL::Render
{
    class IndexedFontResource : public FontResource;
}

メンバ情報#

種類

名前

内容

バージョン

関数

コンストラクタ

1.1.5+

純粋仮想関数

GetIndex

グリフのインデックスを取得

1.1.5+

純粋仮想関数

GetGlyph

グリフを取得

1.1.5+

純粋仮想関数

HasFontFace

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

1.1.5+

純粋仮想関数

IsValid

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

1.1.5+

純粋仮想関数

GetLineAdvance

改行の送りサイズを取得

1.1.5+

仮想関数

GetRubyOffset

ルビのオフセット値を取得

1.1.5+


コンストラクタ#

宣言#

namespace MGL::Render
{
    class IndexedFontResource : public FontResource
    {
    public:
        constexpr IndexedFontResource(FontOrigin originType) noexcept;
    };
}

引数#

MGL::Render::FontOrigin originType

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

説明#

このクラスのコンストラクタです。引数にはこのフォントリソースが扱う原点の位置を指定します。

原点の位置についてはMGL::Render::FontOriginの説明を参照してください。

利用例#

class YourFontResource : public MGL::Render::IndexedFontResource
{
public:
    // コンストラクタで原点にベースラインを設定
    constexpr YourFontResource() noexcept
        : MGL::Render::IndexedFontResource(MGL::Render::FontOrigin::BaseLine)
    {
    }
};

バージョン情報#

MGL 1.1.5
  • 初回リリース

関連#


GetIndex#

グリフのインデックスを取得

宣言#

namespace MGL::Render
{
    class IndexedFontResource : public FontResource
    {
    public:
        [[nodiscard]] virtual size_t GetIndex(
                char32_t character,
                FontFaceType faceType) const noexcept = 0;
    };
}

引数#

char32_t character

UTF-32文字

MGL::Render::FontFaceType faceType

書体の指定

戻り値#

size_t

引数に対応したグリフのインデックス。扱えない文字を指定された場合はsize_t型の最大値

説明#

UTF-32文字と書体タイプから対応したインデックスを返す関数です。この関数で返した値がインデックス文字へと変換されます。

継承先においては、GetGlyphで対応したグリフを取得できる値を返してください。

インデックスはインデックス文字に変換されるため、MGL::Text::kIndexedCharacterReserveStart (0xD000)よりも大きい値を扱うことはできません。この値より大きなインデックスを返した場合は無効な文字(MGL::Text::kIndexedCharacterInvalid)へと変換されます。

扱えない文字や書体を指定され、対応したインデックスが存在しない場合はSIZE_MAXなどのsize_t型の最大値を返してください。

ヒント

size_tの最大値を返す代わりに有効ないずれかのインデックスを返すことで、そのグリフを代替文字として表示できるようにもなります。

利用例#

フォントリソースの作成(準備中)を参照してください。

バージョン情報#

MGL 1.1.5
  • 初回リリース

MGL 1.1.13
  • 関数の戻り値に[[nodiscard]]属性を付与

関連#


GetGlyph#

グリフを取得

宣言#

namespace MGL::Render
{
    class IndexedFontResource : public FontResource
    {
    public:
        [[nodiscard]] virtual const FontGlyph *GetGlyph(
            size_t index,
            FontFaceType faceType,
            const FontOption &option) const noexcept = 0;
    };
}

引数#

size_t index

インデックス

MGL::Render::FontFaceType faceType

書体の指定

const MGL::Render::FontOption &option

フォントの描画オプション

戻り値#

const MGL::Render::FontGlyph *

引数に対応したグリフ情報のアドレス。一致するものがない場合はnullptr

説明#

インデックスからグリフを取得するための関数です。

引数indexにはGetIndexで返した値が指定されます。faceTypeはその際に指定されていた書体が渡されます。

optionは描画オプションに応じてグリフを変更する場合に使用します。この引数の使用は必須ではなく、多くの場合は参照する必要はありません。

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

利用例#

フォントリソースの作成(準備中)を参照してください。

バージョン情報#

MGL 1.1.5
  • 初回リリース

MGL 1.1.13
  • 関数の戻り値に[[nodiscard]]属性を付与

関連#


HasFontFace#

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

宣言#

namespace MGL::Render
{
    class IndexedFontResource : public FontResource
    {
    public:
        [[nodiscard]] virtual bool HasFontFace(FontFaceType faceType) const noexcept override = 0;
    };
}

引数#

MGL::Render::FontFaceType faceType

書体の種類

戻り値#

bool

書体を保持していればtrue、そうでなければfalse

説明#

このフォントリソースが指定された書体を保持しているかを取得します。

継承先においては、MGL::Render::FontFaceType::Defaultは常にtrueを返し、それ以外の書体については保持している場合にのみtrueを返してください。

利用例#

継承先
class YourFontResource : MGL::Render::IndexedFontResource
{
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 IndexedFontResource : public FontResource
    {
    public:
        [[nodiscard]] virtual bool IsValid() const noexcept override = 0;
    };
}

戻り値#

bool

有効な場合にtrue、無効な場合にfalse

説明#

このフォントリソースが有効であるかを取得するための関数です。この関数の戻り値はそのままMGL::Render::Font::IsValidの戻り値となります。

継承先においては、フォントリソースが利用可能な場合にtrueを返すように実装してください。

利用例#

継承先
class YourFontResource : MGL::Render::IndexedFontResource
{
public:
    // コンストラクタ
    YourFontResource() noexcept
        : MGL::Render::IndexedFontResource(MGL::Render::FontOption::BaseLine)
    {
        _isValid = Initialize();
    }

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

    /*
        ... 省略
     */

private:
    bool _isValid;
};

バージョン情報#

MGL 1.1.5
  • 初回リリース

MGL 1.1.13
  • 関数の戻り値に[[nodiscard]]属性を付与


GetLineAdvance#

改行の送りサイズを取得

宣言#

namespace MGL::Render
{
    class IndexedFontResource : public FontResource
    {
    public:
        [[nodiscard]] virtual float GetLineAdvance() const noexcept = 0;
    };
}

戻り値#

float

改行の送りサイズ

説明#

改行の際の送りサイズを返す関数です。継承先においては、次の行までのオフセット値を返すよう実装してください。

実際の送りサイズはこの関数の戻り値の他に、MGL::Render::Font::SetMarginおよびMGL::Render::Font::SetScaleの値が適用されます。

利用例#

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

    [[nodiscard]] float GetLineAdvance() const noexcept override
    {
        return _lineAdvance;
    }

    /*
        ... 省略
     */

private:
    float _lineAdvance; // 行の送り幅
};

バージョン情報#

MGL 1.1.5
  • 初回リリース

MGL 1.1.13
  • 関数の戻り値に[[nodiscard]]属性を付与


GetRubyOffset#

ルビのオフセット値を取得

宣言#

namespace MGL::Render
{
    class IndexedFontResource : public FontResource
    {
    public:
        [[nodiscard]] virtual float GetRubyOffset() const noexcept;
    };
}

戻り値#

float

ルビのオフセット値

説明#

フォントリソースがルビ文字を表示する場合において、親文字の原点位置からルビ文字の原点位置までのオフセットを返すための関数です。

原点位置がベースラインの横書き文字と仮定した場合、この値はスクリーン座標系におけるY座標のマイナス方向へと適用されます。

フォントリソースがルビ文字に対応していない場合、この関数を実装する必要はありません。その場合は常に0.0fが返ります。

利用例#

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

    [[nodiscard]] float GetRubyOffset() const noexcept override
    {
        return _rubyOffset;
    }

    /*
        ... 省略
     */

private:
    float _rubyOffset; // 親文字からルビ文字までのオフセット値
};

バージョン情報#

MGL 1.1.5
  • 初回リリース

MGL 1.1.13
  • 関数の戻り値に[[nodiscard]]属性を付与

関連#