From 0b19cb0c6a0f89a6aa05a8f0294ba548b3ffddff Mon Sep 17 00:00:00 2001 From: Shinya Kitaoka Date: Thu, 24 Mar 2016 16:08:18 +0900 Subject: [PATCH 1/2] move params_ from PluginInformation to RasterFxPluginHost --- toonz/sources/toonzqt/pluginhost.cpp | 25 +++++++------------------ toonz/sources/toonzqt/pluginhost.h | 2 +- 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/toonz/sources/toonzqt/pluginhost.cpp b/toonz/sources/toonzqt/pluginhost.cpp index efbd37b9..4e369c3b 100644 --- a/toonz/sources/toonzqt/pluginhost.cpp +++ b/toonz/sources/toonzqt/pluginhost.cpp @@ -445,10 +445,10 @@ TFx *RasterFxPluginHost::clone(bool recursive) const } } - printf("recursive:%d params:%d\n", recursive, pi_->params_.size()); + printf("recursive:%d params:%d\n", recursive, params_.size()); // clone params before TFx::clone(). /* ui_pages_, param_views_ は pi に移ったが createParam の呼び出しだけはしておかないと Fx Settings 構築時に assert failed になる */ - for (auto const ¶m : pi_->params_) { + for (auto const ¶m : params_) { /* 古い createParam() は desc をとらず、コンストラクト時にデフォルト値を持つタイプの T*Param を再作成できない */ plugin->createParam(param->desc(), true); } @@ -630,28 +630,17 @@ Param *RasterFxPluginHost::createParam(const toonz_param_desc_t *desc, bool from /* pi は永続性があるので clone から呼ばれた場合は書き換えない */ if (!fromclone) { // add to a map - Param *param = nullptr; - for (auto const &p : pi_->params_) { - if (p->name() == desc->key) { - param = p; - break; - } - } - if (!param) { - pi_->params_.push_back(nullptr); - pi_->params_.back() = new Param(this, desc->key, toonz_param_type_enum(desc->traits_tag), desc); - param = pi_->params_.back(); - } - return param; + params_.push_back(std::make_shared(this, desc->key, toonz_param_type_enum(desc->traits_tag), desc)); + return params_.back().get(); } return nullptr; } Param *RasterFxPluginHost::getParam(const char *name) const { - for (auto ¶m : pi_->params_) { + for (auto ¶m : params_) { if (param->name() == name) { - return param; + return param.get(); } } return nullptr; @@ -795,7 +784,7 @@ bool RasterFxPluginHost::setParamStructure(int n, toonz_param_page_t *p, int &er else { if (!validateKeyName(desc->key)) err |= TOONZ_PARAM_ERROR_KEY_NAME; - for (auto it : pi_->params_) { + for (auto it : params_) { if (it->name() == desc->key) { err |= TOONZ_PARAM_ERROR_KEY_DUP; break; diff --git a/toonz/sources/toonzqt/pluginhost.h b/toonz/sources/toonzqt/pluginhost.h index c22d599d..fd2fb363 100644 --- a/toonz/sources/toonzqt/pluginhost.h +++ b/toonz/sources/toonzqt/pluginhost.h @@ -89,7 +89,6 @@ public: toonz_param_page_t *param_pages_; std::vector ui_pages_; - std::vector params_; std::vector param_views_; std::map port_mapper_; @@ -146,6 +145,7 @@ class RasterFxPluginHost : public TZeraryFx, public TPluginInterface PluginInformation *pi_; std::vector> inputs_; + std::vector> params_; void *user_data_; static bool validateKeyName(const char *name); From f91c5a5f05e85294a34b2e6db7a60a73defef581 Mon Sep 17 00:00:00 2001 From: Shinya Kitaoka Date: Thu, 24 Mar 2016 16:28:15 +0900 Subject: [PATCH 2/2] remove cloning flag --- toonz/sources/toonzqt/pluginhost.cpp | 17 ++++++----------- toonz/sources/toonzqt/pluginhost.h | 4 ++-- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/toonz/sources/toonzqt/pluginhost.cpp b/toonz/sources/toonzqt/pluginhost.cpp index 4e369c3b..e4d664ce 100644 --- a/toonz/sources/toonzqt/pluginhost.cpp +++ b/toonz/sources/toonzqt/pluginhost.cpp @@ -450,7 +450,7 @@ TFx *RasterFxPluginHost::clone(bool recursive) const /* ui_pages_, param_views_ は pi に移ったが createParam の呼び出しだけはしておかないと Fx Settings 構築時に assert failed になる */ for (auto const ¶m : params_) { /* 古い createParam() は desc をとらず、コンストラクト時にデフォルト値を持つタイプの T*Param を再作成できない */ - plugin->createParam(param->desc(), true); + plugin->createParam(param->desc()); } return TFx::clone(plugin, recursive); @@ -606,17 +606,17 @@ UIPage *RasterFxPluginHost::createUIPage(const char *name) } // deprecated. for migration. -Param *RasterFxPluginHost::createParam(const char *name, toonz_param_type_enum e, bool fromclone) +Param *RasterFxPluginHost::createParam(const char *name, toonz_param_type_enum e) { toonz_param_desc_t *desc = new toonz_param_desc_t; memset(desc, 0, sizeof(toonz_param_desc_t)); desc->base.ver = {1, 0}; desc->key = name; desc->traits_tag = e; - return createParam(desc, fromclone); + return createParam(desc); } -Param *RasterFxPluginHost::createParam(const toonz_param_desc_t *desc, bool fromclone) +Param *RasterFxPluginHost::createParam(const toonz_param_desc_t *desc) { TParamP p = parameter_factory(desc); if (!p) @@ -627,13 +627,8 @@ Param *RasterFxPluginHost::createParam(const toonz_param_desc_t *desc, bool from bindParam(this, desc->key, p); - /* pi は永続性があるので clone から呼ばれた場合は書き換えない */ - if (!fromclone) { - // add to a map - params_.push_back(std::make_shared(this, desc->key, toonz_param_type_enum(desc->traits_tag), desc)); - return params_.back().get(); - } - return nullptr; + params_.push_back(std::make_shared(this, desc->key, toonz_param_type_enum(desc->traits_tag), desc)); + return params_.back().get(); } Param *RasterFxPluginHost::getParam(const char *name) const diff --git a/toonz/sources/toonzqt/pluginhost.h b/toonz/sources/toonzqt/pluginhost.h index fd2fb363..ccbdab9b 100644 --- a/toonz/sources/toonzqt/pluginhost.h +++ b/toonz/sources/toonzqt/pluginhost.h @@ -180,8 +180,8 @@ public: bool setParamStructure(int n, toonz_param_page_t *descs, int &err, void *&pos); bool addPortDesc(port_description_t &&); - Param *createParam(const toonz_param_desc_t *, bool fromclone = false); - Param *createParam(const char *name, toonz_param_type_enum e, bool fromclone = false); + Param *createParam(const toonz_param_desc_t *); + Param *createParam(const char *name, toonz_param_type_enum e); Param *getParam(const char *name) const; ParamView *createParamView();