| @@ -20,6 +20,8 @@ | |||
| #include "CarlaStateUtils.hpp" | |||
| #include "CarlaMIDI.h" | |||
| #include <cmath> | |||
| #include <QtCore/QDir> | |||
| #include <QtCore/QFile> | |||
| #include <QtCore/QFileInfo> | |||
| @@ -26,6 +26,7 @@ | |||
| #include "jackbridge/JackBridge.hpp" | |||
| #include <cerrno> | |||
| #include <ctime> | |||
| CARLA_BACKEND_START_NAMESPACE | |||
| @@ -334,7 +334,7 @@ public: | |||
| fConnectName.clear(); | |||
| for (auto it = fMidiIns.begin(); it.valid(); it.next()) | |||
| for (NonRtList<MidiPort>::Itenerator it = fMidiIns.begin(); it.valid(); it.next()) | |||
| { | |||
| MidiPort& port(*it); | |||
| RtMidiIn* const midiInPort((RtMidiIn*)port.rtmidi); | |||
| @@ -343,7 +343,7 @@ public: | |||
| delete midiInPort; | |||
| } | |||
| for (auto it = fMidiOuts.begin(); it.valid(); it.next()) | |||
| for (NonRtList<MidiPort>::Itenerator it = fMidiOuts.begin(); it.valid(); it.next()) | |||
| { | |||
| MidiPort& port(*it); | |||
| RtMidiOut* const midiOutPort((RtMidiOut*)port.rtmidi); | |||
| @@ -504,7 +504,7 @@ public: | |||
| return false; | |||
| } | |||
| for (auto it=fUsedConnections.begin(); it.valid(); it.next()) | |||
| for (NonRtList<ConnectionToId>::Itenerator it=fUsedConnections.begin(); it.valid(); it.next()) | |||
| { | |||
| const ConnectionToId& connection(*it); | |||
| @@ -517,7 +517,7 @@ public: | |||
| { | |||
| const int portId(targetPort-PATCHBAY_GROUP_MIDI_OUT*1000); | |||
| for (auto it=fMidiOuts.begin(); it.valid(); it.next()) | |||
| for (NonRtList<MidiPort>::Itenerator it=fMidiOuts.begin(); it.valid(); it.next()) | |||
| { | |||
| MidiPort& midiPort(*it); | |||
| @@ -536,7 +536,7 @@ public: | |||
| { | |||
| const int portId(targetPort-PATCHBAY_GROUP_MIDI_IN*1000); | |||
| for (auto it=fMidiIns.begin(); it.valid(); it.next()) | |||
| for (NonRtList<MidiPort>::Itenerator it=fMidiIns.begin(); it.valid(); it.next()) | |||
| { | |||
| MidiPort& midiPort(*it); | |||
| @@ -690,7 +690,7 @@ public: | |||
| // Connections | |||
| fConnectAudioLock.lock(); | |||
| for (auto it = fConnectedAudioIns[0].begin(); it.valid(); it.next()) | |||
| for (NonRtList<uint>::Itenerator it = fConnectedAudioIns[0].begin(); it.valid(); it.next()) | |||
| { | |||
| const uint& port(*it); | |||
| CARLA_ASSERT(port < fAudioCountIn); | |||
| @@ -706,7 +706,7 @@ public: | |||
| fLastConnectionId++; | |||
| } | |||
| for (auto it = fConnectedAudioIns[1].begin(); it.valid(); it.next()) | |||
| for (NonRtList<uint>::Itenerator it = fConnectedAudioIns[1].begin(); it.valid(); it.next()) | |||
| { | |||
| const uint& port(*it); | |||
| CARLA_ASSERT(port < fAudioCountIn); | |||
| @@ -722,7 +722,7 @@ public: | |||
| fLastConnectionId++; | |||
| } | |||
| for (auto it = fConnectedAudioOuts[0].begin(); it.valid(); it.next()) | |||
| for (NonRtList<uint>::Itenerator it = fConnectedAudioOuts[0].begin(); it.valid(); it.next()) | |||
| { | |||
| const uint& port(*it); | |||
| CARLA_ASSERT(port < fAudioCountOut); | |||
| @@ -738,7 +738,7 @@ public: | |||
| fLastConnectionId++; | |||
| } | |||
| for (auto it = fConnectedAudioOuts[1].begin(); it.valid(); it.next()) | |||
| for (NonRtList<uint>::Itenerator it = fConnectedAudioOuts[1].begin(); it.valid(); it.next()) | |||
| { | |||
| const uint& port(*it); | |||
| CARLA_ASSERT(port < fAudioCountOut); | |||
| @@ -756,7 +756,7 @@ public: | |||
| fConnectAudioLock.unlock(); | |||
| for (auto it=fMidiIns.begin(); it.valid(); it.next()) | |||
| for (NonRtList<MidiPort>::Itenerator it=fMidiIns.begin(); it.valid(); it.next()) | |||
| { | |||
| const MidiPort& midiPort(*it); | |||
| @@ -771,7 +771,7 @@ public: | |||
| fLastConnectionId++; | |||
| } | |||
| for (auto it=fMidiOuts.begin(); it.valid(); it.next()) | |||
| for (NonRtList<MidiPort>::Itenerator it=fMidiOuts.begin(); it.valid(); it.next()) | |||
| { | |||
| const MidiPort& midiPort(*it); | |||
| @@ -934,7 +934,7 @@ protected: | |||
| { | |||
| bool first = true; | |||
| for (auto it = fConnectedAudioIns[0].begin(); it.valid(); it.next()) | |||
| for (NonRtList<uint>::Itenerator it = fConnectedAudioIns[0].begin(); it.valid(); it.next()) | |||
| { | |||
| const uint& port(*it); | |||
| CARLA_ASSERT(port < fAudioCountIn); | |||
| @@ -960,7 +960,7 @@ protected: | |||
| { | |||
| bool first = true; | |||
| for (auto it = fConnectedAudioIns[1].begin(); it.valid(); it.next()) | |||
| for (NonRtList<uint>::Itenerator it = fConnectedAudioIns[1].begin(); it.valid(); it.next()) | |||
| { | |||
| const uint& port(*it); | |||
| CARLA_ASSERT(port < fAudioCountIn); | |||
| @@ -984,7 +984,7 @@ protected: | |||
| // connect output buffers | |||
| if (fConnectedAudioOuts[0].count() != 0) | |||
| { | |||
| for (auto it = fConnectedAudioOuts[0].begin(); it.valid(); it.next()) | |||
| for (NonRtList<uint>::Itenerator it = fConnectedAudioOuts[0].begin(); it.valid(); it.next()) | |||
| { | |||
| const uint& port(*it); | |||
| CARLA_ASSERT(port < fAudioCountOut); | |||
| @@ -995,7 +995,7 @@ protected: | |||
| if (fConnectedAudioOuts[1].count() != 0) | |||
| { | |||
| for (auto it = fConnectedAudioOuts[1].begin(); it.valid(); it.next()) | |||
| for (NonRtList<uint>::Itenerator it = fConnectedAudioOuts[1].begin(); it.valid(); it.next()) | |||
| { | |||
| const uint& port(*it); | |||
| CARLA_ASSERT(port < fAudioCountOut); | |||
| @@ -33,10 +33,19 @@ struct AudioFilePool { | |||
| uint32_t startFrame; | |||
| uint32_t size; | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| AudioFilePool() | |||
| : buffer{nullptr}, | |||
| startFrame(0), | |||
| size(0) {} | |||
| #else | |||
| AudioFilePool() | |||
| : startFrame(0), | |||
| size(0) | |||
| { | |||
| buffer[0] = buffer[1] = nullptr; | |||
| } | |||
| #endif | |||
| ~AudioFilePool() | |||
| { | |||
| @@ -32,9 +32,17 @@ struct RawMidiEvent { | |||
| uint32_t time; | |||
| RawMidiEvent() | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| : data{0}, | |||
| size(0), | |||
| time(0) {} | |||
| #else | |||
| : size(0), | |||
| time(0) | |||
| { | |||
| carla_fill<uint8_t>(data, MAX_EVENT_DATA_SIZE, 0); | |||
| } | |||
| #endif | |||
| }; | |||
| class AbstractMidiPlayer | |||
| @@ -172,7 +180,7 @@ public: | |||
| if (! fMutex.tryLock()) | |||
| return; | |||
| for (auto it = fData.begin(); it.valid(); it.next()) | |||
| for (NonRtList<const RawMidiEvent*>::Itenerator it = fData.begin(); it.valid(); it.next()) | |||
| { | |||
| const RawMidiEvent* const rawMidiEvent(*it); | |||
| @@ -211,7 +219,7 @@ private: | |||
| return; | |||
| } | |||
| for (auto it = fData.begin(); it.valid(); it.next()) | |||
| for (NonRtList<const RawMidiEvent*>::Itenerator it = fData.begin(); it.valid(); it.next()) | |||
| { | |||
| const RawMidiEvent* const oldEvent(*it); | |||
| @@ -24,6 +24,8 @@ | |||
| #include "jackbridge/JackBridge.hpp" | |||
| #include <cerrno> | |||
| #include <cmath> | |||
| #include <ctime> | |||
| #include <QtCore/QDir> | |||
| @@ -56,7 +56,7 @@ public: | |||
| const CarlaMutex::ScopedLocker sl(&mutex); | |||
| for (auto it = libs.begin(); it.valid(); it.next()) | |||
| for (NonRtList<Lib>::Itenerator it = libs.begin(); it.valid(); it.next()) | |||
| { | |||
| Lib& lib(*it); | |||
| @@ -72,7 +72,11 @@ public: | |||
| if (libPtr == nullptr) | |||
| return nullptr; | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| Lib lib{libPtr, carla_strdup(filename), 1}; | |||
| #else | |||
| Lib lib(libPtr, carla_strdup(filename)); | |||
| #endif | |||
| libs.append(lib); | |||
| return libPtr; | |||
| @@ -87,7 +91,7 @@ public: | |||
| const CarlaMutex::ScopedLocker sl(&mutex); | |||
| for (auto it = libs.begin(); it.valid(); it.next()) | |||
| for (NonRtList<Lib>::Itenerator it = libs.begin(); it.valid(); it.next()) | |||
| { | |||
| Lib& lib(*it); | |||
| @@ -116,6 +120,13 @@ private: | |||
| void* const lib; | |||
| const char* const filename; | |||
| int count; | |||
| #ifndef CARLA_PROPER_CPP11_SUPPORT | |||
| Lib(void* const lib_, const char* const filename_) | |||
| : lib(lib_), | |||
| filename(filename_), | |||
| count(1) {} | |||
| #endif | |||
| }; | |||
| CarlaMutex mutex; | |||
| @@ -728,7 +739,7 @@ const SaveState& CarlaPlugin::getSaveState() | |||
| // ---------------------------- | |||
| // Custom Data | |||
| for (auto it = kData->custom.begin(); it.valid(); it.next()) | |||
| for (NonRtList<CustomData>::Itenerator it = kData->custom.begin(); it.valid(); it.next()) | |||
| { | |||
| const CustomData& cData(*it); | |||
| @@ -747,6 +758,31 @@ const SaveState& CarlaPlugin::getSaveState() | |||
| return saveState; | |||
| } | |||
| struct ParamSymbol { | |||
| uint32_t index; | |||
| const char* symbol; | |||
| ParamSymbol(uint32_t index_, const char* symbol_) | |||
| : index(index_), | |||
| symbol(carla_strdup(symbol_)) {} | |||
| void free() | |||
| { | |||
| if (symbol != nullptr) | |||
| { | |||
| delete[] symbol; | |||
| symbol = nullptr; | |||
| } | |||
| } | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| ParamSymbol() = delete; | |||
| ParamSymbol(ParamSymbol&) = delete; | |||
| ParamSymbol(const ParamSymbol&) = delete; | |||
| #endif | |||
| }; | |||
| void CarlaPlugin::loadSaveState(const SaveState& saveState) | |||
| { | |||
| char strBuf[STR_MAX+1]; | |||
| @@ -754,7 +790,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) | |||
| // --------------------------------------------------------------------- | |||
| // Part 1 - set custom data (except binary/chunks) | |||
| for (auto it = saveState.customData.begin(); it.valid(); it.next()) | |||
| for (NonRtList<StateCustomData*>::Itenerator it = saveState.customData.begin(); it.valid(); it.next()) | |||
| { | |||
| const StateCustomData* const stateCustomData(*it); | |||
| @@ -812,28 +848,6 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) | |||
| // --------------------------------------------------------------------- | |||
| // Part 4a - get plugin parameter symbols | |||
| struct ParamSymbol { | |||
| uint32_t index; | |||
| const char* symbol; | |||
| ParamSymbol(uint32_t index_, const char* symbol_) | |||
| : index(index_), | |||
| symbol(carla_strdup(symbol_)) {} | |||
| void free() | |||
| { | |||
| if (symbol != nullptr) | |||
| { | |||
| delete[] symbol; | |||
| symbol = nullptr; | |||
| } | |||
| } | |||
| ParamSymbol() = delete; | |||
| ParamSymbol(ParamSymbol&) = delete; | |||
| ParamSymbol(const ParamSymbol&) = delete; | |||
| }; | |||
| NonRtList<ParamSymbol*> paramSymbols; | |||
| if (type() == PLUGIN_LADSPA || type() == PLUGIN_LV2) | |||
| @@ -855,7 +869,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) | |||
| const float sampleRate(kData->engine->getSampleRate()); | |||
| for (auto it = saveState.parameters.begin(); it.valid(); it.next()) | |||
| for (NonRtList<StateParameter*>::Itenerator it = saveState.parameters.begin(); it.valid(); it.next()) | |||
| { | |||
| StateParameter* const stateParameter(*it); | |||
| @@ -866,7 +880,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) | |||
| // Try to set by symbol, otherwise use index | |||
| if (stateParameter->symbol != nullptr && *stateParameter->symbol != 0) | |||
| { | |||
| for (auto it = paramSymbols.begin(); it.valid(); it.next()) | |||
| for (NonRtList<ParamSymbol*>::Itenerator it = paramSymbols.begin(); it.valid(); it.next()) | |||
| { | |||
| ParamSymbol* const paramSymbol(*it); | |||
| @@ -887,7 +901,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) | |||
| // Symbol only | |||
| if (stateParameter->symbol != nullptr && *stateParameter->symbol != 0) | |||
| { | |||
| for (auto it = paramSymbols.begin(); it.valid(); it.next()) | |||
| for (NonRtList<ParamSymbol*>::Itenerator it = paramSymbols.begin(); it.valid(); it.next()) | |||
| { | |||
| ParamSymbol* const paramSymbol(*it); | |||
| @@ -926,7 +940,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) | |||
| } | |||
| // clear | |||
| for (auto it = paramSymbols.begin(); it.valid(); it.next()) | |||
| for (NonRtList<ParamSymbol*>::Itenerator it = paramSymbols.begin(); it.valid(); it.next()) | |||
| { | |||
| ParamSymbol* const paramSymbol(*it); | |||
| paramSymbol->free(); | |||
| @@ -938,7 +952,7 @@ void CarlaPlugin::loadSaveState(const SaveState& saveState) | |||
| // --------------------------------------------------------------------- | |||
| // Part 5 - set chunk data | |||
| for (auto it = saveState.customData.begin(); it.valid(); it.next()) | |||
| for (NonRtList<StateCustomData*>::Itenerator it = saveState.customData.begin(); it.valid(); it.next()) | |||
| { | |||
| const StateCustomData* const stateCustomData(*it); | |||
| @@ -1372,7 +1386,7 @@ void CarlaPlugin::setCustomData(const char* const type, const char* const key, c | |||
| return; | |||
| // Check if we already have this key | |||
| for (auto it = kData->custom.begin(); it.valid(); it.next()) | |||
| for (NonRtList<CustomData>::Itenerator it = kData->custom.begin(); it.valid(); it.next()) | |||
| { | |||
| CustomData& cData(*it); | |||
| @@ -1805,7 +1819,7 @@ void CarlaPlugin::updateOscData(const lo_address& source, const char* const url) | |||
| osc_send_sample_rate(&kData->osc.data, kData->engine->getSampleRate()); | |||
| for (auto it = kData->custom.begin(); it.valid(); it.next()) | |||
| for (NonRtList<CustomData>::Itenerator it = kData->custom.begin(); it.valid(); it.next()) | |||
| { | |||
| const CustomData& cData(*it); | |||
| @@ -518,9 +518,11 @@ struct CarlaPluginProtectedData { | |||
| OSC(CarlaEngine* const engine, CarlaPlugin* const plugin) | |||
| : thread(engine, plugin) {} | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| OSC() = delete; | |||
| OSC(OSC&) = delete; | |||
| OSC(const OSC&) = delete; | |||
| #endif | |||
| CARLA_LEAK_DETECTOR(OSC) | |||
| } osc; | |||
| @@ -539,9 +541,11 @@ struct CarlaPluginProtectedData { | |||
| latencyBuffers(nullptr), | |||
| osc(engine, plugin) {} | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| CarlaPluginProtectedData() = delete; | |||
| CarlaPluginProtectedData(CarlaPluginProtectedData&) = delete; | |||
| CarlaPluginProtectedData(const CarlaPluginProtectedData&) = delete; | |||
| #endif | |||
| CARLA_LEAK_DETECTOR(CarlaPluginProtectedData) | |||
| ~CarlaPluginProtectedData() | |||
| @@ -579,7 +583,7 @@ struct CarlaPluginProtectedData { | |||
| client = nullptr; | |||
| } | |||
| for (auto it = custom.begin(); it.valid(); it.next()) | |||
| for (NonRtList<CustomData>::Itenerator it = custom.begin(); it.valid(); it.next()) | |||
| { | |||
| CustomData& cData(*it); | |||
| @@ -42,12 +42,21 @@ public: | |||
| fSettings(nullptr), | |||
| fSynth(nullptr), | |||
| fSynthId(-1), | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| fAudio16Buffers(nullptr), | |||
| fParamBuffers{0.0f}, | |||
| fCurMidiProgs{0} | |||
| #else | |||
| fAudio16Buffers(nullptr) | |||
| #endif | |||
| { | |||
| carla_debug("FluidSynthPlugin::FluidSynthPlugin(%p, %i, %s)", engine, id, bool2str(use16Outs)); | |||
| #ifndef CARLA_PROPER_CPP11_SUPPORT | |||
| carla_zeroFloat(fParamBuffers, FluidSynthParametersMax); | |||
| carla_fill<int32_t>(fCurMidiProgs, MAX_MIDI_CHANNELS, 0); | |||
| #endif | |||
| // create settings | |||
| fSettings = new_fluid_settings(); | |||
| CARLA_ASSERT(fSettings != nullptr); | |||
| @@ -357,7 +357,9 @@ public: | |||
| : CarlaPlugin(engine, id), | |||
| fHandle(nullptr), | |||
| fHandle2(nullptr), | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| fFeatures{nullptr}, | |||
| #endif | |||
| fDescriptor(nullptr), | |||
| fRdfDescriptor(nullptr), | |||
| fAudioInBuffers(nullptr), | |||
| @@ -367,6 +369,10 @@ public: | |||
| { | |||
| carla_debug("Lv2Plugin::Lv2Plugin(%p, %i)", engine, id); | |||
| #ifndef CARLA_PROPER_CPP11_SUPPORT | |||
| carla_fill<LV2_Feature*>(fFeatures, kFeatureCount+1, nullptr); | |||
| #endif | |||
| kData->osc.thread.setMode(CarlaPluginThread::PLUGIN_THREAD_LV2_GUI); | |||
| for (uint32_t i=0; i < CARLA_URI_MAP_ID_COUNT; ++i) | |||
| @@ -503,7 +509,7 @@ public: | |||
| delete fFeatures[i]; | |||
| } | |||
| for (auto it = fCustomURIDs.begin(); it.valid(); it.next()) | |||
| for (NonRtList<const char*>::Itenerator it = fCustomURIDs.begin(); it.valid(); it.next()) | |||
| { | |||
| const char*& uri(*it); | |||
| @@ -3584,7 +3590,7 @@ protected: | |||
| } | |||
| // Check if we already have this key | |||
| for (auto it = kData->custom.begin(); it.valid(); it.next()) | |||
| for (NonRtList<CustomData>::Itenerator it = kData->custom.begin(); it.valid(); it.next()) | |||
| { | |||
| CustomData& data(*it); | |||
| @@ -3646,7 +3652,7 @@ protected: | |||
| const char* stype = nullptr; | |||
| const char* stringData = nullptr; | |||
| for (auto it = kData->custom.begin(); it.valid(); it.next()) | |||
| for (NonRtList<CustomData>::Itenerator it = kData->custom.begin(); it.valid(); it.next()) | |||
| { | |||
| CustomData& data(*it); | |||
| @@ -168,11 +168,19 @@ public: | |||
| fIsUiVisible(false), | |||
| fAudioInBuffers(nullptr), | |||
| fAudioOutBuffers(nullptr), | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| fMidiEventCount(0), | |||
| fCurMidiProgs{0} | |||
| #else | |||
| fMidiEventCount(0) | |||
| #endif | |||
| { | |||
| carla_debug("NativePlugin::NativePlugin(%p, %i)", engine, id); | |||
| #ifndef CARLA_PROPER_CPP11_SUPPORT | |||
| carla_fill<int32_t>(fCurMidiProgs, MAX_MIDI_CHANNELS, 0); | |||
| #endif | |||
| carla_zeroStruct< ::MidiEvent>(fMidiEvents, MAX_MIDI_EVENTS*2); | |||
| fHost.handle = this; | |||
| @@ -697,7 +705,7 @@ public: | |||
| // Update UI values, FIXME? (remove?) | |||
| if (fDescriptor->ui_set_custom_data != nullptr) | |||
| { | |||
| for (auto it = kData->custom.begin(); it.valid(); it.next()) | |||
| for (NonRtList<CustomData>::Itenerator it = kData->custom.begin(); it.valid(); it.next()) | |||
| { | |||
| const CustomData& cData(*it); | |||
| @@ -2166,7 +2174,7 @@ public: | |||
| // --------------------------------------------------------------- | |||
| // get descriptor that matches label | |||
| for (auto it = sPluginDescriptors.begin(); it.valid(); it.next()) | |||
| for (NonRtList<const PluginDescriptor*>::Itenerator it = sPluginDescriptors.begin(); it.valid(); it.next()) | |||
| { | |||
| fDescriptor = *it; | |||
| @@ -2345,8 +2345,15 @@ private: | |||
| FixedVstEvents() | |||
| : numEvents(0), | |||
| #ifdef CARLA_PROPER_CPP11_SUPPORT | |||
| reserved(0), | |||
| data{nullptr} {} | |||
| #else | |||
| reserved(0) | |||
| { | |||
| carla_fill<VstEvent*>(data, MAX_MIDI_EVENTS*2, nullptr); | |||
| } | |||
| #endif | |||
| } fEvents; | |||
| struct GuiInfo { | |||
| @@ -58,8 +58,12 @@ ifeq ($(HAVE_LINUXSAMPLER),true) | |||
| W32_LIBS += -lrpcrt4 | |||
| endif | |||
| else | |||
| ifeq ($(MACOS),true) | |||
| DGL_LIBS = -framework Cocoa | |||
| else | |||
| DGL_LIBS = -lX11 | |||
| endif | |||
| endif | |||
| ifeq ($(HAVE_AF_DEPS),true) | |||
| LINK_FLAGS += $(shell pkg-config --libs sndfile) | |||
| @@ -83,9 +87,13 @@ LINK_FLAGS += $(shell pkg-config --libs ntk ntk_images) | |||
| endif | |||
| endif | |||
| EXTRA_LIBS = -ldl -lrt | |||
| EXTRA_LIBS = -ldl | |||
| LINK_FLAGS += $(EXTRA_LIBS) | |||
| ifneq ($(MACOS),true) | |||
| EXTRA_LIBS += -lrt | |||
| endif | |||
| # -------------------------------------------------------------- | |||
| LIBS = ../libcarla_engine.a | |||
| @@ -135,7 +143,7 @@ debug: | |||
| $(CXX) $^ -shared $(LINK_FLAGS) $(W32_LIBS) -Wl,--output-def,$@.def -o $@ && $(STRIP) $@ | |||
| ../libcarla_standalone.dylib: $(OBJS) $(LIBS) | |||
| $(CXX) $^ -dynamiclib $(LINK_FLAGS) -framework CoreAudio -framework CoreMidi -framework CoreFoundation -o $@ | |||
| $(CXX) $^ -dynamiclib $(LINK_FLAGS) -framework CoreAudio -framework CoreMIDI -framework CoreFoundation -o $@ | |||
| ../libcarla_standalone.so: $(OBJS) $(LIBS) | |||
| $(CXX) $^ -shared $(LINK_FLAGS) -o $@ && $(STRIP) $@ | |||
| @@ -20,6 +20,9 @@ | |||
| #include "CarlaMIDI.h" | |||
| #include "RtList.hpp" | |||
| // TODO - remove | |||
| #include <vector> | |||
| #include <QtCore/QDir> | |||
| extern "C" { | |||
| @@ -61,7 +61,11 @@ endif | |||
| POSIX_BUILD_FLAGS = $(BUILD_PLUGIN_FLAGS) | |||
| POSIX_32BIT_FLAGS = $(32BIT_FLAGS) -L/usr/lib32 -L/usr/lib/i386-linux-gnu | |||
| POSIX_64BIT_FLAGS = $(64BIT_FLAGS) -L/usr/lib64 -L/usr/lib/x86_64-linux-gnu | |||
| POSIX_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) -ldl -lrt | |||
| POSIX_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) -ldl | |||
| ifneq ($(MACOS),true) | |||
| POSIX_LINK_FLAGS += -lrt | |||
| endif | |||
| # -------------------------------------------------------------- | |||
| # Plugin bridges (Windows) | |||
| @@ -74,7 +78,11 @@ WIN_LINK_FLAGS = $(LINK_PLUGIN_FLAGS) -mwindows -lwinspool -lole32 -luuid - | |||
| # -------------------------------------------------------------- | |||
| # Plugin bridges (Native) | |||
| ifeq ($(MACOS),true) | |||
| DGL_LIBS = -framework Cocoa | |||
| else | |||
| DGL_LIBS = -lX11 | |||
| endif | |||
| NATIVE_BUILD_FLAGS = $(POSIX_BUILD_FLAGS) | |||
| NATIVE_LINK_FLAGS = $(POSIX_LINK_FLAGS) | |||
| @@ -25,16 +25,30 @@ | |||
| #include <cstdlib> | |||
| #include <cstring> | |||
| #ifdef PROPER_CPP11_SUPPORT | |||
| # include <cstdint> | |||
| #else | |||
| # include <stdint.h> | |||
| #endif | |||
| #ifdef DISTRHO_OS_WINDOWS | |||
| # include <windows.h> | |||
| #else | |||
| # include <unistd.h> | |||
| #endif | |||
| #ifdef PROPER_CPP11_SUPPORT | |||
| # include <cstdint> | |||
| #else | |||
| # include <stdint.h> | |||
| #if defined(DISTRHO_OS_MAC) && ! defined(CARLA_OS_MAC) | |||
| namespace std { | |||
| inline float | |||
| fmin(float __x, float __y) | |||
| { return __builtin_fminf(__x, __y); } | |||
| inline float | |||
| fmax(float __x, float __y) | |||
| { return __builtin_fmaxf(__x, __y); } | |||
| inline float | |||
| rint(float __x) | |||
| { return __builtin_rintf(__x); } | |||
| } | |||
| #endif | |||
| START_NAMESPACE_DISTRHO | |||
| @@ -139,7 +139,7 @@ struct HexString | |||
| // specialization to enable fast concatenating of our string tokens to a string | |||
| template <typename T> | |||
| struct QConcatenable<HexString<T>> | |||
| struct QConcatenable<HexString<T> > | |||
| { | |||
| typedef HexString<T> type; | |||
| enum { ExactSize = true }; | |||
| @@ -19,6 +19,8 @@ | |||
| #ifndef __CARLA_STYLE_HPP__ | |||
| #define __CARLA_STYLE_HPP__ | |||
| #include "CarlaDefines.hpp" | |||
| #include <QtGui/QStylePlugin> | |||
| #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) | |||
| @@ -19,6 +19,8 @@ | |||
| #ifndef __CARLA_STYLE_ANIMATIONS_HPP__ | |||
| #define __CARLA_STYLE_ANIMATIONS_HPP__ | |||
| #include "CarlaStyle.hpp" | |||
| #include <QtCore/QAbstractAnimation> | |||
| #include <QtCore/QCoreApplication> | |||
| #include <QtCore/QDateTime> | |||
| @@ -8,7 +8,7 @@ include ../Makefile.mk | |||
| # -------------------------------------------------------------- | |||
| BUILD_CXX_FLAGS += -fvisibility=hidden -I. | |||
| BUILD_CXX_FLAGS += -fvisibility=hidden -I. -I../includes | |||
| ifeq ($(HAVE_QT5),true) | |||
| BUILD_CXX_FLAGS += $(shell pkg-config --cflags Qt5Core Qt5Gui Qt5Widgets) | |||
| @@ -379,20 +379,17 @@ void carla_zeroFloat(float* const data, const size_t size) | |||
| carla_fill<float>(data, size, 0.0f); | |||
| } | |||
| #ifdef CARLA_OS_MAC | |||
| #if defined(CARLA_OS_MAC) && ! defined(DISTRHO_OS_MAC) | |||
| namespace std { | |||
| // inline float | |||
| // fabs(float __x) | |||
| // { return __builtin_fabsf(__x); } | |||
| // inline float | |||
| // fmin(float __x, float __y) | |||
| // { return __builtin_fminf(__x, __y); } | |||
| // inline float | |||
| // fmax(float __x, float __y) | |||
| // { return __builtin_fmaxf(__x, __y); } | |||
| // inline float | |||
| // rint(float __x) | |||
| // { return __builtin_rintf(__x); } | |||
| inline float | |||
| fmin(float __x, float __y) | |||
| { return __builtin_fminf(__x, __y); } | |||
| inline float | |||
| fmax(float __x, float __y) | |||
| { return __builtin_fmaxf(__x, __y); } | |||
| inline float | |||
| rint(float __x) | |||
| { return __builtin_rintf(__x); } | |||
| } | |||
| #endif | |||
| @@ -8,7 +8,7 @@ include ../Makefile.mk | |||
| # -------------------------------------------------------------- | |||
| BUILD_CXX_FLAGS += -fvisibility=hidden -I. | |||
| BUILD_CXX_FLAGS += -fvisibility=hidden -I. -I../includes | |||
| ifeq ($(HAVE_QT5),true) | |||
| BUILD_CXX_FLAGS += $(shell pkg-config --cflags Qt5Core Qt5Gui Qt5Widgets) | |||
| @@ -18,6 +18,8 @@ | |||
| #ifndef __DIGITALPEAKMETER_HPP__ | |||
| #define __DIGITALPEAKMETER_HPP__ | |||
| #include "CarlaDefines.hpp" | |||
| #include <QtCore/QTimer> | |||
| #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) | |||
| @@ -18,6 +18,8 @@ | |||
| #ifndef __LEDBUTTON_HPP__ | |||
| #define __LEDBUTTON_HPP__ | |||
| #include "CarlaDefines.hpp" | |||
| #include <QtGui/QPixmap> | |||
| #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) | |||
| @@ -18,6 +18,8 @@ | |||
| #ifndef __PARAMSPINBOX_HPP__ | |||
| #define __PARAMSPINBOX_HPP__ | |||
| #include "CarlaDefines.hpp" | |||
| #include <QtCore/Qt> | |||
| #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) | |||
| @@ -18,6 +18,8 @@ | |||
| #ifndef __PIXMAPDIAL_HPP__ | |||
| #define __PIXMAPDIAL_HPP__ | |||
| #include "CarlaDefines.hpp" | |||
| #include <QtGui/QPixmap> | |||
| #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) | |||
| @@ -22,7 +22,10 @@ | |||
| #include <QtGui/QMouseEvent> | |||
| #include <QtGui/QPainter> | |||
| static std::map<int, QRectF> kMidiKey2RectMapHorizontal = { | |||
| #ifndef HAVE_CPP11_SUPPORT | |||
| static std::map<int, QRectF> kMidiKey2RectMapHorizontal; | |||
| #else | |||
| static const std::map<int, QRectF> kMidiKey2RectMapHorizontal = { | |||
| {0, QRectF(0, 0, 18, 64)}, // C | |||
| {1, QRectF(13, 0, 11, 42)}, // C# | |||
| {2, QRectF(18, 0, 25, 64)}, // D | |||
| @@ -36,8 +39,12 @@ static std::map<int, QRectF> kMidiKey2RectMapHorizontal = { | |||
| {10, QRectF(121, 0, 11, 42)}, // A# | |||
| {11, QRectF(126, 0, 18, 64)} // B | |||
| }; | |||
| #endif | |||
| static std::map<int, QRectF> kMidiKey2RectMapVertical = { | |||
| #ifndef HAVE_CPP11_SUPPORT | |||
| static std::map<int, QRectF> kMidiKey2RectMapVertical; | |||
| #else | |||
| static const std::map<int, QRectF> kMidiKey2RectMapVertical = { | |||
| {11, QRectF(0, 0, 64, 18)}, // B | |||
| {10, QRectF(0, 14, 42, 7)}, // A# | |||
| {9, QRectF(0, 18, 64, 24)}, // A | |||
| @@ -51,7 +58,11 @@ static std::map<int, QRectF> kMidiKey2RectMapVertical = { | |||
| {1, QRectF(0, 122, 42, 7)}, // C# | |||
| {0, QRectF(0, 126, 64, 18)} // C | |||
| }; | |||
| #endif | |||
| #ifndef HAVE_CPP11_SUPPORT | |||
| static std::map<int, int> kMidiKeyboard2KeyMap; | |||
| #else | |||
| static const std::map<int, int> kMidiKeyboard2KeyMap = { | |||
| // 3th octave | |||
| {Qt::Key_Z, 48}, | |||
| @@ -80,11 +91,12 @@ static const std::map<int, int> kMidiKeyboard2KeyMap = { | |||
| {Qt::Key_7, 70}, | |||
| {Qt::Key_U, 71} | |||
| }; | |||
| #endif | |||
| #ifdef HAVE_CPP11_SUPPORT | |||
| static const QVector<int> kBlackNotes = {1, 3, 6, 8, 10}; | |||
| #else | |||
| #ifndef HAVE_CPP11_SUPPORT | |||
| static QVector<int> kBlackNotes; | |||
| #else | |||
| static const QVector<int> kBlackNotes = {1, 3, 6, 8, 10}; | |||
| #endif | |||
| PixmapKeyboard::PixmapKeyboard(QWidget* parent) | |||
| @@ -106,6 +118,7 @@ PixmapKeyboard::PixmapKeyboard(QWidget* parent) | |||
| #ifndef HAVE_CPP11_SUPPORT | |||
| if (kBlackNotes.count() == 0) | |||
| { | |||
| // TODO - rest of data | |||
| kBlackNotes << 1; | |||
| kBlackNotes << 3; | |||
| kBlackNotes << 6; | |||
| @@ -18,6 +18,8 @@ | |||
| #ifndef __PIXMAPKEYBOARD_HPP__ | |||
| #define __PIXMAPKEYBOARD_HPP__ | |||
| #include "CarlaDefines.hpp" | |||
| #include <map> | |||
| #include <QtGui/QPixmap> | |||