clap

CLAP Audio Plugin API
Log | Files | Refs | README | LICENSE

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:
Mexamples/glue/clap-plugin.cc | 44++++++++++++++++++++++++++++++++++++++++++++
Mexamples/glue/clap-plugin.hh | 25+++++++++++++++++++++++++
Minclude/clap/ext/draft/quick-controls.h | 9++++-----
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);