commit dc85082c5cc303902311124e836b2a74a1f9ac2d
parent 2f86f38d103213b12e579866c25b487e872de12f
Author: Alexandre BIQUE <bique.alexandre@gmail.com>
Date: Sat, 22 May 2021 12:26:00 +0200
More work
Diffstat:
2 files changed, 28 insertions(+), 9 deletions(-)
diff --git a/examples/host/plugin-host.cc b/examples/host/plugin-host.cc
@@ -27,15 +27,15 @@ PluginHost::PluginHost(Engine &engine) : QObject(&engine), engine_(engine) {
host_.host_data = this;
host_.clap_version = CLAP_VERSION;
- host_.extension = PluginHost::clapHostExtension;
+ host_.extension = PluginHost::clapExtension;
host_.name = "Clap Test Host";
host_.version = "0.0.1";
host_.vendor = "clap";
host_.url = "https://github.com/free-audio/clap";
- hostLog_.log = PluginHost::clapHostLog;
+ hostLog_.log = PluginHost::clapLog;
- hostGui_.resize = PluginHost::clapHostGuiResize;
+ hostGui_.resize = PluginHost::clapGuiResize;
hostThreadCheck_.is_main_thread = PluginHost::clapIsMainThread;
hostThreadCheck_.is_audio_thread = PluginHost::clapIsAudioThread;
@@ -56,6 +56,8 @@ PluginHost::PluginHost(Engine &engine) : QObject(&engine), engine_(engine) {
hostQuickControls_.pages_changed = PluginHost::clapQuickControlsPagesChanged;
hostQuickControls_.selected_page_changed = PluginHost::clapQuickControlsSelectedPageChanged;
+ hostState_.set_dirty = PluginHost::clapStateSetDirty;
+
initThreadPool();
}
@@ -256,7 +258,7 @@ void PluginHost::setParentWindow(WId parentWindow) {
Application::instance().mainWindow()->resizePluginView(width, height);
}
-void PluginHost::clapHostLog(clap_host *host, clap_log_severity severity, const char *msg) {
+void PluginHost::clapLog(clap_host *host, clap_log_severity severity, const char *msg) {
switch (severity) {
case CLAP_LOG_DEBUG:
qDebug() << msg;
@@ -284,7 +286,7 @@ void PluginHost::initPluginExtension(const T *&ext, const char *id) {
ext = static_cast<const T *>(plugin_->extension(plugin_, id));
}
-const void *PluginHost::clapHostExtension(clap_host *host, const char *extension) {
+const void *PluginHost::clapExtension(clap_host *host, const char *extension) {
checkForMainThread();
PluginHost *h = static_cast<PluginHost *>(host->host_data);
@@ -304,6 +306,8 @@ const void *PluginHost::clapHostExtension(clap_host *host, const char *extension
return &h->hostParams_;
if (!strcmp(extension, CLAP_EXT_QUICK_CONTROLS))
return &h->hostQuickControls_;
+ if (!strcmp(extension, CLAP_EXT_STATE))
+ return &h->hostState_;
return nullptr;
}
@@ -494,7 +498,7 @@ void PluginHost::eventLoopSetFdNotifierFlags(clap_fd fd, uint32_t flags) {
it->second->err->setEnabled(false);
}
-bool PluginHost::clapHostGuiResize(clap_host *host, int32_t width, int32_t height) {
+bool PluginHost::clapGuiResize(clap_host *host, int32_t width, int32_t height) {
checkForMainThread();
PluginHost *h = static_cast<PluginHost *>(host->host_data);
@@ -1035,6 +1039,18 @@ bool PluginHost::loadNativePluginPreset(const std::string &path) {
return pluginPresetLoad_->load_from_file(plugin_, path.c_str());
}
+void PluginHost::clapStateSetDirty(clap_host *host) {
+ checkForMainThread();
+
+ auto h = fromHost(host);
+
+ if (!h->pluginState_ || !h->pluginState_->save || !h->pluginState_->restore)
+ throw std::logic_error("Plugin called clap_host_state.set_dirty() but the host does not "
+ "provide a complete clap_plugin_state interface.");
+
+ // TODO set dirty
+}
+
void PluginHost::setPluginState(PluginState state) {
switch (state) {
case Inactive:
diff --git a/examples/host/plugin-host.hh b/examples/host/plugin-host.hh
@@ -77,7 +77,7 @@ private:
void initPluginExtension(const T *&ext, const char *id);
/* clap host callbacks */
- static void clapHostLog(clap_host *host, clap_log_severity severity, const char *msg);
+ static void clapLog(clap_host *host, clap_log_severity severity, const char *msg);
static bool clapIsMainThread(clap_host *host);
static bool clapIsAudioThread(clap_host *host);
@@ -114,10 +114,12 @@ private:
static bool clapThreadPoolRequestExec(clap_host *host, uint32_t num_tasks);
- static const void *clapHostExtension(clap_host *host, const char *extension);
+ static const void *clapExtension(clap_host *host, const char *extension);
/* clap host gui callbacks */
- static bool clapHostGuiResize(clap_host *host, int32_t width, int32_t height);
+ static bool clapGuiResize(clap_host *host, int32_t width, int32_t height);
+
+ static void clapStateSetDirty(clap_host *host);
private:
Engine &engine_;
@@ -133,6 +135,7 @@ private:
clap_host_event_loop hostEventLoop_;
clap_host_thread_check hostThreadCheck_;
clap_host_thread_pool hostThreadPool_;
+ clap_host_state hostState_;
const struct clap_plugin_entry * pluginEntry_ = nullptr;
clap_plugin * plugin_ = nullptr;