177: システムフォントの自動取得機能案


最新状況

タイトル システムフォントの自動取得機能案
状態 完了
カテゴリ 追加機能
作成日時 2010-11-22 00:43:11
最終更新日時 2010-12-01 07:17:22

履歴

1 | 2010-11-22 00:43:11 | 提案
vbkaisetsu at gmail.com
default.ttfが存在しない場合に、システムの一部のフォントを自動的に取得する機能があ
ればいいと思うのですが、どうでしょうか。

一例としてパッチファイルを添付します。
autofont.patch (text/plain, 2513 bytes) [表示] [ダウンロード]

2 | 2010-11-23 00:17:39 | 提案
ogapee at aqua.dti2.ne.jp
ご提案ありがとうございます。

いただいたパッチでは、Linux の特定のディストリビューションを対象としてフォントの
場所をハードコーディングしていると思います。

しかし、異なるディストリビューションでは必ずしもこの場所にフォントがあるとは限り
ませんし、Windows や Android などOSが異なるとフォントの場所も全く違ってくると思
います。

もし、ハードコーディングをせずに、マルチプラットフォーム環境でシステムのフォント
を自動取得できる方法があれば、ぜひ採用させていただきたいと思います、

3 | 2010-11-23 13:18:44 | 提案
vbkaisetsu at gmail.com
フォント名からフォントファイルのパスを取得するサンプルを載せます。
ただし、fontconfigに依存してしまうので、それが動かない環境では問題が残ります。

VLCメディアプレイヤーから引用したコードなので、不要な機能が残っていると思います。
get_fontpath_by_name.c (text/plain, 2075 bytes) [表示] [ダウンロード]

4 | 2010-11-27 21:25:43 | 修正済
ogapee at aqua.dti2.ne.jp
いただいたコードを参考に組み込んでみました。
USE_FONTCONFIG を定義すると有効になります。

ただし、フォント名を決め打ちにしたくはないため、monospace フォントを探してくるよ
うに設定しています。そのため、必ずしも日本語フォントが見つかるとは限らないと思い
ます。

フォント名を指定せずに日本語フォントを確実に選択できるよい方法があればいいのです
が。

20101127 以降で使用できます。
こちらの環境ではうまくいっていますが、他の環境では分かりません。
お試しいただきご報告をいただければ幸いです。

5 | 2010-11-27 22:09:10 | 修正済
ogapee at aqua.dti2.ne.jp
日本語指定の件は、以下のように FC_LANG を "ja" に設定すればよいようなの
で、そのように変更しました。

  FcPatternAddString( pat, FC_LANG, (const FcChar8*)"ja" );

6 | 2010-11-29 20:25:04 | 修正済
vbkaisetsu at gmail.com
Makefile.LinuxのLIBSで-lfontconfigの指定が必要ではないでしょうか。

FcPatternAddString( pat, FC_LANG, (const FcChar8*)"ja" );
ですが、自分の環境(Ubuntu 10.10)では、日本語が含まれていないDejaVuSans.ttfを拾っ
てしまいました。
DejaVuフォントをシステムから削除すれば回避できるかもしれませんが、複数のパッケー
ジがこのフォントに依存しているので、確認はできませんでした。

7 | 2010-11-30 10:39:24 | 修正済
ogapee at aqua.dti2.ne.jp
こちらの環境は 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の指定が必要ではないでしょうか。

こちらの環境では無くてもコンパイルできるのですが、他の環境でうまくいかない場合は
追加します。

8 | 2010-11-30 17:42:55 | 修正済
vbkaisetsu at gmail.com
フォントについて、こちらの環境に問題があったようで、完全な日本語環境(Ubuntu日本語
Remix環境)を導入したら日本語フォントが取得できるようになりました。

Makefileの件も、Makefile.Linuxを元にdebian/rules(以前リポジトリからダウンロードし
た物)を修正したら、-lfontconfigなしでもコンパイルできるようになりました。
(Makefile.Linuxには問題がありませんでした)

9 | 2010-12-01 07:17:22 | 完了
ogapee at aqua.dti2.ne.jp
ご確認ありがとうございます。

フォントを必ず別に用意しなければいけないのは問題だと思っていたのですが、Unix系の
みとはいえよい解決方法が見つかってよかったです。

それでは本レポートは完了とさせていただきます。

[リプライをつける]
Bug Tracking System 影舞 0.8.8
Powered by Ruby 1.8.7