1 /* 2 * DISTRHO Plugin Framework (DPF) 3 * Copyright (C) 2012-2020 Filipe Coelho <falktx@falktx.com> 4 * 5 * Permission to use, copy, modify, and/or distribute this software for any purpose with 6 * or without fee is hereby granted, provided that the above copyright notice and this 7 * permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD 10 * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN 11 * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 12 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 13 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17 #ifndef DISTRHO_UI_PRIVATE_DATA_HPP_INCLUDED 18 #define DISTRHO_UI_PRIVATE_DATA_HPP_INCLUDED 19 20 #include "../DistrhoUI.hpp" 21 22 START_NAMESPACE_DISTRHO 23 24 // ----------------------------------------------------------------------- 25 // Static data, see DistrhoUI.cpp 26 27 extern double d_lastUiSampleRate; 28 extern void* d_lastUiDspPtr; 29 30 // ----------------------------------------------------------------------- 31 // UI callbacks 32 33 typedef void (*editParamFunc) (void* ptr, uint32_t rindex, bool started); 34 typedef void (*setParamFunc) (void* ptr, uint32_t rindex, float value); 35 typedef void (*setStateFunc) (void* ptr, const char* key, const char* value); 36 typedef void (*sendNoteFunc) (void* ptr, uint8_t channel, uint8_t note, uint8_t velo); 37 typedef void (*setSizeFunc) (void* ptr, uint width, uint height); 38 typedef bool (*fileRequestFunc) (void* ptr, const char* key); 39 40 // ----------------------------------------------------------------------- 41 // UI private data 42 43 struct UI::PrivateData { 44 // DSP 45 double sampleRate; 46 uint32_t parameterOffset; 47 #if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS 48 void* dspPtr; 49 #endif 50 51 // UI 52 bool automaticallyScale; 53 bool resizeInProgress; 54 uint minWidth; 55 uint minHeight; 56 uint bgColor; 57 uint fgColor; 58 59 // Callbacks 60 void* callbacksPtr; 61 editParamFunc editParamCallbackFunc; 62 setParamFunc setParamCallbackFunc; 63 setStateFunc setStateCallbackFunc; 64 sendNoteFunc sendNoteCallbackFunc; 65 setSizeFunc setSizeCallbackFunc; 66 fileRequestFunc fileRequestCallbackFunc; 67 PrivateDataUI::PrivateData68 PrivateData() noexcept 69 : sampleRate(d_lastUiSampleRate), 70 parameterOffset(0), 71 #if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS 72 dspPtr(d_lastUiDspPtr), 73 #endif 74 automaticallyScale(false), 75 resizeInProgress(false), 76 minWidth(0), 77 minHeight(0), 78 bgColor(0), 79 fgColor(0), 80 callbacksPtr(nullptr), 81 editParamCallbackFunc(nullptr), 82 setParamCallbackFunc(nullptr), 83 setStateCallbackFunc(nullptr), 84 sendNoteCallbackFunc(nullptr), 85 setSizeCallbackFunc(nullptr), 86 fileRequestCallbackFunc(nullptr) 87 { 88 DISTRHO_SAFE_ASSERT(d_isNotZero(sampleRate)); 89 90 #if defined(DISTRHO_PLUGIN_TARGET_DSSI) || defined(DISTRHO_PLUGIN_TARGET_LV2) 91 parameterOffset += DISTRHO_PLUGIN_NUM_INPUTS + DISTRHO_PLUGIN_NUM_OUTPUTS; 92 # if DISTRHO_PLUGIN_WANT_LATENCY 93 parameterOffset += 1; 94 # endif 95 #endif 96 97 #ifdef DISTRHO_PLUGIN_TARGET_LV2 98 # if (DISTRHO_PLUGIN_WANT_MIDI_INPUT || DISTRHO_PLUGIN_WANT_TIMEPOS || DISTRHO_PLUGIN_WANT_STATE) 99 parameterOffset += 1; 100 # if DISTRHO_PLUGIN_WANT_STATE 101 parameterOffset += 1; 102 # endif 103 # endif 104 #endif 105 } 106 editParamCallbackUI::PrivateData107 void editParamCallback(const uint32_t rindex, const bool started) 108 { 109 if (editParamCallbackFunc != nullptr) 110 editParamCallbackFunc(callbacksPtr, rindex, started); 111 } 112 setParamCallbackUI::PrivateData113 void setParamCallback(const uint32_t rindex, const float value) 114 { 115 if (setParamCallbackFunc != nullptr) 116 setParamCallbackFunc(callbacksPtr, rindex, value); 117 } 118 setStateCallbackUI::PrivateData119 void setStateCallback(const char* const key, const char* const value) 120 { 121 if (setStateCallbackFunc != nullptr) 122 setStateCallbackFunc(callbacksPtr, key, value); 123 } 124 sendNoteCallbackUI::PrivateData125 void sendNoteCallback(const uint8_t channel, const uint8_t note, const uint8_t velocity) 126 { 127 if (sendNoteCallbackFunc != nullptr) 128 sendNoteCallbackFunc(callbacksPtr, channel, note, velocity); 129 } 130 setSizeCallbackUI::PrivateData131 void setSizeCallback(const uint width, const uint height) 132 { 133 if (setSizeCallbackFunc != nullptr) 134 setSizeCallbackFunc(callbacksPtr, width, height); 135 } 136 fileRequestCallbackUI::PrivateData137 bool fileRequestCallback(const char* key) 138 { 139 if (fileRequestCallbackFunc != nullptr) 140 return fileRequestCallbackFunc(callbacksPtr, key); 141 142 // TODO use old style DPF dialog here 143 144 return false; 145 } 146 }; 147 148 // ----------------------------------------------------------------------- 149 150 END_NAMESPACE_DISTRHO 151 152 #endif // DISTRHO_UI_PRIVATE_DATA_HPP_INCLUDED 153