|  |  | @@ -46,6 +46,9 @@ public: | 
		
	
		
			
			|  |  |  | fUI(this, 0, editParameterCallback, setParameterCallback, setStateCallback, sendNoteCallback, uiResizeCallback) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | fUI.setTitle(host->uiName); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (host->uiParentId != 0) | 
		
	
		
			
			|  |  |  | fUI.setTransientWinId(host->uiParentId); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | // --------------------------------------------- | 
		
	
	
		
			
				|  |  | @@ -198,7 +201,7 @@ protected: | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | const NativeParameter* getParameterInfo(const uint32_t index) const override | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | CARLA_ASSERT(index < getParameterCount()); | 
		
	
		
			
			|  |  |  | CARLA_SAFE_ASSERT_RETURN(index < getParameterCount(), nullptr); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | static NativeParameter param; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -234,9 +237,6 @@ protected: | 
		
	
		
			
			|  |  |  | param.ranges.def = ranges.def; | 
		
	
		
			
			|  |  |  | param.ranges.min = ranges.min; | 
		
	
		
			
			|  |  |  | param.ranges.max = ranges.max; | 
		
	
		
			
			|  |  |  | //param.ranges.step = ranges.step; | 
		
	
		
			
			|  |  |  | //param.ranges.stepSmall = ranges.stepSmall; | 
		
	
		
			
			|  |  |  | //param.ranges.stepLarge = ranges.stepLarge; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | return ¶m; | 
		
	
	
		
			
				|  |  | @@ -244,7 +244,7 @@ protected: | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | float getParameterValue(const uint32_t index) const override | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | CARLA_ASSERT(index < getParameterCount()); | 
		
	
		
			
			|  |  |  | CARLA_SAFE_ASSERT_RETURN(index < getParameterCount(), 0.0f); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | return fPlugin.getParameterValue(index); | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @@ -260,10 +260,7 @@ protected: | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | const NativeMidiProgram* getMidiProgramInfo(const uint32_t index) const override | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | CARLA_ASSERT(index < getMidiProgramCount()); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (index >= fPlugin.getProgramCount()) | 
		
	
		
			
			|  |  |  | return nullptr; | 
		
	
		
			
			|  |  |  | CARLA_SAFE_ASSERT_RETURN(index < getMidiProgramCount(), nullptr); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | static NativeMidiProgram midiProgram; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -280,7 +277,7 @@ protected: | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | void setParameterValue(const uint32_t index, const float value) override | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | CARLA_ASSERT(index < getParameterCount()); | 
		
	
		
			
			|  |  |  | CARLA_SAFE_ASSERT_RETURN(index < getParameterCount(),); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | fPlugin.setParameterValue(index, value); | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @@ -290,8 +287,7 @@ protected: | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | const uint32_t realProgram(bank * 128 + program); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (realProgram >= fPlugin.getProgramCount()) | 
		
	
		
			
			|  |  |  | return; | 
		
	
		
			
			|  |  |  | CARLA_SAFE_ASSERT_RETURN(realProgram < getMidiProgramCount(),); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | fPlugin.setProgram(realProgram); | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @@ -300,8 +296,8 @@ protected: | 
		
	
		
			
			|  |  |  | #if DISTRHO_PLUGIN_WANT_STATE | 
		
	
		
			
			|  |  |  | void setCustomData(const char* const key, const char* const value) override | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | CARLA_ASSERT(key != nullptr); | 
		
	
		
			
			|  |  |  | CARLA_ASSERT(value != nullptr); | 
		
	
		
			
			|  |  |  | CARLA_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); | 
		
	
		
			
			|  |  |  | CARLA_SAFE_ASSERT_RETURN(value != nullptr,); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | fPlugin.setState(key, value); | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @@ -323,21 +319,20 @@ protected: | 
		
	
		
			
			|  |  |  | #if DISTRHO_PLUGIN_IS_SYNTH | 
		
	
		
			
			|  |  |  | void process(float** const inBuffer, float** const outBuffer, const uint32_t frames, const NativeMidiEvent* const midiEvents, const uint32_t midiEventCount) override | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | uint32_t i; | 
		
	
		
			
			|  |  |  | MidiEvent realMidiEvents[midiEventCount]; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | for (i=0; i < midiEventCount && i < kMaxMidiEvents; ++i) | 
		
	
		
			
			|  |  |  | for (uint32_t i=0; i < midiEventCount; ++i) | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | const NativeMidiEvent* const midiEvent(&midiEvents[i]); | 
		
	
		
			
			|  |  |  | MidiEvent* const realMidiEvent(&fRealMidiEvents[i]); | 
		
	
		
			
			|  |  |  | const NativeMidiEvent& midiEvent(midiEvents[i]); | 
		
	
		
			
			|  |  |  | MidiEvent& realMidiEvent(realMidiEvents[i]); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | realMidiEvent->frame = midiEvent->time; | 
		
	
		
			
			|  |  |  | realMidiEvent->size  = midiEvent->size; | 
		
	
		
			
			|  |  |  | realMidiEvent.frame = midiEvent.time; | 
		
	
		
			
			|  |  |  | realMidiEvent.size  = midiEvent.size; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | for (uint8_t j=0; j < midiEvent->size; ++j) | 
		
	
		
			
			|  |  |  | realMidiEvent->buf[j] = midiEvent->data[j]; | 
		
	
		
			
			|  |  |  | carla_copy<uint8_t>(realMidiEvent.buf, midiEvent.data, midiEvent.size); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | fPlugin.run(inBuffer, outBuffer, frames, fRealMidiEvents, i); | 
		
	
		
			
			|  |  |  | fPlugin.run(inBuffer, outBuffer, frames, realMidiEvents, midiEventCount); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | #else | 
		
	
		
			
			|  |  |  | void process(float** const inBuffer, float** const outBuffer, const uint32_t frames, const NativeMidiEvent* const, const uint32_t) override | 
		
	
	
		
			
				|  |  | @@ -361,45 +356,40 @@ protected: | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | void uiIdle() override | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | CARLA_ASSERT(fUiPtr != nullptr); | 
		
	
		
			
			|  |  |  | CARLA_SAFE_ASSERT_RETURN(fUiPtr != nullptr,); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (fUiPtr != nullptr) | 
		
	
		
			
			|  |  |  | fUiPtr->carla_idle(); | 
		
	
		
			
			|  |  |  | fUiPtr->carla_idle(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | void uiSetParameterValue(const uint32_t index, const float value) override | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | CARLA_ASSERT(fUiPtr != nullptr); | 
		
	
		
			
			|  |  |  | CARLA_ASSERT(index < getParameterCount()); | 
		
	
		
			
			|  |  |  | CARLA_SAFE_ASSERT_RETURN(fUiPtr != nullptr,); | 
		
	
		
			
			|  |  |  | CARLA_SAFE_ASSERT_RETURN(index < getParameterCount(),); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (fUiPtr != nullptr) | 
		
	
		
			
			|  |  |  | fUiPtr->carla_setParameterValue(index, value); | 
		
	
		
			
			|  |  |  | fUiPtr->carla_setParameterValue(index, value); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | # if DISTRHO_PLUGIN_WANT_PROGRAMS | 
		
	
		
			
			|  |  |  | void uiSetMidiProgram(const uint8_t, const uint32_t bank, const uint32_t program) override | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | CARLA_ASSERT(fUiPtr != nullptr); | 
		
	
		
			
			|  |  |  | CARLA_SAFE_ASSERT_RETURN(fUiPtr != nullptr,); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | const uint32_t realProgram(bank * 128 + program); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (realProgram >= fPlugin.getProgramCount()) | 
		
	
		
			
			|  |  |  | return; | 
		
	
		
			
			|  |  |  | CARLA_SAFE_ASSERT_RETURN(realProgram < getMidiProgramCount(),); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (fUiPtr != nullptr) | 
		
	
		
			
			|  |  |  | fUiPtr->carla_setMidiProgram(realProgram); | 
		
	
		
			
			|  |  |  | fUiPtr->carla_setMidiProgram(realProgram); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | # endif | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | # if DISTRHO_PLUGIN_WANT_STATE | 
		
	
		
			
			|  |  |  | void uiSetCustomData(const char* const key, const char* const value) override | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | CARLA_ASSERT(fUiPtr != nullptr); | 
		
	
		
			
			|  |  |  | CARLA_ASSERT(key != nullptr); | 
		
	
		
			
			|  |  |  | CARLA_ASSERT(value != nullptr); | 
		
	
		
			
			|  |  |  | CARLA_SAFE_ASSERT_RETURN(fUiPtr != nullptr,); | 
		
	
		
			
			|  |  |  | CARLA_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); | 
		
	
		
			
			|  |  |  | CARLA_SAFE_ASSERT_RETURN(value != nullptr,); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (fUiPtr != nullptr) | 
		
	
		
			
			|  |  |  | fUiPtr->carla_setCustomData(key, value); | 
		
	
		
			
			|  |  |  | fUiPtr->carla_setCustomData(key, value); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | # endif | 
		
	
		
			
			|  |  |  | #endif | 
		
	
	
		
			
				|  |  | @@ -420,8 +410,9 @@ protected: | 
		
	
		
			
			|  |  |  | #if DISTRHO_PLUGIN_HAS_UI | 
		
	
		
			
			|  |  |  | void uiNameChanged(const char* const uiName) override | 
		
	
		
			
			|  |  |  | { | 
		
	
		
			
			|  |  |  | if (fUiPtr != nullptr) | 
		
	
		
			
			|  |  |  | fUiPtr->carla_setUiTitle(uiName); | 
		
	
		
			
			|  |  |  | CARLA_SAFE_ASSERT_RETURN(fUiPtr != nullptr,); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | fUiPtr->carla_setUiTitle(uiName); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | #endif | 
		
	
		
			
			|  |  |  | 
 | 
		
	
	
		
			
				|  |  | @@ -430,10 +421,6 @@ protected: | 
		
	
		
			
			|  |  |  | private: | 
		
	
		
			
			|  |  |  | PluginExporter fPlugin; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | #if DISTRHO_PLUGIN_IS_SYNTH | 
		
	
		
			
			|  |  |  | MidiEvent fRealMidiEvents[kMaxMidiEvents]; | 
		
	
		
			
			|  |  |  | #endif | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | #if DISTRHO_PLUGIN_HAS_UI | 
		
	
		
			
			|  |  |  | // UI | 
		
	
		
			
			|  |  |  | UICarla* fUiPtr; | 
		
	
	
		
			
				|  |  | 
 |