Browse Source

Reorganize Components, add LEDSlider with colors

tags/v0.6.0
Andrew Belt 6 years ago
parent
commit
0ba244e98f
13 changed files with 533 additions and 59 deletions
  1. +15
    -12
      include/app.hpp
  2. +45
    -15
      include/componentlibrary.hpp
  3. +66
    -0
      res/ComponentLibrary/LEDSlider.svg
  4. +71
    -0
      res/ComponentLibrary/LEDSliderBlueHandle.svg
  5. +71
    -0
      res/ComponentLibrary/LEDSliderGreenHandle.svg
  6. +71
    -0
      res/ComponentLibrary/LEDSliderRedHandle.svg
  7. +71
    -0
      res/ComponentLibrary/LEDSliderWhiteHandle.svg
  8. +71
    -0
      res/ComponentLibrary/LEDSliderYellowHandle.svg
  9. +0
    -2
      src/app/CircularShadow.cpp
  10. +1
    -0
      src/app/Knob.cpp
  11. +0
    -30
      src/app/SVGFader.cpp
  12. +14
    -0
      src/app/SVGPort.cpp
  13. +37
    -0
      src/app/SVGSlider.cpp

+ 15
- 12
include/app.hpp View File

@@ -274,11 +274,11 @@ struct SpriteKnob : Knob, SpriteWidget {

/** A knob which rotates an SVG and caches it in a framebuffer */
struct SVGKnob : Knob, FramebufferWidget {
/** Angles in radians */
float minAngle, maxAngle;
TransformWidget *tw;
SVGWidget *sw;
CircularShadow *shadow;
/** Angles in radians */
float minAngle, maxAngle;

SVGKnob();
void setSVG(std::shared_ptr<SVG> svg);
@@ -289,18 +289,22 @@ struct SVGKnob : Knob, FramebufferWidget {
/** Behaves like a knob but linearly moves an SVGWidget between two points.
Can be used for horizontal or vertical linear faders.
*/
struct SVGFader : Knob, FramebufferWidget {
/** Intermediate positions will be interpolated between these positions */
Vec minHandlePos, maxHandlePos;
/** Not owned */
struct SVGSlider : Knob, FramebufferWidget {
SVGWidget *background;
SVGWidget *handle;
/** Intermediate positions will be interpolated between these positions */
Vec minHandlePos, maxHandlePos;

SVGFader();
SVGSlider();
void setSVGs(std::shared_ptr<SVG> backgroundSVG, std::shared_ptr<SVG> handleSVG);
void step() override;
void onChange(EventChange &e) override;
};

/** Deprecated name for SVGSlider */
typedef SVGSlider SVGFader;

/** A Parameter with multiple frames corresponding to its value */
struct SVGSwitch : virtual Parameter, FramebufferWidget {
std::vector<std::shared_ptr<SVG>> frames;
SVGWidget *sw;
@@ -446,13 +450,11 @@ struct ModuleLightWidget : MultiLightWidget {
// ports
////////////////////

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

Module *module = NULL;
PortType type = INPUT;
int portId;
MultiLightWidget *plugLight;
@@ -470,9 +472,8 @@ struct Port : OpaqueWidget {

template <typename T = Port>
static T *create(Vec pos, PortType type, Module *module, int portId) {
T *o = Widget::create<T>(pos);
T *o = Component::create<T>(pos, module);
o->type = type;
o->module = module;
o->portId = portId;
return o;
}
@@ -480,8 +481,10 @@ struct Port : OpaqueWidget {

struct SVGPort : Port, FramebufferWidget {
SVGWidget *background;
CircularShadow *shadow;

SVGPort();
void setSVG(std::shared_ptr<SVG> svg);
void draw(NVGcontext *vg) override;
};



+ 45
- 15
include/componentlibrary.hpp View File

@@ -322,45 +322,75 @@ struct BefacoTinyKnob : SVGKnob {
}
};

struct BefacoSlidePot : SVGFader {
struct BefacoSlidePot : SVGSlider {
BefacoSlidePot() {
Vec margin = Vec(3.5, 3.5);
maxHandlePos = Vec(-1, -2).plus(margin);
minHandlePos = Vec(-1, 87).plus(margin);
background->svg = SVG::load(assetGlobal("res/ComponentLibrary/BefacoSlidePot.svg"));
background->wrap();
setSVGs(SVG::load(assetGlobal("res/ComponentLibrary/BefacoSlidePot.svg")), SVG::load(assetGlobal("res/ComponentLibrary/BefacoSlidePotHandle.svg")));
background->box.pos = margin;
box.size = background->box.size.plus(margin.mult(2));
handle->svg = SVG::load(assetGlobal("res/ComponentLibrary/BefacoSlidePotHandle.svg"));
handle->wrap();
}
};

struct LEDSlider : SVGSlider {
LEDSlider() {
maxHandlePos = mm2px(Vec(0.738, 0.738).plus(Vec(2, 0)));
minHandlePos = mm2px(Vec(0.738, 22.078).plus(Vec(2, 0)));
setSVGs(SVG::load(assetGlobal("res/ComponentLibrary/LEDSlider.svg")), NULL);
}
};

/** API is unstable for LEDSlider. Will add a LightWidget later. */
struct LEDSliderGreen : LEDSlider {
LEDSliderGreen() {
handle->setSVG(SVG::load(assetGlobal("res/ComponentLibrary/LEDSliderGreenHandle.svg")));
}
};

struct LEDSliderRed : LEDSlider {
LEDSliderRed() {
handle->setSVG(SVG::load(assetGlobal("res/ComponentLibrary/LEDSliderRedHandle.svg")));
}
};

struct LEDSliderYellow : LEDSlider {
LEDSliderYellow() {
handle->setSVG(SVG::load(assetGlobal("res/ComponentLibrary/LEDSliderYellowHandle.svg")));
}
};

struct LEDSliderBlue : LEDSlider {
LEDSliderBlue() {
handle->setSVG(SVG::load(assetGlobal("res/ComponentLibrary/LEDSliderBlueHandle.svg")));
}
};

struct LEDSliderWhite : LEDSlider {
LEDSliderWhite() {
handle->setSVG(SVG::load(assetGlobal("res/ComponentLibrary/LEDSliderWhiteHandle.svg")));
}
};

////////////////////
// Jacks
// Ports
////////////////////

struct PJ301MPort : SVGPort {
PJ301MPort() {
background->svg = SVG::load(assetGlobal("res/ComponentLibrary/PJ301M.svg"));
background->wrap();
box.size = background->box.size;
setSVG(SVG::load(assetGlobal("res/ComponentLibrary/PJ301M.svg")));
}
};

struct PJ3410Port : SVGPort {
PJ3410Port() {
background->svg = SVG::load(assetGlobal("res/ComponentLibrary/PJ3410.svg"));
background->wrap();
box.size = background->box.size;
setSVG(SVG::load(assetGlobal("res/ComponentLibrary/PJ3410.svg")));
}
};

struct CL1362Port : SVGPort {
CL1362Port() {
background->svg = SVG::load(assetGlobal("res/ComponentLibrary/CL1362.svg"));
background->wrap();
box.size = background->box.size;
setSVG(SVG::load(assetGlobal("res/ComponentLibrary/CL1362.svg")));
}
};



+ 66
- 0
res/ComponentLibrary/LEDSlider.svg View File

@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="7.00002mm"
height="26.999905mm"
viewBox="0 0 7.00002 26.999905"
version="1.1"
id="svg163547"
sodipodi:docname="LEDSlider.svg"
inkscape:version="0.92.2 5c3e80d, 2017-08-06">
<defs
id="defs163541" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.979899"
inkscape:cx="-33.18202"
inkscape:cy="22.493378"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="2"
fit-margin-right="2"
fit-margin-bottom="0"
inkscape:window-width="2560"
inkscape:window-height="1422"
inkscape:window-x="0"
inkscape:window-y="18"
inkscape:window-maximized="0" />
<metadata
id="metadata163544">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-105.35713,-95.267905)">
<path
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775"
d="m 110.35715,95.267905 v 26.999905 h -3.00002 V 95.267905 Z m 0,0"
id="path159840"
inkscape:connector-curvature="0" />
</g>
</svg>

+ 71
- 0
res/ComponentLibrary/LEDSliderBlueHandle.svg View File

@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1.52411mm"
height="4.1437631mm"
viewBox="0 0 1.52411 4.143763"
version="1.1"
id="svg164153"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="LEDSliderBlueHandle.svg">
<defs
id="defs164147" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9195959"
inkscape:cx="-27.821283"
inkscape:cy="-9.1133715"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="2560"
inkscape:window-height="1422"
inkscape:window-x="0"
inkscape:window-y="18"
inkscape:window-maximized="0" />
<metadata
id="metadata164150">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-120.21393,-92.817187)">
<path
style="fill:#5c5c5c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775"
d="m 121.73804,92.817187 v 4.143763 h -1.52411 v -4.143763 z m 0,0"
id="path162658"
inkscape:connector-curvature="0" />
<path
style="fill:#4cc7f3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775"
d="m 121.73804,93.251269 v 3.275599 h -1.52411 v -3.275599 z m 0,0"
id="path162660"
inkscape:connector-curvature="0" />
</g>
</svg>

+ 71
- 0
res/ComponentLibrary/LEDSliderGreenHandle.svg View File

@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1.52411mm"
height="4.1423831mm"
viewBox="0 0 1.52411 4.1423831"
version="1.1"
id="svg164153"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="LEDSliderGreenHandle.svg">
<defs
id="defs164147" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9195959"
inkscape:cx="-42.017793"
inkscape:cy="0.48214362"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="2560"
inkscape:window-height="1422"
inkscape:window-x="0"
inkscape:window-y="18"
inkscape:window-maximized="0" />
<metadata
id="metadata164150">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-123.97009,-95.35738)">
<path
style="fill:#5c5c5c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775"
d="m 125.4942,95.35738 v 4.142383 h -1.52411 V 95.35738 Z m 0,0"
id="path162646"
inkscape:connector-curvature="0" />
<path
style="fill:#8fc53d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775"
d="m 125.4942,95.790083 v 3.276977 h -1.52411 v -3.276977 z m 0,0"
id="path162648"
inkscape:connector-curvature="0" />
</g>
</svg>

+ 71
- 0
res/ComponentLibrary/LEDSliderRedHandle.svg View File

@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1.52414mm"
height="4.1423802mm"
viewBox="0 0 1.52414 4.1423802"
version="1.1"
id="svg164153"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="LEDSliderRedHandle.svg">
<defs
id="defs164147" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9195959"
inkscape:cx="-23.101371"
inkscape:cy="2.1230781"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="2560"
inkscape:window-height="1422"
inkscape:window-x="0"
inkscape:window-y="18"
inkscape:window-maximized="0" />
<metadata
id="metadata164150">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-118.96512,-95.791547)">
<path
style="fill:#5c5c5c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775"
d="m 120.48926,95.791547 v 4.14238 h -1.52414 v -4.14238 z m 0,0"
id="path162650"
inkscape:connector-curvature="0" />
<path
style="fill:#f82b1c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775"
d="m 120.48926,96.225629 v 3.275595 h -1.52414 v -3.275595 z m 0,0"
id="path162652"
inkscape:connector-curvature="0" />
</g>
</svg>

+ 71
- 0
res/ComponentLibrary/LEDSliderWhiteHandle.svg View File

@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1.52411mm"
height="4.1423841mm"
viewBox="0 0 1.52411 4.142384"
version="1.1"
id="svg164153"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="LEDSliderWhiteHandle.svg">
<defs
id="defs164147" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9195959"
inkscape:cx="-27.719009"
inkscape:cy="-12.144383"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="2560"
inkscape:window-height="1422"
inkscape:window-x="0"
inkscape:window-y="18"
inkscape:window-maximized="0" />
<metadata
id="metadata164150">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-120.18687,-92.016611)">
<path
style="fill:#5c5c5c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775"
d="m 121.71098,92.016611 v 4.142384 h -1.52411 v -4.142384 z m 0,0"
id="path162662"
inkscape:connector-curvature="0" />
<path
style="fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775"
d="m 121.71098,92.449314 v 3.276974 h -1.52411 v -3.276974 z m 0,0"
id="path162664"
inkscape:connector-curvature="0" />
</g>
</svg>

+ 71
- 0
res/ComponentLibrary/LEDSliderYellowHandle.svg View File

@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1.52411mm"
height="4.1423841mm"
viewBox="0 0 1.52411 4.142384"
version="1.1"
id="svg164153"
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
sodipodi:docname="LEDSliderYellowHandle.svg">
<defs
id="defs164147" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.9195959"
inkscape:cx="-37.393768"
inkscape:cy="-10.378115"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="2560"
inkscape:window-height="1422"
inkscape:window-x="0"
inkscape:window-y="18"
inkscape:window-maximized="0" />
<metadata
id="metadata164150">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-122.74665,-92.483936)">
<path
style="fill:#5c5c5c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775"
d="m 124.27076,92.483936 v 4.142384 h -1.52411 v -4.142384 z m 0,0"
id="path162654"
inkscape:connector-curvature="0" />
<path
style="fill:#ffd714;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775"
d="m 124.27076,92.918018 v 3.275599 h -1.52411 v -3.275599 z m 0,0"
id="path162656"
inkscape:connector-curvature="0" />
</g>
</svg>

+ 0
- 2
src/app/CircularShadow.cpp View File

@@ -7,8 +7,6 @@ namespace rack {
CircularShadow::CircularShadow() {
blurRadius = 0;
opacity = 0.15;
// blurRadius = 0;
// opacity = 0.15;
}

void CircularShadow::draw(NVGcontext *vg) {


+ 1
- 0
src/app/Knob.cpp View File

@@ -30,6 +30,7 @@ void Knob::onDragMove(EventDragMove &e) {
if (windowIsModPressed())
delta /= 16.0;
dragValue += delta;
dragValue = clamp(dragValue, minValue, maxValue);
if (snap)
setValue(roundf(dragValue));
else


+ 0
- 30
src/app/SVGFader.cpp View File

@@ -1,30 +0,0 @@
#include "app.hpp"


namespace rack {


SVGFader::SVGFader() {
background = new SVGWidget();
addChild(background);

handle = new SVGWidget();
addChild(handle);
}

void SVGFader::step() {
if (dirty) {
// Update handle position
Vec handlePos = Vec(rescale(value, minValue, maxValue, minHandlePos.x, maxHandlePos.x), rescale(value, minValue, maxValue, minHandlePos.y, maxHandlePos.y));
handle->box.pos = handlePos;
}
FramebufferWidget::step();
}

void SVGFader::onChange(EventChange &e) {
dirty = true;
Knob::onChange(e);
}


} // namespace rack

+ 14
- 0
src/app/SVGPort.cpp View File

@@ -5,10 +5,24 @@ namespace rack {


SVGPort::SVGPort() {
shadow = new CircularShadow();
addChild(shadow);
// Avoid breakage if plugins fail to call setSVG()
// In that case, just disable the shadow.
shadow->box.size = Vec();

background = new SVGWidget();
addChild(background);
}

void SVGPort::setSVG(std::shared_ptr<SVG> svg) {
background->setSVG(svg);
box.size = background->box.size;
shadow->box.size = background->box.size;
shadow->box.pos = Vec(0, background->box.size.y * 0.1);
// shadow->box = shadow->box.grow(Vec(2, 2));
}

void SVGPort::draw(NVGcontext *vg) {
Port::draw(vg);
FramebufferWidget::draw(vg);


+ 37
- 0
src/app/SVGSlider.cpp View File

@@ -0,0 +1,37 @@
#include "app.hpp"


namespace rack {


SVGSlider::SVGSlider() {
background = new SVGWidget();
addChild(background);

handle = new SVGWidget();
addChild(handle);
}

void SVGSlider::setSVGs(std::shared_ptr<SVG> backgroundSVG, std::shared_ptr<SVG> handleSVG) {
background->setSVG(backgroundSVG);
box.size = background->box.size;
if (handleSVG) {
handle->setSVG(handleSVG);
}
}

void SVGSlider::step() {
if (dirty) {
// Interpolate handle position
handle->box.pos = Vec(rescale(value, minValue, maxValue, minHandlePos.x, maxHandlePos.x), rescale(value, minValue, maxValue, minHandlePos.y, maxHandlePos.y));
}
FramebufferWidget::step();
}

void SVGSlider::onChange(EventChange &e) {
dirty = true;
Knob::onChange(e);
}


} // namespace rack

Loading…
Cancel
Save