JUCEの色名指定のチュートリアルを進めていきます。
現状、どこで役立つかわ不明な内容だね〜
JUCEチュートリアル、前回に引き続き、「Interface Design」の「Colours in JUCE」チュートリアルを進めていきます。この記事では、「Specifying colours by name」の項目からチュートリアルに沿って進めていきます。今回の内容は、今後どこで役立つが今の所わかりません^^;
公式のチュートリアルページはこちらになります。
こんな人の役に立つかも
・JUCEプログラミングを勉強している人
・JUCEチュートリアル「Colors in JUCE」をやっている人
・Colors in JUCEのデモアプリを実装している人
Specifying colours by name
JUCEでは色名で色を指定することができます。その際、JUCEのColoursクラスで指定することができます。この色名はHTMLの色とほぼ同じということです。
findColourForName関数での色名チェック
「findColourForName関数」は、色の名称でJUCEの色名があるかどうかを探すことができる関数です。デモアプリでは、色名を指定しているcolour配列を次のように変更して、色名があるかどうかのチェックを追加できます。
MainComponent.cppのpaint関数を変更します。
void MainComponent::paint (juce::Graphics& g)
{
//...略...
//[1]コメントアウトしました。
//juce::Array<juce::Colour> colours{ juce::Colours::red, juce::Colours::green, juce::Colours::blue };
//[2]以下の処理に変更しました。
auto defaultColour = juce::Colours::black;
juce::Array<juce::Colour> colours{ juce::Colours::findColourForName("red", defaultColour),
juce::Colours::findColourForName("green", defaultColour),
juce::Colours::findColourForName("blue", defaultColour) };
//...略...
Coloursオブジェクトを格納している配列を[1]から[2]のように変更しました。
それぞれの引数に文字列の色名を渡してfindColourForName関数で探しています。第二引数には、指定した文字列の色名が見つからなかった場合の色を入れます。今回は、[1]で指定したblackを指定しています。
大文字と小文字
色名の指定は、大文字、小文字は関係ないようです。次のようにそれぞれの色名を変更して試してみます。
juce::Array<juce::Colour> colours{ juce::Colours::findColourForName("darKred", defaultColour),
juce::Colours::findColourForName("dArkgreen", defaultColour),
juce::Colours::findColourForName("darkbLue", defaultColour) };
大文字小文字がばらばらでも色名として認識されました。
スペース
スペースを含むと、色名として識別しません。
juce::Array<juce::Colour> colours { juce::Colours::findColourForName ("Dark Red", defaultColour),
juce::Colours::findColourForName ("Dark Green", defaultColour),
juce::Colours::findColourForName ("Dark Blue", defaultColour) };
そのため、文字列からスペースを省くような関数を用意すると、入力する色名がユーザーからのものであったりした場合便利な処理になります。
MainComponent.hのpublicな関数に以下のメンバ関数を定義します。
class MainComponent : public juce::Component
{
public:
//...略...
juce::String MainComponent::removeSpaces(const juce::String& text);//追加しました。
private:
//...略...
MainComponent.cppの一番最後に次のように「removeSpaces」関数を定義しました。
juce::String MainComponent::removeSpaces(const juce::String& text)
{
return text.removeCharacters(" ");
}
JUCE::Stringクラスの「removeString」関数で引数に与えた「” “」(スペース)をすべて取り除くようにするような関数になっています。
そして、この関数にスペースを含む文字列を与えることにします。paint関数の色配列の色名に、この関数を通してあげます。
juce::Array<juce::Colour> colours{ juce::Colours::findColourForName(removeSpaces("Dark Red"), defaultColour),
juce::Colours::findColourForName(removeSpaces("Dark Green"), defaultColour),
juce::Colours::findColourForName(removeSpaces("Dark Blue"), defaultColour) };
これで、スペースを含む色名も正常に色として認識するようになります。
juce::Coloursクラスの色名のエラーチェックというところでしょうか。