109 lines
2.8 KiB
C++
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
|
|
|
|
// --------------------------------------------------------------------------------------------------------------------
|