Signed-off-by: falkTX <falktx@falktx.com>pull/272/head
@@ -9,7 +9,7 @@ include ../Makefile.base.mk | |||||
# --------------------------------------------------------------------------------------------------------------------- | # --------------------------------------------------------------------------------------------------------------------- | ||||
BUILD_C_FLAGS += $(DGL_FLAGS) -I. -Isrc | BUILD_C_FLAGS += $(DGL_FLAGS) -I. -Isrc | ||||
BUILD_CXX_FLAGS += $(DGL_FLAGS) -I. -Isrc -Isrc/pugl-upstream -DDONT_SET_USING_DGL_NAMESPACE -Wno-unused-parameter | |||||
BUILD_CXX_FLAGS += $(DGL_FLAGS) -I. -Isrc -Isrc/pugl-upstream/include -DDONT_SET_USING_DGL_NAMESPACE -Wno-unused-parameter | |||||
LINK_FLAGS += $(DGL_LIBS) | LINK_FLAGS += $(DGL_LIBS) | ||||
# TODO fix these after pugl-upstream is done | # TODO fix these after pugl-upstream is done | ||||
@@ -21,6 +21,7 @@ | |||||
#ifdef DISTRHO_DEFINES_H_INCLUDED | #ifdef DISTRHO_DEFINES_H_INCLUDED | ||||
START_NAMESPACE_DISTRHO | START_NAMESPACE_DISTRHO | ||||
class UI; | |||||
class UIExporter; | class UIExporter; | ||||
END_NAMESPACE_DISTRHO | END_NAMESPACE_DISTRHO | ||||
#endif | #endif | ||||
@@ -145,6 +146,7 @@ private: | |||||
friend class Widget; | friend class Widget; | ||||
friend class StandaloneWindow; | friend class StandaloneWindow; | ||||
#ifdef DISTRHO_DEFINES_H_INCLUDED | #ifdef DISTRHO_DEFINES_H_INCLUDED | ||||
friend class DISTRHO_NAMESPACE::UI; | |||||
friend class DISTRHO_NAMESPACE::UIExporter; | friend class DISTRHO_NAMESPACE::UIExporter; | ||||
#endif | #endif | ||||
@@ -1,6 +1,6 @@ | |||||
/* | /* | ||||
* DISTRHO Plugin Framework (DPF) | * DISTRHO Plugin Framework (DPF) | ||||
* Copyright (C) 2012-2020 Filipe Coelho <falktx@falktx.com> | |||||
* Copyright (C) 2012-2021 Filipe Coelho <falktx@falktx.com> | |||||
* | * | ||||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | * Permission to use, copy, modify, and/or distribute this software for any purpose with | ||||
* or without fee is hereby granted, provided that the above copyright notice and this | * or without fee is hereby granted, provided that the above copyright notice and this | ||||
@@ -20,7 +20,7 @@ | |||||
#include "../Application.hpp" | #include "../Application.hpp" | ||||
#include "../Window.hpp" | #include "../Window.hpp" | ||||
#include "pugl-upstream/pugl/pugl.h" | |||||
#include "pugl-upstream/include/pugl/pugl.h" | |||||
#include <list> | #include <list> | ||||
@@ -26,25 +26,25 @@ | |||||
#endif | #endif | ||||
extern "C" { | extern "C" { | ||||
#include "pugl-upstream/pugl/detail/implementation.c" | |||||
#include "pugl-upstream/src/implementation.c" | |||||
} | } | ||||
#if defined(DISTRHO_OS_HAIKU) | #if defined(DISTRHO_OS_HAIKU) | ||||
# define DGL_DEBUG_EVENTS | # define DGL_DEBUG_EVENTS | ||||
# include "pugl-upstream/pugl/detail/haiku.cpp" | |||||
# include "pugl-upstream/src/haiku.cpp" | |||||
#elif defined(DISTRHO_OS_MAC) | #elif defined(DISTRHO_OS_MAC) | ||||
# define PuglWindow DISTRHO_JOIN_MACRO(PuglWindow, DGL_NAMESPACE) | # define PuglWindow DISTRHO_JOIN_MACRO(PuglWindow, DGL_NAMESPACE) | ||||
# define PuglOpenGLView DISTRHO_JOIN_MACRO(PuglOpenGLView, DGL_NAMESPACE) | # define PuglOpenGLView DISTRHO_JOIN_MACRO(PuglOpenGLView, DGL_NAMESPACE) | ||||
# include "pugl-upstream/pugl/detail/mac.m" | |||||
# include "pugl-upstream/src/mac.m" | |||||
#elif defined(DISTRHO_OS_WINDOWS) | #elif defined(DISTRHO_OS_WINDOWS) | ||||
# include "ppugl-upstream/pugl/detail/win.c" | |||||
# include "ppugl-upstream/src/win.c" | |||||
# undef max | # undef max | ||||
# undef min | # undef min | ||||
#else | #else | ||||
# include <sys/types.h> | # include <sys/types.h> | ||||
# include <unistd.h> | # include <unistd.h> | ||||
extern "C" { | extern "C" { | ||||
# include "pugl-upstream/pugl/detail/x11.c" | |||||
# include "pugl-upstream/src/x11.c" | |||||
} | } | ||||
#endif | #endif | ||||
@@ -75,6 +75,10 @@ void DGL::Window::PrivateData::Fallback::onReshape(const uint width, const uint | |||||
glViewport(0, 0, static_cast<GLsizei>(width), static_cast<GLsizei>(height)); | glViewport(0, 0, static_cast<GLsizei>(width), static_cast<GLsizei>(height)); | ||||
glMatrixMode(GL_MODELVIEW); | glMatrixMode(GL_MODELVIEW); | ||||
glLoadIdentity(); | glLoadIdentity(); | ||||
#else | |||||
// unused | |||||
(void)width; | |||||
(void)height; | |||||
#endif | #endif | ||||
} | } | ||||
@@ -20,7 +20,7 @@ | |||||
#include "../Window.hpp" | #include "../Window.hpp" | ||||
#include "ApplicationPrivateData.hpp" | #include "ApplicationPrivateData.hpp" | ||||
#include "pugl-upstream/pugl/pugl.h" | |||||
#include "pugl-upstream/include/pugl/pugl.h" | |||||
#include <vector> | #include <vector> | ||||
@@ -77,6 +77,10 @@ struct Window::PrivateData { | |||||
{ | { | ||||
} | } | ||||
#ifdef DISTRHO_DEFINES_H_INCLUDED | |||||
friend class DISTRHO_NAMESPACE::UI; | |||||
#endif | |||||
DISTRHO_DECLARE_NON_COPY_STRUCT(PrivateData) | DISTRHO_DECLARE_NON_COPY_STRUCT(PrivateData) | ||||
}; | }; | ||||
@@ -161,6 +161,14 @@ | |||||
# define DISTRHO_PLUGIN_HAS_UI 0 | # define DISTRHO_PLUGIN_HAS_UI 0 | ||||
#endif | #endif | ||||
// ----------------------------------------------------------------------- | |||||
// Prevent users from messing about with DPF internals | |||||
#ifdef DISTRHO_UI_IS_STANDALONE | |||||
# error DISTRHO_UI_IS_STANDALONE must not be defined | |||||
#endif | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
#endif // DISTRHO_PLUGIN_CHECKS_H_INCLUDED | #endif // DISTRHO_PLUGIN_CHECKS_H_INCLUDED |
@@ -17,6 +17,7 @@ | |||||
#include "DistrhoPluginInternal.hpp" | #include "DistrhoPluginInternal.hpp" | ||||
#if DISTRHO_PLUGIN_HAS_UI | #if DISTRHO_PLUGIN_HAS_UI | ||||
# define DISTRHO_UI_IS_STANDALONE true | |||||
# include "DistrhoUIInternal.hpp" | # include "DistrhoUIInternal.hpp" | ||||
#else | #else | ||||
# include "../extra/Sleep.hpp" | # include "../extra/Sleep.hpp" | ||||
@@ -14,7 +14,8 @@ | |||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||||
*/ | */ | ||||
#include "DistrhoUIInternal.hpp" | |||||
#include "DistrhoUIPrivateData.hpp" | |||||
#include "src/WindowPrivateData.hpp" | |||||
#if !DISTRHO_PLUGIN_HAS_EXTERNAL_UI | #if !DISTRHO_PLUGIN_HAS_EXTERNAL_UI | ||||
# include "src/WidgetPrivateData.hpp" | # include "src/WidgetPrivateData.hpp" | ||||
#endif | #endif | ||||
@@ -22,7 +23,7 @@ | |||||
START_NAMESPACE_DISTRHO | START_NAMESPACE_DISTRHO | ||||
/* ------------------------------------------------------------------------------------------------------------ | /* ------------------------------------------------------------------------------------------------------------ | ||||
* Static data, see DistrhoUIInternal.hpp */ | |||||
* Static data, see DistrhoUIInternal.hpp and DistrhoUIPrivateData.hpp */ | |||||
double d_lastUiSampleRate = 0.0; | double d_lastUiSampleRate = 0.0; | ||||
void* d_lastUiDspPtr = nullptr; | void* d_lastUiDspPtr = nullptr; | ||||
@@ -34,6 +35,36 @@ uintptr_t g_nextWindowId = 0; | |||||
Window* d_lastUiWindow = nullptr; | Window* d_lastUiWindow = nullptr; | ||||
#endif | #endif | ||||
// ----------------------------------------------------------------------------------------------------------- | |||||
#if DISTRHO_PLUGIN_HAS_EXTERNAL_UI | |||||
static inline | |||||
UI* createUiWrapper(void* const dspPtr, const uintptr_t winId, const double scaleFactor, const char* const bundlePath) | |||||
{ | |||||
d_lastUiDspPtr = dspPtr; | |||||
g_nextWindowId = winId; | |||||
g_nextScaleFactor = scaleFactor; | |||||
g_nextBundlePath = bundlePath; | |||||
UI* const ret = createUI(); | |||||
d_lastUiDspPtr = nullptr; | |||||
g_nextWindowId = 0; | |||||
g_nextScaleFactor = 1.0; | |||||
g_nextBundlePath = nullptr; | |||||
return ret; | |||||
} | |||||
#else | |||||
static inline | |||||
UI* createUiWrapper(void* const dspPtr, Window* const window) | |||||
{ | |||||
d_lastUiDspPtr = dspPtr; | |||||
d_lastUiWindow = window; | |||||
UI* const ret = createUI(); | |||||
d_lastUiDspPtr = nullptr; | |||||
d_lastUiWindow = nullptr; | |||||
return ret; | |||||
} | |||||
#endif // DISTRHO_PLUGIN_HAS_EXTERNAL_UI | |||||
/* ------------------------------------------------------------------------------------------------------------ | /* ------------------------------------------------------------------------------------------------------------ | ||||
* UI */ | * UI */ | ||||
@@ -157,7 +188,7 @@ uintptr_t UI::getNextWindowId() noexcept | |||||
return g_nextWindowId; | return g_nextWindowId; | ||||
} | } | ||||
# endif | # endif | ||||
#endif | |||||
#endif // DISTRHO_PLUGIN_HAS_EXTERNAL_UI | |||||
/* ------------------------------------------------------------------------------------------------------------ | /* ------------------------------------------------------------------------------------------------------------ | ||||
* DSP/Plugin Callbacks (optional) */ | * DSP/Plugin Callbacks (optional) */ | ||||
@@ -176,20 +207,7 @@ void UI::uiFileBrowserSelected(const char*) | |||||
void UI::uiReshape(uint width, uint height) | void UI::uiReshape(uint width, uint height) | ||||
{ | { | ||||
#ifdef DGL_OPENGL | |||||
glEnable(GL_BLEND); | |||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | |||||
glMatrixMode(GL_PROJECTION); | |||||
glLoadIdentity(); | |||||
glOrtho(0.0, static_cast<GLdouble>(width), static_cast<GLdouble>(height), 0.0, 0.0, 1.0); | |||||
glViewport(0, 0, static_cast<GLsizei>(width), static_cast<GLsizei>(height)); | |||||
glMatrixMode(GL_MODELVIEW); | |||||
glLoadIdentity(); | |||||
#else | |||||
// unused | |||||
(void)width; | |||||
(void)height; | |||||
#endif | |||||
Window::PrivateData::Fallback::onReshape(width, height); | |||||
} | } | ||||
/* ------------------------------------------------------------------------------------------------------------ | /* ------------------------------------------------------------------------------------------------------------ | ||||
@@ -17,7 +17,7 @@ | |||||
#ifndef DISTRHO_UI_INTERNAL_HPP_INCLUDED | #ifndef DISTRHO_UI_INTERNAL_HPP_INCLUDED | ||||
#define DISTRHO_UI_INTERNAL_HPP_INCLUDED | #define DISTRHO_UI_INTERNAL_HPP_INCLUDED | ||||
#include "../DistrhoUI.hpp" | |||||
#include "DistrhoUIPrivateData.hpp" | |||||
#if DISTRHO_PLUGIN_HAS_EXTERNAL_UI | #if DISTRHO_PLUGIN_HAS_EXTERNAL_UI | ||||
# include "../extra/Sleep.hpp" | # include "../extra/Sleep.hpp" | ||||
@@ -46,153 +46,17 @@ extern Window* d_lastUiWindow; | |||||
#endif | #endif | ||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
// UI callbacks | |||||
typedef void (*editParamFunc) (void* ptr, uint32_t rindex, bool started); | |||||
typedef void (*setParamFunc) (void* ptr, uint32_t rindex, float value); | |||||
typedef void (*setStateFunc) (void* ptr, const char* key, const char* value); | |||||
typedef void (*sendNoteFunc) (void* ptr, uint8_t channel, uint8_t note, uint8_t velo); | |||||
typedef void (*setSizeFunc) (void* ptr, uint width, uint height); | |||||
typedef bool (*fileRequestFunc) (void* ptr, const char* key); | |||||
// ----------------------------------------------------------------------- | |||||
// UI private data | |||||
struct UI::PrivateData { | |||||
// DSP | |||||
double sampleRate; | |||||
uint32_t parameterOffset; | |||||
#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS | |||||
void* dspPtr; | |||||
#endif | |||||
// UI | |||||
bool automaticallyScale; | |||||
bool resizeInProgress; | |||||
uint minWidth; | |||||
uint minHeight; | |||||
uint bgColor; | |||||
uint fgColor; | |||||
// Callbacks | |||||
void* callbacksPtr; | |||||
editParamFunc editParamCallbackFunc; | |||||
setParamFunc setParamCallbackFunc; | |||||
setStateFunc setStateCallbackFunc; | |||||
sendNoteFunc sendNoteCallbackFunc; | |||||
setSizeFunc setSizeCallbackFunc; | |||||
fileRequestFunc fileRequestCallbackFunc; | |||||
PrivateData() noexcept | |||||
: sampleRate(d_lastUiSampleRate), | |||||
parameterOffset(0), | |||||
#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS | |||||
dspPtr(d_lastUiDspPtr), | |||||
#endif | |||||
automaticallyScale(false), | |||||
resizeInProgress(false), | |||||
minWidth(0), | |||||
minHeight(0), | |||||
bgColor(0), | |||||
fgColor(0), | |||||
callbacksPtr(nullptr), | |||||
editParamCallbackFunc(nullptr), | |||||
setParamCallbackFunc(nullptr), | |||||
setStateCallbackFunc(nullptr), | |||||
sendNoteCallbackFunc(nullptr), | |||||
setSizeCallbackFunc(nullptr), | |||||
fileRequestCallbackFunc(nullptr) | |||||
{ | |||||
DISTRHO_SAFE_ASSERT(d_isNotZero(sampleRate)); | |||||
#if defined(DISTRHO_PLUGIN_TARGET_DSSI) || defined(DISTRHO_PLUGIN_TARGET_LV2) | |||||
parameterOffset += DISTRHO_PLUGIN_NUM_INPUTS + DISTRHO_PLUGIN_NUM_OUTPUTS; | |||||
# if DISTRHO_PLUGIN_WANT_LATENCY | |||||
parameterOffset += 1; | |||||
# endif | |||||
#endif | |||||
#ifdef DISTRHO_PLUGIN_TARGET_LV2 | |||||
# if (DISTRHO_PLUGIN_IS_SYNTH || DISTRHO_PLUGIN_WANT_TIMEPOS || DISTRHO_PLUGIN_WANT_STATE) | |||||
parameterOffset += 1; | |||||
# if DISTRHO_PLUGIN_WANT_STATE | |||||
parameterOffset += 1; | |||||
# endif | |||||
# endif | |||||
#if DISTRHO_PLUGIN_HAS_EXTERNAL_UI | |||||
UI* createUiWrapper(void* dspPtr, uintptr_t winId, double scaleFactor, const char* bundlePath); | |||||
#else // DISTRHO_PLUGIN_HAS_EXTERNAL_UI | |||||
UI* createUiWrapper(void* dspPtr, Window* window); | |||||
#endif | #endif | ||||
} | |||||
void editParamCallback(const uint32_t rindex, const bool started) | |||||
{ | |||||
if (editParamCallbackFunc != nullptr) | |||||
editParamCallbackFunc(callbacksPtr, rindex, started); | |||||
} | |||||
void setParamCallback(const uint32_t rindex, const float value) | |||||
{ | |||||
if (setParamCallbackFunc != nullptr) | |||||
setParamCallbackFunc(callbacksPtr, rindex, value); | |||||
} | |||||
void setStateCallback(const char* const key, const char* const value) | |||||
{ | |||||
if (setStateCallbackFunc != nullptr) | |||||
setStateCallbackFunc(callbacksPtr, key, value); | |||||
} | |||||
void sendNoteCallback(const uint8_t channel, const uint8_t note, const uint8_t velocity) | |||||
{ | |||||
if (sendNoteCallbackFunc != nullptr) | |||||
sendNoteCallbackFunc(callbacksPtr, channel, note, velocity); | |||||
} | |||||
void setSizeCallback(const uint width, const uint height) | |||||
{ | |||||
if (setSizeCallbackFunc != nullptr) | |||||
setSizeCallbackFunc(callbacksPtr, width, height); | |||||
} | |||||
bool fileRequestCallback(const char* key) | |||||
{ | |||||
if (fileRequestCallbackFunc != nullptr) | |||||
return fileRequestCallbackFunc(callbacksPtr, key); | |||||
// TODO use old style DPF dialog here | |||||
return false; | |||||
} | |||||
}; | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
// Plugin Window, needed to take care of resize properly | // Plugin Window, needed to take care of resize properly | ||||
#if DISTRHO_PLUGIN_HAS_EXTERNAL_UI | |||||
static inline | |||||
UI* createUiWrapper(void* const dspPtr, const uintptr_t winId, const double scaleFactor, const char* const bundlePath) | |||||
{ | |||||
d_lastUiDspPtr = dspPtr; | |||||
g_nextWindowId = winId; | |||||
g_nextScaleFactor = scaleFactor; | |||||
g_nextBundlePath = bundlePath; | |||||
UI* const ret = createUI(); | |||||
d_lastUiDspPtr = nullptr; | |||||
g_nextWindowId = 0; | |||||
g_nextScaleFactor = 1.0; | |||||
g_nextBundlePath = nullptr; | |||||
return ret; | |||||
} | |||||
#else // DISTRHO_PLUGIN_HAS_EXTERNAL_UI | |||||
static inline | |||||
UI* createUiWrapper(void* const dspPtr, Window* const window) | |||||
{ | |||||
d_lastUiDspPtr = dspPtr; | |||||
d_lastUiWindow = window; | |||||
UI* const ret = createUI(); | |||||
d_lastUiDspPtr = nullptr; | |||||
d_lastUiWindow = nullptr; | |||||
return ret; | |||||
} | |||||
#if !DISTRHO_PLUGIN_HAS_EXTERNAL_UI | |||||
class UIExporterWindow : public Window | class UIExporterWindow : public Window | ||||
{ | { | ||||
public: | public: | ||||
@@ -284,7 +148,7 @@ public: | |||||
#if DISTRHO_PLUGIN_HAS_EXTERNAL_UI | #if DISTRHO_PLUGIN_HAS_EXTERNAL_UI | ||||
: fUI(createUiWrapper(dspPtr, winId, scaleFactor, bundlePath)), | : fUI(createUiWrapper(dspPtr, winId, scaleFactor, bundlePath)), | ||||
#else | #else | ||||
: glApp(), | |||||
: glApp(DISTRHO_UI_IS_STANDALONE), | |||||
glWindow(glApp, winId, scaleFactor, dspPtr), | glWindow(glApp, winId, scaleFactor, dspPtr), | ||||
fChangingSize(false), | fChangingSize(false), | ||||
fUI(glWindow.getUI()), | fUI(glWindow.getUI()), | ||||
@@ -0,0 +1,152 @@ | |||||
/* | |||||
* DISTRHO Plugin Framework (DPF) | |||||
* Copyright (C) 2012-2020 Filipe Coelho <falktx@falktx.com> | |||||
* | |||||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||||
* or without fee is hereby granted, provided that the above copyright notice and this | |||||
* permission notice appear in all copies. | |||||
* | |||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||||
* TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||||
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||||
*/ | |||||
#ifndef DISTRHO_UI_PRIVATE_DATA_HPP_INCLUDED | |||||
#define DISTRHO_UI_PRIVATE_DATA_HPP_INCLUDED | |||||
#include "../DistrhoUI.hpp" | |||||
START_NAMESPACE_DISTRHO | |||||
// ----------------------------------------------------------------------- | |||||
// Static data, see DistrhoUI.cpp | |||||
extern double d_lastUiSampleRate; | |||||
extern void* d_lastUiDspPtr; | |||||
// ----------------------------------------------------------------------- | |||||
// UI callbacks | |||||
typedef void (*editParamFunc) (void* ptr, uint32_t rindex, bool started); | |||||
typedef void (*setParamFunc) (void* ptr, uint32_t rindex, float value); | |||||
typedef void (*setStateFunc) (void* ptr, const char* key, const char* value); | |||||
typedef void (*sendNoteFunc) (void* ptr, uint8_t channel, uint8_t note, uint8_t velo); | |||||
typedef void (*setSizeFunc) (void* ptr, uint width, uint height); | |||||
typedef bool (*fileRequestFunc) (void* ptr, const char* key); | |||||
// ----------------------------------------------------------------------- | |||||
// UI private data | |||||
struct UI::PrivateData { | |||||
// DSP | |||||
double sampleRate; | |||||
uint32_t parameterOffset; | |||||
#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS | |||||
void* dspPtr; | |||||
#endif | |||||
// UI | |||||
bool automaticallyScale; | |||||
bool resizeInProgress; | |||||
uint minWidth; | |||||
uint minHeight; | |||||
uint bgColor; | |||||
uint fgColor; | |||||
// Callbacks | |||||
void* callbacksPtr; | |||||
editParamFunc editParamCallbackFunc; | |||||
setParamFunc setParamCallbackFunc; | |||||
setStateFunc setStateCallbackFunc; | |||||
sendNoteFunc sendNoteCallbackFunc; | |||||
setSizeFunc setSizeCallbackFunc; | |||||
fileRequestFunc fileRequestCallbackFunc; | |||||
PrivateData() noexcept | |||||
: sampleRate(d_lastUiSampleRate), | |||||
parameterOffset(0), | |||||
#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS | |||||
dspPtr(d_lastUiDspPtr), | |||||
#endif | |||||
automaticallyScale(false), | |||||
resizeInProgress(false), | |||||
minWidth(0), | |||||
minHeight(0), | |||||
bgColor(0), | |||||
fgColor(0), | |||||
callbacksPtr(nullptr), | |||||
editParamCallbackFunc(nullptr), | |||||
setParamCallbackFunc(nullptr), | |||||
setStateCallbackFunc(nullptr), | |||||
sendNoteCallbackFunc(nullptr), | |||||
setSizeCallbackFunc(nullptr), | |||||
fileRequestCallbackFunc(nullptr) | |||||
{ | |||||
DISTRHO_SAFE_ASSERT(d_isNotZero(sampleRate)); | |||||
#if defined(DISTRHO_PLUGIN_TARGET_DSSI) || defined(DISTRHO_PLUGIN_TARGET_LV2) | |||||
parameterOffset += DISTRHO_PLUGIN_NUM_INPUTS + DISTRHO_PLUGIN_NUM_OUTPUTS; | |||||
# if DISTRHO_PLUGIN_WANT_LATENCY | |||||
parameterOffset += 1; | |||||
# endif | |||||
#endif | |||||
#ifdef DISTRHO_PLUGIN_TARGET_LV2 | |||||
# if (DISTRHO_PLUGIN_IS_SYNTH || DISTRHO_PLUGIN_WANT_TIMEPOS || DISTRHO_PLUGIN_WANT_STATE) | |||||
parameterOffset += 1; | |||||
# if DISTRHO_PLUGIN_WANT_STATE | |||||
parameterOffset += 1; | |||||
# endif | |||||
# endif | |||||
#endif | |||||
} | |||||
void editParamCallback(const uint32_t rindex, const bool started) | |||||
{ | |||||
if (editParamCallbackFunc != nullptr) | |||||
editParamCallbackFunc(callbacksPtr, rindex, started); | |||||
} | |||||
void setParamCallback(const uint32_t rindex, const float value) | |||||
{ | |||||
if (setParamCallbackFunc != nullptr) | |||||
setParamCallbackFunc(callbacksPtr, rindex, value); | |||||
} | |||||
void setStateCallback(const char* const key, const char* const value) | |||||
{ | |||||
if (setStateCallbackFunc != nullptr) | |||||
setStateCallbackFunc(callbacksPtr, key, value); | |||||
} | |||||
void sendNoteCallback(const uint8_t channel, const uint8_t note, const uint8_t velocity) | |||||
{ | |||||
if (sendNoteCallbackFunc != nullptr) | |||||
sendNoteCallbackFunc(callbacksPtr, channel, note, velocity); | |||||
} | |||||
void setSizeCallback(const uint width, const uint height) | |||||
{ | |||||
if (setSizeCallbackFunc != nullptr) | |||||
setSizeCallbackFunc(callbacksPtr, width, height); | |||||
} | |||||
bool fileRequestCallback(const char* key) | |||||
{ | |||||
if (fileRequestCallbackFunc != nullptr) | |||||
return fileRequestCallbackFunc(callbacksPtr, key); | |||||
// TODO use old style DPF dialog here | |||||
return false; | |||||
} | |||||
}; | |||||
// ----------------------------------------------------------------------- | |||||
END_NAMESPACE_DISTRHO | |||||
#endif // DISTRHO_UI_PRIVATE_DATA_HPP_INCLUDED |