@@ -209,11 +209,11 @@ void DistrhoPlugin3BandEQ::d_setProgram(uint32_t index) | |||
void DistrhoPlugin3BandEQ::d_activate() | |||
{ | |||
xLP = exp(-2.0 * cfPI * freqLP / d_sampleRate()); | |||
xLP = std::exp(-2.0 * cfPI * freqLP / d_sampleRate()); | |||
a0LP = 1.0f - xLP; | |||
b1LP = -xLP; | |||
xHP = exp(-2.0 * cfPI * freqHP / d_sampleRate()); | |||
xHP = std::exp(-2.0 * cfPI * freqHP / d_sampleRate()); | |||
a0HP = 1.0f - xHP; | |||
b1HP = -xHP; | |||
} | |||
@@ -226,8 +226,8 @@ void DistrhoPlugin3BandEQ::d_deactivate() | |||
void DistrhoPlugin3BandEQ::d_run(float** inputs, float** outputs, uint32_t frames, uint32_t, const MidiEvent*) | |||
{ | |||
const float* in1 = inputs[0]; | |||
const float* in2 = inputs[1]; | |||
float* in1 = inputs[0]; | |||
float* in2 = inputs[1]; | |||
float* out1 = outputs[0]; | |||
float* out2 = outputs[1]; | |||
@@ -33,11 +33,10 @@ | |||
#ifdef QTCREATOR_TEST | |||
// TESTING | |||
#include "3bandeq/DistrhoPluginInfo.h" | |||
# undef DISTRHO_PLUGIN_IS_SYNTH | |||
# undef DISTRHO_PLUGIN_WANT_LATENCY | |||
# undef DISTRHO_PLUGIN_WANT_STATE | |||
# define DISTRHO_PLUGIN_IS_SYNTH 1 | |||
# define DISTRHO_PLUGIN_IS_SYNTH 1 | |||
# define DISTRHO_PLUGIN_WANT_LATENCY 1 | |||
# define DISTRHO_PLUGIN_WANT_STATE 1 | |||
#endif | |||
@@ -9,7 +9,7 @@ | |||
* | |||
* 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 | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU Lesser General Public License for more details. | |||
* | |||
* For a full copy of the license see the LGPL.txt file | |||
@@ -209,11 +209,11 @@ void DistrhoPlugin3BandSplitter::d_setProgram(uint32_t index) | |||
void DistrhoPlugin3BandSplitter::d_activate() | |||
{ | |||
xLP = exp(-2.0 * cfPI * freqLP / d_sampleRate()); | |||
xLP = std::exp(-2.0 * cfPI * freqLP / d_sampleRate()); | |||
a0LP = 1.0f - xLP; | |||
b1LP = -xLP; | |||
xHP = exp(-2.0 * cfPI * freqHP / d_sampleRate()); | |||
xHP = std::exp(-2.0 * cfPI * freqHP / d_sampleRate()); | |||
a0HP = 1.0f - xHP; | |||
b1HP = -xHP; | |||
} | |||
@@ -226,8 +226,8 @@ void DistrhoPlugin3BandSplitter::d_deactivate() | |||
void DistrhoPlugin3BandSplitter::d_run(float** inputs, float** outputs, uint32_t frames, uint32_t, const MidiEvent*) | |||
{ | |||
const float* in1 = inputs[0]; | |||
const float* in2 = inputs[1]; | |||
float* in1 = inputs[0]; | |||
float* in2 = inputs[1]; | |||
float* out1 = outputs[0]; | |||
float* out2 = outputs[1]; | |||
float* out3 = outputs[2]; | |||
@@ -0,0 +1,83 @@ | |||
#!/usr/bin/make -f | |||
# Makefile for carla-native # | |||
# ------------------------------------ # | |||
# Created by falkTX | |||
# | |||
include ../../Makefile.mk | |||
# -------------------------------------------------------------- | |||
BUILD_C_FLAGS += -fvisibility=hidden -fPIC -I. -I.. -I../../includes | |||
BUILD_CXX_FLAGS += -fvisibility=hidden -fPIC -I. -I.. -I../../includes -I../../utils -I../../libs/distrho-plugin-toolkit | |||
BUILD_CXX_FLAGS += $(shell pkg-config --cflags QtCore QtGui) | |||
LINK_FLAGS += -shared | |||
LINK_FLAGS += $(shell pkg-config --libs QtCore QtGui) | |||
ifeq ($(HAVE_ZYN_DEPS),true) | |||
ZYN_CXX_FLAGS = $(BUILD_CXX_FLAGS) | |||
ZYN_CXX_FLAGS += $(shell pkg-config --cflags fftw3 mxml) | |||
LINK_FLAGS += $(shell pkg-config --libs fftw3 mxml) | |||
endif | |||
# -------------------------------------------------------------- | |||
# Simple plugins | |||
OBJS = \ | |||
bypass.c.o \ | |||
midi-split.c.o \ | |||
midi-through.c.o | |||
# DISTRHO plugins | |||
OBJS += \ | |||
distrho-3bandeq.cpp.o \ | |||
distrho-3bandsplitter.cpp.o \ | |||
distrho-pingpongpan.cpp.o | |||
# ZynAddSubFX | |||
ifeq ($(HAVE_ZYN_DEPS),true) | |||
OBJS += \ | |||
zynaddsubfx.cpp.o \ | |||
zynaddsubfx-src.cpp.o | |||
endif | |||
TARGET = ../carla_native.so | |||
# -------------------------------------------------------------- | |||
all: $(TARGET) | |||
clean: | |||
rm -f $(OBJS) $(TARGET) | |||
# -------------------------------------------------------------- | |||
%.c.o: %.c | |||
$(CC) $< $(BUILD_C_FLAGS) -c -o $@ | |||
%.cpp.o: %.cpp | |||
$(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ | |||
$(TARGET): $(OBJS) | |||
$(CXX) $^ $(LINK_FLAGS) -o $@ | |||
# -------------------------------------------------------------- | |||
distrho-3bandeq.cpp.o: distrho-3bandeq.cpp | |||
$(CXX) $< $(BUILD_CXX_FLAGS) -I3bandeq -DDISTRHO_NAMESPACE=DISTRHO_3BandEQ -c -o $@ | |||
distrho-3bandsplitter.cpp.o: distrho-3bandsplitter.cpp | |||
$(CXX) $< $(BUILD_CXX_FLAGS) -I3bandsplitter -DDISTRHO_NAMESPACE=DISTRHO_3BandSplitter -c -o $@ | |||
distrho-pingpongpan.cpp.o: distrho-pingpongpan.cpp | |||
$(CXX) $< $(BUILD_CXX_FLAGS) -Ipingpongpan -DDISTRHO_NAMESPACE=DISTRHO_PingPongPan -c -o $@ | |||
# distrho-pugl.o: distrho-pugl.cpp | |||
# $(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ | |||
zynaddsubfx.cpp.o: zynaddsubfx.cpp | |||
$(CXX) $< $(ZYN_CXX_FLAGS) -c -o $@ | |||
zynaddsubfx-src.cpp.o: zynaddsubfx-src.cpp | |||
$(CXX) $< $(ZYN_CXX_FLAGS) -c -o $@ |
@@ -1,6 +1,6 @@ | |||
/* | |||
* Carla Native Plugins | |||
* Copyright (C) 2012 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2012-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 | |||
@@ -9,7 +9,7 @@ | |||
* | |||
* 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 | |||
* 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 COPYING file | |||
@@ -31,7 +31,7 @@ START_NAMESPACE_DISTRHO | |||
static PluginDescriptor tBandEqDesc = { | |||
/* category */ ::PLUGIN_CATEGORY_EQ, | |||
/* hints */ ::PLUGIN_IS_RTSAFE | ::PLUGIN_HAS_GUI, | |||
/* hints */ static_cast<PluginHints>(::PLUGIN_IS_RTSAFE | ::PLUGIN_HAS_GUI), | |||
/* audioIns */ DISTRHO_PLUGIN_NUM_INPUTS, | |||
/* audioOuts */ DISTRHO_PLUGIN_NUM_OUTPUTS, | |||
/* midiIns */ 0, | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* Carla Native Plugins | |||
* Copyright (C) 2012 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2012-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 | |||
@@ -9,7 +9,7 @@ | |||
* | |||
* 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 | |||
* 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 COPYING file | |||
@@ -31,7 +31,7 @@ START_NAMESPACE_DISTRHO | |||
static PluginDescriptor tBandSplitterDesc = { | |||
/* category */ ::PLUGIN_CATEGORY_EQ, | |||
/* hints */ ::PLUGIN_HAS_GUI, | |||
/* hints */ static_cast<PluginHints>(::PLUGIN_IS_RTSAFE | ::PLUGIN_HAS_GUI), | |||
/* audioIns */ DISTRHO_PLUGIN_NUM_INPUTS, | |||
/* audioOuts */ DISTRHO_PLUGIN_NUM_OUTPUTS, | |||
/* midiIns */ 0, | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* Carla Native Plugins | |||
* Copyright (C) 2012 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2012-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 | |||
@@ -9,7 +9,7 @@ | |||
* | |||
* 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 | |||
* 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 COPYING file | |||
@@ -31,7 +31,7 @@ START_NAMESPACE_DISTRHO | |||
static PluginDescriptor tBandEqDesc = { | |||
/* category */ ::PLUGIN_CATEGORY_UTILITY, | |||
/* hints */ ::PLUGIN_HAS_GUI, | |||
/* hints */ static_cast<PluginHints>(::PLUGIN_IS_RTSAFE | ::PLUGIN_HAS_GUI), | |||
/* audioIns */ DISTRHO_PLUGIN_NUM_INPUTS, | |||
/* audioOuts */ DISTRHO_PLUGIN_NUM_OUTPUTS, | |||
/* midiIns */ 0, | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* DISTHRO Plugin Toolkit (DPT) | |||
* Copyright (C) 2012 Filipe Coelho <falktx@gmail.com> | |||
* Copyright (C) 2012-2013 Filipe Coelho <falktx@gmail.com> | |||
* | |||
* This program is free software; you can redistribute it and/or | |||
* modify it under the terms of the GNU General Public License as | |||
@@ -9,7 +9,7 @@ | |||
* | |||
* 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 | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the license see the GPL.txt file | |||
@@ -40,26 +40,16 @@ public: | |||
: QDialog(nullptr), | |||
m_host(host), | |||
m_plugin(plugin), | |||
ui(this, realWinId(), setParameterCallback, setStateCallback, uiEditParameterCallback, uiSendNoteCallback, uiResizeCallback) | |||
ui(this, (intptr_t)winId(), setParameterCallback, setStateCallback, uiEditParameterCallback, uiSendNoteCallback, uiResizeCallback) | |||
{ | |||
setFixedSize(ui.getWidth(), ui.getHeight()); | |||
setWindowTitle("TEST GUI"); | |||
setWindowTitle(DISTRHO_PLUGIN_NAME); | |||
} | |||
~UICarla() | |||
{ | |||
} | |||
intptr_t realWinId() const | |||
{ | |||
WId wId = winId(); | |||
#if DISTRHO_OS_WINDOWS | |||
return (intptr_t)static_cast<HWND>(wId); | |||
#else | |||
return wId; | |||
#endif | |||
} | |||
// --------------------------------------------- | |||
void carla_show(const bool yesNo) | |||
@@ -142,20 +132,19 @@ private: | |||
static void setParameterCallback(void* ptr, uint32_t rindex, float value) | |||
{ | |||
UICarla* _this_ = (UICarla*)ptr; | |||
CARLA_ASSERT(_this_); | |||
_this_->setParameterValue(rindex, value); | |||
if (UICarla* _this_ = (UICarla*)ptr) | |||
_this_->setParameterValue(rindex, value); | |||
} | |||
static void setStateCallback(void* ptr, const char* key, const char* value) | |||
{ | |||
# if DISTRHO_PLUGIN_WANT_STATE | |||
UICarla* _this_ = (UICarla*)ptr; | |||
CARLA_ASSERT(_this_); | |||
_this_->setState(key, value); | |||
if (UICarla* _this_ = (UICarla*)ptr) | |||
_this_->setState(key, value); | |||
# else | |||
return; | |||
// unused | |||
Q_UNUSED(ptr); | |||
Q_UNUSED(key); | |||
Q_UNUSED(value); | |||
@@ -164,20 +153,19 @@ private: | |||
static void uiEditParameterCallback(void* ptr, uint32_t index, bool started) | |||
{ | |||
UICarla* _this_ = (UICarla*)ptr; | |||
CARLA_ASSERT(_this_); | |||
_this_->uiEditParameter(index, started); | |||
if (UICarla* _this_ = (UICarla*)ptr) | |||
_this_->uiEditParameter(index, started); | |||
} | |||
static void uiSendNoteCallback(void* ptr, bool onOff, uint8_t channel, uint8_t note, uint8_t velocity) | |||
{ | |||
# if DISTRHO_PLUGIN_IS_SYNTH | |||
UICarla* _this_ = (UICarla*)ptr; | |||
CARLA_ASSERT(_this_); | |||
_this_->uiSendNote(onOff, channel, note, velocity); | |||
if (UICarla* _this_ = (UICarla*)ptr) | |||
_this_->uiSendNote(onOff, channel, note, velocity); | |||
# else | |||
return; | |||
// unused | |||
Q_UNUSED(ptr); | |||
Q_UNUSED(onOff); | |||
Q_UNUSED(channel); | |||
@@ -188,10 +176,8 @@ private: | |||
static void uiResizeCallback(void* ptr, unsigned int width, unsigned int height) | |||
{ | |||
UICarla* _this_ = (UICarla*)ptr; | |||
CARLA_ASSERT(_this_); | |||
_this_->uiResize(width, height); | |||
if (UICarla* _this_ = (UICarla*)ptr) | |||
_this_->uiResize(width, height); | |||
} | |||
}; | |||
#endif | |||
@@ -236,21 +222,24 @@ protected: | |||
{ | |||
const uint32_t paramHints = plugin.parameterHints(index); | |||
int nativeparamHints = 0; | |||
if (paramHints & PARAMETER_IS_AUTOMABLE) | |||
param.hints |= ::PARAMETER_IS_AUTOMABLE; | |||
nativeparamHints |= ::PARAMETER_IS_AUTOMABLE; | |||
if (paramHints & PARAMETER_IS_BOOLEAN) | |||
param.hints |= ::PARAMETER_IS_BOOLEAN; | |||
nativeparamHints |= ::PARAMETER_IS_BOOLEAN; | |||
if (paramHints & PARAMETER_IS_INTEGER) | |||
param.hints |= ::PARAMETER_IS_INTEGER; | |||
nativeparamHints |= ::PARAMETER_IS_INTEGER; | |||
if (paramHints & PARAMETER_IS_LOGARITHMIC) | |||
param.hints |= ::PARAMETER_IS_LOGARITHMIC; | |||
nativeparamHints |= ::PARAMETER_IS_LOGARITHMIC; | |||
if (paramHints & PARAMETER_IS_OUTPUT) | |||
param.hints |= ::PARAMETER_IS_OUTPUT; | |||
nativeparamHints |= ::PARAMETER_IS_OUTPUT; | |||
param.hints = static_cast<ParameterHints>(nativeparamHints); | |||
} | |||
param.name = plugin.parameterName(index); | |||
param.unit = plugin.parameterUnit(index); | |||
param.name = plugin.parameterName(index); | |||
param.unit = plugin.parameterUnit(index); | |||
{ | |||
const ParameterRanges& ranges(plugin.parameterRanges(index)); | |||
@@ -136,8 +136,8 @@ void DistrhoPluginPingPongPan::d_deactivate() | |||
void DistrhoPluginPingPongPan::d_run(float** inputs, float** outputs, uint32_t frames, uint32_t, const MidiEvent*) | |||
{ | |||
const float* in1 = inputs[0]; | |||
const float* in2 = inputs[1]; | |||
float* in1 = inputs[0]; | |||
float* in2 = inputs[1]; | |||
float* out1 = outputs[0]; | |||
float* out2 = outputs[1]; | |||
@@ -9,7 +9,7 @@ | |||
* | |||
* 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 | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the license see the GPL.txt file | |||
@@ -90,10 +90,7 @@ struct Parameter { | |||
ParameterRanges ranges; | |||
Parameter() | |||
: hints(0x0), | |||
name(nullptr), | |||
symbol(nullptr), | |||
unit(nullptr) {} | |||
: hints(0x0) {} | |||
}; | |||
// ------------------------------------------------- | |||
@@ -104,8 +101,9 @@ struct MidiEvent { | |||
uint8_t buffer[3]; | |||
MidiEvent() | |||
: frame(0), | |||
buffer{0} {} | |||
{ | |||
clear(); | |||
} | |||
void clear() | |||
{ | |||
@@ -9,7 +9,7 @@ | |||
* | |||
* 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 | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the license see the GPL.txt file | |||
@@ -9,7 +9,7 @@ | |||
* | |||
* 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 | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the license see the GPL.txt file | |||
@@ -15,8 +15,8 @@ | |||
* For a full copy of the license see the GPL.txt file | |||
*/ | |||
#ifndef __DISTRHO_DEFINES_HPP__ | |||
#define __DISTRHO_DEFINES_HPP__ | |||
#ifndef __DISTRHO_DEFINES_H__ | |||
#define __DISTRHO_DEFINES_H__ | |||
#if defined(__WIN32__) || defined(__WIN64__) | |||
# define DISTRHO_PLUGIN_EXPORT extern "C" __declspec (dllexport) | |||
@@ -53,4 +53,4 @@ | |||
# define USE_NAMESPACE_DISTRHO | |||
#endif | |||
#endif // __DISTRHO_DEFINES_HPP__ | |||
#endif // __DISTRHO_DEFINES_H__ |
@@ -15,8 +15,8 @@ | |||
* For a full copy of the license see the GPL.txt file | |||
*/ | |||
#ifndef __DISTRHO_MACROS_HPP__ | |||
#define __DISTRHO_MACROS_HPP__ | |||
#ifndef __DISTRHO_MACROS_H__ | |||
#define __DISTRHO_MACROS_H__ | |||
#include "DistrhoDefines.h" | |||
#include "DistrhoPluginInfo.h" | |||
@@ -59,4 +59,4 @@ | |||
#define DISTRHO_UI_URI DISTRHO_PLUGIN_URI "#UI" | |||
#endif // __DISTRHO_MACROS_HPP__ | |||
#endif // __DISTRHO_MACROS_H__ |
@@ -9,7 +9,7 @@ | |||
* | |||
* 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 | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the license see the GPL.txt file | |||
@@ -41,14 +41,14 @@ Plugin::Plugin(uint32_t parameterCount, uint32_t programCount, uint32_t stateCou | |||
if (parameterCount > 0) | |||
{ | |||
data->parameterCount = parameterCount; | |||
data->parameters = new Parameter [parameterCount]; | |||
data->parameters = new Parameter[parameterCount]; | |||
} | |||
if (programCount > 0) | |||
{ | |||
#if DISTRHO_PLUGIN_WANT_PROGRAMS | |||
data->programCount = programCount; | |||
data->programNames = new d_string [programCount]; | |||
data->programNames = new d_string[programCount]; | |||
#endif | |||
} | |||
@@ -56,7 +56,7 @@ Plugin::Plugin(uint32_t parameterCount, uint32_t programCount, uint32_t stateCou | |||
{ | |||
#if DISTRHO_PLUGIN_WANT_STATE | |||
data->stateCount = stateCount; | |||
data->stateKeys = new d_string [stateCount]; | |||
data->stateKeys = new d_string[stateCount]; | |||
#endif | |||
} | |||
} | |||
@@ -9,7 +9,7 @@ | |||
* | |||
* 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 | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the license see the GPL.txt file | |||
@@ -42,12 +42,10 @@ struct PluginPrivateData { | |||
uint32_t programCount; | |||
d_string* programNames; | |||
#endif | |||
#if DISTRHO_PLUGIN_WANT_STATE | |||
uint32_t stateCount; | |||
d_string* stateKeys; | |||
#endif | |||
#if DISTRHO_PLUGIN_WANT_LATENCY | |||
uint32_t latency; | |||
#endif | |||
@@ -308,10 +306,10 @@ public: | |||
if (data) | |||
{ | |||
data->bufferSize = bufferSize; | |||
if (callback && data->bufferSize == bufferSize) | |||
callback = false; | |||
data->bufferSize = bufferSize; | |||
} | |||
if (plugin && callback) | |||
@@ -328,10 +326,10 @@ public: | |||
if (data) | |||
{ | |||
data->sampleRate = sampleRate; | |||
if (callback && data->sampleRate == sampleRate) | |||
callback = false; | |||
data->sampleRate = sampleRate; | |||
} | |||
if (plugin && callback) | |||
@@ -9,7 +9,7 @@ | |||
* | |||
* 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 | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the license see the GPL.txt file | |||
@@ -41,9 +41,9 @@ START_NAMESPACE_DISTRHO | |||
// ------------------------------------------------- | |||
#ifdef DISTRHO_UI_OPENGL | |||
typedef PuglView* NativeWidget; | |||
typedef PuglView NativeWidget; | |||
#else | |||
typedef QWidget* NativeWidget; | |||
typedef QWidget NativeWidget; | |||
#endif | |||
typedef void (*setParamFunc) (void* ptr, uint32_t index, float value); | |||
@@ -80,8 +80,8 @@ struct UIPrivateData { | |||
uint32_t parameterOffset; | |||
// UI | |||
void* ptr; | |||
NativeWidget widget; | |||
void* ptr; | |||
NativeWidget* widget; | |||
// Callbacks | |||
setParamFunc setParamCallbackFunc; | |||
@@ -261,7 +261,12 @@ public: | |||
void createWindow(intptr_t parent) | |||
{ | |||
#ifdef DISTRHO_UI_QT4 | |||
assert(ui && ! qt_widget); | |||
assert(ui && data && ! qt_widget); | |||
if (qt_widget || ! (ui && data)) | |||
return; | |||
qt_mouseDown = false; | |||
// create embedable widget | |||
qt_widget = new QEmbedWidget; | |||
@@ -293,9 +298,9 @@ public: | |||
// show it | |||
qt_widget->show(); | |||
#else | |||
assert(ui); | |||
assert(ui && data && ! data->widget); | |||
if ((data && data->widget) || ! ui) | |||
if ((! data) || data->widget || ! ui) | |||
return; | |||
data->widget = puglCreate(parent, DISTRHO_PLUGIN_NAME, ui->d_width(), ui->d_height(), false); | |||
@@ -331,9 +336,13 @@ public: | |||
qt_widget->close(); | |||
if (qt_grip) | |||
{ | |||
delete qt_grip; | |||
qt_grip = nullptr; | |||
} | |||
delete qt_widget; | |||
qt_widget = nullptr; | |||
} | |||
#else | |||
((OpenGLUI*)ui)->d_onClose(); | |||
@@ -351,46 +360,31 @@ public: | |||
#ifdef DISTRHO_UI_OPENGL | |||
void gl_onDisplay() | |||
{ | |||
OpenGLUI* uiGL = (OpenGLUI*)ui; | |||
assert(uiGL); | |||
if (uiGL) | |||
if (OpenGLUI* uiGL = (OpenGLUI*)ui) | |||
uiGL->d_onDisplay(); | |||
} | |||
void gl_onKeyboard(bool press, uint32_t key) | |||
{ | |||
OpenGLUI* uiGL = (OpenGLUI*)ui; | |||
assert(uiGL); | |||
if (uiGL) | |||
if (OpenGLUI* uiGL = (OpenGLUI*)ui) | |||
uiGL->d_onKeyboard(press, key); | |||
} | |||
void gl_onMotion(int x, int y) | |||
{ | |||
OpenGLUI* uiGL = (OpenGLUI*)ui; | |||
assert(uiGL); | |||
if (uiGL) | |||
if (OpenGLUI* uiGL = (OpenGLUI*)ui) | |||
uiGL->d_onMotion(x, y); | |||
} | |||
void gl_onMouse(int button, bool press, int x, int y) | |||
{ | |||
OpenGLUI* uiGL = (OpenGLUI*)ui; | |||
assert(uiGL); | |||
if (uiGL) | |||
if (OpenGLUI* uiGL = (OpenGLUI*)ui) | |||
uiGL->d_onMouse(button, press, x, y); | |||
} | |||
void gl_onReshape(int width, int height) | |||
{ | |||
OpenGLUI* uiGL = (OpenGLUI*)ui; | |||
assert(uiGL); | |||
if (uiGL) | |||
if (OpenGLUI* uiGL = (OpenGLUI*)ui) | |||
{ | |||
if (! gl_initiated) | |||
{ | |||
@@ -404,32 +398,24 @@ public: | |||
void gl_onScroll(float dx, float dy) | |||
{ | |||
OpenGLUI* uiGL = (OpenGLUI*)ui; | |||
assert(uiGL); | |||
if (uiGL) | |||
if (OpenGLUI* uiGL = (OpenGLUI*)ui) | |||
uiGL->d_onScroll(dx, dy); | |||
} | |||
void gl_onSpecial(bool press, Key key) | |||
{ | |||
OpenGLUI* uiGL = (OpenGLUI*)ui; | |||
assert(uiGL); | |||
if (uiGL) | |||
if (OpenGLUI* uiGL = (OpenGLUI*)ui) | |||
uiGL->d_onSpecial(press, key); | |||
} | |||
void gl_onClose() | |||
{ | |||
OpenGLUI* uiGL = (OpenGLUI*)ui; | |||
assert(uiGL); | |||
if (uiGL) | |||
if (OpenGLUI* uiGL = (OpenGLUI*)ui) | |||
uiGL->d_onClose(); | |||
} | |||
// --------------------------------------------- | |||
private: | |||
static void gl_onDisplayCallback(PuglView* view) | |||
{ | |||