Browse Source

Combined InputPort and OutputPort to just Port with an enum

tags/v0.3.0
Andrew Belt 7 years ago
parent
commit
d24b587eb6
11 changed files with 130 additions and 181 deletions
  1. +18
    -27
      include/components.hpp
  2. +10
    -8
      include/rack.hpp
  3. +17
    -26
      include/scene.hpp
  4. +4
    -4
      src/core/AudioInterface.cpp
  5. +2
    -2
      src/core/MidiInterface.cpp
  6. +0
    -53
      src/widgets/InputPort.cpp
  7. +4
    -4
      src/widgets/ModuleWidget.cpp
  8. +0
    -53
      src/widgets/OutputPort.cpp
  9. +67
    -0
      src/widgets/Port.cpp
  10. +2
    -2
      src/widgets/RackWidget.cpp
  11. +6
    -2
      src/widgets/WireWidget.cpp

+ 18
- 27
include/components.hpp View File

@@ -96,41 +96,32 @@ struct BefacoSlidePot : SpriteKnob {
// Jacks
////////////////////

template <typename BASE>
struct PJ301M : BASE {
PJ301M() {
this->box.size = Vec(24, 24);
this->spriteOffset = Vec(-2, -2);
this->spriteSize = Vec(30, 30);
this->spriteImage = Image::load("res/ComponentLibrary/PJ301M.png");
struct PJ301MPort : Port {
PJ301MPort() {
box.size = Vec(24, 24);
spriteOffset = Vec(-2, -2);
spriteSize = Vec(30, 30);
spriteImage = Image::load("res/ComponentLibrary/PJ301M.png");
}
};
typedef PJ301M<InputPort> InputPortPJ301M;
typedef PJ301M<OutputPort> OutputPortPJ301M;

template <typename BASE>
struct PJ3410 : BASE {
PJ3410() {
this->box.size = Vec(32, 31);
this->spriteOffset = Vec(-1, -1);
this->spriteSize = Vec(36, 36);
this->spriteImage = Image::load("res/ComponentLibrary/PJ3410.png");
struct PJ3410Port : Port {
PJ3410Port() {
box.size = Vec(32, 31);
spriteOffset = Vec(-1, -1);
spriteSize = Vec(36, 36);
spriteImage = Image::load("res/ComponentLibrary/PJ3410.png");
}
};
typedef PJ3410<InputPort> InputPortPJ3410;
typedef PJ3410<OutputPort> OutputPortPJ3410;

template <typename BASE>
struct CL1362 : BASE {
CL1362() {
this->box.size = Vec(33, 29);
this->spriteOffset = Vec(-2, -2);
this->spriteSize = Vec(39, 36);
this->spriteImage = Image::load("res/ComponentLibrary/CL1362.png");
struct CL1362Port : Port {
CL1362Port() {
box.size = Vec(33, 29);
spriteOffset = Vec(-2, -2);
spriteSize = Vec(39, 36);
spriteImage = Image::load("res/ComponentLibrary/CL1362.png");
}
};
typedef CL1362<InputPort> InputPortCL1362;
typedef CL1362<OutputPort> OutputPortCL1362;

////////////////////
// Lights


+ 10
- 8
include/rack.hpp View File

@@ -48,21 +48,23 @@ ParamWidget *createParam(Vec pos, Module *module, int paramId, float minValue, f
return param;
}

template <class TInputPort>
InputPort *createInput(Vec pos, Module *module, int inputId) {
InputPort *port = new TInputPort();
template <class TPort>
Port *createInput(Vec pos, Module *module, int inputId) {
Port *port = new TPort();
port->box.pos = pos;
port->module = module;
port->inputId = inputId;
port->type = Port::INPUT;
port->portId = inputId;
return port;
}

template <class TOutputPort>
OutputPort *createOutput(Vec pos, Module *module, int outputId) {
OutputPort *port = new TOutputPort();
template <class TPort>
Port *createOutput(Vec pos, Module *module, int outputId) {
Port *port = new TPort();
port->box.pos = pos;
port->module = module;
port->outputId = outputId;
port->type = Port::OUTPUT;
port->portId = outputId;
return port;
}



+ 17
- 26
include/scene.hpp View File

@@ -12,8 +12,7 @@ struct Wire;

struct RackWidget;
struct ParamWidget;
struct InputPort;
struct OutputPort;
struct Port;
struct Scene;

////////////////////
@@ -27,15 +26,15 @@ struct ModuleWidget : OpaqueWidget {
/** Owns the module pointer */
Module *module = NULL;

std::vector<InputPort*> inputs;
std::vector<OutputPort*> outputs;
std::vector<Port*> inputs;
std::vector<Port*> outputs;
std::vector<ParamWidget*> params;

~ModuleWidget();
void setModule(Module *module);
// Convenience functions for adding special widgets (calls addChild())
void addInput(InputPort *input);
void addOutput(OutputPort *output);
void addInput(Port *input);
void addOutput(Port *output);
void addParam(ParamWidget *param);

json_t *toJson();
@@ -56,10 +55,10 @@ struct ModuleWidget : OpaqueWidget {
};

struct WireWidget : OpaqueWidget {
OutputPort *outputPort = NULL;
InputPort *inputPort = NULL;
OutputPort *hoveredOutputPort = NULL;
InputPort *hoveredInputPort = NULL;
Port *inputPort = NULL;
Port *outputPort = NULL;
Port *hoveredInputPort = NULL;
Port *hoveredOutputPort = NULL;
Wire *wire = NULL;
NVGcolor color;

@@ -182,35 +181,27 @@ struct MomentarySwitch : virtual Switch {
////////////////////

struct Port : OpaqueWidget, SpriteWidget {
enum PortType {
INPUT,
OUTPUT
};

Module *module = NULL;
WireWidget *connectedWire = NULL;
PortType type;
int portId;

Port();
~Port();
void disconnect();

void draw(NVGcontext *vg);
void onMouseDown(int button);
void onDragEnd();
};

struct InputPort : Port {
int inputId;

void onDragStart();
void onDragDrop(Widget *origin);
void onDragEnter(Widget *origin);
void onDragLeave(Widget *origin);
void draw(NVGcontext *vg);
};

struct OutputPort : Port {
int outputId;

void onDragStart();
void onDragDrop(Widget *origin);
void onDragEnter(Widget *origin);
void onDragLeave(Widget *origin);
void draw(NVGcontext *vg);
};

////////////////////


+ 4
- 4
src/core/AudioInterface.cpp View File

@@ -459,8 +459,8 @@ AudioInterfaceWidget::AudioInterfaceWidget() {
}

yPos += 5;
addInput(createInput<InputPortPJ3410>(Vec(20, yPos), module, AudioInterface::AUDIO1_INPUT));
addInput(createInput<InputPortPJ3410>(Vec(70, yPos), module, AudioInterface::AUDIO2_INPUT));
addInput(createInput<PJ3410Port>(Vec(20, yPos), module, AudioInterface::AUDIO1_INPUT));
addInput(createInput<PJ3410Port>(Vec(70, yPos), module, AudioInterface::AUDIO2_INPUT));
yPos += 35 + margin;

{
@@ -472,7 +472,7 @@ AudioInterfaceWidget::AudioInterfaceWidget() {
}

yPos += 5;
addOutput(createOutput<OutputPortPJ3410>(Vec(20, yPos), module, AudioInterface::AUDIO1_OUTPUT));
addOutput(createOutput<OutputPortPJ3410>(Vec(70, yPos), module, AudioInterface::AUDIO2_OUTPUT));
addOutput(createOutput<PJ3410Port>(Vec(20, yPos), module, AudioInterface::AUDIO1_OUTPUT));
addOutput(createOutput<PJ3410Port>(Vec(70, yPos), module, AudioInterface::AUDIO2_OUTPUT));
yPos += 35 + margin;
}

+ 2
- 2
src/core/MidiInterface.cpp View File

@@ -254,8 +254,8 @@ MidiInterfaceWidget::MidiInterfaceWidget() {
}

yPos += 5;
addOutput(createOutput<OutputPortPJ3410>(Vec(20, yPos), module, MidiInterface::PITCH_OUTPUT));
addOutput(createOutput<OutputPortPJ3410>(Vec(70, yPos), module, MidiInterface::GATE_OUTPUT));
addOutput(createOutput<PJ3410Port>(Vec(20, yPos), module, MidiInterface::PITCH_OUTPUT));
addOutput(createOutput<PJ3410Port>(Vec(70, yPos), module, MidiInterface::GATE_OUTPUT));
yPos += 25 + margin;

{


+ 0
- 53
src/widgets/InputPort.cpp View File

@@ -1,53 +0,0 @@
#include "scene.hpp"


namespace rack {

void InputPort::onDragStart() {
if (connectedWire) {
// Disconnect wire from this port, but set it as the active wire
connectedWire->inputPort = NULL;
connectedWire->updateWire();
gRackWidget->activeWire = connectedWire;
connectedWire = NULL;
}
else {
connectedWire = new WireWidget();
connectedWire->inputPort = this;
gRackWidget->wireContainer->addChild(connectedWire);
gRackWidget->activeWire = connectedWire;
}
}

void InputPort::onDragDrop(Widget *origin) {
if (connectedWire) return;
if (gRackWidget->activeWire) {
gRackWidget->activeWire->hoveredInputPort = NULL;
if (gRackWidget->activeWire->inputPort) return;
gRackWidget->activeWire->inputPort = this;
connectedWire = gRackWidget->activeWire;
}
}

void InputPort::onDragEnter(Widget *origin) {
if (connectedWire) return;
if (gRackWidget->activeWire) {
gRackWidget->activeWire->hoveredInputPort = this;
}
}

void InputPort::onDragLeave(Widget *origin) {
if (gRackWidget->activeWire) {
gRackWidget->activeWire->hoveredInputPort = NULL;
}
}

void InputPort::draw(NVGcontext *vg) {
if (gRackWidget->activeWire) {
if (gRackWidget->activeWire->inputPort)
nvgGlobalAlpha(vg, 0.5);
}
SpriteWidget::draw(vg);
}

} // namespace rack

+ 4
- 4
src/widgets/ModuleWidget.cpp View File

@@ -22,12 +22,12 @@ void ModuleWidget::setModule(Module *module) {
this->module = module;
}

void ModuleWidget::addInput(InputPort *input) {
void ModuleWidget::addInput(Port *input) {
inputs.push_back(input);
addChild(input);
}

void ModuleWidget::addOutput(OutputPort *output) {
void ModuleWidget::addOutput(Port *output) {
outputs.push_back(output);
addChild(output);
}
@@ -77,10 +77,10 @@ void ModuleWidget::fromJson(json_t *root) {
}

void ModuleWidget::disconnectPorts() {
for (InputPort *input : inputs) {
for (Port *input : inputs) {
input->disconnect();
}
for (OutputPort *output : outputs) {
for (Port *output : outputs) {
output->disconnect();
}
}


+ 0
- 53
src/widgets/OutputPort.cpp View File

@@ -1,53 +0,0 @@
#include "scene.hpp"


namespace rack {

void OutputPort::onDragStart() {
if (connectedWire) {
// Disconnect wire from this port, but set it as the active wire
connectedWire->outputPort = NULL;
connectedWire->updateWire();
gRackWidget->activeWire = connectedWire;
connectedWire = NULL;
}
else {
connectedWire = new WireWidget();
connectedWire->outputPort = this;
gRackWidget->wireContainer->addChild(connectedWire);
gRackWidget->activeWire = connectedWire;
}
}

void OutputPort::onDragDrop(Widget *origin) {
if (connectedWire) return;
if (gRackWidget->activeWire) {
gRackWidget->activeWire->hoveredOutputPort = NULL;
if (gRackWidget->activeWire->outputPort) return;
gRackWidget->activeWire->outputPort = this;
connectedWire = gRackWidget->activeWire;
}
}

void OutputPort::onDragEnter(Widget *origin) {
if (connectedWire) return;
if (gRackWidget->activeWire) {
gRackWidget->activeWire->hoveredOutputPort = this;
}
}

void OutputPort::onDragLeave(Widget *origin) {
if (gRackWidget->activeWire) {
gRackWidget->activeWire->hoveredOutputPort = NULL;
}
}

void OutputPort::draw(NVGcontext *vg) {
if (gRackWidget->activeWire) {
if (gRackWidget->activeWire->outputPort)
nvgGlobalAlpha(vg, 0.5);
}
SpriteWidget::draw(vg);
}

} // namespace rack

+ 67
- 0
src/widgets/Port.cpp View File

@@ -19,6 +19,14 @@ void Port::disconnect() {
}
}

void Port::draw(NVGcontext *vg) {
if (gRackWidget->activeWire) {
if (type == INPUT ? gRackWidget->activeWire->inputPort : gRackWidget->activeWire->outputPort)
nvgGlobalAlpha(vg, 0.5);
}
SpriteWidget::draw(vg);
}

void Port::onMouseDown(int button) {
if (button == 1) {
disconnect();
@@ -36,4 +44,63 @@ void Port::onDragEnd() {
gRackWidget->activeWire = NULL;
}

void Port::onDragStart() {
if (connectedWire) {
// Disconnect wire from this port, but set it as the active wire
if (type == INPUT)
connectedWire->inputPort = NULL;
else
connectedWire->outputPort = NULL;
connectedWire->updateWire();
gRackWidget->activeWire = connectedWire;
connectedWire = NULL;
}
else {
connectedWire = new WireWidget();
if (type == INPUT)
connectedWire->inputPort = this;
else
connectedWire->outputPort = this;
gRackWidget->wireContainer->addChild(connectedWire);
gRackWidget->activeWire = connectedWire;
}
}

void Port::onDragDrop(Widget *origin) {
if (connectedWire) return;
if (gRackWidget->activeWire) {
if (type == INPUT) {
gRackWidget->activeWire->hoveredInputPort = NULL;
if (gRackWidget->activeWire->inputPort) return;
gRackWidget->activeWire->inputPort = this;
}
else {
gRackWidget->activeWire->hoveredOutputPort = NULL;
if (gRackWidget->activeWire->outputPort) return;
gRackWidget->activeWire->outputPort = this;
}
connectedWire = gRackWidget->activeWire;
}
}

void Port::onDragEnter(Widget *origin) {
if (connectedWire) return;
if (gRackWidget->activeWire) {
if (type == INPUT)
gRackWidget->activeWire->hoveredInputPort = this;
else
gRackWidget->activeWire->hoveredOutputPort = this;
}
}

void Port::onDragLeave(Widget *origin) {
if (gRackWidget->activeWire) {
if (type == INPUT)
gRackWidget->activeWire->hoveredInputPort = NULL;
else
gRackWidget->activeWire->hoveredOutputPort = NULL;
}
}


} // namespace rack

+ 2
- 2
src/widgets/RackWidget.cpp View File

@@ -207,11 +207,11 @@ void RackWidget::fromJson(json_t *root) {
// Get ports
ModuleWidget *outputModuleWidget = moduleWidgets[outputModuleId];
if (!outputModuleWidget) continue;
OutputPort *outputPort = outputModuleWidget->outputs[outputId];
Port *outputPort = outputModuleWidget->outputs[outputId];
if (!outputPort) continue;
ModuleWidget *inputModuleWidget = moduleWidgets[inputModuleId];
if (!inputModuleWidget) continue;
InputPort *inputPort = inputModuleWidget->inputs[inputId];
Port *inputPort = inputModuleWidget->inputs[inputId];
if (!inputPort) continue;
// Create WireWidget
WireWidget *wireWidget = new WireWidget();


+ 6
- 2
src/widgets/WireWidget.cpp View File

@@ -105,11 +105,15 @@ void WireWidget::updateWire() {
wire = NULL;
}
if (inputPort && outputPort) {
// Check correct types
assert(inputPort->type == Port::INPUT);
assert(outputPort->type == Port::OUTPUT);

wire = new Wire();
wire->outputModule = outputPort->module;
wire->outputId = outputPort->outputId;
wire->outputId = outputPort->portId;
wire->inputModule = inputPort->module;
wire->inputId = inputPort->inputId;
wire->inputId = inputPort->portId;
engineAddWire(wire);
}
}


Loading…
Cancel
Save