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.

109 lines
2.7KB

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