More details for mini version, make menubar variant specific

Signed-off-by: falkTX <falktx@falktx.com>
This commit is contained in:
falkTX 2022-12-29 15:33:16 +00:00
parent b71acc9f22
commit 91cac905cc
No known key found for this signature in database
GPG key ID: CDBAA37ABC74FBA0
17 changed files with 331 additions and 79 deletions

View file

@ -311,9 +311,11 @@ endif
PLUGIN_FILES += $(filter-out Fundamental/src/plugin.cpp,$(wildcard Fundamental/src/*.cpp))
PLUGIN_FILES += Fundamental/src/dr_wav.c
MINIPLUGIN_FILES += Fundamental/src/ADSR.cpp
MINIPLUGIN_FILES += Fundamental/src/LFO.cpp
MINIPLUGIN_FILES += Fundamental/src/Noise.cpp
MINIPLUGIN_FILES += Fundamental/src/Random.cpp
MINIPLUGIN_FILES += Fundamental/src/VCF.cpp
MINIPLUGIN_FILES += Fundamental/src/VCMixer.cpp
MINIPLUGIN_FILES += Fundamental/src/VCO.cpp
# modules/types which are present in other plugins
@ -524,6 +526,16 @@ PLUGIN_FILES += AudibleInstruments/eurorack/streams/svf.cc
PLUGIN_FILES += AudibleInstruments/eurorack/streams/vactrol.cc
PLUGIN_FILES += AudibleInstruments/eurorack/streams/compressor.cc
MINIPLUGIN_FILES += AudibleInstruments/src/Plaits.cpp
MINIPLUGIN_FILES += $(wildcard AudibleInstruments/eurorack/plaits/dsp/*.cc)
MINIPLUGIN_FILES += $(wildcard AudibleInstruments/eurorack/plaits/dsp/engine/*.cc)
MINIPLUGIN_FILES += $(wildcard AudibleInstruments/eurorack/plaits/dsp/speech/*.cc)
MINIPLUGIN_FILES += $(wildcard AudibleInstruments/eurorack/plaits/dsp/physical_modelling/*.cc)
MINIPLUGIN_FILES += AudibleInstruments/eurorack/plaits/resources.cc
MINIPLUGIN_FILES += AudibleInstruments/eurorack/stmlib/dsp/atan.cc
MINIPLUGIN_FILES += AudibleInstruments/eurorack/stmlib/dsp/units.cc
MINIPLUGIN_FILES += AudibleInstruments/eurorack/stmlib/utils/random.cc
# --------------------------------------------------------------
# Autinn
@ -575,6 +587,29 @@ PLUGIN_FILES += $(filter-out BogaudioModules/src/bogaudio.cpp,$(wildcard Bogaudi
PLUGIN_FILES += $(wildcard BogaudioModules/src/dsp/*.cpp)
PLUGIN_FILES += $(wildcard BogaudioModules/src/dsp/filters/*.cpp)
MINIPLUGIN_FILES += BogaudioModules/src/LFO.cpp
MINIPLUGIN_FILES += BogaudioModules/src/Noise.cpp
MINIPLUGIN_FILES += BogaudioModules/src/VCA.cpp
MINIPLUGIN_FILES += BogaudioModules/src/VCF.cpp
MINIPLUGIN_FILES += BogaudioModules/src/VCO.cpp
MINIPLUGIN_FILES += BogaudioModules/src/lfo_base.cpp
MINIPLUGIN_FILES += BogaudioModules/src/menu.cpp
MINIPLUGIN_FILES += BogaudioModules/src/module.cpp
MINIPLUGIN_FILES += BogaudioModules/src/param_quantities.cpp
MINIPLUGIN_FILES += BogaudioModules/src/poly_channels.cpp
MINIPLUGIN_FILES += BogaudioModules/src/skins.cpp
MINIPLUGIN_FILES += BogaudioModules/src/utils.cpp
MINIPLUGIN_FILES += BogaudioModules/src/vco_base.cpp
MINIPLUGIN_FILES += BogaudioModules/src/widgets.cpp
MINIPLUGIN_FILES += BogaudioModules/src/dsp/analyzer.cpp
MINIPLUGIN_FILES += BogaudioModules/src/dsp/math.cpp
MINIPLUGIN_FILES += BogaudioModules/src/dsp/noise.cpp
MINIPLUGIN_FILES += BogaudioModules/src/dsp/oscillator.cpp
MINIPLUGIN_FILES += BogaudioModules/src/dsp/signal.cpp
MINIPLUGIN_FILES += BogaudioModules/src/dsp/table.cpp
MINIPLUGIN_FILES += BogaudioModules/src/dsp/filters/multimode.cpp
MINIPLUGIN_FILES += BogaudioModules/src/dsp/filters/resample.cpp
# modules/types which are present in other plugins
BOGAUDIO_CUSTOM = ADSR BlueNoiseGenerator LFO Noise VCA VCO VCF
BOGAUDIO_CUSTOM_PER_FILE = ARQuantity AttackMenuItem ReleaseMenuItem
@ -1384,8 +1419,10 @@ endif
RESOURCE_FILES += Cardinal/res/Miku/Miku.png
MINIPLUGIN_LIST = Cardinal Fundamental
MINIRESOURCE_FILES = $(wildcard Cardinal/res/*.svg)
MINIPLUGIN_LIST = AudibleInstruments BogaudioModules Cardinal Fundamental
MINIRESOURCE_FILES = $(wildcard AudibleInstruments/res/*.svg)
MINIRESOURCE_FILES += $(wildcard BogaudioModules/res/*.svg)
MINIRESOURCE_FILES += $(wildcard Cardinal/res/*.svg)
MINIRESOURCE_FILES += $(wildcard Fundamental/res/*.svg)
MINIRESOURCE_FILES += $(wildcard Fundamental/res/components/*.svg)
MINIRESOURCE_FILES += Fundamental/presets

View file

@ -26,12 +26,34 @@
// Fundamental
#include "Fundamental/src/plugin.hpp"
// AudibleInstruments
#include "AudibleInstruments/src/plugin.hpp"
// BogaudioModules - integrate theme/skin support
#include <mutex>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#define private public
#include "BogaudioModules/src/skins.hpp"
#undef private
// BogaudioModules
extern Model* modelBogaudioLFO;
extern Model* modelBogaudioNoise;
extern Model* modelBogaudioVCA;
extern Model* modelBogaudioVCF;
extern Model* modelBogaudioVCO;
// known terminal modules
std::vector<Model*> hostTerminalModels;
// plugin instances
Plugin* pluginInstance__Cardinal;
Plugin* pluginInstance__Fundamental;
Plugin* pluginInstance__AudibleInstruments;
Plugin* pluginInstance__BogaudioModules;
namespace rack {
@ -187,32 +209,192 @@ static void initStatic__Fundamental()
const StaticPluginLoader spl(p, "Fundamental");
if (spl.ok())
{
p->addModel(modelADSR);
p->addModel(modelLFO);
p->addModel(modelNoise);
p->addModel(modelRandom);
p->addModel(modelVCF);
p->addModel(modelVCO);
spl.removeModule("VCO2");
spl.removeModule("VCA-1");
spl.removeModule("VCA");
spl.removeModule("LFO2");
spl.removeModule("Delay");
spl.removeModule("Mixer");
spl.removeModule("VCMixer");
p->addModel(modelVCMixer);
spl.removeModule("8vert");
spl.removeModule("ADSR");
spl.removeModule("Delay");
spl.removeModule("LFO2");
spl.removeModule("Merge");
spl.removeModule("MidSide");
spl.removeModule("Mixer");
spl.removeModule("Mutes");
spl.removeModule("Octave");
spl.removeModule("Pulses");
spl.removeModule("Scope");
spl.removeModule("Quantizer");
spl.removeModule("SEQ3");
spl.removeModule("Scope");
spl.removeModule("SequentialSwitch1");
spl.removeModule("SequentialSwitch2");
spl.removeModule("Octave");
spl.removeModule("Quantizer");
spl.removeModule("Split");
spl.removeModule("Merge");
spl.removeModule("Sum");
spl.removeModule("MidSide");
spl.removeModule("Noise");
spl.removeModule("Random");
spl.removeModule("VCA");
spl.removeModule("VCA-1");
spl.removeModule("VCO");
spl.removeModule("VCO2");
}
}
static void initStatic__AudibleInstruments()
{
Plugin* const p = new Plugin;
pluginInstance__AudibleInstruments = p;
const StaticPluginLoader spl(p, "AudibleInstruments");
if (spl.ok())
{
p->addModel(modelPlaits);
spl.removeModule("Blinds");
spl.removeModule("Braids");
spl.removeModule("Branches");
spl.removeModule("Clouds");
spl.removeModule("Elements");
spl.removeModule("Frames");
spl.removeModule("Kinks");
spl.removeModule("Links");
spl.removeModule("Marbles");
spl.removeModule("Rings");
spl.removeModule("Ripples");
spl.removeModule("Shades");
spl.removeModule("Shelves");
spl.removeModule("Stages");
spl.removeModule("Streams");
spl.removeModule("Tides");
spl.removeModule("Tides2");
spl.removeModule("Veils");
spl.removeModule("Warps");
}
}
static void initStatic__BogaudioModules()
{
Plugin* const p = new Plugin;
pluginInstance__BogaudioModules = p;
const StaticPluginLoader spl(p, "BogaudioModules");
if (spl.ok())
{
// Make sure to use match Cardinal theme
Skins& skins(Skins::skins());
skins._default = settings::darkMode ? "dark" : "light";
p->addModel(modelBogaudioLFO);
p->addModel(modelBogaudioNoise);
p->addModel(modelBogaudioVCA);
p->addModel(modelBogaudioVCF);
p->addModel(modelBogaudioVCO);
// cat plugins/BogaudioModules/plugin.json | jq -r .modules[].slug - | sort
spl.removeModule("Bogaudio-AD");
spl.removeModule("Bogaudio-Additator");
spl.removeModule("Bogaudio-AddrSeq");
spl.removeModule("Bogaudio-AddrSeqX");
spl.removeModule("Bogaudio-ADSR");
spl.removeModule("Bogaudio-AMRM");
spl.removeModule("Bogaudio-Analyzer");
spl.removeModule("Bogaudio-AnalyzerXL");
spl.removeModule("Bogaudio-Arp");
spl.removeModule("Bogaudio-ASR");
spl.removeModule("Bogaudio-Assign");
spl.removeModule("Bogaudio-Blank3");
spl.removeModule("Bogaudio-Blank6");
spl.removeModule("Bogaudio-Bool");
spl.removeModule("Bogaudio-Chirp");
spl.removeModule("Bogaudio-Clpr");
spl.removeModule("Bogaudio-Cmp");
spl.removeModule("Bogaudio-CmpDist");
spl.removeModule("Bogaudio-CVD");
spl.removeModule("Bogaudio-DADSRH");
spl.removeModule("Bogaudio-DADSRHPlus");
spl.removeModule("Bogaudio-Detune");
spl.removeModule("Bogaudio-DGate");
spl.removeModule("Bogaudio-Edge");
spl.removeModule("Bogaudio-EightFO");
spl.removeModule("Bogaudio-EightOne");
spl.removeModule("Bogaudio-EQ");
spl.removeModule("Bogaudio-EQS");
spl.removeModule("Bogaudio-FFB");
spl.removeModule("Bogaudio-FlipFlop");
spl.removeModule("Bogaudio-FMOp");
spl.removeModule("Bogaudio-Follow");
spl.removeModule("Bogaudio-FourFO");
spl.removeModule("Bogaudio-FourMan");
spl.removeModule("Bogaudio-Inv");
spl.removeModule("Bogaudio-Lgsw");
spl.removeModule("Bogaudio-LLFO");
spl.removeModule("Bogaudio-LLPG");
spl.removeModule("Bogaudio-Lmtr");
spl.removeModule("Bogaudio-LPG");
spl.removeModule("Bogaudio-LVCF");
spl.removeModule("Bogaudio-LVCO");
spl.removeModule("Bogaudio-Manual");
spl.removeModule("Bogaudio-Matrix18");
spl.removeModule("Bogaudio-Matrix44");
spl.removeModule("Bogaudio-Matrix44Cvm");
spl.removeModule("Bogaudio-Matrix81");
spl.removeModule("Bogaudio-Matrix88");
spl.removeModule("Bogaudio-Matrix88Cv");
spl.removeModule("Bogaudio-Matrix88M");
spl.removeModule("Bogaudio-MegaGate");
spl.removeModule("Bogaudio-Mix1");
spl.removeModule("Bogaudio-Mix2");
spl.removeModule("Bogaudio-Mix4");
spl.removeModule("Bogaudio-Mix4x");
spl.removeModule("Bogaudio-Mix8");
spl.removeModule("Bogaudio-Mix8x");
spl.removeModule("Bogaudio-Mono");
spl.removeModule("Bogaudio-Mult");
spl.removeModule("Bogaudio-Mumix");
spl.removeModule("Bogaudio-Mute8");
spl.removeModule("Bogaudio-Nsgt");
spl.removeModule("Bogaudio-Offset");
spl.removeModule("Bogaudio-OneEight");
spl.removeModule("Bogaudio-Pan");
spl.removeModule("Bogaudio-PEQ");
spl.removeModule("Bogaudio-PEQ14");
spl.removeModule("Bogaudio-PEQ14XF");
spl.removeModule("Bogaudio-PEQ6");
spl.removeModule("Bogaudio-PEQ6XF");
spl.removeModule("Bogaudio-Pgmr");
spl.removeModule("Bogaudio-PgmrX");
spl.removeModule("Bogaudio-PolyCon");
spl.removeModule("Bogaudio-PolyCon8");
spl.removeModule("Bogaudio-PolyMult");
spl.removeModule("Bogaudio-PolyOff16");
spl.removeModule("Bogaudio-PolyOff8");
spl.removeModule("Bogaudio-Pressor");
spl.removeModule("Bogaudio-Pulse");
spl.removeModule("Bogaudio-Ranalyzer");
spl.removeModule("Bogaudio-Reftone");
spl.removeModule("Bogaudio-RGate");
spl.removeModule("Bogaudio-SampleHold");
spl.removeModule("Bogaudio-Shaper");
spl.removeModule("Bogaudio-ShaperPlus");
spl.removeModule("Bogaudio-Sine");
spl.removeModule("Bogaudio-Slew");
spl.removeModule("Bogaudio-Stack");
spl.removeModule("Bogaudio-Sums");
spl.removeModule("Bogaudio-Switch");
spl.removeModule("Bogaudio-Switch1616");
spl.removeModule("Bogaudio-Switch18");
spl.removeModule("Bogaudio-Switch44");
spl.removeModule("Bogaudio-Switch81");
spl.removeModule("Bogaudio-Switch88");
spl.removeModule("Bogaudio-UMix");
spl.removeModule("Bogaudio-Unison");
spl.removeModule("Bogaudio-VCAmp");
spl.removeModule("Bogaudio-VCM");
spl.removeModule("Bogaudio-Velo");
spl.removeModule("Bogaudio-Vish");
spl.removeModule("Bogaudio-VU");
spl.removeModule("Bogaudio-Walk");
spl.removeModule("Bogaudio-Walk2");
spl.removeModule("Bogaudio-XCO");
spl.removeModule("Bogaudio-XFade");
}
}
@ -220,6 +402,8 @@ void initStaticPlugins()
{
initStatic__Cardinal();
initStatic__Fundamental();
initStatic__AudibleInstruments();
initStatic__BogaudioModules();
}
void destroyStaticPlugins()
@ -231,7 +415,17 @@ void destroyStaticPlugins()
void updateStaticPluginsDarkMode()
{
d_stdout("TODO");
const bool darkMode = settings::darkMode;
// bogaudio
{
Skins& skins(Skins::skins());
skins._default = darkMode ? "dark" : "light";
std::lock_guard<std::mutex> lock(skins._defaultSkinListenersLock);
for (auto listener : skins._defaultSkinListeners) {
listener->defaultSkinChanged(skins._default);
}
}
}
}

View file

@ -156,7 +156,7 @@ extern Model* modelChord;
// Bidoo
#include "Bidoo/src/plugin.hpp"
// BogaudioModules - force dark skin as default
// BogaudioModules - integrate theme/skin support
#include <mutex>
#include <string>
#include <unordered_map>

1
src/Cardinal/MenuBar.cpp Symbolic link
View file

@ -0,0 +1 @@
../override/MenuBar.cpp

1
src/CardinalFX/MenuBar.cpp Symbolic link
View file

@ -0,0 +1 @@
../override/MenuBar.cpp

View file

@ -0,0 +1 @@
../override/MenuBar.cpp

View file

@ -0,0 +1 @@
../override/MenuBar.cpp

View file

@ -76,13 +76,21 @@ bool connectToRemote()
RemoteDetails* remoteDetails = ui->remoteDetails;
#ifdef HAVE_LIBLO
#if CARDINAL_VARIANT_MINI
if (remoteDetails == nullptr)
{
ui->remoteDetails = remoteDetails = new RemoteDetails;
remoteDetails->handle = ui;
remoteDetails->connected = true;
remoteDetails->autoDeploy = true;
}
#elif defined(HAVE_LIBLO)
if (remoteDetails == nullptr)
{
const lo_server oscServer = lo_server_new_with_proto(nullptr, LO_UDP, nullptr);
DISTRHO_SAFE_ASSERT_RETURN(oscServer != nullptr, false);
remoteDetails = new RemoteDetails;
ui->remoteDetails = remoteDetails = new RemoteDetails;
remoteDetails->handle = oscServer;
remoteDetails->connected = false;
remoteDetails->autoDeploy = false;
@ -106,13 +114,14 @@ void disconnectFromRemote(RemoteDetails* const remote)
{
#ifdef HAVE_LIBLO
lo_server_free(static_cast<lo_server>(remote->handle));
delete remote;
#endif
delete remote;
}
}
void idleRemote(RemoteDetails* const remote)
{
DISTRHO_SAFE_ASSERT_RETURN(remote != nullptr,);
#ifdef HAVE_LIBLO
while (lo_server_recv_noblock(static_cast<lo_server>(remote->handle), 0) != 0) {}
#endif
@ -120,15 +129,26 @@ void idleRemote(RemoteDetails* const remote)
void deployToRemote(RemoteDetails* const remote)
{
#ifdef HAVE_LIBLO
CardinalPluginContext* const context = static_cast<CardinalPluginContext*>(APP);
DISTRHO_SAFE_ASSERT_RETURN(context != nullptr,);
context->engine->prepareSave();
context->patch->saveAutosave();
context->patch->cleanAutosave();
std::vector<uint8_t> data(rack::system::archiveDirectory(context->patch->autosavePath, 1));
DISTRHO_SAFE_ASSERT_RETURN(data.size() >= 4,);
#if CARDINAL_VARIANT_MINI
if (char* const patch = String::asBase64(data.data(), data.size()).getAndReleaseBuffer())
{
static_cast<CardinalBaseUI*>(remote->handle)->setState("patch", patch);
std::free(patch);
}
#elif defined(HAVE_LIBLO)
const lo_address addr = lo_address_new_with_proto(LO_UDP, REMOTE_HOST, REMOTE_HOST_PORT);
DISTRHO_SAFE_ASSERT_RETURN(addr != nullptr,);
APP->engine->prepareSave();
APP->patch->saveAutosave();
APP->patch->cleanAutosave();
std::vector<uint8_t> data(rack::system::archiveDirectory(APP->patch->autosavePath, 1));
if (const lo_blob blob = lo_blob_new(data.size(), data.data()))
{
lo_send(addr, "/load", "b", blob);
@ -139,7 +159,7 @@ void deployToRemote(RemoteDetails* const remote)
#endif
}
void sendScreenshotToRemote(RemoteDetails* const remote, const char* const screenshot)
void sendScreenshotToRemote(RemoteDetails*, const char* const screenshot)
{
#ifdef HAVE_LIBLO
const lo_address addr = lo_address_new_with_proto(LO_UDP, REMOTE_HOST, REMOTE_HOST_PORT);

View file

@ -0,0 +1 @@
../override/MenuBar.cpp

View file

@ -0,0 +1 @@
../override/MenuBar.cpp

View file

@ -62,9 +62,6 @@
#endif
namespace rack {
namespace app {
widget::Widget* createMenuBar(bool isStandalone);
}
namespace engine {
void Engine_setAboutToClose(Engine*);
}
@ -87,7 +84,7 @@ bool Plugin::writeMidiEvent(const MidiEvent&) noexcept { return false; }
// --------------------------------------------------------------------------------------------------------------------
#ifdef DISTRHO_OS_WASM
#if defined(DISTRHO_OS_WASM) && ! CARDINAL_VARIANT_MINI
struct WasmWelcomeDialog : rack::widget::OpaqueWidget
{
static const constexpr float margin = 10;
@ -346,7 +343,10 @@ public:
{
rack::contextSet(context);
#if ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS
#if CARDINAL_VARIANT_MINI
DISTRHO_SAFE_ASSERT_RETURN(remoteUtils::connectToRemote(),);
DISTRHO_SAFE_ASSERT_RETURN(remoteDetails != nullptr,);
// create unique temporary path for this instance
try {
char uidBuf[24];
@ -369,7 +369,7 @@ public:
const float sampleRate = getSampleRate();
rack::settings::sampleRate = sampleRate;
context->bufferSize = 128;
context->bufferSize = 1;
context->sampleRate = sampleRate;
context->engine = new rack::engine::Engine;
@ -403,15 +403,6 @@ public:
rack::window::WindowSetPluginUI(context->window, this);
if (rack::widget::Widget* const menuBar = context->scene->menuBar)
{
context->scene->removeChild(menuBar);
delete menuBar;
}
context->scene->menuBar = rack::app::createMenuBar(getApp().isStandalone());
context->scene->addChildBelow(context->scene->menuBar, context->scene->rackScroll);
// hide "Browse VCV Library" button
rack::widget::Widget* const browser = context->scene->browser->children.back();
rack::widget::Widget* const headerLayout = browser->children.front();
@ -444,7 +435,7 @@ public:
}
}
#ifdef DISTRHO_OS_WASM
#if defined(DISTRHO_OS_WASM) && ! CARDINAL_VARIANT_MINI
if (rack::patchStorageSlug != nullptr)
{
psDialog = new WasmRemotePatchLoadingDialog(true);
@ -477,26 +468,18 @@ public:
context->nativeWindowId = 0;
if (rack::widget::Widget* const menuBar = context->scene->menuBar)
{
context->scene->removeChild(menuBar);
delete menuBar;
}
context->scene->menuBar = rack::app::createMenuBar();
context->scene->addChildBelow(context->scene->menuBar, context->scene->rackScroll);
rack::window::WindowSetPluginUI(context->window, nullptr);
#if ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS
context->tlw = nullptr;
context->ui = nullptr;
#if CARDINAL_VARIANT_MINI
{
const ScopedContext sc(this);
context->patch->clear();
// do a little dance to prevent context scene deletion from saving to temp dir
#ifndef HEADLESS
const ScopedValueSetter<bool> svs(rack::settings::headless, true);
#endif
Engine_setAboutToClose(context->engine);
delete context;
}
@ -620,6 +603,10 @@ public:
filebrowserhandle = nullptr;
}
#if CARDINAL_VARIANT_MINI
context->engine->stepBlock(1);
#endif
if (windowParameters.rateLimit != 0 && ++rateLimitStep % (windowParameters.rateLimit * 2))
return;
@ -804,7 +791,7 @@ protected:
void stateChanged(const char* const key, const char* const value) override
{
#if ! DISTRHO_PLUGIN_WANT_DIRECT_ACCESS
#if CARDINAL_VARIANT_MINI
if (std::strcmp(key, "patch") == 0)
{
if (fAutosavePath.empty())
@ -952,9 +939,9 @@ protected:
#endif
rack::math::Vec scrollDelta = rack::math::Vec(ev.delta.getX(), ev.delta.getY());
#ifndef DISTRHO_OS_MAC
#ifndef DISTRHO_OS_MAC
scrollDelta = scrollDelta.mult(50.0);
#endif
#endif
const int mods = glfwMods(ev.mod);
const ScopedContext sc(this, mods);

View file

@ -165,7 +165,6 @@ RACK_FILES += override/context.cpp
RACK_FILES += override/minblep.cpp
RACK_FILES += override/plugin.cpp
RACK_FILES += override/Engine.cpp
RACK_FILES += override/MenuBar.cpp
RACK_FILES += override/Model.cpp
RACK_FILES += override/ModuleWidget.cpp
RACK_FILES += override/OpenGlWidget.cpp

View file

@ -108,6 +108,7 @@ FILES_DSP += RemoteWindow.cpp
else
FILES_UI = CardinalUI.cpp
FILES_UI += glfw.cpp
FILES_UI += MenuBar.cpp
FILES_UI += Window.cpp
endif
@ -255,6 +256,7 @@ FILES_UI += CardinalCommon-UI.cpp
FILES_UI += CardinalRemote.cpp
FILES_UI += common.cpp
FILES_UI += glfw.cpp
FILES_UI += MenuBar.cpp
FILES_UI += Window.cpp
EXTRA_UI_DEPENDENCIES = $(subst -headless,,$(EXTRA_DSP_DEPENDENCIES))
EXTRA_UI_LIBS += $(subst -headless,,$(EXTRA_DSP_LIBS))

View file

@ -182,13 +182,10 @@ public:
~CardinalBaseUI() override
{
disconnectFromRemote(remoteDetails);
remoteUtils::disconnectFromRemote(remoteDetails);
if (filebrowserhandle != nullptr)
fileBrowserClose(filebrowserhandle);
context->tlw = nullptr;
context->ui = nullptr;
}
};
#endif

View file

@ -209,10 +209,15 @@ static void Engine_stepFrame(Engine* that) {
float smoothValue = internal->smoothValue;
Param* smoothParam = &smoothModule->params[smoothParamId];
float value = smoothParam->value;
// Use decay rate of roughly 1 graphics frame
const float smoothLambda = 60.f;
float newValue = value + (smoothValue - value) * smoothLambda * internal->sampleTime;
if (value == newValue) {
float newValue;
if (internal->blockFrames != 1) {
// Use decay rate of roughly 1 graphics frame
const float smoothLambda = 60.f;
newValue = value + (smoothValue - value) * smoothLambda * internal->sampleTime;
} else {
newValue = value;
}
if (d_isEqual(value, newValue)) {
// Snap to actual smooth value if the value doesn't change enough (due to the granularity of floats)
smoothParam->setValue(smoothValue);
internal->smoothModule = NULL;

View file

@ -53,6 +53,7 @@
#include "../CardinalCommon.hpp"
#include "../CardinalRemote.hpp"
#include "DistrhoPlugin.hpp"
#include "DistrhoStandaloneUtils.hpp"
#ifdef HAVE_LIBLO
@ -98,14 +99,14 @@ struct MenuButton : ui::Button {
struct FileButton : MenuButton {
const bool isStandalone;
#if !(defined(DISTRHO_OS_WASM) && defined(STATIC_BUILD))
#if ! CARDINAL_VARIANT_MINI
std::vector<std::string> demoPatches;
#endif
FileButton(const bool standalone)
: MenuButton(), isStandalone(standalone)
{
#if !(defined(DISTRHO_OS_WASM) && defined(STATIC_BUILD))
#if ! CARDINAL_VARIANT_MINI
const std::string patchesDir = asset::patchesPath() + DISTRHO_OS_SEP_STR "examples";
if (system::isDirectory(patchesDir))
@ -167,7 +168,7 @@ struct FileButton : MenuButton {
patchUtils::revertDialog();
}, APP->patch->path.empty()));
#ifdef HAVE_LIBLO
// #if defined(HAVE_LIBLO) && ! CARDINAL_VARIANT_MINI
menu->addChild(new ui::MenuSeparator);
remoteUtils::RemoteDetails* const remoteDetails = remoteUtils::getRemote();
@ -186,7 +187,7 @@ struct FileButton : MenuButton {
remoteUtils::connectToRemote();
}));
}
#endif
// #endif
#ifndef DISTRHO_OS_WASM
menu->addChild(new ui::MenuSeparator);
@ -201,7 +202,7 @@ struct FileButton : MenuButton {
}));
#endif
#if !(defined(DISTRHO_OS_WASM) && defined(STATIC_BUILD))
#if ! CARDINAL_VARIANT_MINI
if (!demoPatches.empty())
{
menu->addChild(new ui::MenuSeparator);

View file

@ -50,6 +50,9 @@ namespace rack {
namespace app {
widget::Widget* createMenuBar(bool isStandalone);
struct ResizeHandle : widget::OpaqueWidget {
math::Vec size;
@ -131,7 +134,7 @@ Scene::Scene() {
rack = rackScroll->rackWidget;
menuBar = createMenuBar();
menuBar = createMenuBar(isStandalone());
addChild(menuBar);
browser = browserCreate();
@ -209,7 +212,7 @@ void Scene::step() {
if (remoteDetails->autoDeploy) {
const int actionIndex = APP->history->actionIndex;
const double time = system::getTime();
if (internal->historyActionIndex != actionIndex && time - internal->lastSceneChangeTime >= 5.0) {
if (internal->historyActionIndex != actionIndex && time - internal->lastSceneChangeTime >= 1.0) {
internal->historyActionIndex = actionIndex;
internal->lastSceneChangeTime = time;
remoteUtils::deployToRemote(remoteDetails);
@ -315,7 +318,8 @@ void Scene::onHoverKey(const HoverKeyEvent& e) {
e.consume(this);
}
if (e.key == GLFW_KEY_F7 && (e.mods & RACK_MOD_MASK) == 0) {
remoteUtils::deployToRemote(remoteUtils::getRemote());
if (remoteUtils::RemoteDetails* const remoteDetails = remoteUtils::getRemote())
remoteUtils::deployToRemote(remoteDetails);
window::generateScreenshot();
e.consume(this);
}