Browse Source

Fix build of vst3 with external uis

Signed-off-by: falkTX <falktx@falktx.com>
pull/344/head
falkTX 3 years ago
parent
commit
7bed00d806
3 changed files with 45 additions and 24 deletions
  1. +2
    -2
      distrho/src/DistrhoUIInternal.hpp
  2. +42
    -22
      distrho/src/DistrhoUIVST3.cpp
  3. +1
    -0
      examples/EmbedExternalUI/Makefile

+ 2
- 2
distrho/src/DistrhoUIInternal.hpp View File

@@ -254,7 +254,7 @@ public:

// -------------------------------------------------------------------

#if defined(DISTRHO_PLUGIN_TARGET_VST3) && (defined(DISTRHO_OS_MAC) || defined(DISTRHO_OS_WINDOWS))
#if !DISTRHO_PLUGIN_HAS_EXTERNAL_UI && defined(DISTRHO_PLUGIN_TARGET_VST3) && (defined(DISTRHO_OS_MAC) || defined(DISTRHO_OS_WINDOWS))
void addIdleCallbackForVST3(IdleCallback* const cb, const uint timerFrequencyInMs)
{
uiData->window->addIdleCallback(cb, timerFrequencyInMs);
@@ -281,8 +281,8 @@ public:
{
ui->setSize(width, height);
# if !DISTRHO_PLUGIN_HAS_EXTERNAL_UI
// NOTE in external uis, the ui and window refer to the same object
uiData->window->setSize(width, height);
// uiData->app.idle();
# endif
}
#endif


+ 42
- 22
distrho/src/DistrhoUIVST3.cpp View File

@@ -125,7 +125,7 @@ static bool applyGeometryConstraints(const uint minimumWidth, const uint minimum
* The low-level VST3 stuff comes after.
*/
class UIVst3
#if defined(DISTRHO_OS_MAC) || defined(DISTRHO_OS_WINDOWS)
#if !DISTRHO_PLUGIN_HAS_EXTERNAL_UI && (defined(DISTRHO_OS_MAC) || defined(DISTRHO_OS_WINDOWS))
: public IdleCallback
#endif
{
@@ -162,7 +162,7 @@ public:

~UIVst3()
{
#if defined(DISTRHO_OS_MAC) || defined(DISTRHO_OS_WINDOWS)
#if !DISTRHO_PLUGIN_HAS_EXTERNAL_UI && (defined(DISTRHO_OS_MAC) || defined(DISTRHO_OS_WINDOWS))
fUI.removeIdleCallbackForVST3(this);
#endif
if (fConnection != nullptr)
@@ -177,7 +177,7 @@ public:
if (fConnection != nullptr)
connect(fConnection);

#if defined(DISTRHO_OS_MAC) || defined(DISTRHO_OS_WINDOWS)
#if !DISTRHO_PLUGIN_HAS_EXTERNAL_UI && (defined(DISTRHO_OS_MAC) || defined(DISTRHO_OS_WINDOWS))
fUI.addIdleCallbackForVST3(this, DPF_VST3_TIMER_INTERVAL);
#endif
}
@@ -185,6 +185,7 @@ public:
// ----------------------------------------------------------------------------------------------------------------
// v3_plugin_view interface calls

#if !DISTRHO_PLUGIN_HAS_EXTERNAL_UI
v3_result onWheel(float /*distance*/)
{
// TODO
@@ -207,17 +208,17 @@ public:
dglmods |= kModifierShift;
if (modifiers & (1 << 1))
dglmods |= kModifierAlt;
#ifdef DISTRHO_OS_MAC
# ifdef DISTRHO_OS_MAC
if (modifiers & (1 << 2))
dglmods |= kModifierSuper;
if (modifiers & (1 << 3))
dglmods |= kModifierControl;
#else
# else
if (modifiers & (1 << 2))
dglmods |= kModifierControl;
if (modifiers & (1 << 3))
dglmods |= kModifierSuper;
#endif
# endif

return fUI.handlePluginKeyboardVST3(true, static_cast<uint>(keychar), dglcode, dglmods) ? V3_TRUE : V3_FALSE;
}
@@ -238,21 +239,28 @@ public:
dglmods |= kModifierShift;
if (modifiers & (1 << 1))
dglmods |= kModifierAlt;
#ifdef DISTRHO_OS_MAC
# ifdef DISTRHO_OS_MAC
if (modifiers & (1 << 2))
dglmods |= kModifierSuper;
if (modifiers & (1 << 3))
dglmods |= kModifierControl;
#else
# else
if (modifiers & (1 << 2))
dglmods |= kModifierControl;
if (modifiers & (1 << 3))
dglmods |= kModifierSuper;
#endif
# endif

return fUI.handlePluginKeyboardVST3(false, static_cast<uint>(keychar), dglcode, dglmods) ? V3_TRUE : V3_FALSE;
}

v3_result onFocus(const bool state)
{
fUI.notifyFocusChanged(state);
return V3_OK;
}
#endif

v3_result getSize(v3_view_rect* const rect) const noexcept
{
rect->left = rect->top = 0;
@@ -281,18 +289,6 @@ public:
return V3_OK;
}

v3_result onFocus(const bool state)
{
#if !DISTRHO_PLUGIN_HAS_EXTERNAL_UI
fUI.notifyFocusChanged(state);
return V3_OK;
#else
return V3_NOT_IMPLEMENTED;
// unused
(void)state;
#endif
}

v3_result setFrame(v3_plugin_frame** const frame) noexcept
{
fFrame = frame;
@@ -483,7 +479,7 @@ public:
// ----------------------------------------------------------------------------------------------------------------
// special idle callback on macOS and Windows

#if defined(DISTRHO_OS_MAC) || defined(DISTRHO_OS_WINDOWS)
#if !DISTRHO_PLUGIN_HAS_EXTERNAL_UI && (defined(DISTRHO_OS_MAC) || defined(DISTRHO_OS_WINDOWS))
void idleCallback() override
{
fUI.idleForVST3();
@@ -1205,6 +1201,7 @@ struct dpf_plugin_view : v3_plugin_view_cpp {

static v3_result V3_API on_wheel(void* self, float distance)
{
#if !DISTRHO_PLUGIN_HAS_EXTERNAL_UI
d_stdout("dpf_plugin_view::on_wheel => %p %f", self, distance);
dpf_plugin_view* const view = *static_cast<dpf_plugin_view**>(self);

@@ -1212,10 +1209,16 @@ struct dpf_plugin_view : v3_plugin_view_cpp {
DISTRHO_SAFE_ASSERT_RETURN(uivst3 != nullptr, V3_NOT_INITIALIZED);

return uivst3->onWheel(distance);
#else
return V3_NOT_IMPLEMENTED;
// unused
(void)self; (void)distance;
#endif
}

static v3_result V3_API on_key_down(void* self, int16_t key_char, int16_t key_code, int16_t modifiers)
{
#if !DISTRHO_PLUGIN_HAS_EXTERNAL_UI
d_stdout("dpf_plugin_view::on_key_down => %p %i %i %i", self, key_char, key_code, modifiers);
dpf_plugin_view* const view = *static_cast<dpf_plugin_view**>(self);

@@ -1223,10 +1226,16 @@ struct dpf_plugin_view : v3_plugin_view_cpp {
DISTRHO_SAFE_ASSERT_RETURN(uivst3 != nullptr, V3_NOT_INITIALIZED);

return uivst3->onKeyDown(key_char, key_code, modifiers);
#else
return V3_NOT_IMPLEMENTED;
// unused
(void)self; (void)key_char; (void)key_code; (void)modifiers;
#endif
}

static v3_result V3_API on_key_up(void* self, int16_t key_char, int16_t key_code, int16_t modifiers)
{
#if !DISTRHO_PLUGIN_HAS_EXTERNAL_UI
d_stdout("dpf_plugin_view::on_key_up => %p %i %i %i", self, key_char, key_code, modifiers);
dpf_plugin_view* const view = *static_cast<dpf_plugin_view**>(self);

@@ -1234,6 +1243,11 @@ struct dpf_plugin_view : v3_plugin_view_cpp {
DISTRHO_SAFE_ASSERT_RETURN(uivst3 != nullptr, V3_NOT_INITIALIZED);

return uivst3->onKeyUp(key_char, key_code, modifiers);
#else
return V3_NOT_IMPLEMENTED;
// unused
(void)self; (void)key_char; (void)key_code; (void)modifiers;
#endif
}

static v3_result V3_API get_size(void* self, v3_view_rect* rect)
@@ -1268,6 +1282,7 @@ struct dpf_plugin_view : v3_plugin_view_cpp {

static v3_result V3_API on_focus(void* self, v3_bool state)
{
#if !DISTRHO_PLUGIN_HAS_EXTERNAL_UI
d_stdout("dpf_plugin_view::on_focus => %p %u", self, state);
dpf_plugin_view* const view = *static_cast<dpf_plugin_view**>(self);

@@ -1275,6 +1290,11 @@ struct dpf_plugin_view : v3_plugin_view_cpp {
DISTRHO_SAFE_ASSERT_RETURN(uivst3 != nullptr, V3_NOT_INITIALIZED);

return uivst3->onFocus(state);
#else
return V3_NOT_IMPLEMENTED;
// unused
(void)self; (void)state;
#endif
}

static v3_result V3_API set_frame(void* self, v3_plugin_frame** frame)


+ 1
- 0
examples/EmbedExternalUI/Makefile View File

@@ -35,6 +35,7 @@ TARGETS += jack
TARGETS += dssi
TARGETS += lv2_sep
TARGETS += vst2
TARGETS += vst3

all: $(TARGETS)



Loading…
Cancel
Save