transpose gadget revamp

master
zetaPRIME 2022-03-10 21:09:40 -05:00
parent 8a7cb67bf3
commit d3521416f2
3 changed files with 17 additions and 3 deletions

View File

@ -44,7 +44,7 @@ void Transpose::init() {
}
void Transpose::process() {
int off = amount.load();
int off = octave.load()*12 + amount.load();
auto in = std::static_pointer_cast<CommandPort>(port(Port::Input, Port::Command, 0));
auto out = std::static_pointer_cast<CommandPort>(port(Port::Output, Port::Command, 0));
@ -75,16 +75,28 @@ void Transpose::process() {
void Transpose::saveData(QCborMap& m) const {
m[qs("amount")] = QCborValue(amount);
m[qs("octave")] = QCborValue(octave);
}
void Transpose::loadData(const QCborMap& m) {
auto oct = m.value("octave");
if (oct.isUndefined()) { // convert from single value
int a = static_cast<int>(m.value("amount").toInteger(0));
int s = a < 0 ? -1 : 1;
a = std::abs(a);
octave = (a-(a%12))/12*s;
amount = a%12 * s;
return;
}
octave = static_cast<int>(oct.toInteger(0));
amount = static_cast<int>(m.value("amount").toInteger(0));
}
void Transpose::onGadgetCreated() {
if (!obj) return;
obj->showPluginName = false;
auto l = (new LayoutGadget(obj))->setMetrics(12);
auto l = (new LayoutGadget(obj))->setMetrics(8, 10);
(new KnobGadget(l))->bind(amount)->setLabel("Transpose")->setRange(-24, 24, 1);
(new KnobGadget(l))->bind(amount)->setLabel("Transpose")->setRange(-12, 12, 1, KnobGadget::MedStep);
(new KnobGadget(l))->bind(octave)->setLabel("Octave")->setRange(-5, 5, 1, KnobGadget::BigStep);
}

View File

@ -7,6 +7,7 @@
namespace Xybrid::Gadgets {
class Transpose : public Data::Node {
std::atomic<int> amount = 0;
std::atomic<int> octave = 0;
public:
Transpose();
~Transpose() override = default;

View File

@ -25,6 +25,7 @@ namespace Xybrid::UI {
enum Step : int {
NoStep = 1,
SmallStep = 3,
MedStep = 7,
BigStep = 15,
};