12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JUCEAdvent Calendar 2018

Day 6

JUCEで日本語文字を表示するときのTips

Last updated at Posted at 2018-11-16

JUCEって何?

JUCE (Jules' Utility Class Extensions)は、C++言語によるマルチメディア系アプリケーションの開発を支援するフレームワークです。クロスプラットフォーム設計のライブラリと、付属されているプロジェクトジェネレータ『Projucer』から各種IDE(VisualStudio, Xcode, Makefile)向けにプロジェクトファイルを出力することで、ワンソースからWindows, macOS, Linux, iOS, Android で動作するアプリケーションを作成することができます。
公式サイト

日本語の文字表示が豆腐になってしまう

JUCEフレームワークは主に英語圏で開発されている事もあり、英語以外の言語の文字表示があまり意識されていません。
以下の画像はjuce::AudioDeviceSelectorComponentの表示例ですが、チャンネル名に日本語文字列が含まれている場合、日本語の文字表示が豆腐になってしまいます。

tofumoji.PNG

簡単な解決方法

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

     ~~~中略~~~
}

日本語文字が正しく表示された

nottofumoji.PNG

ただし、デフォルトの設定を変更するため、アプリケーション全体にMeiryo UIフォントが適用されてしまうという副作用があります。
コンポーネントごとに適用したいフォントを切り替えるには、面倒ですがコンポーネントごとにフォントを切り替えるように実装コードを記述しましょう。

参考

12
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?