diff options
author | falkTX <falktx@gmail.com> | 2014-04-15 14:10:04 +0000 |
---|---|---|
committer | falkTX <falktx@gmail.com> | 2014-04-15 14:10:04 +0000 |
commit | 4cbf7c4ef2b9c434d4d7bd320a77e25b90e51e3c (patch) | |
tree | 872a00f13d4a5ab64f18273de9655cffff0cdb8a /libs | |
parent | cc63209a4d9d572eead90f6587b4188d8e223c9d (diff) |
Update DPF
Diffstat (limited to 'libs')
-rw-r--r-- | libs/dgl/Base.hpp | 31 | ||||
-rw-r--r-- | libs/dgl/Window.hpp | 2 | ||||
-rw-r--r-- | libs/dgl/src/Window.cpp | 35 | ||||
-rw-r--r-- | libs/distrho/src/DistrhoDefines.h | 27 | ||||
-rw-r--r-- | libs/distrho/src/DistrhoPluginCarla.cpp | 79 | ||||
-rw-r--r-- | libs/distrho/src/DistrhoPluginVST.cpp | 8 | ||||
-rw-r--r-- | libs/distrho/src/DistrhoUIInternal.hpp | 5 |
7 files changed, 117 insertions, 70 deletions
diff --git a/libs/dgl/Base.hpp b/libs/dgl/Base.hpp index 943d466..91afe57 100644 --- a/libs/dgl/Base.hpp +++ b/libs/dgl/Base.hpp @@ -17,35 +17,44 @@ #ifndef DGL_BASE_HPP_INCLUDED #define DGL_BASE_HPP_INCLUDED +/* Compatibility with non-clang compilers */ +#ifndef __has_feature +# define __has_feature(x) 0 +#endif +#ifndef __has_extension +# define __has_extension __has_feature +#endif + +/* Check OS */ #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) # define DGL_OS_WINDOWS 1 #elif defined(__APPLE__) # define DGL_OS_MAC 1 #elif defined(__HAIKU__) # define DGL_OS_HAIKU 1 -#elif defined(__linux__) +#elif defined(__linux__) || defined(__linux) # define DGL_OS_LINUX 1 #endif +/* Check for C++11 support */ #if defined(HAVE_CPP11_SUPPORT) # define PROPER_CPP11_SUPPORT -#elif defined(__GNUC__) && (__cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)) -# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 -# define PROPER_CPP11_SUPPORT -# if (__GNUC__ * 100 + __GNUC_MINOR__) < 407 -# define override // gcc4.7+ only -# endif +#elif __cplusplus >= 201103L || (defined(__GNUC__) && defined(__GXX_EXPERIMENTAL_CXX0X__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 405) || __has_extension(cxx_noexcept) +# define PROPER_CPP11_SUPPORT +# if (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) < 407) || ! __has_extension(cxx_override_control) +# define override // gcc4.7+ only +# define final // gcc4.7+ only # endif #endif #ifndef PROPER_CPP11_SUPPORT -# ifndef __clang__ -# define noexcept throw() -# endif +# define noexcept throw() # define override +# define final # define nullptr (0) #endif +/* Define namespace */ #ifndef DGL_NAMESPACE # define DGL_NAMESPACE DGL #endif @@ -54,12 +63,14 @@ #define END_NAMESPACE_DGL } #define USE_NAMESPACE_DGL using namespace DGL_NAMESPACE; +/* GL includes */ #ifdef DGL_OS_MAC # include <OpenGL/gl.h> #else # include <GL/gl.h> #endif +/* missing GL defines */ #if defined(GL_BGR_EXT) && ! defined(GL_BGR) # define GL_BGR GL_BGR_EXT #endif diff --git a/libs/dgl/Window.hpp b/libs/dgl/Window.hpp index 64d5fd3..b413560 100644 --- a/libs/dgl/Window.hpp +++ b/libs/dgl/Window.hpp @@ -61,6 +61,8 @@ public: void setTitle(const char* title); + void setTransientWinId(intptr_t winId); + App& getApp() const noexcept; uint32_t getEventTimestamp() const; int getModifiers() const; diff --git a/libs/dgl/src/Window.cpp b/libs/dgl/src/Window.cpp index f6802b9..9463a67 100644 --- a/libs/dgl/src/Window.cpp +++ b/libs/dgl/src/Window.cpp @@ -34,6 +34,8 @@ struct PuglViewImpl { int height; };} #elif defined(DGL_OS_LINUX) +# include <sys/types.h> +# include <unistd.h> extern "C" { # include "pugl/pugl_x11.c" } @@ -185,6 +187,13 @@ public: xDisplay = impl->display; xWindow = impl->win; assert(xWindow != 0); + + if (! fUsingEmbed) + { + pid_t pid = getpid(); + Atom _nwp = XInternAtom(xDisplay, "_NET_WM_PID", True); + XChangeProperty(xDisplay, xWindow, _nwp, XA_CARDINAL, 32, PropModeReplace, (const unsigned char*)&pid, 1); + } #endif DBG("Success!\n"); @@ -394,14 +403,14 @@ public: if (fView->width == static_cast<int>(width) && fView->height == static_cast<int>(height) && ! forced) { - DBG("Window setSize matches current size, ignoring request\n"); + DBGp("Window setSize matches current size, ignoring request (%i %i)\n", width, height); return; } fView->width = static_cast<int>(width); fView->height = static_cast<int>(height); - DBGp("Window setSize called %s\n", forced ? "(forced)" : "(not forced)"); + DBGp("Window setSize called %s, size %i %i\n", forced ? "(forced)" : "(not forced)", width, height); #if defined(DGL_OS_WINDOWS) int winFlags = WS_POPUPWINDOW | WS_CAPTION; @@ -426,7 +435,9 @@ public: XSizeHints sizeHints; memset(&sizeHints, 0, sizeof(sizeHints)); - sizeHints.flags = PMinSize|PMaxSize; + sizeHints.flags = PSize|PMinSize|PMaxSize; + sizeHints.width = static_cast<int>(width); + sizeHints.height = static_cast<int>(height); sizeHints.min_width = static_cast<int>(width); sizeHints.min_height = static_cast<int>(height); sizeHints.max_width = static_cast<int>(width); @@ -457,6 +468,19 @@ public: #endif } + void setTransientWinId(const intptr_t winId) + { +#if defined(DGL_OS_LINUX) + XSetTransientForHint(xDisplay, xWindow, static_cast<::Window>(winId)); +#else + return; + // unused + (void)winId; +#endif + } + + // ------------------------------------------------------------------- + App& getApp() const noexcept { return fApp; @@ -871,6 +895,11 @@ void Window::setTitle(const char* title) pData->setTitle(title); } +void Window::setTransientWinId(intptr_t winId) +{ + pData->setTransientWinId(winId); +} + App& Window::getApp() const noexcept { return pData->getApp(); diff --git a/libs/distrho/src/DistrhoDefines.h b/libs/distrho/src/DistrhoDefines.h index bd72a1f..7276518 100644 --- a/libs/distrho/src/DistrhoDefines.h +++ b/libs/distrho/src/DistrhoDefines.h @@ -55,6 +55,15 @@ # error DISTRHO_PLUGIN_WANT_TIMEPOS undefined! #endif +/* Compatibility with non-clang compilers */ +#ifndef __has_feature +# define __has_feature(x) 0 +#endif +#ifndef __has_extension +# define __has_extension __has_feature +#endif + +/* Check OS */ #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) # define DISTRHO_PLUGIN_EXPORT extern "C" __declspec (dllexport) # define DISTRHO_OS_WINDOWS 1 @@ -77,25 +86,25 @@ # define DISTRHO_DLL_EXTENSION "so" #endif +/* Check for C++11 support */ #if defined(HAVE_CPP11_SUPPORT) # define PROPER_CPP11_SUPPORT -#elif defined(__GNUC__) && (__cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)) -# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 -# define PROPER_CPP11_SUPPORT -# if (__GNUC__ * 100 + __GNUC_MINOR__) < 407 -# define override // gcc4.7+ only -# endif +#elif __cplusplus >= 201103L || (defined(__GNUC__) && defined(__GXX_EXPERIMENTAL_CXX0X__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 405) || __has_extension(cxx_noexcept) +# define PROPER_CPP11_SUPPORT +# if (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) < 407) || ! __has_extension(cxx_override_control) +# define override // gcc4.7+ only +# define final // gcc4.7+ only # endif #endif #ifndef PROPER_CPP11_SUPPORT -# ifndef __clang__ -# define noexcept throw() -# endif +# define noexcept throw() # define override +# define final # define nullptr (0) #endif +/* Define namespace */ #ifndef DISTRHO_NO_NAMESPACE # ifndef DISTRHO_NAMESPACE # define DISTRHO_NAMESPACE DISTRHO diff --git a/libs/distrho/src/DistrhoPluginCarla.cpp b/libs/distrho/src/DistrhoPluginCarla.cpp index 334bb87..487606c 100644 --- a/libs/distrho/src/DistrhoPluginCarla.cpp +++ b/libs/distrho/src/DistrhoPluginCarla.cpp @@ -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; diff --git a/libs/distrho/src/DistrhoPluginVST.cpp b/libs/distrho/src/DistrhoPluginVST.cpp index e1fe00b..022dc74 100644 --- a/libs/distrho/src/DistrhoPluginVST.cpp +++ b/libs/distrho/src/DistrhoPluginVST.cpp @@ -533,7 +533,7 @@ public: // found, set value stateValue = &state[i+1]; - setSharedState(stateKey, stateValue); + setStateFromUi(stateKey, stateValue); if (fVstUi != nullptr) fVstUi->setStateFromPlugin(stateKey, stateValue); @@ -752,6 +752,10 @@ private: { fPlugin.setState(newKey, newValue); + // check if we want to save this key + if (! fPlugin.wantsStateKey(key)) + return; + // check if key already exists for (auto it = fStateMap.begin(), end = fStateMap.end(); it != end; ++it) { @@ -764,7 +768,7 @@ private: } } - // add a new one then + // nope, add a new one then d_string d_key(newKey); fStateMap[d_key] = newValue; } diff --git a/libs/distrho/src/DistrhoUIInternal.hpp b/libs/distrho/src/DistrhoUIInternal.hpp index fae40ce..a6ba0f2 100644 --- a/libs/distrho/src/DistrhoUIInternal.hpp +++ b/libs/distrho/src/DistrhoUIInternal.hpp @@ -223,6 +223,11 @@ public: glWindow.setTitle(uiTitle); } + void setTransientWinId(const intptr_t winId) + { + glWindow.setTransientWinId(winId); + } + void setVisible(const bool yesNo) { glWindow.setVisible(yesNo); |