diff --git a/meson.build b/meson.build index a6d08531..407cc8b6 100644 --- a/meson.build +++ b/meson.build @@ -153,6 +153,7 @@ vst3_plugin_sources = [ 'src/common/serialization/vst3/message.cpp', 'src/common/serialization/vst3/param-value-queue.cpp', 'src/common/serialization/vst3/parameter-changes.cpp', + 'src/common/serialization/vst3/physical-ui-map-list.cpp', 'src/common/serialization/vst3/plug-frame-proxy.cpp', 'src/common/serialization/vst3/plug-view-proxy.cpp', 'src/common/serialization/vst3/plugin-proxy.cpp', @@ -233,6 +234,7 @@ if with_vst3 'src/common/serialization/vst3/message.cpp', 'src/common/serialization/vst3/param-value-queue.cpp', 'src/common/serialization/vst3/parameter-changes.cpp', + 'src/common/serialization/vst3/physical-ui-map-list.cpp', 'src/common/serialization/vst3/plug-frame-proxy.cpp', 'src/common/serialization/vst3/plug-view-proxy.cpp', 'src/common/serialization/vst3/plugin-proxy.cpp', diff --git a/src/common/serialization/vst3/physical-ui-map-list.cpp b/src/common/serialization/vst3/physical-ui-map-list.cpp new file mode 100644 index 00000000..c0149c35 --- /dev/null +++ b/src/common/serialization/vst3/physical-ui-map-list.cpp @@ -0,0 +1,29 @@ +// yabridge: a Wine VST bridge +// Copyright (C) 2020-2021 Robbert van der Helm +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#include "physical-ui-map-list.h" + +YaPhysicalUIMapList::YaPhysicalUIMapList() {} + +YaPhysicalUIMapList::YaPhysicalUIMapList( + const Steinberg::Vst::PhysicalUIMapList& list) + : maps(list.map, list.map + list.count) {} + +Steinberg::Vst::PhysicalUIMapList YaPhysicalUIMapList::get() { + return Steinberg::Vst::PhysicalUIMapList{ + .count = static_cast(maps.size()), + .map = maps.data()}; +} diff --git a/src/common/serialization/vst3/physical-ui-map-list.h b/src/common/serialization/vst3/physical-ui-map-list.h new file mode 100644 index 00000000..57bb12ad --- /dev/null +++ b/src/common/serialization/vst3/physical-ui-map-list.h @@ -0,0 +1,61 @@ +// yabridge: a Wine VST bridge +// Copyright (C) 2020-2021 Robbert van der Helm +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +#pragma once + +#include + +#include + +/** + * Serialization wrapper around `PhysicalUIMapList` that allows loading such a + * list and recreating one from a `YaPhysicalUIMapList` object. + */ +class YaPhysicalUIMapList { + public: + YaPhysicalUIMapList(); + + /** + * Copy the data from a `PhysicalUIMapList` so it can be serialized. + */ + YaPhysicalUIMapList(const Steinberg::Vst::PhysicalUIMapList& list); + + /** + * Reconstruct the original `PhysicalUIMapList` object passed to the + * constructor and return it. This is used as part of + * `YaProcessData::get()`. The returned object is valid as long as this + * object is alive. + */ + Steinberg::Vst::PhysicalUIMapList get(); + + template + void serialize(S& s) { + s.container(maps, 1 << 31); + } + + private: + std::vector maps; +}; + +namespace Steinberg { +namespace Vst { +template +void serialize(S& s, PhysicalUIMap map) { + s.value4b(map.physicalUITypeID); + s.value4b(map.noteExpressionTypeID); +} +} // namespace Vst +} // namespace Steinberg