Signed-off-by: falkTX <falktx@falktx.com>main
@@ -1 +1 @@ | |||||
Subproject commit 1e3b910d014f7f7d44e8b3b76eb47efad2121e4f | |||||
Subproject commit 0b250a0cb73e4967ca9db0e2065b430c0530c128 |
@@ -1 +1 @@ | |||||
Subproject commit ce3f6c1147a82efd50107aa3ae9f4f99df6f2e53 | |||||
Subproject commit 7040dfce1a4e270e79468c0ced0cd9de63cda999 |
@@ -1,6 +1,6 @@ | |||||
/* | /* | ||||
* DISTRHO Ildaeil Plugin | * DISTRHO Ildaeil Plugin | ||||
* Copyright (C) 2021-2023 Filipe Coelho <falktx@falktx.com> | |||||
* Copyright (C) 2021-2024 Filipe Coelho <falktx@falktx.com> | |||||
* | * | ||||
* This program is free software; you can redistribute it and/or | * This program is free software; you can redistribute it and/or | ||||
* modify it under the terms of the GNU General Public License as | * modify it under the terms of the GNU General Public License as | ||||
@@ -585,15 +585,15 @@ protected: | |||||
int64_t getUniqueId() const override | int64_t getUniqueId() const override | ||||
{ | { | ||||
#if ILDAEIL_STANDALONE | |||||
#if ILDAEIL_STANDALONE | |||||
return d_cconst('d', 'I', 'l', 'd'); | return d_cconst('d', 'I', 'l', 'd'); | ||||
#elif DISTRHO_PLUGIN_IS_SYNTH | |||||
#elif DISTRHO_PLUGIN_IS_SYNTH | |||||
return d_cconst('d', 'I', 'l', 'S'); | return d_cconst('d', 'I', 'l', 'S'); | ||||
#elif DISTRHO_PLUGIN_WANT_MIDI_OUTPUT | |||||
#elif DISTRHO_PLUGIN_WANT_MIDI_OUTPUT | |||||
return d_cconst('d', 'I', 'l', 'M'); | return d_cconst('d', 'I', 'l', 'M'); | ||||
#else | |||||
#else | |||||
return d_cconst('d', 'I', 'l', 'F'); | return d_cconst('d', 'I', 'l', 'F'); | ||||
#endif | |||||
#endif | |||||
} | } | ||||
/* -------------------------------------------------------------------------------------------------------- | /* -------------------------------------------------------------------------------------------------------- | ||||
@@ -258,15 +258,12 @@ public: | |||||
{ | { | ||||
setGeometryConstraints(kMinWidth * scaleFactor, kMinHeight * scaleFactor); | setGeometryConstraints(kMinWidth * scaleFactor, kMinHeight * scaleFactor); | ||||
setSize(kInitialWidth * scaleFactor, kInitialHeight * scaleFactor); | setSize(kInitialWidth * scaleFactor, kInitialHeight * scaleFactor); | ||||
fPluginHostWindow.setPositionAndSize(0, kButtonHeight * scaleFactor + paddingY, | |||||
kInitialWidth * scaleFactor, | |||||
(kInitialHeight - kButtonHeight) * scaleFactor - paddingY); | |||||
fPluginHostWindow.setOffset(0, kButtonHeight * scaleFactor + paddingY); | |||||
} | } | ||||
else | else | ||||
{ | { | ||||
setGeometryConstraints(kMinWidth, kMinHeight); | setGeometryConstraints(kMinWidth, kMinHeight); | ||||
fPluginHostWindow.setPositionAndSize(0, kButtonHeight + paddingY, | |||||
kInitialWidth, kInitialHeight - kButtonHeight - paddingY); | |||||
fPluginHostWindow.setOffset(0, kButtonHeight + paddingY); | |||||
} | } | ||||
const CarlaHostHandle handle = fPlugin->fCarlaHostHandle; | const CarlaHostHandle handle = fPlugin->fCarlaHostHandle; | ||||
@@ -672,8 +669,6 @@ protected: | |||||
const CarlaHostHandle handle = fPlugin->fCarlaHostHandle; | const CarlaHostHandle handle = fPlugin->fCarlaHostHandle; | ||||
DISTRHO_SAFE_ASSERT_RETURN(handle != nullptr,); | DISTRHO_SAFE_ASSERT_RETURN(handle != nullptr,); | ||||
// carla_juce_idle(); | |||||
if (fDrawingState == kDrawingPluginGenericUI && fPluginGenericUI != nullptr && fPluginHasOutputParameters) | if (fDrawingState == kDrawingPluginGenericUI && fPluginGenericUI != nullptr && fPluginHasOutputParameters) | ||||
{ | { | ||||
updatePluginGenericUI(handle); | updatePluginGenericUI(handle); | ||||
@@ -1028,9 +1023,7 @@ protected: | |||||
#elif DISTRHO_PLUGIN_IS_SYNTH | #elif DISTRHO_PLUGIN_IS_SYNTH | ||||
if (info->io.midiIns != 1) | if (info->io.midiIns != 1) | ||||
return; | return; | ||||
if (info->io.audioIns == 0) | |||||
return; | |||||
if ((info->metadata.hints & PLUGIN_IS_SYNTH) == 0x0) | |||||
if (info->io.audioOuts == 0) | |||||
return; | return; | ||||
#elif DISTRHO_PLUGIN_WANT_MIDI_OUTPUT | #elif DISTRHO_PLUGIN_WANT_MIDI_OUTPUT | ||||
if ((info->io.midiIns != 1 && info->io.audioIns != 0 && info->io.audioOuts != 0) || info->io.midiOuts != 1) | if ((info->io.midiIns != 1 && info->io.audioIns != 0 && info->io.audioOuts != 0) || info->io.midiOuts != 1) | ||||
@@ -126,9 +126,9 @@ else | |||||
TARGETS_BASE = lv2 vst2 clap | TARGETS_BASE = lv2 vst2 clap | ||||
TARGETS_EXTRA = carlabins | TARGETS_EXTRA = carlabins | ||||
# VST3 does not do MIDI filter plugins, by design | |||||
# Skip MIDI filter for AUv2 and VST3, which deal with pure MIDI plugins in a weird way | |||||
ifneq ($(NAME),Ildaeil-MIDI) | ifneq ($(NAME),Ildaeil-MIDI) | ||||
TARGETS_BASE += vst3 | |||||
TARGETS_BASE += vst3 au | |||||
endif | endif | ||||
endif | endif | ||||
@@ -175,6 +175,9 @@ else | |||||
install -m 755 $(CARLA_BINARIES) $(shell dirname $(vst2)) | install -m 755 $(CARLA_BINARIES) $(shell dirname $(vst2)) | ||||
install -m 755 $(CARLA_BINARIES) $(shell dirname $(clap)) | install -m 755 $(CARLA_BINARIES) $(shell dirname $(clap)) | ||||
ifneq ($(NAME),Ildaeil-MIDI) | ifneq ($(NAME),Ildaeil-MIDI) | ||||
ifeq ($(MACOS),true) | |||||
install -m 755 $(CARLA_BINARIES) $(shell dirname $(au)) | |||||
endif | |||||
install -m 755 $(CARLA_BINARIES) $(shell dirname $(vst3)) | install -m 755 $(CARLA_BINARIES) $(shell dirname $(vst3)) | ||||
endif | endif | ||||
endif | endif | ||||
@@ -57,8 +57,7 @@ struct PluginHostWindow::PrivateData | |||||
#if defined(DISTRHO_OS_HAIKU) | #if defined(DISTRHO_OS_HAIKU) | ||||
#elif defined(DISTRHO_OS_MAC) | #elif defined(DISTRHO_OS_MAC) | ||||
NSView* view; | |||||
NSView* subview; | |||||
NSView* pluginView; | |||||
#elif defined(DISTRHO_OS_WASM) | #elif defined(DISTRHO_OS_WASM) | ||||
#elif defined(DISTRHO_OS_WINDOWS) | #elif defined(DISTRHO_OS_WINDOWS) | ||||
::HWND pluginWindow; | ::HWND pluginWindow; | ||||
@@ -76,8 +75,7 @@ struct PluginHostWindow::PrivateData | |||||
pluginWindowCallbacks(cbs), | pluginWindowCallbacks(cbs), | ||||
#if defined(DISTRHO_OS_HAIKU) | #if defined(DISTRHO_OS_HAIKU) | ||||
#elif defined(DISTRHO_OS_MAC) | #elif defined(DISTRHO_OS_MAC) | ||||
view(nullptr), | |||||
subview(nullptr), | |||||
pluginView(nullptr), | |||||
#elif defined(DISTRHO_OS_WASM) | #elif defined(DISTRHO_OS_WASM) | ||||
#elif defined(DISTRHO_OS_WINDOWS) | #elif defined(DISTRHO_OS_WINDOWS) | ||||
pluginWindow(nullptr), | pluginWindow(nullptr), | ||||
@@ -91,12 +89,6 @@ struct PluginHostWindow::PrivateData | |||||
{ | { | ||||
#if defined(DISTRHO_OS_HAIKU) | #if defined(DISTRHO_OS_HAIKU) | ||||
#elif defined(DISTRHO_OS_MAC) | #elif defined(DISTRHO_OS_MAC) | ||||
view = [[NSView new]retain]; | |||||
DISTRHO_SAFE_ASSERT_RETURN(view != nullptr,) | |||||
[view setAutoresizingMask:NSViewNotSizable]; | |||||
[view setAutoresizesSubviews:NO]; | |||||
[view setHidden:YES]; | |||||
[(NSView*)parentWindowId addSubview:view]; | |||||
#elif defined(DISTRHO_OS_WASM) | #elif defined(DISTRHO_OS_WASM) | ||||
#elif defined(DISTRHO_OS_WINDOWS) | #elif defined(DISTRHO_OS_WINDOWS) | ||||
#else | #else | ||||
@@ -109,8 +101,6 @@ struct PluginHostWindow::PrivateData | |||||
{ | { | ||||
#if defined(DISTRHO_OS_HAIKU) | #if defined(DISTRHO_OS_HAIKU) | ||||
#elif defined(DISTRHO_OS_MAC) | #elif defined(DISTRHO_OS_MAC) | ||||
if (view != nullptr) | |||||
[view release]; | |||||
#elif defined(DISTRHO_OS_WASM) | #elif defined(DISTRHO_OS_WASM) | ||||
#elif defined(DISTRHO_OS_WINDOWS) | #elif defined(DISTRHO_OS_WINDOWS) | ||||
#else | #else | ||||
@@ -125,8 +115,8 @@ struct PluginHostWindow::PrivateData | |||||
#if defined(DISTRHO_OS_HAIKU) | #if defined(DISTRHO_OS_HAIKU) | ||||
return nullptr; | return nullptr; | ||||
#elif defined(DISTRHO_OS_MAC) | #elif defined(DISTRHO_OS_MAC) | ||||
subview = nullptr; | |||||
return view; | |||||
pluginView = nullptr; | |||||
return (void*)parentWindowId; | |||||
#elif defined(DISTRHO_OS_WASM) | #elif defined(DISTRHO_OS_WASM) | ||||
return nullptr; | return nullptr; | ||||
#elif defined(DISTRHO_OS_WINDOWS) | #elif defined(DISTRHO_OS_WINDOWS) | ||||
@@ -142,9 +132,10 @@ struct PluginHostWindow::PrivateData | |||||
{ | { | ||||
#if defined(DISTRHO_OS_HAIKU) | #if defined(DISTRHO_OS_HAIKU) | ||||
#elif defined(DISTRHO_OS_MAC) | #elif defined(DISTRHO_OS_MAC) | ||||
if (view != nullptr) | |||||
if (pluginView != nullptr) | |||||
{ | { | ||||
[view setHidden:YES]; | |||||
[pluginView setHidden:YES]; | |||||
pluginView = nullptr; | |||||
[NSOpenGLContext clearCurrentContext]; | [NSOpenGLContext clearCurrentContext]; | ||||
return true; | return true; | ||||
} | } | ||||
@@ -174,14 +165,17 @@ struct PluginHostWindow::PrivateData | |||||
{ | { | ||||
#if defined(DISTRHO_OS_HAIKU) | #if defined(DISTRHO_OS_HAIKU) | ||||
#elif defined(DISTRHO_OS_MAC) | #elif defined(DISTRHO_OS_MAC) | ||||
if (view == nullptr) | |||||
return; | |||||
if (subview == nullptr) | |||||
if (pluginView == nullptr) | |||||
{ | { | ||||
for (NSView* subview2 in [view subviews]) | |||||
bool first = true; | |||||
for (NSView* view in [(NSView*)parentWindowId subviews]) | |||||
{ | { | ||||
subview = subview2; | |||||
if (first) | |||||
{ | |||||
first = false; | |||||
continue; | |||||
} | |||||
pluginView = view; | |||||
break; | break; | ||||
} | } | ||||
} | } | ||||
@@ -214,10 +208,10 @@ struct PluginHostWindow::PrivateData | |||||
#if defined(DISTRHO_OS_HAIKU) | #if defined(DISTRHO_OS_HAIKU) | ||||
#elif defined(DISTRHO_OS_MAC) | #elif defined(DISTRHO_OS_MAC) | ||||
if (subview != nullptr) | |||||
if (pluginView != nullptr) | |||||
{ | { | ||||
const double scaleFactor = [[[view window] screen] backingScaleFactor]; | |||||
const NSSize size = [subview frame].size; | |||||
const double scaleFactor = [[[pluginView window] screen] backingScaleFactor]; | |||||
const NSSize size = [pluginView frame].size; | |||||
const double width = size.width; | const double width = size.width; | ||||
const double height = size.height; | const double height = size.height; | ||||
@@ -227,9 +221,8 @@ struct PluginHostWindow::PrivateData | |||||
if (width > 1.0 && height > 1.0) | if (width > 1.0 && height > 1.0) | ||||
{ | { | ||||
lookingForChildren = false; | lookingForChildren = false; | ||||
[view setFrameSize:size]; | |||||
[view setHidden:NO]; | |||||
[view setNeedsDisplay:YES]; | |||||
[pluginView setFrameOrigin:NSMakePoint(xOffset / scaleFactor, yOffset / scaleFactor)]; | |||||
[pluginView setNeedsDisplay:YES]; | |||||
pluginWindowCallbacks->pluginWindowResized(width * scaleFactor, height * scaleFactor); | pluginWindowCallbacks->pluginWindowResized(width * scaleFactor, height * scaleFactor); | ||||
} | } | ||||
} | } | ||||
@@ -317,25 +310,8 @@ struct PluginHostWindow::PrivateData | |||||
#endif | #endif | ||||
} | } | ||||
void setPositionAndSize(const uint x, const uint y, const uint width, const uint height) | |||||
void setOffset(const uint x, const uint y) | |||||
{ | { | ||||
#if defined(DISTRHO_OS_HAIKU) | |||||
#elif defined(DISTRHO_OS_MAC) | |||||
if (view != nullptr) | |||||
{ | |||||
const double scaleFactor = [[[view window] screen] backingScaleFactor]; | |||||
[view setFrame:NSMakeRect(x / scaleFactor, y / scaleFactor, width / scaleFactor, height / scaleFactor)]; | |||||
} | |||||
#elif defined(DISTRHO_OS_WASM) | |||||
#elif defined(DISTRHO_OS_WINDOWS) | |||||
// unused | |||||
(void)width; | |||||
(void)height; | |||||
#else | |||||
// unused | |||||
(void)width; | |||||
(void)height; | |||||
#endif | |||||
xOffset = x; | xOffset = x; | ||||
yOffset = y; | yOffset = y; | ||||
} | } | ||||
@@ -364,9 +340,9 @@ void PluginHostWindow::idle() | |||||
pData->idle(); | pData->idle(); | ||||
} | } | ||||
void PluginHostWindow::setPositionAndSize(const uint x, const uint y, const uint width, const uint height) | |||||
void PluginHostWindow::setOffset(const uint x, const uint y) | |||||
{ | { | ||||
pData->setPositionAndSize(x, y, width, height); | |||||
pData->setOffset(x, y); | |||||
} | } | ||||
END_NAMESPACE_DGL | END_NAMESPACE_DGL |
@@ -38,7 +38,7 @@ public: | |||||
void* attachAndGetWindowHandle(); | void* attachAndGetWindowHandle(); | ||||
bool hide(); | bool hide(); | ||||
void idle(); | void idle(); | ||||
void setPositionAndSize(uint x, uint y, uint width, uint height); | |||||
void setOffset(uint x, uint y); | |||||
}; | }; | ||||
END_NAMESPACE_DGL | END_NAMESPACE_DGL |
@@ -1,6 +1,6 @@ | |||||
/* | /* | ||||
* DISTRHO Ildaeil Plugin | * DISTRHO Ildaeil Plugin | ||||
* Copyright (C) 2021-2023 Filipe Coelho <falktx@falktx.com> | |||||
* Copyright (C) 2021-2024 Filipe Coelho <falktx@falktx.com> | |||||
* | * | ||||
* This program is free software; you can redistribute it and/or | * This program is free software; you can redistribute it and/or | ||||
* modify it under the terms of the GNU General Public License as | * modify it under the terms of the GNU General Public License as | ||||
@@ -23,6 +23,8 @@ | |||||
#define DISTRHO_PLUGIN_URI "https://distrho.kx.studio/plugins/ildaeil#fx" | #define DISTRHO_PLUGIN_URI "https://distrho.kx.studio/plugins/ildaeil#fx" | ||||
#define DISTRHO_PLUGIN_CLAP_ID "studio.kx.distrho.ildaeil#fx" | #define DISTRHO_PLUGIN_CLAP_ID "studio.kx.distrho.ildaeil#fx" | ||||
#define DISTRHO_PLUGIN_BRAND_ID Dstr | |||||
#define DISTRHO_PLUGIN_UNIQUE_ID ilda | |||||
#define DISTRHO_PLUGIN_CLAP_FEATURES "audio-effect", "stereo" | #define DISTRHO_PLUGIN_CLAP_FEATURES "audio-effect", "stereo" | ||||
#define DISTRHO_PLUGIN_LV2_CATEGORY "lv2:UtilityPlugin" | #define DISTRHO_PLUGIN_LV2_CATEGORY "lv2:UtilityPlugin" | ||||
#define DISTRHO_PLUGIN_VST3_CATEGORIES "Fx|Stereo" | #define DISTRHO_PLUGIN_VST3_CATEGORIES "Fx|Stereo" | ||||
@@ -45,6 +47,8 @@ | |||||
#define DISTRHO_UI_DEFAULT_WIDTH kInitialWidth | #define DISTRHO_UI_DEFAULT_WIDTH kInitialWidth | ||||
#define DISTRHO_UI_DEFAULT_HEIGHT kInitialHeight | #define DISTRHO_UI_DEFAULT_HEIGHT kInitialHeight | ||||
#define DPF_VST3_DONT_USE_BRAND_ID | |||||
#define ILDAEIL_STANDALONE 0 | #define ILDAEIL_STANDALONE 0 | ||||
static constexpr const uint kInitialWidth = 520; | static constexpr const uint kInitialWidth = 520; | ||||
@@ -1,6 +1,6 @@ | |||||
/* | /* | ||||
* DISTRHO Ildaeil Plugin | * DISTRHO Ildaeil Plugin | ||||
* Copyright (C) 2021-2023 Filipe Coelho <falktx@falktx.com> | |||||
* Copyright (C) 2021-2024 Filipe Coelho <falktx@falktx.com> | |||||
* | * | ||||
* This program is free software; you can redistribute it and/or | * This program is free software; you can redistribute it and/or | ||||
* modify it under the terms of the GNU General Public License as | * modify it under the terms of the GNU General Public License as | ||||
@@ -23,6 +23,8 @@ | |||||
#define DISTRHO_PLUGIN_URI "https://distrho.kx.studio/plugins/ildaeil#synth" | #define DISTRHO_PLUGIN_URI "https://distrho.kx.studio/plugins/ildaeil#synth" | ||||
#define DISTRHO_PLUGIN_CLAP_ID "studio.kx.distrho.ildaeil#synth" | #define DISTRHO_PLUGIN_CLAP_ID "studio.kx.distrho.ildaeil#synth" | ||||
#define DISTRHO_PLUGIN_BRAND_ID Dstr | |||||
#define DISTRHO_PLUGIN_UNIQUE_ID ilda | |||||
#define DISTRHO_PLUGIN_CLAP_FEATURES "instrument", "stereo" | #define DISTRHO_PLUGIN_CLAP_FEATURES "instrument", "stereo" | ||||
#define DISTRHO_PLUGIN_LV2_CATEGORY "lv2:InstrumentPlugin" | #define DISTRHO_PLUGIN_LV2_CATEGORY "lv2:InstrumentPlugin" | ||||
#define DISTRHO_PLUGIN_VST3_CATEGORIES "Instrument|Stereo" | #define DISTRHO_PLUGIN_VST3_CATEGORIES "Instrument|Stereo" | ||||
@@ -45,6 +47,8 @@ | |||||
#define DISTRHO_UI_DEFAULT_WIDTH kInitialWidth | #define DISTRHO_UI_DEFAULT_WIDTH kInitialWidth | ||||
#define DISTRHO_UI_DEFAULT_HEIGHT kInitialHeight | #define DISTRHO_UI_DEFAULT_HEIGHT kInitialHeight | ||||
#define DPF_VST3_DONT_USE_BRAND_ID | |||||
#define ILDAEIL_STANDALONE 0 | #define ILDAEIL_STANDALONE 0 | ||||
static constexpr const uint kInitialWidth = 520; | static constexpr const uint kInitialWidth = 520; | ||||