IDWriteFontFace5
COM公式ドキュメント
フォントフェイスの種類、適切なファイル参照、およびフェイス識別データを含みます。(IDWriteFontFace5)
メソッド 5
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
フォントで定義された軸の数を取得します。これには静的軸と可変軸の両方が含まれます。
戻り値
Type: UINT32
フォントフェイスで定義された軸の数。
フォントで使用される軸値のリストを取得します。
| fontAxisValues | DWRITE_FONT_AXIS_VALUE* | out | GetFontAxisValues がフォント軸値のリストを書き込む DWRITE_FONT_AXIS_VALUE 構造体の配列へのポインター。この配列のサイズと有効期間の管理は呼び出し側の責任です。割り当てる配列のサイズを決定するには、GetFontAxisValueCount を呼び出してください。 |
| fontAxisValueCount | DWORD | in | fontAxisValues が指すメモリブロックに書き込むフォント軸値の最大数。 |
戻り値
Type: HRESULT
関数が成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコード を返します。
| 戻り値 | 説明 |
|---|---|
| E_INVALIDARG | fontAxisValueCount が GetFontAxisValueCount から返された値と一致しません。 |
解説(Remarks)
値はフォントで定義された正規の順序で返され、実際にサポートされる範囲にクランプされます。これは必ずしも CreateFontFace に渡した軸値の配列と同じであるとは限りません。
例
// main.cpp
#include <unknwn.h>
#include <winrt/base.h>
#include <dwrite_3.h>
int main()
{
winrt::init_apartment();
winrt::com_ptr<IDWriteFactory> factory;
winrt::check_hresult(::DWriteCreateFactory(
DWRITE_FACTORY_TYPE_SHARED,
__uuidof(factory),
reinterpret_cast<IUnknown**>(factory.put())));
std::wstring filePath{ L"C:\\WINDOWS\\FONTS\\AGENCYB.TTF" };
winrt::com_ptr<IDWriteFontFile> fontFile;
factory->CreateFontFileReference(
filePath.c_str(),
nullptr,
fontFile.put());
std::array<IDWriteFontFile*, 1> fontFiles{ fontFile.get() };
winrt::com_ptr<IDWriteFontFace> fontFace;
winrt::check_hresult(factory->CreateFontFace(
DWRITE_FONT_FACE_TYPE_TRUETYPE,
1,
fontFiles.data(),
0,
DWRITE_FONT_SIMULATIONS_NONE,
fontFace.put()
));
winrt::com_ptr<IDWriteFontFace5> fontFace5{ fontFace.as<IDWriteFontFace5>() };
UINT32 axisValueCount{ fontFace5->GetFontAxisValueCount() };
DWRITE_FONT_AXIS_VALUE* axisValues{ new DWRITE_FONT_AXIS_VALUE[axisValueCount] };
winrt::check_hresult(
fontFace5->GetFontAxisValues(axisValues, axisValueCount));
DWRITE_FONT_AXIS_VALUE* eachAxisValue{ axisValues };
for (int ix = 0; ix < axisValueCount; ++ix, ++eachAxisValue)
{
printf("%zu,%f\n\r", eachAxisValue->axisTag, eachAxisValue->value);
}
delete[] axisValues;
}
このフォントフェイスのリソースが可変軸をサポートするかどうかを判定します。(IDWriteFontFace5::HasVariations)
戻り値
Type: BOOL
フォントフェイスのリソースが可変軸をサポートする場合は true。それ以外の場合は false。
このフォントフェイスの基になるフォントリソースを取得します。
| fontResource | IDWriteFontResource** | out | IDWriteFontResource インターフェイスへのポインターのアドレス。正常に完了すると、この関数はポインターに新しく作成されたフォントリソースオブジェクトを設定します。 |
戻り値
Equals が呼び出されているフォントフェイスオブジェクトと、パラメーターとして渡されたフォントフェイスオブジェクトとの等価比較を実行します。
| fontFace | IDWriteFontFace* | in | Equals が呼び出されているフォントフェイスオブジェクトと比較するフォントフェイスオブジェクトへのポインター。 |
戻り値
Type: BOOL
フォントフェイスオブジェクトが等しい場合は true。それ以外の場合は false。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDWriteFontFace5 "{98EFF3A5-B667-479A-B145-E2FA5B9FDC29}" #usecom global IDWriteFontFace5 IID_IDWriteFontFace5 "{}" #comfunc global IDWriteFontFace5_GetFontAxisValueCount 53 #comfunc global IDWriteFontFace5_GetFontAxisValues 54 var,int #comfunc global IDWriteFontFace5_HasVariations 55 #comfunc global IDWriteFontFace5_GetFontResource 56 sptr #comfunc global IDWriteFontFace5_Equals 57 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IDWriteFontFace5 "{98EFF3A5-B667-479A-B145-E2FA5B9FDC29}" #usecom global IDWriteFontFace5 IID_IDWriteFontFace5 "{}" #comfunc global IDWriteFontFace5_GetFontAxisValueCount 53 #comfunc global IDWriteFontFace5_GetFontAxisValues 54 sptr,int #comfunc global IDWriteFontFace5_HasVariations 55 #comfunc global IDWriteFontFace5_GetFontResource 56 sptr #comfunc global IDWriteFontFace5_Equals 57 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。