You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
2.8KB

  1. /*
  2. * DISTRHO Cardinal Plugin
  3. * Copyright (C) 2021-2024 Filipe Coelho <falktx@falktx.com>
  4. * SPDX-License-Identifier: GPL-3.0-or-later
  5. */
  6. #pragma once
  7. #ifdef BUILDING_PLUGIN_MODULES
  8. #include "rack.hpp"
  9. #endif
  10. namespace rack {
  11. namespace midi {
  12. struct Message;
  13. }
  14. }
  15. // --------------------------------------------------------------------------------------------------------------------
  16. // Base DISTRHO classes
  17. #ifndef DISTRHO_DETAILS_HPP_INCLUDED
  18. namespace CardinalDISTRHO {
  19. struct MidiEvent {
  20. static const uint32_t kDataSize = 4;
  21. uint32_t frame;
  22. uint32_t size;
  23. uint8_t data[kDataSize];
  24. const uint8_t* dataExt;
  25. };
  26. }
  27. #endif
  28. #ifndef DISTRHO_PLUGIN_HPP_INCLUDED
  29. namespace CardinalDISTRHO {
  30. class Plugin;
  31. }
  32. #endif
  33. #ifndef DISTRHO_UI_HPP_INCLUDED
  34. namespace CardinalDISTRHO {
  35. class UI;
  36. }
  37. #endif
  38. // --------------------------------------------------------------------------------------------------------------------
  39. // Base DGL classes
  40. #ifndef DGL_BASE_HPP_INCLUDED
  41. namespace CardinalDGL {
  42. class TopLevelWidget;
  43. template <class BaseWidget> class NanoBaseWidget;
  44. typedef NanoBaseWidget<TopLevelWidget> NanoTopLevelWidget;
  45. struct IdleCallback {
  46. virtual ~IdleCallback() {}
  47. virtual void idleCallback() = 0;
  48. };
  49. }
  50. #endif
  51. using CardinalDGL::IdleCallback;
  52. // --------------------------------------------------------------------------------------------------------------------
  53. // Cardinal specific context
  54. static constexpr const uint32_t kModuleParameterCount = 24;
  55. enum CardinalVariant {
  56. kCardinalVariantMain,
  57. kCardinalVariantMini,
  58. kCardinalVariantFX,
  59. kCardinalVariantNative,
  60. kCardinalVariantSynth,
  61. };
  62. struct CardinalPluginContext : rack::Context {
  63. uint32_t bufferSize, processCounter;
  64. double sampleRate;
  65. float parameters[kModuleParameterCount];
  66. CardinalVariant variant;
  67. bool bypassed, playing, reset, bbtValid;
  68. int32_t bar, beat, beatsPerBar, beatType;
  69. uint64_t frame;
  70. double barStartTick, beatsPerMinute;
  71. double tick, tickClock, ticksPerBeat, ticksPerClock, ticksPerFrame;
  72. uintptr_t nativeWindowId;
  73. const float* const* dataIns;
  74. float** dataOuts;
  75. const CardinalDISTRHO::MidiEvent* midiEvents;
  76. uint32_t midiEventCount;
  77. CardinalDISTRHO::Plugin* const plugin;
  78. CardinalDGL::NanoTopLevelWidget* tlw;
  79. CardinalDISTRHO::UI* ui;
  80. CardinalPluginContext(CardinalDISTRHO::Plugin* const p);
  81. void writeMidiMessage(const rack::midi::Message& message, uint8_t channel);
  82. bool addIdleCallback(IdleCallback* cb) const;
  83. void removeIdleCallback(IdleCallback* cb) const;
  84. };
  85. #ifndef HEADLESS
  86. void handleHostParameterDrag(const CardinalPluginContext* pcontext, uint index, bool started);
  87. #endif
  88. // --------------------------------------------------------------------------------------------------------------------