| @@ -73,8 +73,11 @@ DistrhoUI3BandEQ::DistrhoUI3BandEQ() | |||||
| fKnobLowMid->setCallback(this); | fKnobLowMid->setCallback(this); | ||||
| // knob Mid-High | // knob Mid-High | ||||
| fKnobMidHigh = new ImageKnob(*fKnobLowMid); | |||||
| fKnobMidHigh = new ImageKnob(win, knobImage); | |||||
| fKnobMidHigh->setPos(160, 270); | fKnobMidHigh->setPos(160, 270); | ||||
| fKnobMidHigh->setRange(1000.0f, 20000.0f); | |||||
| fKnobMidHigh->setValue(2000.0f); | |||||
| fKnobMidHigh->setCallback(this); | |||||
| // about button | // about button | ||||
| Image aboutImageNormal(DistrhoArtwork3BandEQ::aboutButtonNormalData, DistrhoArtwork3BandEQ::aboutButtonNormalWidth, DistrhoArtwork3BandEQ::aboutButtonNormalHeight); | Image aboutImageNormal(DistrhoArtwork3BandEQ::aboutButtonNormalData, DistrhoArtwork3BandEQ::aboutButtonNormalWidth, DistrhoArtwork3BandEQ::aboutButtonNormalHeight); | ||||
| @@ -210,6 +213,11 @@ void DistrhoUI3BandEQ::imageSliderValueChanged(ImageSlider* slider, float value) | |||||
| d_setParameterValue(DistrhoPlugin3BandEQ::paramMaster, value); | d_setParameterValue(DistrhoPlugin3BandEQ::paramMaster, value); | ||||
| } | } | ||||
| void DistrhoUI3BandEQ::onDisplay() | |||||
| { | |||||
| fImgBackground.draw(); | |||||
| } | |||||
| // ------------------------------------------------- | // ------------------------------------------------- | ||||
| UI* createUI() | UI* createUI() | ||||
| @@ -70,6 +70,8 @@ protected: | |||||
| void imageSliderDragFinished(ImageSlider* slider); | void imageSliderDragFinished(ImageSlider* slider); | ||||
| void imageSliderValueChanged(ImageSlider* slider, float value); | void imageSliderValueChanged(ImageSlider* slider, float value); | ||||
| void onDisplay(); | |||||
| private: | private: | ||||
| Image fImgBackground; | Image fImgBackground; | ||||
| @@ -83,16 +83,16 @@ $(STATIC): $(OBJS) | |||||
| # -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
| distrho-3bandeq.cpp.o: distrho-3bandeq.cpp | |||||
| distrho-3bandeq.cpp.o: distrho-3bandeq.cpp 3bandeq/DistrhoArtwork3BandEQ.cpp 3bandeq/DistrhoPlugin3BandEQ.cpp 3bandeq/DistrhoUI3BandEQ.cpp distrho/DistrhoPluginCarla.cpp | |||||
| $(CXX) $< $(BUILD_CXX_FLAGS) -I3bandeq -DDISTRHO_NAMESPACE=DISTRHO_3BandEQ -c -o $@ | $(CXX) $< $(BUILD_CXX_FLAGS) -I3bandeq -DDISTRHO_NAMESPACE=DISTRHO_3BandEQ -c -o $@ | ||||
| distrho-3bandsplitter.cpp.o: distrho-3bandsplitter.cpp | |||||
| distrho-3bandsplitter.cpp.o: distrho-3bandsplitter.cpp distrho/DistrhoPluginCarla.cpp | |||||
| $(CXX) $< $(BUILD_CXX_FLAGS) -I3bandsplitter -DDISTRHO_NAMESPACE=DISTRHO_3BandSplitter -c -o $@ | $(CXX) $< $(BUILD_CXX_FLAGS) -I3bandsplitter -DDISTRHO_NAMESPACE=DISTRHO_3BandSplitter -c -o $@ | ||||
| distrho-pingpongpan.cpp.o: distrho-pingpongpan.cpp | |||||
| distrho-pingpongpan.cpp.o: distrho-pingpongpan.cpp distrho/DistrhoPluginCarla.cpp | |||||
| $(CXX) $< $(BUILD_CXX_FLAGS) -Ipingpongpan -DDISTRHO_NAMESPACE=DISTRHO_PingPongPan -c -o $@ | $(CXX) $< $(BUILD_CXX_FLAGS) -Ipingpongpan -DDISTRHO_NAMESPACE=DISTRHO_PingPongPan -c -o $@ | ||||
| distrho-notes.cpp.o: distrho-notes.cpp moc_DistrhoUINotes.cpp moc_ParamProgressBar.cpp | |||||
| distrho-notes.cpp.o: distrho-notes.cpp distrho/DistrhoPluginCarla.cpp moc_DistrhoUINotes.cpp moc_ParamProgressBar.cpp | |||||
| $(CXX) $< $(BUILD_CXX_FLAGS) -Inotes -DDISTRHO_NAMESPACE=DISTRHO_Notes -c -o $@ | $(CXX) $< $(BUILD_CXX_FLAGS) -Inotes -DDISTRHO_NAMESPACE=DISTRHO_Notes -c -o $@ | ||||
| zynaddsubfx.cpp.o: zynaddsubfx.cpp | zynaddsubfx.cpp.o: zynaddsubfx.cpp | ||||
| @@ -19,9 +19,6 @@ | |||||
| #include "DistrhoPluginMain.cpp" | #include "DistrhoPluginMain.cpp" | ||||
| // TODO | |||||
| //#undef DISTRHO_PLUGIN_HAS_UI | |||||
| #if DISTRHO_PLUGIN_HAS_UI | #if DISTRHO_PLUGIN_HAS_UI | ||||
| #include <QtGui/QMainWindow> | #include <QtGui/QMainWindow> | ||||
| #include "DistrhoUIMain.cpp" | #include "DistrhoUIMain.cpp" | ||||
| @@ -46,8 +43,9 @@ public: | |||||
| fUi(this, (intptr_t)fWidget.winId(), editParameterCallback, setParameterCallback, setStateCallback, sendNoteCallback, uiResizeCallback) | fUi(this, (intptr_t)fWidget.winId(), editParameterCallback, setParameterCallback, setStateCallback, sendNoteCallback, uiResizeCallback) | ||||
| { | { | ||||
| setCentralWidget(&fWidget); | setCentralWidget(&fWidget); | ||||
| setFixedSize(fUi.width(), fUi.height()); | |||||
| setWindowTitle(fUi.name()); | |||||
| setWindowTitle(QString("%1 (GUI)").arg(fUi.name())); | |||||
| uiResize(fUi.width(), fUi.height()); | |||||
| } | } | ||||
| ~UICarla() | ~UICarla() | ||||
| @@ -119,6 +117,7 @@ protected: | |||||
| void uiResize(unsigned int width, unsigned int height) | void uiResize(unsigned int width, unsigned int height) | ||||
| { | { | ||||
| fWidget.setFixedSize(width, height); | |||||
| setFixedSize(width, height); | setFixedSize(width, height); | ||||
| } | } | ||||
| @@ -223,7 +222,7 @@ protected: | |||||
| param.scalePoints = nullptr; | param.scalePoints = nullptr; | ||||
| { | { | ||||
| int nativeParamHints = 0; | |||||
| int nativeParamHints = ::PARAMETER_IS_ENABLED; | |||||
| const uint32_t paramHints = fPlugin.parameterHints(index); | const uint32_t paramHints = fPlugin.parameterHints(index); | ||||
| if (paramHints & PARAMETER_IS_AUTOMABLE) | if (paramHints & PARAMETER_IS_AUTOMABLE) | ||||
| @@ -1526,6 +1526,82 @@ public: | |||||
| } | } | ||||
| } | } | ||||
| // ------------------------------------------------------------------- | |||||
| // Post-poned events | |||||
| void uiParameterChange(const uint32_t index, const float value) | |||||
| { | |||||
| CARLA_ASSERT(fDescriptor != nullptr); | |||||
| CARLA_ASSERT(fHandle != nullptr); | |||||
| CARLA_ASSERT(index < kData->param.count); | |||||
| if (! fIsUiVisible) | |||||
| return; | |||||
| if (fDescriptor == nullptr || fHandle == nullptr) | |||||
| return; | |||||
| if (index >= kData->param.count) | |||||
| return; | |||||
| fDescriptor->ui_set_parameter_value(fHandle, index, value); | |||||
| } | |||||
| void uiMidiProgramChange(const uint32_t index) | |||||
| { | |||||
| CARLA_ASSERT(fDescriptor != nullptr); | |||||
| CARLA_ASSERT(fHandle != nullptr); | |||||
| CARLA_ASSERT(index < kData->midiprog.count); | |||||
| if (! fIsUiVisible) | |||||
| return; | |||||
| if (fDescriptor == nullptr || fHandle == nullptr) | |||||
| return; | |||||
| if (index >= kData->midiprog.count) | |||||
| return; | |||||
| fDescriptor->ui_set_parameter_value(fHandle, kData->midiprog.data[index].bank, kData->midiprog.data[index].program); | |||||
| } | |||||
| void uiNoteOn(const uint8_t channel, const uint8_t note, const uint8_t velo) | |||||
| { | |||||
| CARLA_ASSERT(fDescriptor != nullptr); | |||||
| CARLA_ASSERT(fHandle != nullptr); | |||||
| CARLA_ASSERT(channel < MAX_MIDI_CHANNELS); | |||||
| CARLA_ASSERT(note < MAX_MIDI_NOTE); | |||||
| CARLA_ASSERT(velo > 0 && velo < MAX_MIDI_VALUE); | |||||
| if (! fIsUiVisible) | |||||
| return; | |||||
| if (fDescriptor == nullptr || fHandle == nullptr) | |||||
| return; | |||||
| if (channel >= MAX_MIDI_CHANNELS) | |||||
| return; | |||||
| if (note >= MAX_MIDI_NOTE) | |||||
| return; | |||||
| if (velo >= MAX_MIDI_VALUE) | |||||
| return; | |||||
| // TODO | |||||
| } | |||||
| void uiNoteOff(const uint8_t channel, const uint8_t note) | |||||
| { | |||||
| CARLA_ASSERT(fDescriptor != nullptr); | |||||
| CARLA_ASSERT(fHandle != nullptr); | |||||
| CARLA_ASSERT(channel < MAX_MIDI_CHANNELS); | |||||
| CARLA_ASSERT(note < MAX_MIDI_NOTE); | |||||
| if (! fIsUiVisible) | |||||
| return; | |||||
| if (fDescriptor == nullptr || fHandle == nullptr) | |||||
| return; | |||||
| if (channel >= MAX_MIDI_CHANNELS) | |||||
| return; | |||||
| if (note >= MAX_MIDI_NOTE) | |||||
| return; | |||||
| // TODO | |||||
| } | |||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| // Cleanup | // Cleanup | ||||
| @@ -45,6 +45,6 @@ rtmempool_%.a: | |||||
| clean: | clean: | ||||
| rm -f *.a *.def *.dll *.so | rm -f *.a *.def *.dll *.so | ||||
| $(MAKE) clean -C dgl | |||||
| $(MAKE) clean -C distrho/dgl | |||||
| $(MAKE) clean -C lilv | $(MAKE) clean -C lilv | ||||
| $(MAKE) clean -C rtmempool | $(MAKE) clean -C rtmempool | ||||
| @@ -17,7 +17,6 @@ | |||||
| #include "AppPrivate.hpp" | #include "AppPrivate.hpp" | ||||
| #include "../Window.hpp" | #include "../Window.hpp" | ||||
| #include "../../DistrhoUtils.hpp" | |||||
| START_NAMESPACE_DGL | START_NAMESPACE_DGL | ||||
| @@ -122,11 +122,11 @@ void ImageSlider::onDisplay() | |||||
| if (fStartPos.getX() == fEndPos.getX()) | if (fStartPos.getX() == fEndPos.getX()) | ||||
| { | { | ||||
| x = fStartPos.getX(); | x = fStartPos.getX(); | ||||
| y = fStartPos.getY() + normValue*(fEndPos.getY()-fStartPos.getY()); | |||||
| y = fEndPos.getY() - normValue*(fEndPos.getY()-fStartPos.getY()); | |||||
| } | } | ||||
| else if (fStartPos.getY() == fEndPos.getY()) | else if (fStartPos.getY() == fEndPos.getY()) | ||||
| { | { | ||||
| x = fStartPos.getX() + normValue*(fEndPos.getX()-fStartPos.getX()); | |||||
| x = fEndPos.getX() - normValue*(fEndPos.getX()-fStartPos.getX()); | |||||
| y = fStartPos.getY(); | y = fStartPos.getY(); | ||||
| } | } | ||||
| else | else | ||||
| @@ -160,7 +160,7 @@ bool ImageSlider::onMouse(int button, bool press, int x, int y) | |||||
| else | else | ||||
| return false; | return false; | ||||
| float value = vper * (fMaximum - fMinimum) + fMinimum; | |||||
| float value = fMaximum - vper * (fMaximum - fMinimum); | |||||
| if (value < fMinimum) | if (value < fMinimum) | ||||
| value = fMinimum; | value = fMinimum; | ||||
| @@ -212,7 +212,7 @@ bool ImageSlider::onMotion(int x, int y) | |||||
| vper = float(y - fSliderArea.getY()) / float(fSliderArea.getHeight()); | vper = float(y - fSliderArea.getY()) / float(fSliderArea.getHeight()); | ||||
| } | } | ||||
| float value = vper * (fMaximum - fMinimum) + fMinimum; | |||||
| float value = fMaximum - vper * (fMaximum - fMinimum); | |||||
| if (value < fMinimum) | if (value < fMinimum) | ||||
| value = fMinimum; | value = fMinimum; | ||||
| @@ -223,11 +223,11 @@ bool ImageSlider::onMotion(int x, int y) | |||||
| } | } | ||||
| else if (y < fSliderArea.getY()) | else if (y < fSliderArea.getY()) | ||||
| { | { | ||||
| setValue(horizontal ? fMaximum : fMinimum, true); | |||||
| setValue(fMaximum, true); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| setValue(horizontal ? fMinimum : fMaximum, true); | |||||
| setValue(fMinimum, true); | |||||
| } | } | ||||
| return true; | return true; | ||||
| @@ -18,6 +18,7 @@ | |||||
| #include "../Widget.hpp" | #include "../Widget.hpp" | ||||
| #include "../Window.hpp" | #include "../Window.hpp" | ||||
| #include <cassert> | |||||
| #include <cstdio> | #include <cstdio> | ||||
| START_NAMESPACE_DGL | START_NAMESPACE_DGL | ||||
| @@ -29,11 +30,14 @@ Widget::Widget(Window* parent) | |||||
| : fParent(parent), | : fParent(parent), | ||||
| fVisible(true) | fVisible(true) | ||||
| { | { | ||||
| assert(parent != nullptr); | |||||
| parent->addWidget(this); | parent->addWidget(this); | ||||
| } | } | ||||
| Widget::~Widget() | Widget::~Widget() | ||||
| { | { | ||||
| fParent->removeWidget(this); | |||||
| } | } | ||||
| bool Widget::isVisible() | bool Widget::isVisible() | ||||
| @@ -212,6 +216,7 @@ bool Widget::onSpecial(bool, Key) | |||||
| void Widget::onReshape(int width, int height) | void Widget::onReshape(int width, int height) | ||||
| { | { | ||||
| printf("Reshape(%i, %i)\n", width, height); | |||||
| glEnable(GL_BLEND); | glEnable(GL_BLEND); | ||||
| glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | ||||
| glMatrixMode(GL_PROJECTION); | glMatrixMode(GL_PROJECTION); | ||||
| @@ -39,6 +39,8 @@ | |||||
| START_NAMESPACE_DGL | START_NAMESPACE_DGL | ||||
| Window* dgl_lastUiParent = nullptr; | |||||
| // ------------------------------------------------- | // ------------------------------------------------- | ||||
| // Window Private | // Window Private | ||||
| @@ -49,10 +51,10 @@ public: | |||||
| : kApp(app), | : kApp(app), | ||||
| kAppPriv(appPriv), | kAppPriv(appPriv), | ||||
| kSelf(self), | kSelf(self), | ||||
| kView(puglCreate(parentId, "Window", 600, 500, false, false)), | |||||
| kView(puglCreate(parentId, "Window", 600, 500, (parentId != 0), (parentId != 0))), | |||||
| fParent(parent), | fParent(parent), | ||||
| fChildFocus(nullptr), | fChildFocus(nullptr), | ||||
| fVisible(false), | |||||
| fVisible((parentId != 0)), | |||||
| fClosed(false), | fClosed(false), | ||||
| fResizable(false), | fResizable(false), | ||||
| #if DGL_OS_WINDOWS | #if DGL_OS_WINDOWS | ||||
| @@ -491,11 +493,13 @@ private: | |||||
| Window::Window(App* app, Window* parent) | Window::Window(App* app, Window* parent) | ||||
| : kPrivate(new Private(this, app, app->kPrivate, (parent != nullptr) ? parent->kPrivate : nullptr)) | : kPrivate(new Private(this, app, app->kPrivate, (parent != nullptr) ? parent->kPrivate : nullptr)) | ||||
| { | { | ||||
| dgl_lastUiParent = this; | |||||
| } | } | ||||
| Window::Window(App* app, intptr_t parentId) | Window::Window(App* app, intptr_t parentId) | ||||
| : kPrivate(new Private(this, app, app->kPrivate, nullptr, parentId)) | : kPrivate(new Private(this, app, app->kPrivate, nullptr, parentId)) | ||||
| { | { | ||||
| dgl_lastUiParent = this; | |||||
| } | } | ||||
| Window::~Window() | Window::~Window() | ||||
| @@ -34,6 +34,8 @@ | |||||
| # endif | # endif | ||||
| #endif | #endif | ||||
| #include <cassert> | |||||
| START_NAMESPACE_DISTRHO | START_NAMESPACE_DISTRHO | ||||
| // ------------------------------------------------- | // ------------------------------------------------- | ||||
| @@ -44,10 +46,7 @@ typedef void (*setStateFunc) (void* ptr, const char* key, const char* value); | |||||
| typedef void (*sendNoteFunc) (void* ptr, bool onOff, uint8_t channel, uint8_t note, uint8_t velo); | typedef void (*sendNoteFunc) (void* ptr, bool onOff, uint8_t channel, uint8_t note, uint8_t velo); | ||||
| typedef void (*uiResizeFunc) (void* ptr, unsigned int width, unsigned int height); | typedef void (*uiResizeFunc) (void* ptr, unsigned int width, unsigned int height); | ||||
| extern double d_lastUiSampleRate; | |||||
| #ifdef DISTRHO_UI_OPENGL | |||||
| extern Window* d_lastUiParent; | |||||
| #endif | |||||
| extern double d_lastUiSampleRate; | |||||
| // ------------------------------------------------- | // ------------------------------------------------- | ||||
| @@ -144,7 +143,8 @@ public: | |||||
| : qtGrip(nullptr), | : qtGrip(nullptr), | ||||
| qtWidget(nullptr), | qtWidget(nullptr), | ||||
| #else | #else | ||||
| : glWindow(createWindow(winId)), | |||||
| : glApp(), | |||||
| glWindow(&glApp, winId), | |||||
| #endif | #endif | ||||
| kUi(createUI()), | kUi(createUI()), | ||||
| kData((kUi != nullptr) ? kUi->pData : nullptr) | kData((kUi != nullptr) ? kUi->pData : nullptr) | ||||
| @@ -171,7 +171,9 @@ public: | |||||
| { | { | ||||
| if (kUi != nullptr) | if (kUi != nullptr) | ||||
| { | { | ||||
| #ifdef DISTRHO_UI_QT4 | |||||
| destroyWindow(); | destroyWindow(); | ||||
| #endif | |||||
| delete kUi; | delete kUi; | ||||
| } | } | ||||
| } | } | ||||
| @@ -240,10 +242,11 @@ public: | |||||
| void idle() | void idle() | ||||
| { | { | ||||
| assert(kUi != nullptr); | |||||
| if (kUi != nullptr) | |||||
| kUi->d_uiIdle(); | |||||
| #ifdef DISTRHO_UI_QT4 | |||||
| kUi->d_uiIdle(); | |||||
| #else | |||||
| glApp.idle(); | |||||
| #endif | |||||
| } | } | ||||
| intptr_t getWinId() | intptr_t getWinId() | ||||
| @@ -252,8 +255,7 @@ public: | |||||
| assert(qtWidget != nullptr); | assert(qtWidget != nullptr); | ||||
| return (qtWidget != nullptr) ? qtWidget->winId() : 0; | return (qtWidget != nullptr) ? qtWidget->winId() : 0; | ||||
| #else | #else | ||||
| assert(glWindow != nullptr); | |||||
| return (glWindow != nullptr) ? glWindow->getWindowId() : 0; | |||||
| return glWindow.getWindowId(); | |||||
| #endif | #endif | ||||
| } | } | ||||
| @@ -264,7 +266,6 @@ public: | |||||
| { | { | ||||
| assert(kUi != nullptr); | assert(kUi != nullptr); | ||||
| assert(kData != nullptr); | assert(kData != nullptr); | ||||
| assert(kData->widget != nullptr); | |||||
| assert(qtGrip == nullptr); | assert(qtGrip == nullptr); | ||||
| assert(qtWidget == nullptr); | assert(qtWidget == nullptr); | ||||
| @@ -284,7 +285,7 @@ public: | |||||
| // set layout | // set layout | ||||
| qtWidget->setLayout(new QVBoxLayout(qtWidget)); | qtWidget->setLayout(new QVBoxLayout(qtWidget)); | ||||
| qtWidget->layout()->addWidget(kData->widget); | |||||
| qtWidget->layout()->addWidget(qt4Ui); | |||||
| qtWidget->layout()->setContentsMargins(0, 0, 0, 0); | qtWidget->layout()->setContentsMargins(0, 0, 0, 0); | ||||
| qtWidget->setFixedSize(kUi->d_width(), kUi->d_height()); | qtWidget->setFixedSize(kUi->d_width(), kUi->d_height()); | ||||
| @@ -310,20 +311,10 @@ public: | |||||
| // show it | // show it | ||||
| qtWidget->show(); | qtWidget->show(); | ||||
| } | } | ||||
| #else | |||||
| Window* createWindow(intptr_t parent) | |||||
| { | |||||
| Window* window = new Window(&glApp, parent); | |||||
| d_lastUiParent = window; | |||||
| return window; | |||||
| } | |||||
| #endif | |||||
| void destroyWindow() | void destroyWindow() | ||||
| { | { | ||||
| #ifdef DISTRHO_UI_QT4 | |||||
| assert(kData != nullptr); | assert(kData != nullptr); | ||||
| assert(kData->widget != nullptr); | |||||
| assert(qtWidget != nullptr); | assert(qtWidget != nullptr); | ||||
| if (kData == nullptr) | if (kData == nullptr) | ||||
| @@ -351,20 +342,8 @@ public: | |||||
| delete qtWidget; | delete qtWidget; | ||||
| qtWidget = nullptr; | qtWidget = nullptr; | ||||
| #else | |||||
| assert(kData != nullptr); | |||||
| assert(glWindow != nullptr); | |||||
| if (kData == nullptr) | |||||
| return; | |||||
| if (glWindow == nullptr) | |||||
| return; | |||||
| glWindow->hide(); | |||||
| delete glWindow; | |||||
| glWindow = nullptr; | |||||
| #endif | |||||
| } | } | ||||
| #endif | |||||
| // --------------------------------------------- | // --------------------------------------------- | ||||
| @@ -373,8 +352,8 @@ private: | |||||
| QSizeGrip* qtGrip; | QSizeGrip* qtGrip; | ||||
| QEmbedWidget* qtWidget; | QEmbedWidget* qtWidget; | ||||
| #else | #else | ||||
| App glApp; | |||||
| Window* glWindow; | |||||
| App glApp; | |||||
| Window glWindow; | |||||
| #endif | #endif | ||||
| protected: | protected: | ||||
| @@ -386,8 +365,7 @@ protected: | |||||
| { | { | ||||
| assert(kUi != nullptr); | assert(kUi != nullptr); | ||||
| assert(kData != nullptr); | assert(kData != nullptr); | ||||
| assert(kData->widget != nullptr); | |||||
| assert(qtGrip != nullptr); | |||||
| //assert(qtGrip != nullptr); | |||||
| assert(qtWidget != nullptr); | assert(qtWidget != nullptr); | ||||
| if (kUi == nullptr) | if (kUi == nullptr) | ||||
| @@ -16,21 +16,22 @@ | |||||
| #include "DistrhoUIInternal.hpp" | #include "DistrhoUIInternal.hpp" | ||||
| START_NAMESPACE_DISTRHO | |||||
| // ------------------------------------------------- | |||||
| // Static data | |||||
| START_NAMESPACE_DGL | |||||
| extern Window* dgl_lastUiParent; | |||||
| END_NAMESPACE_DGL | |||||
| Window* d_lastParent = nullptr; | |||||
| START_NAMESPACE_DISTRHO | |||||
| // ------------------------------------------------- | // ------------------------------------------------- | ||||
| // OpenGLUI | // OpenGLUI | ||||
| OpenGLUI::OpenGLUI() | OpenGLUI::OpenGLUI() | ||||
| : UI(), | : UI(), | ||||
| Widget(d_lastParent) | |||||
| Widget(dgl_lastUiParent) | |||||
| { | { | ||||
| d_lastParent = nullptr; | |||||
| assert(dgl_lastUiParent != nullptr); | |||||
| dgl_lastUiParent = nullptr; | |||||
| } | } | ||||
| OpenGLUI::~OpenGLUI() | OpenGLUI::~OpenGLUI() | ||||