LoFiBeats・84分の作業用BGMを作成しました!

JUCEプログラミング、Colors in JUCE2、juce::Coloursでの色名指定について

1_プログラミング

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クラスの色名のエラーチェックというところでしょうか。

タイトルとURLをコピーしました