default.ttfが存在しない場合に、システムの一部のフォントを自動的に取得する機能があ ればいいと思うのですが、どうでしょうか。 一例としてパッチファイルを添付します。
ご提案ありがとうございます。 いただいたパッチでは、Linux の特定のディストリビューションを対象としてフォントの 場所をハードコーディングしていると思います。 しかし、異なるディストリビューションでは必ずしもこの場所にフォントがあるとは限り ませんし、Windows や Android などOSが異なるとフォントの場所も全く違ってくると思 います。 もし、ハードコーディングをせずに、マルチプラットフォーム環境でシステムのフォント を自動取得できる方法があれば、ぜひ採用させていただきたいと思います、
フォント名からフォントファイルのパスを取得するサンプルを載せます。 ただし、fontconfigに依存してしまうので、それが動かない環境では問題が残ります。 VLCメディアプレイヤーから引用したコードなので、不要な機能が残っていると思います。
いただいたコードを参考に組み込んでみました。 USE_FONTCONFIG を定義すると有効になります。 ただし、フォント名を決め打ちにしたくはないため、monospace フォントを探してくるよ うに設定しています。そのため、必ずしも日本語フォントが見つかるとは限らないと思い ます。 フォント名を指定せずに日本語フォントを確実に選択できるよい方法があればいいのです が。 20101127 以降で使用できます。 こちらの環境ではうまくいっていますが、他の環境では分かりません。 お試しいただきご報告をいただければ幸いです。
日本語指定の件は、以下のように FC_LANG を "ja" に設定すればよいようなの で、そのように変更しました。 FcPatternAddString( pat, FC_LANG, (const FcChar8*)"ja" );
Makefile.LinuxのLIBSで-lfontconfigの指定が必要ではないでしょうか。 FcPatternAddString( pat, FC_LANG, (const FcChar8*)"ja" ); ですが、自分の環境(Ubuntu 10.10)では、日本語が含まれていないDejaVuSans.ttfを拾っ てしまいました。 DejaVuフォントをシステムから削除すれば回避できるかもしれませんが、複数のパッケー ジがこのフォントに依存しているので、確認はできませんでした。
こちらの環境は Debian squeeze ですが、 FC_LANG を ja にすると VL-Gothic-Regular.ttf が FC_LANG を en にすると DejaVuSans.ttf が選択されます。 http://d.hatena.ne.jp/over80/20100504/1272993532 が参考にならないでしょうか。 コンソールから fc-match :lang=ja fc-match serif:lang=ja fc-match sans-serif:lang=ja fc-match monospace:lang=ja と入力して日本語フォントが見つからない場合、システムのフォント設定の問題かもしれ ません。 もし、例えば fc-match monospace:lang=ja のみ日本語フォントを返す場合には FcPatternAddString( pat, FC_LANG, (const FcChar8*)"ja" ); の後に FcPatternAddString( pat, FC_FAMILY, (FcChar8*)"monospace"); を追加すると日本語が表示できるようになると思います。(解決策ではありませんが) > Makefile.LinuxのLIBSで-lfontconfigの指定が必要ではないでしょうか。 こちらの環境では無くてもコンパイルできるのですが、他の環境でうまくいかない場合は 追加します。
フォントについて、こちらの環境に問題があったようで、完全な日本語環境(Ubuntu日本語 Remix環境)を導入したら日本語フォントが取得できるようになりました。 Makefileの件も、Makefile.Linuxを元にdebian/rules(以前リポジトリからダウンロードし た物)を修正したら、-lfontconfigなしでもコンパイルできるようになりました。 (Makefile.Linuxには問題がありませんでした)
ご確認ありがとうございます。 フォントを必ず別に用意しなければいけないのは問題だと思っていたのですが、Unix系の みとはいえよい解決方法が見つかってよかったです。 それでは本レポートは完了とさせていただきます。