自作スペクトログラム解析VST3プラグインにマウスカーソル位置にハイライトを表示する機能を追加した。
ハイライト表示
マウスカーソル位置の音階を判定して、その音階のラインに透明な白でハイライトを表示する。
また、ピアノロールの鍵盤を赤で表示する。
実装方法
VST3のコントローラクラスで、マウスイベント (`onMouseMoved`, `onMouseEntered`, `onMouseExited`) をオーバーライドして実装すればよい。
描画負荷
マウス移動のたびに描画要求を行うと、描画処理が終わらないうちに次の描画要求が発生して、描画キューがあふれて異常終了してしまう。
setDirty()は、controllerからは直接呼び出さず、UIスレッドでタイマーで呼び出すように対処した。
class MyEditor : public VSTGUI::VST3Editor { public: using VST3Editor::VST3Editor; MyEditor(Steinberg::Vst::EditController* c, VSTGUI::UTF8StringPtr t, VSTGUI::UTF8StringPtr xml) : VST3Editor(c, t, xml) { setIdleRate(16); // ~60Hz } VSTGUI::CMessageResult notify(VSTGUI::CBaseObject* sender, const char* message) override { if (message == VSTGUI::CVSTGUITimer::kMsgTimer) { if (auto* f = getFrame()) { if (auto* ctrl = dynamic_cast<VstPitchController*>(getController())) { if (ctrl->consumeUIRedrawRequest()) { if (!f->isDirty()) f->setDirty(true); } } } } return VSTGUI::VST3Editor::notify(sender, message); } };