summaryrefslogtreecommitdiff
path: root/distrho/src/DistrhoUIAU.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'distrho/src/DistrhoUIAU.cpp')
-rw-r--r--distrho/src/DistrhoUIAU.cpp211
1 files changed, 211 insertions, 0 deletions
diff --git a/distrho/src/DistrhoUIAU.cpp b/distrho/src/DistrhoUIAU.cpp
new file mode 100644
index 00000000..dc5a61c7
--- /dev/null
+++ b/distrho/src/DistrhoUIAU.cpp
@@ -0,0 +1,211 @@
+/*
+ * DISTRHO Plugin Framework (DPF)
+ * Copyright (C) 2012-2019 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.
+ */
+
+#include "DistrhoUIInternal.hpp"
+
+#include "../extra/Sleep.hpp"
+
+START_NAMESPACE_DISTRHO
+
+//#if ! DISTRHO_PLUGIN_WANT_MIDI_INPUT
+static const sendNoteFunc sendNoteCallback = nullptr;
+//#endif
+
+// -----------------------------------------------------------------------
+
+class UIAu
+{
+public:
+ UIAu(const char* const uiTitle)
+ : fUI(this, 0, nullptr, setParameterCallback, setStateCallback, sendNoteCallback, setSizeCallback),
+ fHostClosed(false)
+ {
+ fUI.setWindowTitle(uiTitle);
+ }
+
+ ~UIAu()
+ {
+ }
+
+ void exec()
+ {
+ for (;;)
+ {
+ if (fHostClosed || ! fUI.idle())
+ break;
+
+ d_msleep(30);
+ }
+ }
+
+ // -------------------------------------------------------------------
+
+#if 0
+#if DISTRHO_PLUGIN_WANT_STATE
+ void auui_configure(const char* key, const char* value)
+ {
+ fUI.stateChanged(key, value);
+ }
+#endif
+#endif
+
+ void auui_control(ulong index, float value)
+ {
+ fUI.parameterChanged(index, value);
+ }
+
+#if 0
+#if DISTRHO_PLUGIN_WANT_PROGRAMS
+ void auui_program(ulong bank, ulong program)
+ {
+ fUI.programLoaded(bank * 128 + program);
+ }
+#endif
+#endif
+
+ void auui_samplerate(const double sampleRate)
+ {
+ fUI.setSampleRate(sampleRate, true);
+ }
+
+ void auui_show()
+ {
+ fUI.setWindowVisible(true);
+ }
+
+ void auui_hide()
+ {
+ fUI.setWindowVisible(false);
+ }
+
+ void auui_quit()
+ {
+ fHostClosed = true;
+ fUI.quit();
+ }
+
+ // -------------------------------------------------------------------
+
+protected:
+ void setParameterValue(const uint32_t rindex, const float value)
+ {
+ //FIXME fUI.setParameterValue(rindex, value);
+ }
+
+ void setState(const char* const key, const char* const value)
+ {
+ }
+
+#if 0
+#if DISTRHO_PLUGIN_WANT_MIDI_INPUT
+ void sendNote(const uint8_t channel, const uint8_t note, const uint8_t velocity)
+ {
+ if (fOscData.server == nullptr)
+ return;
+ if (channel > 0xF)
+ return;
+
+ uint8_t mdata[4] = {
+ 0,
+ static_cast<uint8_t>(channel + (velocity != 0 ? 0x90 : 0x80)),
+ note,
+ velocity
+ };
+ fOscData.send_midi(mdata);
+ }
+#endif
+#endif
+
+ void setSize(const uint width, const uint height)
+ {
+ fUI.setWindowSize(width, height);
+ }
+
+private:
+ UIExporter fUI;
+ bool fHostClosed;
+
+ // -------------------------------------------------------------------
+ // Callbacks
+
+ #define uiPtr ((UIAu*)ptr)
+
+ static void setParameterCallback(void* ptr, uint32_t rindex, float value)
+ {
+ uiPtr->setParameterValue(rindex, value);
+ }
+
+ static void setStateCallback(void* ptr, const char* key, const char* value)
+ {
+ uiPtr->setState(key, value);
+ }
+
+#if 0
+#if DISTRHO_PLUGIN_WANT_MIDI_INPUT
+ static void sendNoteCallback(void* ptr, uint8_t channel, uint8_t note, uint8_t velocity)
+ {
+ uiPtr->sendNote(channel, note, velocity);
+ }
+#endif
+#endif
+
+ static void setSizeCallback(void* ptr, uint width, uint height)
+ {
+ uiPtr->setSize(width, height);
+ }
+
+ #undef uiPtr
+};
+
+// -----------------------------------------------------------------------
+
+static const char* gUiTitle = nullptr;
+static UIAu* globalUI = nullptr;
+
+static void initUiIfNeeded()
+{
+ if (globalUI != nullptr)
+ return;
+
+ if (d_lastUiSampleRate == 0.0)
+ d_lastUiSampleRate = 44100.0;
+
+ globalUI = new UIAu(gUiTitle);
+}
+
+END_NAMESPACE_DISTRHO
+
+// -----------------------------------------------------------------------
+
+int main(int argc, char* argv[])
+{
+ USE_NAMESPACE_DISTRHO
+
+ // dummy test mode
+ if (argc == 1)
+ {
+ gUiTitle = "AU UI Test";
+
+ initUiIfNeeded();
+ globalUI->auui_show();
+ globalUI->exec();
+
+ delete globalUI;
+ globalUI = nullptr;
+
+ return 0;
+ }
+}