diff options
Diffstat (limited to 'libs/distrho/src/DistrhoUIInternal.hpp')
-rw-r--r-- | libs/distrho/src/DistrhoUIInternal.hpp | 393 |
1 files changed, 0 insertions, 393 deletions
diff --git a/libs/distrho/src/DistrhoUIInternal.hpp b/libs/distrho/src/DistrhoUIInternal.hpp deleted file mode 100644 index a07719c..0000000 --- a/libs/distrho/src/DistrhoUIInternal.hpp +++ /dev/null @@ -1,393 +0,0 @@ -/* - * DISTRHO Plugin Framework (DPF) - * Copyright (C) 2012-2014 Filipe Coelho <falktx@falktx.com> - * - * Permission to use, copy, modify, and/or distribute this software for any purpose with - * or without fee is hereby granted, provided that the above copyright notice and this - * permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD - * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER - * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN - * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef DISTRHO_UI_INTERNAL_HPP_INCLUDED -#define DISTRHO_UI_INTERNAL_HPP_INCLUDED - -#include "../DistrhoUI.hpp" -#include "../../dgl/App.hpp" -#include "../../dgl/Window.hpp" - -using DGL::App; -using DGL::IdleCallback; -using DGL::Window; - -START_NAMESPACE_DISTRHO - -// ----------------------------------------------------------------------- -// Static data, see DistrhoUI.cpp - -extern double d_lastUiSampleRate; -extern void* d_lastUiDspPtr; -extern Window* d_lastUiWindow; - -// ----------------------------------------------------------------------- -// UI callbacks - -typedef void (*editParamFunc) (void* ptr, uint32_t rindex, bool started); -typedef void (*setParamFunc) (void* ptr, uint32_t rindex, float value); -typedef void (*setStateFunc) (void* ptr, const char* key, const char* value); -typedef void (*sendNoteFunc) (void* ptr, uint8_t channel, uint8_t note, uint8_t velo); -typedef void (*setSizeFunc) (void* ptr, uint width, uint height); - -// ----------------------------------------------------------------------- -// UI private data - -struct UI::PrivateData { - // DSP - double sampleRate; - uint32_t parameterOffset; -#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS - void* dspPtr; -#endif - - // Callbacks - editParamFunc editParamCallbackFunc; - setParamFunc setParamCallbackFunc; - setStateFunc setStateCallbackFunc; - sendNoteFunc sendNoteCallbackFunc; - setSizeFunc setSizeCallbackFunc; - void* ptr; - - PrivateData() noexcept - : sampleRate(d_lastUiSampleRate), - parameterOffset(0), -#if DISTRHO_PLUGIN_WANT_DIRECT_ACCESS - dspPtr(d_lastUiDspPtr), -#endif - editParamCallbackFunc(nullptr), - setParamCallbackFunc(nullptr), - setStateCallbackFunc(nullptr), - sendNoteCallbackFunc(nullptr), - setSizeCallbackFunc(nullptr), - ptr(nullptr) - { - DISTRHO_SAFE_ASSERT(d_isNotZero(sampleRate)); - -#if defined(DISTRHO_PLUGIN_TARGET_DSSI) || defined(DISTRHO_PLUGIN_TARGET_LV2) - parameterOffset += DISTRHO_PLUGIN_NUM_INPUTS + DISTRHO_PLUGIN_NUM_OUTPUTS; -# if DISTRHO_PLUGIN_WANT_LATENCY - parameterOffset += 1; -# endif -#endif - -#ifdef DISTRHO_PLUGIN_TARGET_LV2 -# if (DISTRHO_PLUGIN_IS_SYNTH || DISTRHO_PLUGIN_WANT_TIMEPOS || DISTRHO_PLUGIN_WANT_STATE) - parameterOffset += 1; -# if DISTRHO_PLUGIN_WANT_STATE - parameterOffset += 1; -# endif -# endif -#endif - } - - void editParamCallback(const uint32_t rindex, const bool started) - { - if (editParamCallbackFunc != nullptr) - editParamCallbackFunc(ptr, rindex, started); - } - - void setParamCallback(const uint32_t rindex, const float value) - { - if (setParamCallbackFunc != nullptr) - setParamCallbackFunc(ptr, rindex, value); - } - - void setStateCallback(const char* const key, const char* const value) - { - if (setStateCallbackFunc != nullptr) - setStateCallbackFunc(ptr, key, value); - } - - void sendNoteCallback(const uint8_t channel, const uint8_t note, const uint8_t velocity) - { - if (sendNoteCallbackFunc != nullptr) - sendNoteCallbackFunc(ptr, channel, note, velocity); - } - - void setSizeCallback(const uint width, const uint height) - { - if (setSizeCallbackFunc != nullptr) - setSizeCallbackFunc(ptr, width, height); - } -}; - -// ----------------------------------------------------------------------- -// Plugin Window, needed to take care of resize properly - -static inline -UI* createUiWrapper(void* const dspPtr, Window* const window) -{ - d_lastUiDspPtr = dspPtr; - d_lastUiWindow = window; - UI* const ret = createUI(); - d_lastUiDspPtr = nullptr; - d_lastUiWindow = nullptr; - return ret; -} - -class UIExporterWindow : public Window -{ -public: - UIExporterWindow(App& app, const intptr_t winId, void* const dspPtr) - : Window(app, winId), - fUI(createUiWrapper(dspPtr, this)), - fIsReady(false) - { - DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); - - // set window size - setResizable(false); - setSize(fUI->getWidth(), fUI->getHeight()); - } - - ~UIExporterWindow() - { - delete fUI; - } - - UI* getUI() const noexcept - { - return fUI; - } - - bool isReady() const noexcept - { - return fIsReady; - } - -protected: - // custom window reshape - void onReshape(uint width, uint height) override - { - DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); - - fUI->d_uiReshape(width, height); - fIsReady = true; - } - - // custom file-browser selected - void fileBrowserSelected(const char* filename) override - { - DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); - - fUI->d_uiFileBrowserSelected(filename); - } - -private: - UI* const fUI; - bool fIsReady; -}; - -// ----------------------------------------------------------------------- -// UI exporter class - -class UIExporter -{ -public: - UIExporter(void* const ptr, const intptr_t winId, - const editParamFunc editParamCall, const setParamFunc setParamCall, const setStateFunc setStateCall, const sendNoteFunc sendNoteCall, const setSizeFunc setSizeCall, - void* const dspPtr = nullptr) - : glApp(), - glWindow(glApp, winId, dspPtr), - fChangingSize(false), - fUI(glWindow.getUI()), - fData((fUI != nullptr) ? fUI->pData : nullptr) - { - DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); - DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr,); - - fData->ptr = ptr; - fData->editParamCallbackFunc = editParamCall; - fData->setParamCallbackFunc = setParamCall; - fData->setStateCallbackFunc = setStateCall; - fData->sendNoteCallbackFunc = sendNoteCall; - fData->setSizeCallbackFunc = setSizeCall; - } - - // ------------------------------------------------------------------- - - uint getWidth() const noexcept - { - return glWindow.getWidth(); - } - - uint getHeight() const noexcept - { - return glWindow.getHeight(); - } - - bool isVisible() const noexcept - { - return glWindow.isVisible(); - } - - // ------------------------------------------------------------------- - - intptr_t getWindowId() const noexcept - { - return glWindow.getWindowId(); - } - - // ------------------------------------------------------------------- - - uint32_t getParameterOffset() const noexcept - { - DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr, 0); - - return fData->parameterOffset; - } - - // ------------------------------------------------------------------- - - void parameterChanged(const uint32_t index, const float value) - { - DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); - - fUI->d_parameterChanged(index, value); - } - -#if DISTRHO_PLUGIN_WANT_PROGRAMS - void programChanged(const uint32_t index) - { - DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); - - fUI->d_programChanged(index); - } -#endif - -#if DISTRHO_PLUGIN_WANT_STATE - void stateChanged(const char* const key, const char* const value) - { - DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); - DISTRHO_SAFE_ASSERT_RETURN(key != nullptr && key[0] != '\0',); - DISTRHO_SAFE_ASSERT_RETURN(value != nullptr,); - - fUI->d_stateChanged(key, value); - } -#endif - - // ------------------------------------------------------------------- - - void exec(IdleCallback* const cb) - { - DISTRHO_SAFE_ASSERT_RETURN(cb != nullptr,); - DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); - - glWindow.addIdleCallback(cb); - glWindow.setVisible(true); - glApp.exec(); - } - - void exec_idle() - { - if (glWindow.isReady()) - fUI->d_uiIdle(); - } - - bool idle() - { - DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr, false); - - glApp.idle(); - - if (glWindow.isReady()) - fUI->d_uiIdle(); - - return ! glApp.isQuiting(); - } - - void quit() - { - glWindow.close(); - glApp.quit(); - } - - // ------------------------------------------------------------------- - - void setWindowSize(const uint width, const uint height, const bool updateUI = false) - { - DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); - DISTRHO_SAFE_ASSERT_RETURN(! fChangingSize,); - - fChangingSize = true; - - if (updateUI) - fUI->setSize(width, height); - - glWindow.setSize(width, height); - - fChangingSize = false; - } - - void setWindowTitle(const char* const uiTitle) - { - glWindow.setTitle(uiTitle); - } - - void setWindowTransientWinId(const uintptr_t winId) - { - glWindow.setTransientWinId(winId); - } - - bool setWindowVisible(const bool yesNo) - { - glWindow.setVisible(yesNo); - - return ! glApp.isQuiting(); - } - - // ------------------------------------------------------------------- - - void setSampleRate(const double sampleRate, const bool doCallback = false) - { - DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr,); - DISTRHO_SAFE_ASSERT_RETURN(fUI != nullptr,); - DISTRHO_SAFE_ASSERT(sampleRate > 0.0); - - if (d_isEqual(fData->sampleRate, sampleRate)) - return; - - fData->sampleRate = sampleRate; - - if (doCallback) - fUI->d_sampleRateChanged(sampleRate); - } - -private: - // ------------------------------------------------------------------- - // DGL Application and Window for this widget - - App glApp; - UIExporterWindow glWindow; - - // prevent recursion - bool fChangingSize; - - // ------------------------------------------------------------------- - // Widget and DistrhoUI data - - UI* const fUI; - UI::PrivateData* const fData; - - DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(UIExporter) -}; - -// ----------------------------------------------------------------------- - -END_NAMESPACE_DISTRHO - -#endif // DISTRHO_UI_INTERNAL_HPP_INCLUDED |