From 0b25db0937b1546da798868663373cfae815893e Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 9 Dec 2021 21:09:48 +0000 Subject: [PATCH] Implement clipboard; Cleanup Closes #59 --- dpf | 2 +- plugins/Cardinal/src/Carla.cpp | 2 +- plugins/Cardinal/src/HostCV.cpp | 6 ++--- plugins/Cardinal/src/HostParameters.cpp | 10 ++++---- plugins/Cardinal/src/HostTime.cpp | 4 ++-- plugins/Cardinal/src/Ildaeil.cpp | 2 +- src/CardinalUI.cpp | 32 +++++++++++++++++++++++-- 7 files changed, 43 insertions(+), 15 deletions(-) diff --git a/dpf b/dpf index c6c6900..83e8afd 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit c6c6900b8743550da7eb4f0f61a28ee85ac80966 +Subproject commit 83e8afdb77695686a6b61dda2a5013d991232ddb diff --git a/plugins/Cardinal/src/Carla.cpp b/plugins/Cardinal/src/Carla.cpp index b53ffa8..33b034b 100644 --- a/plugins/Cardinal/src/Carla.cpp +++ b/plugins/Cardinal/src/Carla.cpp @@ -97,7 +97,7 @@ struct CarlaModule : Module { std::string patchStorage; CarlaModule() - : pcontext(reinterpret_cast(APP)) + : pcontext(static_cast(APP)) { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); configParam(BIPOLAR_INPUTS, 0.f, 1.f, 1.f, "Bipolar CV Inputs")->randomizeEnabled = false; diff --git a/plugins/Cardinal/src/HostCV.cpp b/plugins/Cardinal/src/HostCV.cpp index b69192b..1d6d473 100644 --- a/plugins/Cardinal/src/HostCV.cpp +++ b/plugins/Cardinal/src/HostCV.cpp @@ -47,7 +47,7 @@ struct HostCV : Module { configParam(BIPOLAR_OUTPUTS_1_5, 0.f, 1.f, 0.f, "Bipolar Outputs 1-5")->randomizeEnabled = false; configParam(BIPOLAR_OUTPUTS_6_10, 0.f, 1.f, 0.f, "Bipolar Outputs 6-10")->randomizeEnabled = false; - CardinalPluginContext* const pcontext = reinterpret_cast(APP); + CardinalPluginContext* const pcontext = static_cast(APP); if (pcontext == nullptr) throw rack::Exception("Plugin context is null."); @@ -60,7 +60,7 @@ struct HostCV : Module { ~HostCV() override { - CardinalPluginContext* const pcontext = reinterpret_cast(APP); + CardinalPluginContext* const pcontext = static_cast(APP); DISTRHO_SAFE_ASSERT_RETURN(pcontext != nullptr,); pcontext->loadedHostCV = false; @@ -68,7 +68,7 @@ struct HostCV : Module { void process(const ProcessArgs&) override { - if (CardinalPluginContext* const pcontext = reinterpret_cast(APP)) + if (CardinalPluginContext* const pcontext = static_cast(APP)) { const float** dataIns = pcontext->dataIns; float** dataOuts = pcontext->dataOuts; diff --git a/plugins/Cardinal/src/HostParameters.cpp b/plugins/Cardinal/src/HostParameters.cpp index 5f26471..37a2c1f 100644 --- a/plugins/Cardinal/src/HostParameters.cpp +++ b/plugins/Cardinal/src/HostParameters.cpp @@ -42,7 +42,7 @@ struct HostParameters : Module { { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); - CardinalPluginContext* const pcontext = reinterpret_cast(APP); + CardinalPluginContext* const pcontext = static_cast(APP); if (pcontext == nullptr) throw rack::Exception("Plugin context is null."); @@ -57,7 +57,7 @@ struct HostParameters : Module { void process(const ProcessArgs&) override { - if (CardinalPluginContext* const pcontext = reinterpret_cast(APP)) + if (CardinalPluginContext* const pcontext = static_cast(APP)) { for (uint32_t i=0; iparameters[i])); @@ -66,7 +66,7 @@ struct HostParameters : Module { void onSampleRateChange(const SampleRateChangeEvent& e) override { - if (CardinalPluginContext* const pcontext = reinterpret_cast(APP)) + if (CardinalPluginContext* const pcontext = static_cast(APP)) { const double fall = 1.0 / (double(pcontext->bufferSize) / e.sampleRate); @@ -84,12 +84,12 @@ struct HostParameters : Module { #ifndef HEADLESS struct CardinalParameterPJ301MPort : PJ301MPort { void onDragStart(const DragStartEvent& e) override { - if (CardinalPluginContext* const pcontext = reinterpret_cast(APP)) + if (CardinalPluginContext* const pcontext = static_cast(APP)) handleHostParameterDrag(pcontext, portId, true); PJ301MPort::onDragStart(e); } void onDragEnd(const DragEndEvent& e) override { - if (CardinalPluginContext* const pcontext = reinterpret_cast(APP)) + if (CardinalPluginContext* const pcontext = static_cast(APP)) handleHostParameterDrag(pcontext, portId, false); PJ301MPort::onDragEnd(e); } diff --git a/plugins/Cardinal/src/HostTime.cpp b/plugins/Cardinal/src/HostTime.cpp index 87caa5b..bb2a7a2 100644 --- a/plugins/Cardinal/src/HostTime.cpp +++ b/plugins/Cardinal/src/HostTime.cpp @@ -42,7 +42,7 @@ struct HostTime : Module { { config(NUM_PARAMS, NUM_INPUTS, kHostTimeCount, kHostTimeCount); - CardinalPluginContext* const pcontext = reinterpret_cast(APP); + CardinalPluginContext* const pcontext = static_cast(APP); if (pcontext == nullptr) throw rack::Exception("Plugin context is null."); @@ -50,7 +50,7 @@ struct HostTime : Module { void process(const ProcessArgs& args) override { - if (CardinalPluginContext* const pcontext = reinterpret_cast(APP)) + if (CardinalPluginContext* const pcontext = static_cast(APP)) { const bool playing = pcontext->playing; const bool playingWithBBT = playing && pcontext->bbtValid; diff --git a/plugins/Cardinal/src/Ildaeil.cpp b/plugins/Cardinal/src/Ildaeil.cpp index 9bf163c..f9074b8 100644 --- a/plugins/Cardinal/src/Ildaeil.cpp +++ b/plugins/Cardinal/src/Ildaeil.cpp @@ -270,7 +270,7 @@ struct IldaeilModule : Module { IldaeilMidiGenerator midiGenerator; IldaeilModule() - : pcontext(reinterpret_cast(APP)) + : pcontext(static_cast(APP)) { config(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS); for (uint i=0; i<2; ++i) diff --git a/src/CardinalUI.cpp b/src/CardinalUI.cpp index f0d1200..236f12d 100644 --- a/src/CardinalUI.cpp +++ b/src/CardinalUI.cpp @@ -37,10 +37,38 @@ #include "WindowParameters.hpp" #include "ResizeHandle.hpp" -GLFWAPI const char* glfwGetClipboardString(GLFWwindow*) { return nullptr; } -GLFWAPI void glfwSetClipboardString(GLFWwindow*, const char*) {} GLFWAPI int glfwGetKeyScancode(int) { return 0; } +GLFWAPI const char* glfwGetClipboardString(GLFWwindow*) +{ + CardinalPluginContext* const context = static_cast(APP); + DISTRHO_SAFE_ASSERT_RETURN(context != nullptr, nullptr); + DISTRHO_SAFE_ASSERT_RETURN(context->ui != nullptr, nullptr); + + const char* mimeType = nullptr; + size_t dataSize = 0; + + if (const void* const clipboard = context->ui->getClipboard(mimeType, dataSize)) + { + if (mimeType == nullptr || std::strcmp(mimeType, "text/plain") != 0) + return nullptr; + return static_cast(clipboard); + } + + return nullptr; +} + +GLFWAPI void glfwSetClipboardString(GLFWwindow*, const char* const text) +{ + DISTRHO_SAFE_ASSERT_RETURN(text != nullptr,); + + CardinalPluginContext* const context = static_cast(APP); + DISTRHO_SAFE_ASSERT_RETURN(context != nullptr,); + DISTRHO_SAFE_ASSERT_RETURN(context->ui != nullptr,); + + context->ui->setClipboard(nullptr, text, std::strlen(text)+1); +} + GLFWAPI double glfwGetTime(void) { CardinalPluginContext* const context = static_cast(APP);