|
|
@@ -28,8 +28,6 @@ |
|
|
|
#include "zynaddsubfx/Misc/Master.h" |
|
|
|
#include "zynaddsubfx/Misc/Util.h" |
|
|
|
|
|
|
|
#define WANT_ZYNADDSUBFX_UI |
|
|
|
|
|
|
|
#ifdef WANT_ZYNADDSUBFX_UI |
|
|
|
#include "zynaddsubfx/UI/common.H" |
|
|
|
#include "zynaddsubfx/UI/MasterUI.h" |
|
|
@@ -91,49 +89,15 @@ public: |
|
|
|
: PluginDescriptorClass(host), |
|
|
|
kMaster(new Master()), |
|
|
|
kSampleRate(getSampleRate()), |
|
|
|
#ifdef WANT_ZYNADDSUBFX_UI |
|
|
|
fUi(nullptr), |
|
|
|
fUiClosed(0), |
|
|
|
#endif |
|
|
|
fThread(kMaster) |
|
|
|
fThread(kMaster, host) |
|
|
|
{ |
|
|
|
fThread.start(); |
|
|
|
maybeInitPrograms(kMaster); |
|
|
|
fThread.waitForStarted(); |
|
|
|
|
|
|
|
#ifdef WANT_ZYNADDSUBFX_UI |
|
|
|
fl_register_images(); |
|
|
|
|
|
|
|
Fl_Dial::default_style(Fl_Dial::PIXMAP_DIAL); |
|
|
|
|
|
|
|
if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH "/knob.png")) |
|
|
|
Fl_Dial::default_image(img); |
|
|
|
else |
|
|
|
Fl_Dial::default_image(Fl_Shared_Image::get(SOURCE_DIR "/../pixmaps/knob.png")); |
|
|
|
|
|
|
|
if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH "/window_backdrop.png")) |
|
|
|
Fl::scheme_bg(new Fl_Tiled_Image(img)); |
|
|
|
else |
|
|
|
Fl::scheme_bg(new Fl_Tiled_Image(Fl_Shared_Image::get(SOURCE_DIR "/../pixmaps/window_backdrop.png"))); |
|
|
|
|
|
|
|
if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH "/module_backdrop.png")) |
|
|
|
gModuleBackdrop = new Fl_Tiled_Image(img); |
|
|
|
else |
|
|
|
gModuleBackdrop = new Fl_Tiled_Image(Fl_Shared_Image::get(SOURCE_DIR "/../pixmaps/module_backdrop.png")); |
|
|
|
|
|
|
|
Fl::background(50, 50, 50); |
|
|
|
Fl::background2(70, 70, 70); |
|
|
|
Fl::foreground(255, 255, 255); |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
~ZynAddSubFxPlugin() |
|
|
|
{ |
|
|
|
#ifdef WANT_ZYNADDSUBFX_UI |
|
|
|
if (fUi != nullptr) |
|
|
|
delete fUi; |
|
|
|
#endif |
|
|
|
|
|
|
|
//ensure that everything has stopped |
|
|
|
pthread_mutex_lock(&kMaster->mutex); |
|
|
|
pthread_mutex_unlock(&kMaster->mutex); |
|
|
@@ -315,37 +279,9 @@ protected: |
|
|
|
void uiShow(const bool show) |
|
|
|
{ |
|
|
|
if (show) |
|
|
|
{ |
|
|
|
CARLA_ASSERT(fUi == nullptr); |
|
|
|
|
|
|
|
if (fUi != nullptr) |
|
|
|
return; |
|
|
|
|
|
|
|
fUiClosed = 0; |
|
|
|
fUi = new MasterUI(kMaster, &fUiClosed); |
|
|
|
fUi->showUI(); |
|
|
|
|
|
|
|
Fl::check(); |
|
|
|
} |
|
|
|
fThread.uiShow(); |
|
|
|
else |
|
|
|
{ |
|
|
|
CARLA_ASSERT(fUi != nullptr); |
|
|
|
|
|
|
|
if (fUi == nullptr) |
|
|
|
return; |
|
|
|
|
|
|
|
delete fUi; |
|
|
|
fUi = nullptr; |
|
|
|
|
|
|
|
Fl::check(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void uiIdle() |
|
|
|
{ |
|
|
|
CARLA_ASSERT(fUi != nullptr); |
|
|
|
|
|
|
|
Fl::check(); |
|
|
|
fThread.uiHide(); |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
@@ -392,20 +328,33 @@ private: |
|
|
|
class ZynThread : public CarlaThread |
|
|
|
{ |
|
|
|
public: |
|
|
|
ZynThread(Master* const master) |
|
|
|
ZynThread(Master* const master, const HostDescriptor* const host) |
|
|
|
: kMaster(master), |
|
|
|
kHost(host), |
|
|
|
#ifdef WANT_ZYNADDSUBFX_UI |
|
|
|
fUi(nullptr), |
|
|
|
fUiClosed(0), |
|
|
|
fNextUiAction(-1), |
|
|
|
#endif |
|
|
|
fQuit(false), |
|
|
|
fChangeNow(false), |
|
|
|
fChangeProgram(false), |
|
|
|
fNextBank(0), |
|
|
|
fNextProgram(0) |
|
|
|
{ |
|
|
|
} |
|
|
|
|
|
|
|
~ZynThread() |
|
|
|
{ |
|
|
|
// must be closed by now |
|
|
|
CARLA_ASSERT(fUi == nullptr); |
|
|
|
CARLA_ASSERT(fQuit); |
|
|
|
} |
|
|
|
|
|
|
|
void loadLater(const uint32_t bank, const uint32_t program) |
|
|
|
{ |
|
|
|
fNextBank = bank; |
|
|
|
fNextProgram = program; |
|
|
|
fChangeNow = true; |
|
|
|
fChangeProgram = true; |
|
|
|
} |
|
|
|
|
|
|
|
void stop() |
|
|
@@ -414,27 +363,120 @@ private: |
|
|
|
CarlaThread::stop(); |
|
|
|
} |
|
|
|
|
|
|
|
#ifdef WANT_ZYNADDSUBFX_UI |
|
|
|
void uiShow() |
|
|
|
{ |
|
|
|
fNextUiAction = 1; |
|
|
|
} |
|
|
|
|
|
|
|
void uiHide() |
|
|
|
{ |
|
|
|
fNextUiAction = 0; |
|
|
|
} |
|
|
|
#endif |
|
|
|
|
|
|
|
protected: |
|
|
|
void run() |
|
|
|
{ |
|
|
|
while (! fQuit) |
|
|
|
{ |
|
|
|
if (fChangeNow) |
|
|
|
#ifdef WANT_ZYNADDSUBFX_UI |
|
|
|
if (fNextUiAction == 1) |
|
|
|
{ |
|
|
|
static bool initialized = false; |
|
|
|
|
|
|
|
if (! initialized) |
|
|
|
{ |
|
|
|
initialized = true; |
|
|
|
fl_register_images(); |
|
|
|
|
|
|
|
Fl_Dial::default_style(Fl_Dial::PIXMAP_DIAL); |
|
|
|
|
|
|
|
if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH "/knob.png")) |
|
|
|
Fl_Dial::default_image(img); |
|
|
|
else |
|
|
|
Fl_Dial::default_image(Fl_Shared_Image::get(SOURCE_DIR "/../pixmaps/knob.png")); |
|
|
|
|
|
|
|
if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH "/window_backdrop.png")) |
|
|
|
Fl::scheme_bg(new Fl_Tiled_Image(img)); |
|
|
|
else |
|
|
|
Fl::scheme_bg(new Fl_Tiled_Image(Fl_Shared_Image::get(SOURCE_DIR "/../pixmaps/window_backdrop.png"))); |
|
|
|
|
|
|
|
if(Fl_Shared_Image *img = Fl_Shared_Image::get(PIXMAP_PATH "/module_backdrop.png")) |
|
|
|
gModuleBackdrop = new Fl_Tiled_Image(img); |
|
|
|
else |
|
|
|
gModuleBackdrop = new Fl_Tiled_Image(Fl_Shared_Image::get(SOURCE_DIR "/../pixmaps/module_backdrop.png")); |
|
|
|
|
|
|
|
Fl::background(50, 50, 50); |
|
|
|
Fl::background2(70, 70, 70); |
|
|
|
Fl::foreground(255, 255, 255); |
|
|
|
} |
|
|
|
|
|
|
|
CARLA_ASSERT(fUi == nullptr); |
|
|
|
|
|
|
|
if (fUi == nullptr) |
|
|
|
{ |
|
|
|
fUiClosed = 0; |
|
|
|
fUi = new MasterUI(kMaster, &fUiClosed); |
|
|
|
fUi->showUI(); |
|
|
|
} |
|
|
|
} |
|
|
|
else if (fNextUiAction == 0) |
|
|
|
{ |
|
|
|
CARLA_ASSERT(fUi != nullptr); |
|
|
|
|
|
|
|
if (fUi != nullptr) |
|
|
|
{ |
|
|
|
delete fUi; |
|
|
|
fUi = nullptr; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
fNextUiAction = -1; |
|
|
|
|
|
|
|
if (fUiClosed != 0) |
|
|
|
{ |
|
|
|
fUiClosed = 0; |
|
|
|
fNextUiAction = 0; |
|
|
|
kHost->ui_closed(kHost->handle); |
|
|
|
} |
|
|
|
|
|
|
|
Fl::check(); |
|
|
|
#endif |
|
|
|
|
|
|
|
if (fChangeProgram) |
|
|
|
{ |
|
|
|
fChangeProgram = false; |
|
|
|
loadProgram(kMaster, fNextBank, fNextProgram); |
|
|
|
fNextBank = 0; |
|
|
|
fNextProgram = 0; |
|
|
|
fChangeNow = false; |
|
|
|
} |
|
|
|
carla_msleep(10); |
|
|
|
|
|
|
|
carla_msleep(15); |
|
|
|
} |
|
|
|
|
|
|
|
#ifdef WANT_ZYNADDSUBFX_UI |
|
|
|
if (fQuit && fUi != nullptr) |
|
|
|
{ |
|
|
|
delete fUi; |
|
|
|
fUi = nullptr; |
|
|
|
Fl::check(); |
|
|
|
} |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
private: |
|
|
|
Master* const kMaster; |
|
|
|
const HostDescriptor* const kHost; |
|
|
|
|
|
|
|
#ifdef WANT_ZYNADDSUBFX_UI |
|
|
|
MasterUI* fUi; |
|
|
|
int fUiClosed; |
|
|
|
int fNextUiAction; |
|
|
|
#endif |
|
|
|
|
|
|
|
bool fQuit; |
|
|
|
bool fChangeNow; |
|
|
|
bool fChangeProgram; |
|
|
|
uint32_t fNextBank; |
|
|
|
uint32_t fNextProgram; |
|
|
|
}; |
|
|
@@ -442,11 +484,6 @@ private: |
|
|
|
Master* const kMaster; |
|
|
|
const unsigned kSampleRate; |
|
|
|
|
|
|
|
#ifdef WANT_ZYNADDSUBFX_UI |
|
|
|
MasterUI* fUi; |
|
|
|
int fUiClosed; |
|
|
|
#endif |
|
|
|
|
|
|
|
ZynThread fThread; |
|
|
|
|
|
|
|
static int sInstanceCount; |
|
|
|