@@ -24,8 +24,13 @@ struct ModuleWidget : OpaqueWidget { | |||||
math::Vec dragPos; | math::Vec dragPos; | ||||
math::Vec oldPos; | math::Vec oldPos; | ||||
ModuleWidget(Module *module); | |||||
ModuleWidget() {} | |||||
DEPRECATED ModuleWidget(Module *module) { | |||||
setModule(module); | |||||
} | |||||
~ModuleWidget(); | ~ModuleWidget(); | ||||
void setModule(Module *module); | |||||
/** Convenience functions for adding special widgets (calls addChild()) */ | /** Convenience functions for adding special widgets (calls addChild()) */ | ||||
void addInput(PortWidget *input); | void addInput(PortWidget *input); | ||||
void addOutput(PortWidget *output); | void addOutput(PortWidget *output); | ||||
@@ -33,6 +33,18 @@ struct Port { | |||||
void setVoltage(float voltage, int channel = 0) { | void setVoltage(float voltage, int channel = 0) { | ||||
values[channel] = voltage; | values[channel] = voltage; | ||||
} | } | ||||
void setChannels(int channels) { | |||||
// Set higher channel values to 0 | |||||
for (int c = channels; c < this->channels; c++) { | |||||
values[c] = 0.f; | |||||
} | |||||
this->channels = channels; | |||||
} | |||||
int getChannels() { | |||||
return channels; | |||||
} | |||||
}; | }; | ||||
@@ -237,7 +237,8 @@ void AudioInterface::step() { | |||||
struct AudioInterfaceWidget : ModuleWidget { | struct AudioInterfaceWidget : ModuleWidget { | ||||
AudioInterfaceWidget(AudioInterface *module) : ModuleWidget(module) { | |||||
AudioInterfaceWidget(AudioInterface *module) { | |||||
setModule(module); | |||||
setPanel(SVG::load(asset::system("res/Core/AudioInterface.svg"))); | setPanel(SVG::load(asset::system("res/Core/AudioInterface.svg"))); | ||||
addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | ||||
@@ -83,7 +83,8 @@ struct BlankWidget : ModuleWidget { | |||||
Widget *bottomRightScrew; | Widget *bottomRightScrew; | ||||
Widget *rightHandle; | Widget *rightHandle; | ||||
BlankWidget(Module *module) : ModuleWidget(module) { | |||||
BlankWidget(Module *module) { | |||||
setModule(module); | |||||
box.size = Vec(RACK_GRID_WIDTH * 10, RACK_GRID_HEIGHT); | box.size = Vec(RACK_GRID_WIDTH * 10, RACK_GRID_HEIGHT); | ||||
panel = new BlankPanel; | panel = new BlankPanel; | ||||
@@ -235,7 +235,7 @@ struct CV_MIDI : Module { | |||||
} | } | ||||
void step() override { | void step() override { | ||||
for (int c = 0; c < inputs[PITCH_INPUT].channels; c++) { | |||||
for (int c = 0; c < inputs[PITCH_INPUT].getChannels(); c++) { | |||||
int vel = (int) std::round(inputs[VEL_INPUT].normalize(10.f * 100 / 127, c) / 10.f * 127); | int vel = (int) std::round(inputs[VEL_INPUT].normalize(10.f * 100 / 127, c) / 10.f * 127); | ||||
vel = clamp(vel, 0, 127); | vel = clamp(vel, 0, 127); | ||||
midiOutput.setVel(vel, c); | midiOutput.setVel(vel, c); | ||||
@@ -286,7 +286,8 @@ struct CV_MIDI : Module { | |||||
struct CV_MIDIWidget : ModuleWidget { | struct CV_MIDIWidget : ModuleWidget { | ||||
CV_MIDIWidget(CV_MIDI *module) : ModuleWidget(module) { | |||||
CV_MIDIWidget(CV_MIDI *module) { | |||||
setModule(module); | |||||
setPanel(SVG::load(asset::system("res/Core/CV-MIDI.svg"))); | setPanel(SVG::load(asset::system("res/Core/CV-MIDI.svg"))); | ||||
addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | ||||
@@ -220,7 +220,8 @@ struct MidiCcWidget : Grid16MidiWidget { | |||||
struct MIDICCToCVInterfaceWidget : ModuleWidget { | struct MIDICCToCVInterfaceWidget : ModuleWidget { | ||||
MIDICCToCVInterfaceWidget(MIDICCToCVInterface *module) : ModuleWidget(module) { | |||||
MIDICCToCVInterfaceWidget(MIDICCToCVInterface *module) { | |||||
setModule(module); | |||||
setPanel(SVG::load(asset::system("res/Core/MIDICCToCVInterface.svg"))); | setPanel(SVG::load(asset::system("res/Core/MIDICCToCVInterface.svg"))); | ||||
addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | ||||
@@ -259,7 +259,8 @@ struct MIDIToCVInterface : Module { | |||||
struct MIDIToCVInterfaceWidget : ModuleWidget { | struct MIDIToCVInterfaceWidget : ModuleWidget { | ||||
MIDIToCVInterfaceWidget(MIDIToCVInterface *module) : ModuleWidget(module) { | |||||
MIDIToCVInterfaceWidget(MIDIToCVInterface *module) { | |||||
setModule(module); | |||||
setPanel(SVG::load(asset::system("res/Core/MIDIToCVInterface.svg"))); | setPanel(SVG::load(asset::system("res/Core/MIDIToCVInterface.svg"))); | ||||
addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | ||||
@@ -207,7 +207,8 @@ struct MidiTrigWidget : Grid16MidiWidget { | |||||
struct MIDITriggerToCVInterfaceWidget : ModuleWidget { | struct MIDITriggerToCVInterfaceWidget : ModuleWidget { | ||||
MIDITriggerToCVInterfaceWidget(MIDITriggerToCVInterface *module) : ModuleWidget(module) { | |||||
MIDITriggerToCVInterfaceWidget(MIDITriggerToCVInterface *module) { | |||||
setModule(module); | |||||
setPanel(SVG::load(asset::system("res/Core/MIDITriggerToCVInterface.svg"))); | setPanel(SVG::load(asset::system("res/Core/MIDITriggerToCVInterface.svg"))); | ||||
addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | ||||
@@ -7,7 +7,8 @@ using namespace rack; | |||||
struct NotesWidget : ModuleWidget { | struct NotesWidget : ModuleWidget { | ||||
TextField *textField; | TextField *textField; | ||||
NotesWidget(Module *module) : ModuleWidget(module) { | |||||
NotesWidget(Module *module) { | |||||
setModule(module); | |||||
setPanel(SVG::load(asset::system("res/Core/Notes.svg"))); | setPanel(SVG::load(asset::system("res/Core/Notes.svg"))); | ||||
addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | ||||
@@ -302,7 +302,8 @@ struct QuadMIDIToCVInterface : Module { | |||||
struct QuadMIDIToCVInterfaceWidget : ModuleWidget { | struct QuadMIDIToCVInterfaceWidget : ModuleWidget { | ||||
QuadMIDIToCVInterfaceWidget(QuadMIDIToCVInterface *module) : ModuleWidget(module) { | |||||
QuadMIDIToCVInterfaceWidget(QuadMIDIToCVInterface *module) { | |||||
setModule(module); | |||||
setPanel(SVG::load(asset::system("res/Core/QuadMIDIToCVInterface.svg"))); | setPanel(SVG::load(asset::system("res/Core/QuadMIDIToCVInterface.svg"))); | ||||
addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | addChild(createWidget<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | ||||
@@ -15,16 +15,16 @@ | |||||
namespace rack { | namespace rack { | ||||
ModuleWidget::ModuleWidget(Module *module) { | |||||
this->module = module; | |||||
} | |||||
ModuleWidget::~ModuleWidget() { | ModuleWidget::~ModuleWidget() { | ||||
if (module) { | if (module) { | ||||
delete module; | delete module; | ||||
} | } | ||||
} | } | ||||
void ModuleWidget::setModule(Module *module) { | |||||
this->module = module; | |||||
} | |||||
void ModuleWidget::addInput(PortWidget *input) { | void ModuleWidget::addInput(PortWidget *input) { | ||||
assert(input->type == PortWidget::INPUT); | assert(input->type == PortWidget::INPUT); | ||||
inputs.push_back(input); | inputs.push_back(input); | ||||
@@ -53,7 +53,9 @@ void Scene::step() { | |||||
zoomWidget->box.size = rackWidget->box.size.mult(zoomWidget->zoom); | zoomWidget->box.size = rackWidget->box.size.mult(zoomWidget->zoom); | ||||
moduleBrowser->box.size = box.size; | moduleBrowser->box.size = box.size; | ||||
zoomWidget->setZoom(settings::zoom); | |||||
// Set zoom every few frames | |||||
if (app()->window->frame % 10 == 0) | |||||
zoomWidget->setZoom(settings::zoom); | |||||
// Request latest version from server | // Request latest version from server | ||||
if (!devMode && checkVersion && !checkedVersion) { | if (!devMode && checkVersion && !checkedVersion) { | ||||