Browse Source

Implement custom plugin ui title on bridges

Fixes #1219

Signed-off-by: falkTX <falktx@falktx.com>
tags/v2.3.0-RC1
falkTX 4 years ago
parent
commit
838a00566f
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
5 changed files with 64 additions and 2 deletions
  1. +12
    -0
      source/backend/engine/CarlaEngineBridge.cpp
  2. +45
    -0
      source/backend/plugin/CarlaPluginBridge.cpp
  3. +1
    -0
      source/libjack/libjack.cpp
  4. +4
    -2
      source/utils/CarlaBridgeDefines.hpp
  5. +2
    -0
      source/utils/CarlaBridgeUtils.hpp

+ 12
- 0
source/backend/engine/CarlaEngineBridge.cpp View File

@@ -945,6 +945,18 @@ public:
break;
}

case kPluginBridgeNonRtClientSetWindowTitle: {
const uint32_t size = fShmNonRtClientControl.readUInt();
CARLA_SAFE_ASSERT_BREAK(size > 0);

char title[size+1];
carla_zeroChars(title, size+1);
fShmNonRtClientControl.readCustomData(title, size);

plugin->setCustomUITitle(title);
break;
}

case kPluginBridgeNonRtClientGetParameterText: {
const int32_t index = fShmNonRtClientControl.readInt();



+ 45
- 0
source/backend/plugin/CarlaPluginBridge.cpp View File

@@ -708,6 +708,14 @@ public:
CarlaPlugin::setCtrlChannel(channel, sendOsc, sendCallback);
}

void setName(const char* const newName) override
{
CarlaPlugin::setName(newName);

if (pData->uiTitle.isEmpty() && fBridgeVersion >= 8)
_setUiTitleFromName();
}

// -------------------------------------------------------------------
// Set data (plugin-specific stuff)

@@ -955,8 +963,30 @@ public:
// -------------------------------------------------------------------
// Set ui stuff

void setCustomUITitle(const char* const title) noexcept override
{
carla_debug("CarlaPluginBridge::setCustomUITitle(%s)", title);

if (fBridgeVersion >= 8)
{
const uint32_t size = static_cast<uint32_t>(std::strlen(title));

const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex);

fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetWindowTitle);
fShmNonRtClientControl.writeUInt(size);
fShmNonRtClientControl.writeCustomData(title, size);
fShmNonRtClientControl.commitWrite();
}

CarlaPlugin::setCustomUITitle(title);
}

void showCustomUI(const bool yesNo) override
{
if (yesNo && pData->uiTitle.isEmpty() && fBridgeVersion >= 8)
_setUiTitleFromName();

{
const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex);

@@ -3090,6 +3120,21 @@ private:
return true;
}

void _setUiTitleFromName()
{
CarlaString uiName(pData->name);
uiName += " (GUI)";

const uint32_t size = static_cast<uint32_t>(uiName.length());

const CarlaMutexLocker _cml(fShmNonRtClientControl.mutex);

fShmNonRtClientControl.writeOpcode(kPluginBridgeNonRtClientSetWindowTitle);
fShmNonRtClientControl.writeUInt(size);
fShmNonRtClientControl.writeCustomData(uiName.buffer(), size);
fShmNonRtClientControl.commitWrite();
}

CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginBridge)
};



+ 1
- 0
source/libjack/libjack.cpp View File

@@ -1194,6 +1194,7 @@ bool CarlaJackAppClient::handleNonRtData()
case kPluginBridgeNonRtClientSetMidiProgram:
case kPluginBridgeNonRtClientSetCustomData:
case kPluginBridgeNonRtClientSetChunkDataFile:
case kPluginBridgeNonRtClientSetWindowTitle:
break;

case kPluginBridgeNonRtClientSetOption:


+ 4
- 2
source/utils/CarlaBridgeDefines.hpp View File

@@ -1,6 +1,6 @@
/*
* Carla Bridge definitions
* Copyright (C) 2013-2019 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2013-2020 Filipe Coelho <falktx@falktx.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
@@ -24,7 +24,7 @@
#define CARLA_PLUGIN_BRIDGE_API_VERSION_MINIMUM 6

// current API version, bumped when something is added
#define CARLA_PLUGIN_BRIDGE_API_VERSION_CURRENT 7
#define CARLA_PLUGIN_BRIDGE_API_VERSION_CURRENT 8

// -------------------------------------------------------------------------------------------------------------------

@@ -77,6 +77,8 @@ enum PluginBridgeNonRtClientOpcode {
// stuff added in API 7
kPluginBridgeNonRtClientSetParameterMappedRange, // uint, float, float
kPluginBridgeNonRtClientSetOptions, // uint
// stuff added in API 8
kPluginBridgeNonRtClientSetWindowTitle, // uint/size, str[]
};

// Client sends these to server during non-RT


+ 2
- 0
source/utils/CarlaBridgeUtils.hpp View File

@@ -125,6 +125,8 @@ const char* PluginBridgeNonRtClientOpcode2str(const PluginBridgeNonRtClientOpcod
return "kPluginBridgeNonRtClientSetParameterMappedRange";
case kPluginBridgeNonRtClientSetOptions:
return "kPluginBridgeNonRtClientSetOptions";
case kPluginBridgeNonRtClientSetWindowTitle:
return "kPluginBridgeNonRtClientSetWindowTitle";
}

carla_stderr("CarlaBackend::PluginBridgeNonRtClientOpcode2str(%i) - invalid opcode", opcode);


Loading…
Cancel
Save