2010/05/31

フォールバック/FallBackの巻

Web+で日本語の表示がいまいちなのは、固定幅およびセリフに日本語フォントを設定できないのもありますが、/WebCore/platform/graphics/haiku/FontPlatformDataHaiku.cppの代替フォントが英語決めうちなのも大きいかと。
static void findMatchingFontFamily(const AtomicString& familyName, font_family* fontFamily)
{
if (BFont().SetFamilyAndStyle(familyName.string().utf8().data(), 0) == B_OK)
strncpy(*fontFamily, familyName.string().utf8().data(), B_FONT_FAMILY_LENGTH + 1);
else {
// If no font family is found for the given name, we use a generic font.
if (familyName.contains("Sans", false) != B_ERROR)
strncpy(*fontFamily, "DejaVu Sans", B_FONT_FAMILY_LENGTH + 1);
else if (familyName.contains("Serif", false) != B_ERROR)
strncpy(*fontFamily, "DejaVu Serif", B_FONT_FAMILY_LENGTH + 1);
else if (familyName.contains("Mono", false) != B_ERROR)
strncpy(*fontFamily, "DejaVu Mono", B_FONT_FAMILY_LENGTH + 1);
else {
// This is the fallback font.
strncpy(*fontFamily, "DejaVu Serif", B_FONT_FAMILY_LENGTH + 1);
}
}
}
個人的に使うなら、以前書いたように日本語フォント名に直してビルドすればOKですが、根本的には「代替フォント」=「ユーザーがSettingsパネルで設定したフォント」にすれば良いはずなんだけど…

ということで、最初はFontPlatformDataクラスからBWebSettingsを呼び出そうとして、トモダチをあれこれいじってコンパイルは通るようになったんだけどリンクでエラー…良く見たら、libWebCoreはlibWebKitをリンクしてないのね。ダメだこりゃ。
GetがだめならSetだよ(?)ということで、FontPlatformDataにフォント設定用の静的メンバーを追加して、SettingsWindow::_ApplySettings()あたりから呼び出してみる事に。これならリンクエラーは出ないはず。たぶん。きっとー

○○のみんな!!オラにC++力を分けてくれ!!!

2 件のコメント:

  1. 昨日コメントしたはずなんですけど、zetaで書いたのがまずかったか、登録されて無いようなので、再度。。。

    Beでは以下のようなものがあります、多分Haikuでも大丈夫かと。
    fontpanelで設定したシステムフォントは、
    const BFont *be_plain_font
    const BFont *be_bold_font
    const BFont *be_fixed_font
    としてグローバルポインタとして参照できます。
    注意:アプリ起動時の値です。途中で変更しても反映されません。

    返信削除
  2. SHINTAさん、びぁさん元気をありがとうございます。
    ちょっと本文の書き方が悪かったようですみません、ここでいう SettingsパネルはSystemでなく、Webpositiveの設定ウインドウのことです。
    ここで直接システムフォントでなく、Webpositiveの設定フォントを使うのは、将来Webpositiveの設定ウインドウで固定幅やセリフに日本語設定できるようにしようかなという考えがあるためです。(できるのか??)

    返信削除