Cardinal/include/plugincontext.hpp
Brian Hrebec 85b4b857c8 Set number of host parameters to 512
- 512 should be enough for anybody
- Added banks to Host Params module
2025-06-10 00:27:50 -05:00

109 lines
2.8 KiB
C++

/*
* DISTRHO Cardinal Plugin
* Copyright (C) 2021-2024 Filipe Coelho <falktx@falktx.com>
* 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 {
struct MidiEvent {
static const uint32_t kDataSize = 4;
uint32_t frame;
uint32_t size;
uint8_t data[kDataSize];
const uint8_t* dataExt;
};
}
#endif
#ifndef DISTRHO_PLUGIN_HPP_INCLUDED
namespace CardinalDISTRHO {
class Plugin;
}
#endif
#ifndef DISTRHO_UI_HPP_INCLUDED
namespace CardinalDISTRHO {
class UI;
}
#endif
// --------------------------------------------------------------------------------------------------------------------
// Base DGL classes
#ifndef DGL_BASE_HPP_INCLUDED
namespace CardinalDGL {
class TopLevelWidget;
template <class BaseWidget> class NanoBaseWidget;
typedef NanoBaseWidget<TopLevelWidget> NanoTopLevelWidget;
struct IdleCallback {
virtual ~IdleCallback() {}
virtual void idleCallback() = 0;
};
}
#endif
using CardinalDGL::IdleCallback;
// --------------------------------------------------------------------------------------------------------------------
// Cardinal specific context
static constexpr const uint32_t kModuleParameterCount = 512;
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);
bool addIdleCallback(IdleCallback* cb) const;
void removeIdleCallback(IdleCallback* cb) const;
};
#ifndef HEADLESS
void handleHostParameterDrag(const CardinalPluginContext* pcontext, uint index, bool started);
#endif
// --------------------------------------------------------------------------------------------------------------------