新規プロジェクト作成時に自動実装されるPluginEditorのコードをみていく

概要

今回は、オーディオプラグイン用プロジェクトの作成時に自動実装されるコードを、公式ドキュメントをみながらまとめていきます。

最近はGUIの部分を深掘りしたいという気持ちが高まっているので、今回はPluginEditor.h/cppに絞っていきます。

具体的には、JUCE: Class Indexを参考にしながら、このメンバ関数は何をするのか、引数を変えるとどう変化するのかを調査します。

環境

  • macOS Big Sur 11.2.2
  • JUCE v6.0.8

コンストラクタ

PluginEditor.h/cppは、オーディオプラグインのGUIを担当するファイルです。

まずは下記コンストラクタです。今回はTestPluginという名前のプロジェクトを作成したので、TestPluginAudioProcessorEditorという名前になっています。

TestPluginAudioProcessorEditor::TestPluginAudioProcessorEditor (TestPluginAudioProcessor& p)
    : AudioProcessorEditor (&p), audioProcessor (p)
{
    setSize (400, 300);
}

setSize()

setSize()は、コンポーネントのサイズを変更するメンバ関数です。下記のように設定したい横幅と縦幅を引数に指定します。

void Component::setSize	
(	
int newWidth,
int newHeight 
)		

また、このメンバ関数はTestPluginAudioProcessorEditorクラスの親の親にあたる、Componentクラスで定義されているものです。

それでは実際に色々な値を設定してみて、どう変化するのか確かめてみます。

今回のように、横幅と縦幅を400 × 300にすると下記のようになります。

また、横幅と縦幅を200 × 400にすると下記のようになります。

paint()

paint()はウィンドウの描画時に実行される関数です。Graphicsクラスのオブジェクトへの参照gに対して、様々なメンバ変数を呼び出すことで描画の設定をしていきます。

void TestPluginAudioProcessorEditor::paint (juce::Graphics& g)
{
    g.fillAll (getLookAndFeel().findColour (juce::ResizableWindow::backgroundColourId));
    g.setColour (juce::Colours::white);
    g.setFont (15.0f);
    g.drawFittedText ("Hello World!", getLocalBounds(), juce::Justification::centred, 1);
}

それでは一つずつ詳しくみていきます。

fillAll()

fillAll()は、指定した色で塗りつぶしてくれるメンバ関数です。

void Graphics::fillAll (Colour colourToUse) const

getLookAndFeel()

getLookAndFeel()は、コンポーネントに適切なlook-and-feel(外観と操作感)の設定値を返すメンバ関数です。

もし対象のコンポーネントにlook-and-feelが明示的に設定されていない場合は、親コンポーネントのlook-and-feelを返します。また、親を持たないコンポーネントの場合は、デフォルトのlook-and-feelを返すようになっています。

findColour()

findColour()は、与えられたカラーIDで登録された色を探して、その色を返すメンバ関数です。

Colour LookAndFeel::findColour (int colourId) const

なので今回の下記コードは、JUCEのデフォルト色(look-and-feel)の背景部分の色を返すということになります。

g.fillAll (getLookAndFeel().findColour (juce::ResizableWindow::backgroundColourId));

下記の実際にビルドしたプラグインの色をみて貰えばわかるように、JUCEで馴染みのあるブラックになっています。

もしlook-and-feelを使用しないで色を塗りたければ、下記のような引数を指定します。

    g.fillAll (juce::Colours::darkgreen);

setColour()

setColour()は、現在描画されている色を指定した色で上塗りするメンバ関数です。

今回はwhiteが指定されており、文字色が白色に上塗りされています。

試しにcyan色に変えてみると下記のようになります。

    g.setColour (juce::Colours::cyan);

setFont()

setFont()は、文字の大きさを変更するメンバ関数です。引数にはfloat型の数値を指定します。

大きさが15.0fの場合はこのようなサイズ感です。

    g.setFont (15.0f);

また、大きさが50.0fの場合はこのくらいのサイズ感です。

    g.setFont (50.0f);

drawFittedText()

drawFittedText()は、与えられたスペースに文字列を描写するメンバ関数です。

void Graphics::drawFittedText	
(
const String& text,
Rectangle<int> area,
Justification justificationFlags,
int maximumNumberOfLines,
float	minimumHorizontalScale = 0.0f 
)		const

描写させたい文字列、長方形スペースの大きさ、長方形スペース内に文字をどう配置するか等を引数に渡してあげます。

getLocalBounds()

getLocalBounds()はコンポーネントの原点を基準にして、コンポーネントと同じサイズの長方形を返すメンバ関数です。

では、列挙体Justification::Flagsの列挙子centredからcentredTopに変更するとどうなるのか試してみます。

    g.drawFittedText ("Hello World!", getLocalBounds(), juce::Justification::centredTop, 1);

このように文字列がTopの中心付近に配置されました。

resized()

void TestPluginAudioProcessorEditor::resized()
{
}

resized()は、ウィンドウの生成時やサイズ変更時に実行される関数です。ここのブロック内は自動実装されません。

例えばJUCE Tutorialのresized()のブロック内は下記のようになっています。

void TutorialPluginAudioProcessorEditor::resized()
{
    midiVolume.setBounds (40, 30, 20, getHeight() - 60);
}

このようにウィンドウの生成、サイズ変更が行われた時、コンポーネントをどこに配置するか設定したりします。

最後に

今回は新規プロジェクト作成時に自動実装されるコードを少し丁寧にみていきました。

これまでTutotrialをやりながら、「なんとなくこういうことをする関数なんだな」とぼやぼやすることが多かったのですが、公式ドキュメントを読み込む癖がついたこともあり、少しは理解ができるようになってきました。

とりあえずチュートリアルやってみた系の記事は今回で最後にしようと思います。

次回は、マウスでコンポーネントを操作する際に、クリックして操作している間だけマウスが消えるような機能を実装してみる記事を投稿しようかと思います。

参考文献

JUCE: Class Index

Comments

Copied title and URL