@@ -451,7 +451,7 @@ public: | |||||
* \param sendOsc Send message change over OSC | * \param sendOsc Send message change over OSC | ||||
* \param sendCallback Send message change to registered callback | * \param sendCallback Send message change to registered callback | ||||
*/ | */ | ||||
void setActive(const bool active, const bool sendOsc, const bool sendCallback); | |||||
virtual void setActive(const bool active, const bool sendOsc, const bool sendCallback); | |||||
/*! | /*! | ||||
* Set the plugin's dry/wet signal value to \a value.\n | * Set the plugin's dry/wet signal value to \a value.\n | ||||
@@ -539,7 +539,7 @@ public: | |||||
* \see setBalanceLeft() | * \see setBalanceLeft() | ||||
* \see setBalanceRight() | * \see setBalanceRight() | ||||
*/ | */ | ||||
void setParameterValueByRIndex(const int32_t rindex, const float value, const bool sendGui, const bool sendOsc, const bool sendCallback); | |||||
void setParameterValueByRealIndex(const int32_t rindex, const float value, const bool sendGui, const bool sendOsc, const bool sendCallback); | |||||
/*! | /*! | ||||
* Set parameter's \a parameterId MIDI channel to \a channel.\n | * Set parameter's \a parameterId MIDI channel to \a channel.\n | ||||
@@ -659,11 +659,6 @@ public: | |||||
*/ | */ | ||||
virtual void sampleRateChanged(const double newSampleRate); | virtual void sampleRateChanged(const double newSampleRate); | ||||
/*! | |||||
* Recreate latency audio buffers. | |||||
*/ | |||||
void recreateLatencyBuffers(); | |||||
/*! | /*! | ||||
* TODO. | * TODO. | ||||
*/ | */ | ||||
@@ -711,7 +706,7 @@ public: | |||||
/*! | /*! | ||||
* Send all midi notes off for the next audio callback.\n | * Send all midi notes off for the next audio callback.\n | ||||
* This doesn't send the actual MIDI All-Notes-Off event, but 128 note-offs instead. | |||||
* This doesn't send the actual MIDI All-Notes-Off event, but 128 note-offs instead (if ctrlChannel is valid). | |||||
* \note RT call | * \note RT call | ||||
*/ | */ | ||||
void sendMidiAllNotesOff(); | void sendMidiAllNotesOff(); | ||||
@@ -732,6 +727,50 @@ public: | |||||
*/ | */ | ||||
void postRtEventsRun(); | void postRtEventsRun(); | ||||
// ------------------------------------------------------------------- | |||||
// Plugin initializers | |||||
struct Initializer { | |||||
CarlaEngine* const engine; | |||||
const unsigned int id; | |||||
const char* const filename; | |||||
const char* const name; | |||||
const char* const label; | |||||
}; | |||||
static size_t getNativePluginCount(); | |||||
static const PluginDescriptor* getNativePluginDescriptor(const size_t index); | |||||
static CarlaPlugin* newNative(const Initializer& init); | |||||
static CarlaPlugin* newBridge(const Initializer& init, const BinaryType btype, const PluginType ptype, const char* const bridgeBinary); | |||||
static CarlaPlugin* newLADSPA(const Initializer& init, const LADSPA_RDF_Descriptor* const rdfDescriptor); | |||||
static CarlaPlugin* newDSSI(const Initializer& init, const char* const guiFilename); | |||||
static CarlaPlugin* newLV2(const Initializer& init); | |||||
static CarlaPlugin* newVST(const Initializer& init); | |||||
static CarlaPlugin* newVST3(const Initializer& init); | |||||
static CarlaPlugin* newGIG(const Initializer& init, const bool use16Outs); | |||||
static CarlaPlugin* newSF2(const Initializer& init, const bool use16Outs); | |||||
static CarlaPlugin* newSFZ(const Initializer& init, const bool use16Outs); | |||||
// ------------------------------------------------------------------- | |||||
protected: | |||||
unsigned int fId; //!< Plugin Id, as passed in the constructor, returned in id(). \see setId() | |||||
unsigned int fHints; //!< Hints, as returned in hints(). | |||||
unsigned int fOptions; //!< Defined and currently in-use options, returned in options(). \see availableOptions() | |||||
bool fEnabled; //!< Wherever the plugin is ready for usage | |||||
CarlaString fName; //!< Plugin name | |||||
CarlaString fFilename; //!< Plugin filename, if applicable | |||||
friend struct CarlaPluginProtectedData; | |||||
CarlaPluginProtectedData* const kData; //!< Internal data, for CarlaPlugin subclasses only. | |||||
// ------------------------------------------------------------------- | |||||
// Post-poned UI Stuff | |||||
/*! | /*! | ||||
* Tell the UI a parameter has changed. | * Tell the UI a parameter has changed. | ||||
*/ | */ | ||||
@@ -794,45 +833,7 @@ public: | |||||
const char* libError(const char* const filename); | const char* libError(const char* const filename); | ||||
// ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
// Plugin initializers | |||||
struct Initializer { | |||||
CarlaEngine* const engine; | |||||
const unsigned int id; | |||||
const char* const filename; | |||||
const char* const name; | |||||
const char* const label; | |||||
}; | |||||
static size_t getNativePluginCount(); | |||||
static const PluginDescriptor* getNativePluginDescriptor(const size_t index); | |||||
static CarlaPlugin* newNative(const Initializer& init); | |||||
static CarlaPlugin* newBridge(const Initializer& init, const BinaryType btype, const PluginType ptype, const char* const bridgeBinary); | |||||
static CarlaPlugin* newLADSPA(const Initializer& init, const LADSPA_RDF_Descriptor* const rdfDescriptor); | |||||
static CarlaPlugin* newDSSI(const Initializer& init, const char* const guiFilename); | |||||
static CarlaPlugin* newLV2(const Initializer& init); | |||||
static CarlaPlugin* newVST(const Initializer& init); | |||||
static CarlaPlugin* newVST3(const Initializer& init); | |||||
static CarlaPlugin* newGIG(const Initializer& init, const bool use16Outs); | |||||
static CarlaPlugin* newSF2(const Initializer& init, const bool use16Outs); | |||||
static CarlaPlugin* newSFZ(const Initializer& init, const bool use16Outs); | |||||
// ------------------------------------------------------------------- | |||||
protected: | |||||
unsigned int fId; | |||||
unsigned int fHints; | |||||
unsigned int fOptions; | |||||
bool fEnabled; | |||||
CarlaString fName; | |||||
CarlaString fFilename; | |||||
friend struct CarlaPluginProtectedData; | |||||
CarlaPluginProtectedData* const kData; | |||||
// Helper classes | |||||
// Fully disable plugin in scope and also its engine client | // Fully disable plugin in scope and also its engine client | ||||
// May wait-block on constructor for plugin process to end | // May wait-block on constructor for plugin process to end | ||||
@@ -1007,7 +1007,7 @@ public: | |||||
for (i=0; i < kData->audioOut.count; i++) | for (i=0; i < kData->audioOut.count; i++) | ||||
carla_zeroFloat(outBuffer[i], frames); | carla_zeroFloat(outBuffer[i], frames); | ||||
kData->activeBefore = kData->active; | |||||
//kData->activeBefore = kData->active; | |||||
return; | return; | ||||
} | } | ||||
@@ -21,11 +21,6 @@ | |||||
#include <QtCore/QFile> | #include <QtCore/QFile> | ||||
#include <QtCore/QTextStream> | #include <QtCore/QTextStream> | ||||
#include <QtGui/QCloseEvent> | |||||
#ifdef Q_WS_X11 | |||||
# include <QtGui/QX11EmbedContainer> | |||||
#endif | |||||
CARLA_BACKEND_START_NAMESPACE | CARLA_BACKEND_START_NAMESPACE | ||||
@@ -1061,7 +1056,7 @@ void CarlaPlugin::setParameterValue(const uint32_t parameterId, const float valu | |||||
#endif | #endif | ||||
} | } | ||||
void CarlaPlugin::setParameterValueByRIndex(const int32_t rindex, const float value, const bool sendGui, const bool sendOsc, const bool sendCallback) | |||||
void CarlaPlugin::setParameterValueByRealIndex(const int32_t rindex, const float value, const bool sendGui, const bool sendOsc, const bool sendCallback) | |||||
{ | { | ||||
CARLA_ASSERT(rindex > PARAMETER_MAX && rindex != PARAMETER_NULL); | CARLA_ASSERT(rindex > PARAMETER_MAX && rindex != PARAMETER_NULL); | ||||
@@ -1369,34 +1364,6 @@ void CarlaPlugin::sampleRateChanged(const double) | |||||
{ | { | ||||
} | } | ||||
void CarlaPlugin::recreateLatencyBuffers() | |||||
{ | |||||
if (kData->latencyBuffers != nullptr) | |||||
{ | |||||
for (uint32_t i=0; i < kData->audioIn.count; i++) | |||||
{ | |||||
CARLA_ASSERT(kData->latencyBuffers[i] != nullptr); | |||||
if (kData->latencyBuffers[i] != nullptr) | |||||
delete[] kData->latencyBuffers[i]; | |||||
} | |||||
delete[] kData->latencyBuffers; | |||||
kData->latencyBuffers = nullptr; | |||||
} | |||||
if (kData->audioIn.count > 0 && kData->latency > 0) | |||||
{ | |||||
kData->latencyBuffers = new float*[kData->audioIn.count]; | |||||
for (uint32_t i=0; i < kData->audioIn.count; i++) | |||||
{ | |||||
kData->latencyBuffers[i] = new float[kData->latency]; | |||||
carla_zeroFloat(kData->latencyBuffers[i], kData->latency); | |||||
} | |||||
} | |||||
} | |||||
bool CarlaPlugin::tryLock() | bool CarlaPlugin::tryLock() | ||||
{ | { | ||||
return kData->masterMutex.tryLock(); | return kData->masterMutex.tryLock(); | ||||
@@ -2006,104 +1973,6 @@ CarlaPlugin::ScopedProcessLocker::~ScopedProcessLocker() | |||||
} | } | ||||
} | } | ||||
// ------------------------------------------------------------------- | |||||
// CarlaPluginGUI | |||||
CarlaPluginGUI::CarlaPluginGUI(QWidget* const parent, Callback* const callback) | |||||
: QMainWindow(parent), | |||||
kCallback(callback), | |||||
fContainer(nullptr), | |||||
fNextWidth(0), | |||||
fNextHeight(0) | |||||
{ | |||||
CARLA_ASSERT(callback != nullptr); | |||||
carla_debug("CarlaPluginGUI::CarlaPluginGUI(%p, %p)", parent, callback); | |||||
} | |||||
CarlaPluginGUI::~CarlaPluginGUI() | |||||
{ | |||||
carla_debug("CarlaPluginGUI::~CarlaPluginGUI()"); | |||||
closeContainer(); | |||||
} | |||||
void CarlaPluginGUI::idle() | |||||
{ | |||||
if (fNextWidth > 0 && fNextHeight > 0) | |||||
{ | |||||
setFixedSize(fNextWidth, fNextHeight); | |||||
fNextWidth = 0; | |||||
fNextHeight = 0; | |||||
} | |||||
} | |||||
void CarlaPluginGUI::resizeLater(int width, int height) | |||||
{ | |||||
CARLA_ASSERT_INT(width > 0, width); | |||||
CARLA_ASSERT_INT(height > 0, height); | |||||
if (width <= 0) | |||||
return; | |||||
if (height <= 0) | |||||
return; | |||||
fNextWidth = width; | |||||
fNextHeight = height; | |||||
} | |||||
void* CarlaPluginGUI::getContainerWinId() | |||||
{ | |||||
carla_debug("CarlaPluginGUI::getContainerWinId()"); | |||||
if (fContainer == nullptr) | |||||
{ | |||||
#ifdef Q_WS_X11 | |||||
QX11EmbedContainer* container(new QX11EmbedContainer(this)); | |||||
#else | |||||
QWidget* container(new QWidget(this)); | |||||
#endif | |||||
setCentralWidget(container); | |||||
fContainer = container; | |||||
} | |||||
return (void*)fContainer->winId(); | |||||
} | |||||
void CarlaPluginGUI::closeContainer() | |||||
{ | |||||
carla_debug("CarlaPluginGUI::closeContainer()"); | |||||
if (fContainer != nullptr) | |||||
{ | |||||
#ifdef Q_WS_X11 | |||||
delete (QX11EmbedContainer*)fContainer; | |||||
#else | |||||
delete (QWidget*)fContainer; | |||||
#endif | |||||
fContainer = nullptr; | |||||
} | |||||
} | |||||
void CarlaPluginGUI::closeEvent(QCloseEvent* const event) | |||||
{ | |||||
carla_debug("CarlaPluginGUI::closeEvent(%p)", event); | |||||
CARLA_ASSERT(event != nullptr); | |||||
if (event == nullptr) | |||||
return; | |||||
if (! event->spontaneous()) | |||||
{ | |||||
event->ignore(); | |||||
return; | |||||
} | |||||
if (kCallback != nullptr) | |||||
kCallback->guiClosedCallback(); | |||||
QMainWindow::closeEvent(event); | |||||
} | |||||
// ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
CARLA_BACKEND_END_NAMESPACE | CARLA_BACKEND_END_NAMESPACE |
@@ -46,6 +46,7 @@ PKGCONFIG += linuxsampler | |||||
SOURCES = \ | SOURCES = \ | ||||
CarlaPlugin.cpp \ | CarlaPlugin.cpp \ | ||||
CarlaPluginGui.cpp \ | |||||
CarlaPluginThread.cpp \ | CarlaPluginThread.cpp \ | ||||
BridgePlugin.cpp \ | BridgePlugin.cpp \ | ||||
NativePlugin.cpp \ | NativePlugin.cpp \ | ||||
@@ -0,0 +1,198 @@ | |||||
/* | |||||
* Carla Plugin | |||||
* Copyright (C) 2011-2013 Filipe Coelho <falktx@falktx.com> | |||||
* | |||||
* This program is free software; you can redistribute it and/or | |||||
* modify it under the terms of the GNU General Public License as | |||||
* published by the Free Software Foundation; either version 2 of | |||||
* the License, or any later version. | |||||
* | |||||
* This program is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* For a full copy of the GNU General Public License see the GPL.txt file | |||||
*/ | |||||
#include "CarlaPluginInternal.hpp" | |||||
#include <QtGui/QMainWindow> | |||||
#include <QtGui/QCloseEvent> | |||||
#ifdef Q_WS_X11 | |||||
# include <QtGui/QX11EmbedContainer> | |||||
#endif | |||||
CARLA_BACKEND_START_NAMESPACE | |||||
// ----------------------------------------------------------------------- | |||||
// Engine Helpers, defined in CarlaEngine.cpp | |||||
extern QMainWindow* getEngineHostWindow(CarlaEngine* const engine); | |||||
class CarlaPluginGUI : public QMainWindow | |||||
{ | |||||
public: | |||||
class Callback | |||||
{ | |||||
public: | |||||
virtual ~Callback() {} | |||||
virtual void guiClosedCallback() = 0; | |||||
}; | |||||
CarlaPluginGUI(CarlaEngine* const engine, Callback* const callback); | |||||
~CarlaPluginGUI(); | |||||
void idle(); | |||||
void resizeLater(int width, int height); | |||||
// Parent UIs | |||||
void* getContainerWinId(); | |||||
void closeContainer(); | |||||
// Qt4 UIs, TODO | |||||
protected: | |||||
void closeEvent(QCloseEvent* const event); | |||||
private: | |||||
Callback* const kCallback; | |||||
QWidget* fContainer; | |||||
int fNextWidth; | |||||
int fNextHeight; | |||||
CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginGUI) | |||||
}; | |||||
// ------------------------------------------------------------------- | |||||
// CarlaPluginGUI | |||||
CarlaPluginGUI::CarlaPluginGUI(CarlaEngine* const engine, Callback* const callback) | |||||
: QMainWindow(getEngineHostWindow(engine)), | |||||
kCallback(callback), | |||||
fContainer(nullptr), | |||||
fNextWidth(0), | |||||
fNextHeight(0) | |||||
{ | |||||
CARLA_ASSERT(callback != nullptr); | |||||
carla_debug("CarlaPluginGUI::CarlaPluginGUI(%p, %p)", engine, callback); | |||||
} | |||||
CarlaPluginGUI::~CarlaPluginGUI() | |||||
{ | |||||
carla_debug("CarlaPluginGUI::~CarlaPluginGUI()"); | |||||
closeContainer(); | |||||
} | |||||
void CarlaPluginGUI::idle() | |||||
{ | |||||
if (fNextWidth > 0 && fNextHeight > 0) | |||||
{ | |||||
setFixedSize(fNextWidth, fNextHeight); | |||||
fNextWidth = 0; | |||||
fNextHeight = 0; | |||||
} | |||||
} | |||||
void CarlaPluginGUI::resizeLater(int width, int height) | |||||
{ | |||||
CARLA_ASSERT_INT(width > 0, width); | |||||
CARLA_ASSERT_INT(height > 0, height); | |||||
if (width <= 0) | |||||
return; | |||||
if (height <= 0) | |||||
return; | |||||
fNextWidth = width; | |||||
fNextHeight = height; | |||||
} | |||||
void* CarlaPluginGUI::getContainerWinId() | |||||
{ | |||||
carla_debug("CarlaPluginGUI::getContainerWinId()"); | |||||
if (fContainer == nullptr) | |||||
{ | |||||
#ifdef Q_WS_X11 | |||||
QX11EmbedContainer* container(new QX11EmbedContainer(this)); | |||||
#else | |||||
QWidget* container(new QWidget(this)); | |||||
#endif | |||||
setCentralWidget(container); | |||||
fContainer = container; | |||||
} | |||||
return (void*)fContainer->winId(); | |||||
} | |||||
void CarlaPluginGUI::closeContainer() | |||||
{ | |||||
carla_debug("CarlaPluginGUI::closeContainer()"); | |||||
if (fContainer != nullptr) | |||||
{ | |||||
#ifdef Q_WS_X11 | |||||
delete (QX11EmbedContainer*)fContainer; | |||||
#else | |||||
delete (QWidget*)fContainer; | |||||
#endif | |||||
fContainer = nullptr; | |||||
} | |||||
} | |||||
void CarlaPluginGUI::closeEvent(QCloseEvent* const event) | |||||
{ | |||||
carla_debug("CarlaPluginGUI::closeEvent(%p)", event); | |||||
CARLA_ASSERT(event != nullptr); | |||||
if (event == nullptr) | |||||
return; | |||||
if (! event->spontaneous()) | |||||
{ | |||||
event->ignore(); | |||||
return; | |||||
} | |||||
if (kCallback != nullptr) | |||||
kCallback->guiClosedCallback(); | |||||
QMainWindow::closeEvent(event); | |||||
} | |||||
// ------------------------------------------------------------------- | |||||
// CarlaPluginGUI | |||||
#if 0 | |||||
void createUiIfNeeded(CarlaPluginGUI::Callback* const callback) | |||||
{ | |||||
if (gui != nullptr) | |||||
return; | |||||
gui = new CarlaPluginGUI(engine, callback); | |||||
} | |||||
void destroyUiIfNeeded() | |||||
{ | |||||
if (gui == nullptr) | |||||
return; | |||||
gui->close(); | |||||
delete gui; | |||||
gui = nullptr; | |||||
} | |||||
void resizeUiLater(int width, int height) | |||||
{ | |||||
if (gui == nullptr) | |||||
return; | |||||
gui->resizeLater(width, height); | |||||
} | |||||
#endif | |||||
CARLA_BACKEND_END_NAMESPACE |
@@ -18,7 +18,6 @@ | |||||
#ifndef __CARLA_PLUGIN_INTERNAL_HPP__ | #ifndef __CARLA_PLUGIN_INTERNAL_HPP__ | ||||
#define __CARLA_PLUGIN_INTERNAL_HPP__ | #define __CARLA_PLUGIN_INTERNAL_HPP__ | ||||
#include "CarlaBackendUtils.hpp" | |||||
#include "CarlaPluginThread.hpp" | #include "CarlaPluginThread.hpp" | ||||
#include "CarlaPlugin.hpp" | #include "CarlaPlugin.hpp" | ||||
#include "CarlaEngine.hpp" | #include "CarlaEngine.hpp" | ||||
@@ -28,16 +27,6 @@ | |||||
#include "CarlaMIDI.h" | #include "CarlaMIDI.h" | ||||
#include "RtList.hpp" | #include "RtList.hpp" | ||||
#include <QtGui/QMainWindow> | |||||
#define CARLA_DECLARE_NON_COPY_STRUCT(structName) \ | |||||
structName(structName&) = delete; \ | |||||
structName(const structName&) = delete; | |||||
#define CARLA_DECLARE_NON_COPY_STRUCT_WITH_LEAK_DETECTOR(structName) \ | |||||
CARLA_DECLARE_NON_COPY_STRUCT(structName) \ | |||||
CARLA_LEAK_DETECTOR(structName) | |||||
#define CARLA_PROCESS_CONTINUE_CHECK if (! fEnabled) { kData->engine->callback(CALLBACK_DEBUG, fId, 0, 0, 0.0, nullptr); return; } | #define CARLA_PROCESS_CONTINUE_CHECK if (! fEnabled) { kData->engine->callback(CALLBACK_DEBUG, fId, 0, 0, 0.0, nullptr); return; } | ||||
CARLA_BACKEND_START_NAMESPACE | CARLA_BACKEND_START_NAMESPACE | ||||
@@ -368,9 +357,9 @@ struct PluginPostRtEvent { | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
struct ExternalMidiNote { | struct ExternalMidiNote { | ||||
int8_t channel; // invalid = -1 | |||||
int8_t channel; // invalid == -1 | |||||
uint8_t note; | uint8_t note; | ||||
uint8_t velo; | |||||
uint8_t velo; // note-off if 0 | |||||
ExternalMidiNote() | ExternalMidiNote() | ||||
: channel(-1), | : channel(-1), | ||||
@@ -386,61 +375,26 @@ struct ExternalMidiNote { | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
enum CarlaPluginGuiType { | |||||
PLUGIN_GUI_NULL, | |||||
PLUGIN_GUI_PARENT, | |||||
PLUGIN_GUI_QT | |||||
}; | |||||
class CarlaPluginGui; | |||||
class CarlaPluginGUI : public QMainWindow | |||||
class CarlaPluginGuiCallback | |||||
{ | { | ||||
public: | public: | ||||
class Callback | |||||
{ | |||||
public: | |||||
virtual ~Callback() {} | |||||
virtual void guiClosedCallback() = 0; | |||||
}; | |||||
CarlaPluginGUI(QWidget* const parent, Callback* const callback); | |||||
~CarlaPluginGUI(); | |||||
void idle(); | |||||
void resizeLater(int width, int height); | |||||
// Parent UIs | |||||
void* getContainerWinId(); | |||||
void closeContainer(); | |||||
// Qt4 UIs, TODO | |||||
virtual ~CarlaPluginGuiCallback() {} | |||||
protected: | protected: | ||||
void closeEvent(QCloseEvent* const event); | |||||
private: | |||||
Callback* const kCallback; | |||||
QWidget* fContainer; | |||||
int fNextWidth; | |||||
int fNextHeight; | |||||
CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginGUI) | |||||
virtual void guiClosedCallback() = 0; | |||||
}; | }; | ||||
// ----------------------------------------------------------------------- | |||||
// Engine Helpers, defined in CarlaEngine.cpp | |||||
extern ::QMainWindow* getEngineHostWindow(CarlaEngine* const engine); | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
struct CarlaPluginProtectedData { | struct CarlaPluginProtectedData { | ||||
CarlaEngine* const engine; | CarlaEngine* const engine; | ||||
CarlaEngineClient* client; | CarlaEngineClient* client; | ||||
CarlaPluginGUI* gui; | |||||
CarlaPluginGui* gui; | |||||
bool active; | bool active; | ||||
bool activeBefore; | |||||
//bool activeBefore; | |||||
bool needsReset; | bool needsReset; | ||||
void* lib; | void* lib; | ||||
@@ -487,8 +441,7 @@ struct CarlaPluginProtectedData { | |||||
mutex.unlock(); | mutex.unlock(); | ||||
} | } | ||||
ExternalNotes(ExternalNotes&) = delete; | |||||
ExternalNotes(const ExternalNotes&) = delete; | |||||
CARLA_DECLARE_NON_COPY_STRUCT_WITH_LEAK_DETECTOR(ExternalNotes) | |||||
} extNotes; | } extNotes; | ||||
@@ -530,8 +483,7 @@ struct CarlaPluginProtectedData { | |||||
mutex.unlock(); | mutex.unlock(); | ||||
} | } | ||||
PostRtEvents(PostRtEvents&) = delete; | |||||
PostRtEvents(const PostRtEvents&) = delete; | |||||
CARLA_DECLARE_NON_COPY_STRUCT_WITH_LEAK_DETECTOR(PostRtEvents) | |||||
} postRtEvents; | } postRtEvents; | ||||
@@ -549,8 +501,7 @@ struct CarlaPluginProtectedData { | |||||
balanceRight(1.0f), | balanceRight(1.0f), | ||||
panning(0.0f) {} | panning(0.0f) {} | ||||
PostProc(PostProc&) = delete; | |||||
PostProc(const PostProc&) = delete; | |||||
CARLA_DECLARE_NON_COPY_STRUCT_WITH_LEAK_DETECTOR(PostProc) | |||||
} postProc; | } postProc; | ||||
@@ -564,6 +515,7 @@ struct CarlaPluginProtectedData { | |||||
OSC() = delete; | OSC() = delete; | ||||
OSC(OSC&) = delete; | OSC(OSC&) = delete; | ||||
OSC(const OSC&) = delete; | OSC(const OSC&) = delete; | ||||
CARLA_LEAK_DETECTOR(OSC) | |||||
} osc; | } osc; | ||||
@@ -572,7 +524,7 @@ struct CarlaPluginProtectedData { | |||||
client(nullptr), | client(nullptr), | ||||
gui(nullptr), | gui(nullptr), | ||||
active(false), | active(false), | ||||
activeBefore(false), | |||||
//activeBefore(false), | |||||
needsReset(false), | needsReset(false), | ||||
lib(nullptr), | lib(nullptr), | ||||
ctrlChannel(0), | ctrlChannel(0), | ||||
@@ -584,33 +536,51 @@ struct CarlaPluginProtectedData { | |||||
CarlaPluginProtectedData() = delete; | CarlaPluginProtectedData() = delete; | ||||
CarlaPluginProtectedData(CarlaPluginProtectedData&) = delete; | CarlaPluginProtectedData(CarlaPluginProtectedData&) = delete; | ||||
CarlaPluginProtectedData(const CarlaPluginProtectedData&) = delete; | CarlaPluginProtectedData(const CarlaPluginProtectedData&) = delete; | ||||
CARLA_LEAK_DETECTOR(CarlaPluginProtectedData) | |||||
void createUiIfNeeded(CarlaPluginGUI::Callback* const callback) | |||||
~CarlaPluginProtectedData() | |||||
{ | { | ||||
if (gui != nullptr) | |||||
return; | |||||
gui = new CarlaPluginGUI(getEngineHostWindow(engine), callback); | |||||
CARLA_ASSERT(gui == nullptr); | |||||
CARLA_ASSERT(! active); | |||||
CARLA_ASSERT(! needsReset); | |||||
CARLA_ASSERT(lib == nullptr); | |||||
CARLA_ASSERT(latency == 0); | |||||
CARLA_ASSERT(latencyBuffers == nullptr); | |||||
} | } | ||||
void destroyUiIfNeeded() | |||||
void recreateLatencyBuffers() | |||||
{ | { | ||||
if (gui == nullptr) | |||||
return; | |||||
if (latencyBuffers != nullptr) | |||||
{ | |||||
for (uint32_t i=0; i < audioIn.count; i++) | |||||
{ | |||||
CARLA_ASSERT(latencyBuffers[i] != nullptr); | |||||
gui->close(); | |||||
delete gui; | |||||
gui = nullptr; | |||||
} | |||||
if (latencyBuffers[i] != nullptr) | |||||
delete[] latencyBuffers[i]; | |||||
} | |||||
void resizeUiLater(int width, int height) | |||||
{ | |||||
if (gui == nullptr) | |||||
return; | |||||
delete[] latencyBuffers; | |||||
latencyBuffers = nullptr; | |||||
} | |||||
gui->resizeLater(width, height); | |||||
if (audioIn.count > 0 && latency > 0) | |||||
{ | |||||
latencyBuffers = new float*[audioIn.count]; | |||||
for (uint32_t i=0; i < audioIn.count; i++) | |||||
{ | |||||
latencyBuffers[i] = new float[latency]; | |||||
carla_zeroFloat(latencyBuffers[i], latency); | |||||
} | |||||
} | |||||
} | } | ||||
// defined in CarlaPluginGui.cpp | |||||
void createUiIfNeeded(CarlaPluginGuiCallback* const callback); | |||||
void destroyUiIfNeeded(); | |||||
void resizeUiLater(int width, int height); | |||||
static CarlaEngine* getEngine(CarlaPlugin* const plugin) | static CarlaEngine* getEngine(CarlaPlugin* const plugin) | ||||
{ | { | ||||
return plugin->kData->engine; | return plugin->kData->engine; | ||||
@@ -630,8 +600,6 @@ struct CarlaPluginProtectedData { | |||||
{ | { | ||||
return (plugin->kData->extraHints & PLUGIN_HINT_CAN_RUN_RACK); | return (plugin->kData->extraHints & PLUGIN_HINT_CAN_RUN_RACK); | ||||
} | } | ||||
CARLA_LEAK_DETECTOR(CarlaPluginProtectedData) | |||||
}; | }; | ||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
@@ -66,7 +66,7 @@ public: | |||||
if (fDescriptor != nullptr) | if (fDescriptor != nullptr) | ||||
{ | { | ||||
if (fDescriptor->deactivate != nullptr && kData->activeBefore) | |||||
if (fDescriptor->deactivate != nullptr && kData->active/*Before*/) | |||||
{ | { | ||||
if (fHandle != nullptr) | if (fHandle != nullptr) | ||||
fDescriptor->deactivate(fHandle); | fDescriptor->deactivate(fHandle); | ||||
@@ -826,7 +826,7 @@ public: | |||||
{ | { | ||||
kData->latency = latency; | kData->latency = latency; | ||||
kData->client->setLatency(latency); | kData->client->setLatency(latency); | ||||
recreateLatencyBuffers(); | |||||
kData->recreateLatencyBuffers(); | |||||
} | } | ||||
break; | break; | ||||
@@ -947,6 +947,7 @@ public: | |||||
for (i=0; i < kData->audioOut.count; i++) | for (i=0; i < kData->audioOut.count; i++) | ||||
carla_zeroFloat(outBuffer[i], frames); | carla_zeroFloat(outBuffer[i], frames); | ||||
#if 0 | |||||
if (kData->activeBefore) | if (kData->activeBefore) | ||||
{ | { | ||||
if (fDescriptor->deactivate != nullptr) | if (fDescriptor->deactivate != nullptr) | ||||
@@ -959,6 +960,7 @@ public: | |||||
} | } | ||||
kData->activeBefore = kData->active; | kData->activeBefore = kData->active; | ||||
#endif | |||||
return; | return; | ||||
} | } | ||||
@@ -967,7 +969,7 @@ public: | |||||
// -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
// Check if not active before | // Check if not active before | ||||
if (kData->needsReset || ! kData->activeBefore) | |||||
if (kData->needsReset /*|| ! kData->activeBefore*/) | |||||
{ | { | ||||
if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) | if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) | ||||
{ | { | ||||
@@ -994,6 +996,7 @@ public: | |||||
carla_zeroFloat(kData->latencyBuffers[i], kData->latency); | carla_zeroFloat(kData->latencyBuffers[i], kData->latency); | ||||
} | } | ||||
#if 0 | |||||
if (kData->activeBefore) | if (kData->activeBefore) | ||||
{ | { | ||||
if (fDescriptor->deactivate != nullptr) | if (fDescriptor->deactivate != nullptr) | ||||
@@ -1012,6 +1015,7 @@ public: | |||||
if (fHandle2 != nullptr) | if (fHandle2 != nullptr) | ||||
fDescriptor->activate(fHandle2); | fDescriptor->activate(fHandle2); | ||||
} | } | ||||
#endif | |||||
kData->needsReset = false; | kData->needsReset = false; | ||||
} | } | ||||
@@ -1019,7 +1023,7 @@ public: | |||||
// -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
// Event Input and Processing | // Event Input and Processing | ||||
if (kData->event.portIn != nullptr && kData->activeBefore) | |||||
if (kData->event.portIn != nullptr /*&& kData->activeBefore*/) | |||||
{ | { | ||||
// ---------------------------------------------------------------------------------------------------- | // ---------------------------------------------------------------------------------------------------- | ||||
// MIDI Input (External) | // MIDI Input (External) | ||||
@@ -1440,7 +1444,7 @@ public: | |||||
// -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
kData->activeBefore = kData->active; | |||||
//kData->activeBefore = kData->active; | |||||
} | } | ||||
bool processSingle(float** const inBuffer, float** const outBuffer, const uint32_t frames, const uint32_t timeOffset, const unsigned long midiEventCount) | bool processSingle(float** const inBuffer, float** const outBuffer, const uint32_t frames, const uint32_t timeOffset, const unsigned long midiEventCount) | ||||
@@ -882,14 +882,14 @@ public: | |||||
for (i=0; i < kData->audioOut.count; i++) | for (i=0; i < kData->audioOut.count; i++) | ||||
carla_zeroFloat(outBuffer[i], frames); | carla_zeroFloat(outBuffer[i], frames); | ||||
kData->activeBefore = kData->active; | |||||
//kData->activeBefore = kData->active; | |||||
return; | return; | ||||
} | } | ||||
// -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
// Check if not active before | // Check if not active before | ||||
if (kData->needsReset || ! kData->activeBefore) | |||||
if (kData->needsReset /*|| ! kData->activeBefore*/) | |||||
{ | { | ||||
if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) | if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) | ||||
{ | { | ||||
@@ -911,7 +911,7 @@ public: | |||||
// -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
// Event Input and Processing | // Event Input and Processing | ||||
if (kData->activeBefore) | |||||
//if (kData->activeBefore) | |||||
{ | { | ||||
// ---------------------------------------------------------------------------------------------------- | // ---------------------------------------------------------------------------------------------------- | ||||
// MIDI Input (External) | // MIDI Input (External) | ||||
@@ -1233,7 +1233,7 @@ public: | |||||
// -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
kData->activeBefore = kData->active; | |||||
//kData->activeBefore = kData->active; | |||||
} | } | ||||
bool processSingle(float** const outBuffer, const uint32_t frames, const uint32_t timeOffset) | bool processSingle(float** const outBuffer, const uint32_t frames, const uint32_t timeOffset) | ||||
@@ -48,7 +48,7 @@ public: | |||||
if (fDescriptor != nullptr) | if (fDescriptor != nullptr) | ||||
{ | { | ||||
if (fDescriptor->deactivate != nullptr && kData->activeBefore) | |||||
if (fDescriptor->deactivate != nullptr && kData->active/*Before*/) | |||||
{ | { | ||||
if (fHandle != nullptr) | if (fHandle != nullptr) | ||||
fDescriptor->deactivate(fHandle); | fDescriptor->deactivate(fHandle); | ||||
@@ -769,7 +769,7 @@ public: | |||||
{ | { | ||||
kData->latency = latency; | kData->latency = latency; | ||||
kData->client->setLatency(latency); | kData->client->setLatency(latency); | ||||
recreateLatencyBuffers(); | |||||
kData->recreateLatencyBuffers(); | |||||
} | } | ||||
break; | break; | ||||
@@ -797,6 +797,7 @@ public: | |||||
for (i=0; i < kData->audioOut.count; i++) | for (i=0; i < kData->audioOut.count; i++) | ||||
carla_zeroFloat(outBuffer[i], frames); | carla_zeroFloat(outBuffer[i], frames); | ||||
#if 0 | |||||
if (kData->activeBefore) | if (kData->activeBefore) | ||||
{ | { | ||||
if (fDescriptor->deactivate != nullptr) | if (fDescriptor->deactivate != nullptr) | ||||
@@ -809,13 +810,14 @@ public: | |||||
} | } | ||||
kData->activeBefore = kData->active; | kData->activeBefore = kData->active; | ||||
#endif | |||||
return; | return; | ||||
} | } | ||||
// -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
// Check if not active before | // Check if not active before | ||||
if (kData->needsReset || ! kData->activeBefore) | |||||
if (kData->needsReset /*|| ! kData->activeBefore*/) | |||||
{ | { | ||||
if (kData->latency > 0) | if (kData->latency > 0) | ||||
{ | { | ||||
@@ -823,6 +825,7 @@ public: | |||||
carla_zeroFloat(kData->latencyBuffers[i], kData->latency); | carla_zeroFloat(kData->latencyBuffers[i], kData->latency); | ||||
} | } | ||||
#if 0 | |||||
if (kData->activeBefore) | if (kData->activeBefore) | ||||
{ | { | ||||
if (fDescriptor->deactivate != nullptr) | if (fDescriptor->deactivate != nullptr) | ||||
@@ -841,6 +844,7 @@ public: | |||||
if (fHandle2 != nullptr) | if (fHandle2 != nullptr) | ||||
fDescriptor->activate(fHandle2); | fDescriptor->activate(fHandle2); | ||||
} | } | ||||
#endif | |||||
kData->needsReset = false; | kData->needsReset = false; | ||||
} | } | ||||
@@ -848,7 +852,7 @@ public: | |||||
// -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
// Event Input and Processing | // Event Input and Processing | ||||
if (kData->event.portIn != nullptr && kData->activeBefore) | |||||
if (kData->event.portIn != nullptr /*&& kData->activeBefore*/) | |||||
{ | { | ||||
// ---------------------------------------------------------------------------------------------------- | // ---------------------------------------------------------------------------------------------------- | ||||
// Event Input (System) | // Event Input (System) | ||||
@@ -1080,7 +1084,7 @@ public: | |||||
// -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
kData->activeBefore = kData->active; | |||||
//kData->activeBefore = kData->active; | |||||
} | } | ||||
bool processSingle(float** const inBuffer, float** const outBuffer, const uint32_t frames, const uint32_t timeOffset) | bool processSingle(float** const inBuffer, float** const outBuffer, const uint32_t frames, const uint32_t timeOffset) | ||||
@@ -191,7 +191,7 @@ public: | |||||
kData->singleMutex.lock(); | kData->singleMutex.lock(); | ||||
kData->masterMutex.lock(); | kData->masterMutex.lock(); | ||||
if (kData->activeBefore) | |||||
if (kData->active/*Before*/) | |||||
fAudioOutputDevice->Stop(); | fAudioOutputDevice->Stop(); | ||||
if (fEngine != nullptr) | if (fEngine != nullptr) | ||||
@@ -465,17 +465,17 @@ public: | |||||
for (i=0; i < kData->audioOut.count; i++) | for (i=0; i < kData->audioOut.count; i++) | ||||
carla_zeroFloat(outBuffer[i], frames); | carla_zeroFloat(outBuffer[i], frames); | ||||
if (kData->activeBefore) | |||||
fAudioOutputDevice->Stop(); | |||||
//if (kData->activeBefore) | |||||
// fAudioOutputDevice->Stop(); | |||||
kData->activeBefore = kData->active; | |||||
//kData->activeBefore = kData->active; | |||||
return; | return; | ||||
} | } | ||||
// -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
// Check if not active before | // Check if not active before | ||||
if (kData->needsReset || ! kData->activeBefore) | |||||
if (kData->needsReset /*|| ! kData->activeBefore*/) | |||||
{ | { | ||||
if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) | if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) | ||||
{ | { | ||||
@@ -486,10 +486,10 @@ public: | |||||
} | } | ||||
} | } | ||||
if (kData->activeBefore) | |||||
fAudioOutputDevice->Stop(); | |||||
//if (kData->activeBefore) | |||||
// fAudioOutputDevice->Stop(); | |||||
fAudioOutputDevice->Play(); | |||||
//fAudioOutputDevice->Play(); | |||||
kData->needsReset = false; | kData->needsReset = false; | ||||
} | } | ||||
@@ -497,7 +497,7 @@ public: | |||||
// -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
// Event Input and Processing | // Event Input and Processing | ||||
if (kData->event.portIn != nullptr && kData->activeBefore) | |||||
if (kData->event.portIn != nullptr /*&& kData->activeBefore*/) | |||||
{ | { | ||||
// ---------------------------------------------------------------------------------------------------- | // ---------------------------------------------------------------------------------------------------- | ||||
// MIDI Input (External) | // MIDI Input (External) | ||||
@@ -804,7 +804,7 @@ public: | |||||
// -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
kData->activeBefore = kData->active; | |||||
//kData->activeBefore = kData->active; | |||||
} | } | ||||
bool processSingle(float** const outBuffer, const uint32_t frames, const uint32_t timeOffset) | bool processSingle(float** const outBuffer, const uint32_t frames, const uint32_t timeOffset) | ||||
@@ -185,7 +185,7 @@ public: | |||||
if (fDescriptor->ui_show != nullptr && fIsUiVisible) | if (fDescriptor->ui_show != nullptr && fIsUiVisible) | ||||
fDescriptor->ui_show(fHandle, false); | fDescriptor->ui_show(fHandle, false); | ||||
if (fDescriptor->deactivate != nullptr && kData->activeBefore) | |||||
if (fDescriptor->deactivate != nullptr && kData->active/*Before*/) | |||||
{ | { | ||||
if (fHandle != nullptr) | if (fHandle != nullptr) | ||||
fDescriptor->deactivate(fHandle); | fDescriptor->deactivate(fHandle); | ||||
@@ -1128,6 +1128,7 @@ public: | |||||
for (i=0; i < kData->audioOut.count; i++) | for (i=0; i < kData->audioOut.count; i++) | ||||
carla_zeroFloat(outBuffer[i], frames); | carla_zeroFloat(outBuffer[i], frames); | ||||
#if 0 | |||||
if (kData->activeBefore) | if (kData->activeBefore) | ||||
{ | { | ||||
if (fDescriptor->deactivate != nullptr) | if (fDescriptor->deactivate != nullptr) | ||||
@@ -1140,6 +1141,7 @@ public: | |||||
} | } | ||||
kData->activeBefore = kData->active; | kData->activeBefore = kData->active; | ||||
#endif | |||||
return; | return; | ||||
} | } | ||||
@@ -1149,7 +1151,7 @@ public: | |||||
// -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
// Check if not active before | // Check if not active before | ||||
if (kData->needsReset || ! kData->activeBefore) | |||||
if (kData->needsReset /*|| ! kData->activeBefore*/) | |||||
{ | { | ||||
if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) | if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) | ||||
{ | { | ||||
@@ -1165,6 +1167,7 @@ public: | |||||
fMidiEventCount = MAX_MIDI_CHANNELS*2; | fMidiEventCount = MAX_MIDI_CHANNELS*2; | ||||
} | } | ||||
#if 0 | |||||
if (fDescriptor->activate != nullptr) | if (fDescriptor->activate != nullptr) | ||||
{ | { | ||||
fDescriptor->activate(fHandle); | fDescriptor->activate(fHandle); | ||||
@@ -1172,6 +1175,7 @@ public: | |||||
if (fHandle2 != nullptr) | if (fHandle2 != nullptr) | ||||
fDescriptor->activate(fHandle2); | fDescriptor->activate(fHandle2); | ||||
} | } | ||||
#endif | |||||
} | } | ||||
CARLA_PROCESS_CONTINUE_CHECK; | CARLA_PROCESS_CONTINUE_CHECK; | ||||
@@ -1208,7 +1212,7 @@ public: | |||||
// -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
// Event Input and Processing | // Event Input and Processing | ||||
if (kData->event.portIn != nullptr && kData->activeBefore) | |||||
if (kData->event.portIn != nullptr /*&& kData->activeBefore*/) | |||||
{ | { | ||||
// ---------------------------------------------------------------------------------------------------- | // ---------------------------------------------------------------------------------------------------- | ||||
// MIDI Input (External) | // MIDI Input (External) | ||||
@@ -1578,7 +1582,7 @@ public: | |||||
// -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
kData->activeBefore = kData->active; | |||||
//kData->activeBefore = kData->active; | |||||
} | } | ||||
bool processSingle(float** const inBuffer, float** const outBuffer, const uint32_t frames, const uint32_t timeOffset) | bool processSingle(float** const inBuffer, float** const outBuffer, const uint32_t frames, const uint32_t timeOffset) | ||||
@@ -38,7 +38,7 @@ const unsigned int PLUGIN_WANTS_MIDI_INPUT = 0x8000; //!< VST Plugin wants | |||||
/**@}*/ | /**@}*/ | ||||
class VstPlugin : public CarlaPlugin, | class VstPlugin : public CarlaPlugin, | ||||
public CarlaPluginGUI::Callback | |||||
public CarlaPluginGuiCallback | |||||
{ | { | ||||
public: | public: | ||||
VstPlugin(CarlaEngine* const engine, const unsigned short id) | VstPlugin(CarlaEngine* const engine, const unsigned short id) | ||||
@@ -366,7 +366,8 @@ public: | |||||
#ifdef Q_WS_X11 | #ifdef Q_WS_X11 | ||||
//value = (intptr_t)QX11Info::display(); | //value = (intptr_t)QX11Info::display(); | ||||
#endif | #endif | ||||
void* const ptr = kData->gui->getContainerWinId(); | |||||
// TODO!! | |||||
void* const ptr = nullptr; //kData->gui->getContainerWinId(); | |||||
if (dispatcher(effEditOpen, 0, value, ptr, 0.0f) != 0) | if (dispatcher(effEditOpen, 0, value, ptr, 0.0f) != 0) | ||||
{ | { | ||||
@@ -379,14 +380,14 @@ public: | |||||
const int16_t width = vstRect->right - vstRect->left; | const int16_t width = vstRect->right - vstRect->left; | ||||
const int16_t height = vstRect->bottom - vstRect->top; | const int16_t height = vstRect->bottom - vstRect->top; | ||||
if (width > 0 && height > 0) | |||||
{ | |||||
kData->gui->setFixedSize(width, height); | |||||
} | |||||
//if (width > 0 && height > 0) | |||||
//{ | |||||
// kData->gui->setFixedSize(width, height); | |||||
//} | |||||
} | } | ||||
kData->gui->setWindowTitle(QString("%1 (GUI)").arg((const char*)fName).toUtf8().constData()); | |||||
kData->gui->show(); | |||||
//kData->gui->setWindowTitle(QString("%1 (GUI)").arg((const char*)fName).toUtf8().constData()); | |||||
//kData->gui->show(); | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
@@ -420,7 +421,7 @@ public: | |||||
if (fGui.isVisible && ! fGui.isOsc) | if (fGui.isVisible && ! fGui.isOsc) | ||||
{ | { | ||||
dispatcher(effEditIdle, 0, 0, nullptr, 0.0f); | dispatcher(effEditIdle, 0, 0, nullptr, 0.0f); | ||||
kData->gui->idle(); | |||||
//kData->gui->idle(); | |||||
} | } | ||||
} | } | ||||
@@ -805,7 +806,7 @@ public: | |||||
#endif | #endif | ||||
kData->client->setLatency(kData->latency); | kData->client->setLatency(kData->latency); | ||||
recreateLatencyBuffers(); | |||||
kData->recreateLatencyBuffers(); | |||||
} | } | ||||
// special plugin fixes | // special plugin fixes | ||||
@@ -943,7 +944,7 @@ public: | |||||
for (i=0; i < kData->audioOut.count; i++) | for (i=0; i < kData->audioOut.count; i++) | ||||
carla_zeroFloat(outBuffer[i], frames); | carla_zeroFloat(outBuffer[i], frames); | ||||
kData->activeBefore = kData->active; | |||||
//kData->activeBefore = kData->active; | |||||
return; | return; | ||||
} | } | ||||
@@ -953,7 +954,7 @@ public: | |||||
// -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
// Check if not active before | // Check if not active before | ||||
if (kData->needsReset || ! kData->activeBefore) | |||||
if (kData->needsReset /*|| ! kData->activeBefore*/) | |||||
{ | { | ||||
if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) | if (fOptions & PLUGIN_OPTION_SEND_ALL_SOUND_OFF) | ||||
{ | { | ||||
@@ -1043,7 +1044,7 @@ public: | |||||
// -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
// Event Input and Processing | // Event Input and Processing | ||||
if (kData->event.portIn != nullptr && kData->activeBefore) | |||||
if (kData->event.portIn != nullptr /*&& kData->activeBefore*/) | |||||
{ | { | ||||
// ---------------------------------------------------------------------------------------------------- | // ---------------------------------------------------------------------------------------------------- | ||||
// MIDI Input (External) | // MIDI Input (External) | ||||
@@ -1373,7 +1374,7 @@ public: | |||||
// -------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------- | ||||
kData->activeBefore = kData->active; | |||||
//kData->activeBefore = kData->active; | |||||
} | } | ||||
bool processSingle(float** const inBuffer, float** const outBuffer, const uint32_t frames, const uint32_t timeOffset) | bool processSingle(float** const inBuffer, float** const outBuffer, const uint32_t frames, const uint32_t timeOffset) | ||||
@@ -35,6 +35,15 @@ private: \ | |||||
CARLA_DECLARE_NON_COPYABLE(className) \ | CARLA_DECLARE_NON_COPYABLE(className) \ | ||||
CARLA_LEAK_DETECTOR(className) | CARLA_LEAK_DETECTOR(className) | ||||
/** struct versions of the above. */ | |||||
#define CARLA_DECLARE_NON_COPY_STRUCT(structName) \ | |||||
structName(structName&) = delete; \ | |||||
structName(const structName&) = delete; | |||||
#define CARLA_DECLARE_NON_COPY_STRUCT_WITH_LEAK_DETECTOR(structName) \ | |||||
CARLA_DECLARE_NON_COPY_STRUCT(structName) \ | |||||
CARLA_LEAK_DETECTOR(structName) | |||||
/** This macro can be added to class definitions to disable the use of new/delete to | /** This macro can be added to class definitions to disable the use of new/delete to | ||||
allocate the object on the heap, forcing it to only be used as a stack or member variable. | allocate the object on the heap, forcing it to only be used as a stack or member variable. | ||||
*/ | */ | ||||