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.

108 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. namespace CardinalDGL {
  41. #ifndef DGL_BASE_HPP_INCLUDED
  42. class TopLevelWidget;
  43. struct IdleCallback {
  44. virtual ~IdleCallback() {}
  45. virtual void idleCallback() = 0;
  46. };
  47. #endif
  48. #ifndef DGL_NANO_WIDGET_HPP_INCLUDED
  49. template <class BaseWidget> class NanoBaseWidget;
  50. typedef NanoBaseWidget<TopLevelWidget> NanoTopLevelWidget;
  51. #endif
  52. }
  53. using CardinalDGL::IdleCallback;
  54. // --------------------------------------------------------------------------------------------------------------------
  55. // Cardinal specific context
  56. static constexpr const uint32_t kModuleParameterCount = 48;
  57. enum CardinalVariant {
  58. kCardinalVariantFX,
  59. kCardinalVariantLoader,
  60. kCardinalVariantMain,
  61. kCardinalVariantMini,
  62. kCardinalVariantNative,
  63. kCardinalVariantSynth,
  64. };
  65. struct CardinalPluginContext : rack::Context {
  66. uint32_t bufferSize, processCounter;
  67. double sampleRate;
  68. float parameters[kModuleParameterCount];
  69. CardinalVariant variant;
  70. bool bypassed, playing, reset, bbtValid;
  71. int32_t bar, beat, beatsPerBar, beatType;
  72. uint64_t frame;
  73. double barStartTick, beatsPerMinute;
  74. double tick, tickClock, ticksPerBeat, ticksPerClock, ticksPerFrame;
  75. uintptr_t nativeWindowId;
  76. const float* const* dataIns;
  77. float** dataOuts;
  78. const CardinalDISTRHO::MidiEvent* midiEvents;
  79. uint32_t midiEventCount;
  80. CardinalDISTRHO::Plugin* const plugin;
  81. CardinalDGL::NanoTopLevelWidget* tlw;
  82. CardinalDISTRHO::UI* ui;
  83. CardinalPluginContext(CardinalDISTRHO::Plugin* const p);
  84. void writeMidiMessage(const rack::midi::Message& message, uint8_t channel);
  85. bool addIdleCallback(IdleCallback* cb) const;
  86. void removeIdleCallback(IdleCallback* cb) const;
  87. };
  88. #ifndef HEADLESS
  89. void handleHostParameterDrag(const CardinalPluginContext* pcontext, uint index, bool started);
  90. #endif
  91. // --------------------------------------------------------------------------------------------------------------------