いつもお世話になっております。
AddSubstitutionFontToHandle 関数で複数の不具合と思われる現象がありました。
【フォントデータ】
data/UDDigiKyokashoNK-R_50.dft -> C:\Windows\Fonts\UDDigiKyokashoN-R.ttc
data/aranyan_50.dft -> ttps://inatsuka.com/extra/haranyan/ からダウンロードした haranyan_marumi.ttf をインストール
【フォントハンドル生成コマンド】
CreateDXFontData.exe /F"UDDigiKyokashoNK-R" /B4 /S50 /O"UDDigiKyokashoNK-R_50.dft" /A"シフトJIS文字セット.txt"
CreateDXFontData.exe /F"はらませにゃんこ まるみ" /B4 /S50 /O"haranyan_50.dft" /A"シフトJIS文字セット.txt"
【問題の個所】
SetUseCharCodeFormat(DX_CHARCODEFORMAT_UTF8);
int ud = LoadFontDataToHandle("data/UDDigiKyokashoNK-R_50.dft");
int nyanko = LoadFontDataToHandle("data/haranyan_50.dft");
int nyanko2 = LoadFontDataToHandle("data/haranyan_50.dft");
AddSubstitutionFontToHandle(nyanko2, ud, 0, 0);
DrawStringToHandle(20, 20, u8"かん缶", 0xffffff, ud); // "かん缶" と描画
DrawStringToHandle(20, 20 + 50, u8"かん缶", 0xffffff, nyanko); // "かん" と描画 ※haranyan_50.dftに'缶'が無いので正常
DrawStringToHandle(20, 20 + 50 * 2, u8"かん缶", 0xffffff, nyanko2);// "かん" と描画 ※UDDigiKyokashoNK-R_50.dftに'缶'がありますが AddSubstitutionFontToHandleが反映されない
// ※(存在しない文字はデフォルトハンドル?か何かで補完していると思いますが AddSubstitutionFontToHandle を設定すると補完が消えます)
int meirio = CreateFontToHandle(u8"メイリオ", 50, 1, DX_FONTTYPE_ANTIALIASING_EDGE_4X4);
int nyanko = CreateFontToHandle(u8"はらませにゃんこ まるみ", 50, 1, DX_FONTTYPE_ANTIALIASING_EDGE_4X4);
int nyanko2 = CreateFontToHandle(u8"はらませにゃんこ まるみ", 50, 1, DX_FONTTYPE_ANTIALIASING_EDGE_4X4);
AddSubstitutionFontToHandle(nyanko, meirio, 0, 0);
DrawStringToHandle(20, 20, u8"らん䜌", 0xffffff, meirio); // "らん䜌" と描画
DrawStringToHandle(20, 20 + 50, u8"らん䜌", 0xffffff, nyanko); // "らん䜌" と描画
DrawStringToHandle(20, 20 + 50 * 2, u8"らん䜌", 0xffffff, nyanko2);// "らん" と描画
【要望】
急ぎでは無いですが、もし可能であれば以下のような機能があると助かりますm(__)m
・dftファイルから読み込んだ場合も CreateFontToHandleのようにデフォルトフォントハンドル(?)で存在しない文字の補完をする
・CreateDXFontData.exe でdftファイルを作成する際に 代替フォントハンドルを指定可能にする
※AddSubstitutionFontToHandleの修正で解決はしますが複数あったフォントファイルを1つにまとめてパフォーマンスを向上させたい
お手数をお掛けしますが何卒よろしくお願いいたします。