commit 6a1a5aed986cdf1f7d6883cb3863ebd902612216
parent 891663cdb64275089a450a38a34ba17b968584fb
Author: Alexandre BIQUE <bique.alexandre@gmail.com>
Date: Tue, 8 Jun 2021 00:20:51 +0200
Glue for quick controls
Diffstat:
3 files changed, 73 insertions(+), 5 deletions(-)
diff --git a/examples/glue/clap-plugin.cc b/examples/glue/clap-plugin.cc
@@ -175,6 +175,8 @@ namespace clap {
return &pluginAudioPorts_;
if (!strcmp(id, CLAP_EXT_PARAMS) && self.implementsParams())
return &pluginParams_;
+ if (!strcmp(id, CLAP_EXT_QUICK_CONTROLS) && self.implementQuickControls())
+ return &pluginQuickControls_;
if (!strcmp(id, CLAP_EXT_NOTE_NAME) && self.implementsNoteName())
return &pluginNoteName_;
if (!strcmp(id, CLAP_EXT_THREAD_POOL) && self.implementsThreadPool())
@@ -526,6 +528,48 @@ namespace clap {
return false;
}
+ //----------------------------//
+ // clap_plugin_quick_controls //
+ //----------------------------//
+ uint32_t Plugin::clapQuickControlsPageCount(const clap_plugin *plugin) noexcept {
+ auto &self = from(plugin);
+ self.ensureMainThread("clap_plugin_quick_controls.page_count");
+
+ return self.quickControlsPageCount();
+ }
+
+ bool Plugin::clapQuickControlsPageInfo(const clap_plugin *plugin,
+ uint32_t page_index,
+ clap_quick_controls_page *page) noexcept {
+ auto &self = from(plugin);
+ self.ensureMainThread("clap_plugin_quick_controls.page_info");
+
+ uint32_t count = clapQuickControlsPageCount(plugin);
+ if (page_index >= count) {
+ std::ostringstream msg;
+ msg << "Host called clap_plugin_quick_controls.page_info() with an index out of bounds: "
+ << page_index << " >= " << count;
+ self.hostMisbehaving(msg.str());
+ return false;
+ }
+
+ return self.quickControlsPageInfo(page_index, page);
+ }
+
+ void Plugin::clapQuickControlsSelectPage(const clap_plugin *plugin, clap_id page_id) noexcept {
+ auto &self = from(plugin);
+ self.ensureMainThread("clap_plugin_quick_controls.select_page");
+
+ return self.quickControlsSelectPage(page_id);
+ }
+
+ clap_id Plugin::clapQuickControlsSelectedPage(const clap_plugin *plugin) noexcept {
+ auto &self = from(plugin);
+ self.ensureMainThread("clap_plugin_quick_controls.selected_page");
+
+ return self.quickControlsSelectedPage();
+ }
+
//-----------------------//
// clap_plugin_note_name //
//-----------------------//
diff --git a/examples/glue/clap-plugin.hh b/examples/glue/clap-plugin.hh
@@ -130,6 +130,16 @@ namespace clap {
}
virtual bool isValidParamId(clap_id paramId) const noexcept;
+ //----------------------------//
+ // clap_plugin_quick_controls //
+ //----------------------------//
+ virtual bool implementQuickControls() const noexcept { return false; }
+ virtual uint32_t quickControlsPageCount() noexcept;
+ virtual bool quickControlsPageInfo(uint32_t pageIndex,
+ clap_quick_controls_page *page) noexcept;
+ virtual void quickControlsSelectPage(clap_id pageId) noexcept;
+ virtual clap_id quickControlsSelectedPage() noexcept;
+
//-----------------------//
// clap_plugin_note_name //
//-----------------------//
@@ -316,6 +326,14 @@ namespace clap {
const char *display,
clap_param_value *value) noexcept;
+ // clap_plugin_quick_controls
+ static uint32_t clapQuickControlsPageCount(const clap_plugin *plugin) noexcept;
+ static bool clapQuickControlsPageInfo(const clap_plugin *plugin,
+ uint32_t page_index,
+ clap_quick_controls_page *page) noexcept;
+ static void clapQuickControlsSelectPage(const clap_plugin *plugin, clap_id page_id) noexcept;
+ static clap_id clapQuickControlsSelectedPage(const clap_plugin *plugin) noexcept;
+
// clap_plugin_note_name
static uint32_t clapNoteNameCount(const clap_plugin *plugin) noexcept;
static bool clapNoteNameGet(const clap_plugin *plugin,
@@ -388,6 +406,13 @@ namespace clap {
clapParamsTextToValue,
};
+ static const constexpr clap_plugin_quick_controls pluginQuickControls_ = {
+ clapQuickControlsPageCount,
+ clapQuickControlsPageInfo,
+ clapQuickControlsSelectPage,
+ clapQuickControlsSelectedPage,
+ };
+
static const constexpr clap_plugin_latency pluginLatency_ = {
clapLatencyGet,
};
diff --git a/include/clap/ext/draft/quick-controls.h b/include/clap/ext/draft/quick-controls.h
@@ -8,9 +8,7 @@ extern "C" {
#define CLAP_EXT_QUICK_CONTROLS "clap/draft/quick-controls"
-enum {
- CLAP_QUICK_CONTROLS_COUNT = 8
-};
+enum { CLAP_QUICK_CONTROLS_COUNT = 8 };
typedef struct clap_quick_controls_page {
clap_id id;
@@ -20,10 +18,11 @@ typedef struct clap_quick_controls_page {
} clap_quick_controls_page;
typedef struct clap_plugin_quick_controls {
- int32_t (*page_count)(const clap_plugin *plugin);
+ // [main-thread]
+ uint32_t (*page_count)(const clap_plugin *plugin);
// [main-thread]
- bool (*page_info)(const clap_plugin *plugin, int32_t page_index, clap_quick_controls_page *page);
+ bool (*page_info)(const clap_plugin *plugin, uint32_t page_index, clap_quick_controls_page *page);
// [main-thread]
void (*select_page)(const clap_plugin *plugin, clap_id page_id);