From 3f0b370c0ecb7409b1bfb723626483e8f1c1198c Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 11 Apr 2024 10:40:31 +0200 Subject: [PATCH] Add new plugin-accessible plugincontext.hpp Signed-off-by: falkTX --- include/plugincontext.hpp | 106 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 include/plugincontext.hpp diff --git a/include/plugincontext.hpp b/include/plugincontext.hpp new file mode 100644 index 0000000..a25c6f0 --- /dev/null +++ b/include/plugincontext.hpp @@ -0,0 +1,106 @@ +/* + * DISTRHO Cardinal Plugin + * Copyright (C) 2021-2024 Filipe Coelho + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +#pragma once + +#ifdef BUILDING_PLUGIN_MODULES +#include "rack.hpp" +#endif + +namespace rack { +namespace midi { +struct Message; +} +} + +// -------------------------------------------------------------------------------------------------------------------- +// Base DISTRHO classes + +#ifndef DISTRHO_DETAILS_HPP_INCLUDED + +namespace CardinalDISTRHO { + +class Plugin; +class UI; + +struct MidiEvent { + static const uint32_t kDataSize = 4; + uint32_t frame; + uint32_t size; + uint8_t data[kDataSize]; + const uint8_t* dataExt; +}; + +} + +#endif + +// -------------------------------------------------------------------------------------------------------------------- +// Base DGL classes + +#ifndef DGL_BASE_HPP_INCLUDED + +namespace CardinalDGL { + +class TopLevelWidget; +template class NanoBaseWidget; +typedef NanoBaseWidget NanoTopLevelWidget; + +struct IdleCallback { + virtual ~IdleCallback() {} + virtual void idleCallback() = 0; +}; + +} + +#endif + +using CardinalDGL::IdleCallback; + +// -------------------------------------------------------------------------------------------------------------------- +// Cardinal specific context + +static constexpr const uint32_t kModuleParameterCount = 24; + +enum CardinalVariant { + kCardinalVariantMain, + kCardinalVariantMini, + kCardinalVariantFX, + kCardinalVariantNative, + kCardinalVariantSynth, +}; + +struct CardinalPluginContext : rack::Context { + uint32_t bufferSize, processCounter; + double sampleRate; + float parameters[kModuleParameterCount]; + CardinalVariant variant; + bool bypassed, playing, reset, bbtValid; + int32_t bar, beat, beatsPerBar, beatType; + uint64_t frame; + double barStartTick, beatsPerMinute; + double tick, tickClock, ticksPerBeat, ticksPerClock, ticksPerFrame; + uintptr_t nativeWindowId; + const float* const* dataIns; + float** dataOuts; + const CardinalDISTRHO::MidiEvent* midiEvents; + uint32_t midiEventCount; + CardinalDISTRHO::Plugin* const plugin; + CardinalDGL::NanoTopLevelWidget* tlw; + CardinalDISTRHO::UI* ui; + CardinalPluginContext(CardinalDISTRHO::Plugin* const p); + void writeMidiMessage(const rack::midi::Message& message, uint8_t channel); +#ifndef HEADLESS + bool addIdleCallback(IdleCallback* cb) const; + void removeIdleCallback(IdleCallback* cb) const; +#endif +}; + +#ifndef HEADLESS +void handleHostParameterDrag(const CardinalPluginContext* pcontext, uint index, bool started); +#endif + +// --------------------------------------------------------------------------------------------------------------------