JUCEって何?
JUCE (Jules' Utility Class Extensions)は、C++言語によるマルチメディア系アプリケーションの開発を支援するフレームワークです。クロスプラットフォーム設計のライブラリと、付属されているプロジェクトジェネレータ『Projucer』から各種IDE(VisualStudio, Xcode, Makefile)向けにプロジェクトファイルを出力することで、ワンソースからWindows, macOS, Linux, iOS, Android で動作するアプリケーションを作成することができます。
公式サイト
日本語の文字表示が豆腐になってしまう
JUCEフレームワークは主に英語圏で開発されている事もあり、英語以外の言語の文字表示があまり意識されていません。
以下の画像はjuce::AudioDeviceSelectorComponent
の表示例ですが、チャンネル名に日本語文字列が含まれている場合、日本語の文字表示が豆腐になってしまいます。
簡単な解決方法
JUCEフレームワークでは、アプリケーション中のGUIの表示に関する詳細な実装(ルック・アンド・フィール)がjuce::LookAndFeel
クラスで定義されています。
アプリケーションには必ずデフォルトのLookAndFeelオブジェクトが用意されているので、その設定を変更することでアプリケーション全体で使用するフォントを切り替えることができます。
以下では、OSがWindowsの場合ではWindowsに標準でインストールされていて日本語グリフが含まれているMeiryo UI
フォントを、macOSの場合ではArial Unicode MS
フォントを、Linuxの場合ではIPAGothic
フォントを使用するように実装しています。
MainComponent::MainComponent()
{
#if JUCE_WINDOWS
juce::String typeFaceName = "Meiryo UI";
juce::Desktop::getInstance().getDefaultLookAndFeel().setDefaultSansSerifTypefaceName(typeFaceName);
#elif JUCE_MAC
juce::String typeFaceName = "Arial Unicode MS";
juce::Desktop::getInstance().getDefaultLookAndFeel().setDefaultSansSerifTypefaceName(typeFaceName);
#elif JUCE_LINUX
juce::String typeFaceName = "IPAGothic";
juce::Desktop::getInstance().getDefaultLookAndFeel().setDefaultSansSerifTypefaceName(typeFaceName);
#endif
~~~中略~~~
}
日本語文字が正しく表示された
ただし、デフォルトの設定を変更するため、アプリケーション全体にMeiryo UI
フォントが適用されてしまうという副作用があります。
コンポーネントごとに適用したいフォントを切り替えるには、面倒ですがコンポーネントごとにフォントを切り替えるように実装コードを記述しましょう。
参考