@@ -87,10 +87,10 @@ Build plugin. | |||
All **source code** in this repository is licensed under [BSD-3-Clause](LICENSE.txt) by [Andrew Belt](https://andrewbelt.name/). | |||
**Component Library graphics** in `res/ComponentLibrary` are licensed under [CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/) by [Grayscale](http://grayscale.info/). Commercial plugins must request a commercial license to use Component Library graphics. | |||
**Component Library graphics** in `res/ComponentLibrary` are licensed under [CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/) by [Grayscale](http://grayscale.info/). Commercial plugins must request a commercial license to use Component Library graphics by emailing contact@vcvrack.com. | |||
**Core** panel graphics in `res/Core` are copyright © 2017 by Grayscale. You may not create derivative works of Core panels. | |||
**Core** panel graphics in `res/Core` are copyright © 2017 Grayscale. You may not create derivative works of Core panels. | |||
The **VCV logo and icon** are copyright © 2017 by Grayscale and may not be used in derivative works. | |||
The **VCV logo and icon** are copyright © 2017 Andrew Belt and may not be used in derivative works. | |||
The **"VCV" brand name** is trademarked and may not be used for unofficial products. However, it is acceptable to use the phrase "for VCV Rack" for promotion of your plugin. | |||
The **"VCV" name** is trademarked and may not be used for unofficial products. However, it is acceptable to use the phrase "for VCV Rack" for promotion of your plugin. For all other purposes, email contact@vcvrack.com. |
@@ -36,7 +36,7 @@ struct Module; | |||
struct Wire; | |||
struct RackWidget; | |||
struct ParamWidget; | |||
struct Parameter; | |||
struct Port; | |||
struct SVGPanel; | |||
@@ -58,14 +58,14 @@ struct ModuleWidget : OpaqueWidget { | |||
SVGPanel *panel = NULL; | |||
std::vector<Port*> inputs; | |||
std::vector<Port*> outputs; | |||
std::vector<ParamWidget*> params; | |||
std::vector<Parameter*> params; | |||
ModuleWidget(Module *module); | |||
~ModuleWidget(); | |||
/** Convenience functions for adding special widgets (calls addChild()) */ | |||
void addInput(Port *input); | |||
void addOutput(Port *output); | |||
void addParam(ParamWidget *param); | |||
void addParam(Parameter *param); | |||
void setPanel(std::shared_ptr<SVG> svg); | |||
virtual json_t *toJson(); | |||
@@ -200,16 +200,31 @@ struct SVGPanel : FramebufferWidget { | |||
}; | |||
//////////////////// | |||
// params | |||
// ParamWidgets and other components | |||
//////////////////// | |||
/** A Widget that exists on a Panel and interacts with a Module */ | |||
struct Component : OpaqueWidget { | |||
Module *module = NULL; | |||
template <typename T = Component> | |||
static T *create(Vec pos, Module *module) { | |||
T *o = new T(); | |||
o->box.pos = pos; | |||
o->module = module; | |||
return o; | |||
} | |||
}; | |||
struct CircularShadow : TransparentWidget { | |||
float blur = 0.0; | |||
float blurRadius; | |||
float opacity; | |||
CircularShadow(); | |||
void draw(NVGcontext *vg) override; | |||
}; | |||
struct ParamWidget : OpaqueWidget, QuantityWidget { | |||
Module *module = NULL; | |||
/** A Component which has control over a Param (defined in engine.hpp) */ | |||
struct Parameter : Component, QuantityWidget { | |||
int paramId; | |||
/** Used to momentarily disable value randomization | |||
To permanently disable or change randomization behavior, override the randomize() method instead of changing this. | |||
@@ -225,10 +240,9 @@ struct ParamWidget : OpaqueWidget, QuantityWidget { | |||
void onMouseDown(EventMouseDown &e) override; | |||
void onChange(EventChange &e) override; | |||
template <typename T = ParamWidget> | |||
template <typename T = Parameter> | |||
static T *create(Vec pos, Module *module, int paramId, float minValue, float maxValue, float defaultValue) { | |||
T *o = Widget::create<T>(pos); | |||
o->module = module; | |||
T *o = Component::create<T>(pos, module); | |||
o->paramId = paramId; | |||
o->setLimits(minValue, maxValue); | |||
o->setDefaultValue(defaultValue); | |||
@@ -236,8 +250,11 @@ struct ParamWidget : OpaqueWidget, QuantityWidget { | |||
} | |||
}; | |||
/** Deprecated name of Parameter */ | |||
typedef Parameter ParamWidget; | |||
/** Implements vertical dragging behavior for ParamWidgets */ | |||
struct Knob : ParamWidget { | |||
struct Knob : Parameter { | |||
/** Snap to nearest integer while dragging */ | |||
bool snap = false; | |||
/** Multiplier for mouse movement to adjust knob value */ | |||
@@ -249,18 +266,19 @@ struct Knob : ParamWidget { | |||
void onDragEnd(EventDragEnd &e) override; | |||
}; | |||
struct SpriteKnob : virtual Knob, SpriteWidget { | |||
/** Deprecated */ | |||
struct SpriteKnob : Knob, SpriteWidget { | |||
int minIndex, maxIndex, spriteCount; | |||
void step() override; | |||
}; | |||
/** A knob which rotates an SVG and caches it in a framebuffer */ | |||
struct SVGKnob : virtual Knob, FramebufferWidget { | |||
/** Angles in radians */ | |||
float minAngle, maxAngle; | |||
/** Not owned */ | |||
struct SVGKnob : Knob, FramebufferWidget { | |||
TransformWidget *tw; | |||
SVGWidget *sw; | |||
CircularShadow *shadow; | |||
/** Angles in radians */ | |||
float minAngle, maxAngle; | |||
SVGKnob(); | |||
void setSVG(std::shared_ptr<SVG> svg); | |||
@@ -268,26 +286,28 @@ struct SVGKnob : virtual Knob, FramebufferWidget { | |||
void onChange(EventChange &e) override; | |||
}; | |||
struct SVGFader : Knob, FramebufferWidget { | |||
/** Intermediate positions will be interpolated between these positions */ | |||
Vec minHandlePos, maxHandlePos; | |||
/** Not owned */ | |||
/** Behaves like a knob but linearly moves an SVGWidget between two points. | |||
Can be used for horizontal or vertical linear faders. | |||
*/ | |||
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; | |||
}; | |||
struct Switch : ParamWidget { | |||
}; | |||
/** Deprecated name for SVGSlider */ | |||
typedef SVGSlider SVGFader; | |||
struct SVGSwitch : virtual Switch, FramebufferWidget { | |||
/** A Parameter with multiple frames corresponding to its value */ | |||
struct SVGSwitch : virtual Parameter, FramebufferWidget { | |||
std::vector<std::shared_ptr<SVG>> frames; | |||
/** Not owned */ | |||
SVGWidget *sw; | |||
SVGSwitch(); | |||
/** Adds an SVG file to represent the next switch position */ | |||
void addFrame(std::shared_ptr<SVG> svg); | |||
@@ -295,29 +315,33 @@ struct SVGSwitch : virtual Switch, FramebufferWidget { | |||
}; | |||
/** A switch that cycles through each mechanical position */ | |||
struct ToggleSwitch : virtual Switch { | |||
void onDragStart(EventDragStart &e) override { | |||
// Cycle through values | |||
// e.g. a range of [0.0, 3.0] would have modes 0, 1, 2, and 3. | |||
if (value >= maxValue) | |||
setValue(minValue); | |||
else | |||
setValue(value + 1.0); | |||
} | |||
struct ToggleSwitch : virtual Parameter { | |||
void onDragStart(EventDragStart &e) override; | |||
}; | |||
/** A switch that is turned on when held */ | |||
struct MomentarySwitch : virtual Switch { | |||
/** A switch that is turned on when held and turned off when released. | |||
Consider using SVGButton if the switch simply changes the state of your Module when clicked. | |||
*/ | |||
struct MomentarySwitch : virtual Parameter { | |||
/** Don't randomize state */ | |||
void randomize() override {} | |||
void onDragStart(EventDragStart &e) override { | |||
setValue(maxValue); | |||
EventAction eAction; | |||
onAction(eAction); | |||
} | |||
void onDragEnd(EventDragEnd &e) override { | |||
setValue(minValue); | |||
} | |||
void onDragStart(EventDragStart &e) override; | |||
void onDragEnd(EventDragEnd &e) override; | |||
}; | |||
/** A Component with a default (up) and active (down) state when clicked. | |||
Does not modify a Param, simply calls onAction() of a subclass. | |||
*/ | |||
struct SVGButton : Component, FramebufferWidget { | |||
Module *module = NULL; | |||
std::shared_ptr<SVG> defaultSVG; | |||
std::shared_ptr<SVG> activeSVG; | |||
SVGWidget *sw; | |||
SVGButton(); | |||
/** If `activeSVG` is NULL, `defaultSVG` is used as the active state instead. */ | |||
void setSVGs(std::shared_ptr<SVG> defaultSVG, std::shared_ptr<SVG> activeSVG); | |||
void onDragStart(EventDragStart &e) override; | |||
void onDragEnd(EventDragEnd &e) override; | |||
}; | |||
//////////////////// | |||
@@ -426,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; | |||
@@ -450,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; | |||
} | |||
@@ -460,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; | |||
}; | |||
@@ -43,17 +43,18 @@ struct AudioIO { | |||
void setSampleRate(int sampleRate); | |||
void setBlockSize(int blockSize); | |||
void setChannels(int numOutputs, int numInputs); | |||
/** Must close the stream before opening */ | |||
void openStream(); | |||
void closeStream(); | |||
/** Returns whether the audio stream is open and running */ | |||
bool isActive(); | |||
std::vector<int> getSampleRates(); | |||
virtual void processStream(const float *input, float *output, int frames) {} | |||
virtual void onCloseStream() {} | |||
virtual void onOpenStream() {} | |||
virtual void onChannelsChange() {} | |||
json_t *toJson(); | |||
void fromJson(json_t *rootJ); | |||
}; | |||
@@ -5,14 +5,13 @@ | |||
namespace rack { | |||
static const int BRIDGE_CHANNELS = 16; | |||
static const int BRIDGE_NUM_PORTS = 16; | |||
void bridgeInit(); | |||
void bridgeDestroy(); | |||
void bridgeAudioSubscribe(int channel, AudioIO *audio); | |||
void bridgeAudioUnsubscribe(int channel, AudioIO *audio); | |||
bool bridgeAudioIsSubscribed(int channel, AudioIO *audio); | |||
} // namespace rack |
@@ -36,31 +36,30 @@ struct RoundKnob : SVGKnob { | |||
struct RoundBlackKnob : RoundKnob { | |||
RoundBlackKnob() { | |||
setSVG(SVG::load(assetGlobal("res/ComponentLibrary/RoundBlack.svg"))); | |||
box.size = Vec(38, 38); | |||
setSVG(SVG::load(assetGlobal("res/ComponentLibrary/RoundBlackKnob.svg"))); | |||
} | |||
}; | |||
struct RoundSmallBlackKnob : RoundBlackKnob { | |||
struct RoundSmallBlackKnob : RoundKnob { | |||
RoundSmallBlackKnob() { | |||
box.size = Vec(28, 28); | |||
setSVG(SVG::load(assetGlobal("res/ComponentLibrary/RoundSmallBlackKnob.svg"))); | |||
} | |||
}; | |||
struct RoundLargeBlackKnob : RoundBlackKnob { | |||
struct RoundLargeBlackKnob : RoundKnob { | |||
RoundLargeBlackKnob() { | |||
box.size = Vec(46, 46); | |||
setSVG(SVG::load(assetGlobal("res/ComponentLibrary/RoundLargeBlackKnob.svg"))); | |||
} | |||
}; | |||
struct RoundHugeBlackKnob : RoundBlackKnob { | |||
struct RoundHugeBlackKnob : RoundKnob { | |||
RoundHugeBlackKnob() { | |||
box.size = Vec(56, 56); | |||
setSVG(SVG::load(assetGlobal("res/ComponentLibrary/RoundHugeBlackKnob.svg"))); | |||
} | |||
}; | |||
struct RoundSmallBlackSnapKnob : RoundSmallBlackKnob { | |||
RoundSmallBlackSnapKnob() { | |||
struct RoundBlackSnapKnob : RoundBlackKnob { | |||
RoundBlackSnapKnob() { | |||
snap = true; | |||
smooth = false; | |||
} | |||
@@ -294,7 +293,6 @@ struct SynthTechAlco : SVGKnob { | |||
struct Trimpot : SVGKnob { | |||
Trimpot() { | |||
box.size = Vec(17, 17); | |||
minAngle = -0.75*M_PI; | |||
maxAngle = 0.75*M_PI; | |||
setSVG(SVG::load(assetGlobal("res/ComponentLibrary/Trimpot.svg"))); | |||
@@ -303,7 +301,6 @@ struct Trimpot : SVGKnob { | |||
struct BefacoBigKnob : SVGKnob { | |||
BefacoBigKnob() { | |||
box.size = Vec(75, 75); | |||
minAngle = -0.75*M_PI; | |||
maxAngle = 0.75*M_PI; | |||
setSVG(SVG::load(assetGlobal("res/ComponentLibrary/BefacoBigKnob.svg"))); | |||
@@ -319,52 +316,81 @@ struct BefacoBigSnapKnob : BefacoBigKnob { | |||
struct BefacoTinyKnob : SVGKnob { | |||
BefacoTinyKnob() { | |||
box.size = Vec(26, 26); | |||
minAngle = -0.75*M_PI; | |||
maxAngle = 0.75*M_PI; | |||
setSVG(SVG::load(assetGlobal("res/ComponentLibrary/BefacoTinyKnob.svg"))); | |||
} | |||
}; | |||
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"))); | |||
} | |||
}; | |||
@@ -452,6 +478,26 @@ struct TinyLight : BASE { | |||
} | |||
}; | |||
/** A light to displayed over PB61303. Must add a color by subclassing or templating. */ | |||
template <typename BASE> | |||
struct LEDBezelLight : BASE { | |||
LEDBezelLight() { | |||
this->bgColor = COLOR_BLACK_TRANSPARENT; | |||
this->box.size = mm2px(Vec(6.0, 6.0)); | |||
} | |||
}; | |||
/** A light to displayed over PB61303. Must add a color by subclassing or templating. | |||
Don't add this as a child of the PB61303 itself. Instead, just place it over it as a sibling in the scene graph, offset by mm2px(Vec(0.5, 0.5)). | |||
*/ | |||
template <typename BASE> | |||
struct PB61303Light : BASE { | |||
PB61303Light() { | |||
this->bgColor = COLOR_BLACK_TRANSPARENT; | |||
this->box.size = mm2px(Vec(9.0, 9.0)); | |||
} | |||
}; | |||
//////////////////// | |||
// Switches and Buttons | |||
@@ -515,18 +561,29 @@ struct BefacoPush : SVGSwitch, MomentarySwitch { | |||
} | |||
}; | |||
struct LEDBezel : SVGSwitch, MomentarySwitch { | |||
LEDBezel() { | |||
addFrame(SVG::load(assetGlobal("res/ComponentLibrary/LEDBezel.svg"))); | |||
} | |||
}; | |||
struct PB61303 : SVGSwitch, MomentarySwitch { | |||
PB61303() { | |||
addFrame(SVG::load(assetGlobal("res/ComponentLibrary/PB61303.svg"))); | |||
} | |||
}; | |||
struct LEDBezel : SVGSwitch, MomentarySwitch { | |||
LEDBezel() { | |||
addFrame(SVG::load(assetGlobal("res/ComponentLibrary/LEDBezel.svg"))); | |||
struct PB61303Button : SVGButton { | |||
PB61303Button() { | |||
setSVGs(SVG::load(assetGlobal("res/ComponentLibrary/PB61303.svg")), NULL); | |||
} | |||
}; | |||
struct LEDBezelButton : SVGButton { | |||
LEDBezelButton() { | |||
setSVGs(SVG::load(assetGlobal("res/ComponentLibrary/LEDBezel.svg")), NULL); | |||
} | |||
}; | |||
//////////////////// | |||
// Misc | |||
@@ -257,6 +257,12 @@ struct Rect { | |||
r.size = size; | |||
return r; | |||
} | |||
Rect grow(Vec delta) { | |||
Rect r; | |||
r.pos = pos.minus(delta); | |||
r.size = size.plus(delta.mult(2.f)); | |||
return r; | |||
} | |||
}; | |||
@@ -9,376 +9,15 @@ | |||
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="25.664583mm" | |||
height="25.66571mm" | |||
viewBox="0 0 25.664584 25.665714" | |||
width="26.000004mm" | |||
height="26.001146mm" | |||
viewBox="0 0 26.000004 26.001146" | |||
version="1.1" | |||
id="svg15246" | |||
sodipodi:docname="BefacoBigKnob.svg" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06"> | |||
id="svg113936" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
sodipodi:docname="BefacoBigKnob.svg"> | |||
<defs | |||
id="defs15240"> | |||
<clipPath | |||
id="clip89"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="18" | |||
height="19" | |||
id="rect4864" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip90"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 0.898438,0.128906 h 16.25 v 17.882813 h -16.25 z m 0,0" | |||
id="path4861" /> | |||
</clipPath> | |||
<mask | |||
id="mask44"> | |||
<g | |||
style="filter:url(#alpha)" | |||
id="g4858" | |||
transform="matrix(0.26458333,0,0,0.26458333,89.358789,128.57765)"> | |||
<rect | |||
x="0" | |||
y="0" | |||
width="3052.8701" | |||
height="3351.5" | |||
style="fill:#000000;fill-opacity:0.14999402;stroke:none" | |||
id="rect4856" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="alpha" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix4149" /> | |||
</filter> | |||
<clipPath | |||
id="clipPath17821"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="18" | |||
height="19" | |||
id="rect17819" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath17825"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 0.898438,0.128906 h 16.25 v 17.882813 h -16.25 z m 0,0" | |||
id="path17823" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip87"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="24" | |||
height="26" | |||
id="rect4848" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip88"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 0.683594,0.921875 h 22.679687 v 24.9375 H 0.683594 Z m 0,0" | |||
id="path4845" /> | |||
</clipPath> | |||
<mask | |||
id="mask43"> | |||
<g | |||
style="filter:url(#alpha)" | |||
id="g4842" | |||
transform="matrix(0.26458333,0,0,0.26458333,89.358789,128.57765)"> | |||
<rect | |||
x="0" | |||
y="0" | |||
width="3052.8701" | |||
height="3351.5" | |||
style="fill:#000000;fill-opacity:0.14999402;stroke:none" | |||
id="rect4840" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="filter17836" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix17834" /> | |||
</filter> | |||
<clipPath | |||
id="clipPath17840"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="24" | |||
height="26" | |||
id="rect17838" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath17844"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 0.683594,0.921875 h 22.679687 v 24.9375 H 0.683594 Z m 0,0" | |||
id="path17842" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip95"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="18" | |||
height="18" | |||
id="rect4912" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip96"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.140625,0.140625 H 17.199219 V 17.199219 H 0.140625 Z m 0,0" | |||
id="path4909" /> | |||
</clipPath> | |||
<mask | |||
id="mask47"> | |||
<g | |||
style="filter:url(#alpha-3)" | |||
id="g4906" | |||
transform="matrix(0.26458333,0,0,0.26458333,88.611154,119.19859)"> | |||
<rect | |||
x="0" | |||
y="0" | |||
width="3052.8701" | |||
height="3351.5" | |||
style="fill:#000000;fill-opacity:0.33000201;stroke:none" | |||
id="rect4904" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="alpha-3" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix4149-6" /> | |||
</filter> | |||
<clipPath | |||
id="clipPath18541"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="18" | |||
height="18" | |||
id="rect18539" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath18545"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.140625,0.140625 H 17.199219 V 17.199219 H 0.140625 Z m 0,0" | |||
id="path18543" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip93"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="22" | |||
height="24" | |||
id="rect4896" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip94"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.0390625,0.0390625 H 21.300781 V 23.421875 H 0.0390625 Z m 0,0" | |||
id="path4893" /> | |||
</clipPath> | |||
<mask | |||
id="mask46"> | |||
<g | |||
style="filter:url(#alpha-3)" | |||
id="g4890" | |||
transform="matrix(0.26458333,0,0,0.26458333,88.611154,119.19859)"> | |||
<rect | |||
x="0" | |||
y="0" | |||
width="3052.8701" | |||
height="3351.5" | |||
style="fill:#000000;fill-opacity:0.14999402;stroke:none" | |||
id="rect4888" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="filter18556" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix18554" /> | |||
</filter> | |||
<clipPath | |||
id="clipPath18560"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="22" | |||
height="24" | |||
id="rect18558" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath18564"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.0390625,0.0390625 H 21.300781 V 23.421875 H 0.0390625 Z m 0,0" | |||
id="path18562" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip91"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="29" | |||
height="32" | |||
id="rect4880" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip92"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.507812,0.5 H 28.855469 V 31.679688 H 0.507812 Z m 0,0" | |||
id="path4877" /> | |||
</clipPath> | |||
<mask | |||
id="mask45"> | |||
<g | |||
style="filter:url(#alpha-3)" | |||
id="g4874" | |||
transform="matrix(0.26458333,0,0,0.26458333,88.611154,119.19859)"> | |||
<rect | |||
x="0" | |||
y="0" | |||
width="3052.8701" | |||
height="3351.5" | |||
style="fill:#000000;fill-opacity:0.14999402;stroke:none" | |||
id="rect4872" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="filter18575" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix18573" /> | |||
</filter> | |||
<clipPath | |||
id="clipPath18579"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="29" | |||
height="32" | |||
id="rect18577" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath18583"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.507812,0.5 H 28.855469 V 31.679688 H 0.507812 Z m 0,0" | |||
id="path18581" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip202"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="18" | |||
height="18" | |||
id="rect5795" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip203"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.855469,0.140625 H 17.914062 V 17.199219 H 0.855469 Z m 0,0" | |||
id="path5792" /> | |||
</clipPath> | |||
<mask | |||
id="mask104"> | |||
<g | |||
style="filter:url(#alpha-7)" | |||
id="g5789" | |||
transform="matrix(0.26458333,0,0,0.26458333,74.416306,97.613551)"> | |||
<rect | |||
x="0" | |||
y="0" | |||
width="3052.8701" | |||
height="3351.5" | |||
style="fill:#000000;fill-opacity:0.33000201;stroke:none" | |||
id="rect5787" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="alpha-7" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix4149-5" /> | |||
</filter> | |||
<clipPath | |||
id="clipPath18765"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="18" | |||
height="18" | |||
id="rect18763" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath18769"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.855469,0.140625 H 17.914062 V 17.199219 H 0.855469 Z m 0,0" | |||
id="path18767" /> | |||
</clipPath> | |||
</defs> | |||
id="defs113930" /> | |||
<sodipodi:namedview | |||
id="base" | |||
pagecolor="#ffffff" | |||
@@ -386,24 +25,23 @@ | |||
borderopacity="1.0" | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="1.979899" | |||
inkscape:cx="87.773411" | |||
inkscape:cy="59.915557" | |||
inkscape:document-units="px" | |||
inkscape:zoom="5.6" | |||
inkscape:cx="14.009349" | |||
inkscape:cy="28.754907" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
showgrid="false" | |||
inkscape:window-width="1274" | |||
inkscape:window-height="1434" | |||
inkscape:window-x="1280" | |||
inkscape:window-y="0" | |||
inkscape:window-maximized="0" | |||
units="px" | |||
fit-margin-top="0" | |||
fit-margin-left="0" | |||
fit-margin-right="0" | |||
fit-margin-bottom="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="metadata15243"> | |||
id="metadata113933"> | |||
<rdf:RDF> | |||
<cc:Work | |||
rdf:about=""> | |||
@@ -418,26 +56,26 @@ | |||
inkscape:label="Layer 1" | |||
inkscape:groupmode="layer" | |||
id="layer1" | |||
transform="translate(-35.482976,-90.654687)"> | |||
transform="translate(-80.833177,-85.089003)"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path8601" | |||
d="m 61.147561,103.48699 c 0,7.08725 -5.74505,12.83341 -12.832292,12.83341 -7.087243,0 -12.832293,-5.74616 -12.832293,-12.83341 0,-7.086131 5.74505,-12.832303 12.832293,-12.832303 7.087242,0 12.832292,5.746172 12.832292,12.832303" | |||
style="fill:#d4d4d4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.28420019" /> | |||
style="fill:#d4d4d4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2879144" | |||
d="m 106.83318,98.089007 c 0,7.179863 -5.82014,13.001143 -13.000007,13.001143 -7.179864,0 -12.999996,-5.82128 -12.999996,-13.001143 0,-7.178735 5.820132,-13.000004 12.999996,-13.000004 7.179867,0 13.000007,5.821269 13.000007,13.000004" | |||
id="path109718" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path8603" | |||
d="m 57.727183,98.408023 c -0.629474,-1.174541 -1.474287,-2.215876 -2.478992,-3.075134 -1.937223,0.271988 -3.943278,-0.692738 -4.94463,-2.372407 -0.643883,-0.122118 -1.308884,-0.187618 -1.988292,-0.187618 -0.679408,0 -1.3433,0.0655 -1.988294,0.187618 -1.00135,1.679669 -3.006296,2.644395 -4.944627,2.372407 -1.004706,0.859258 -1.849519,1.900593 -2.478994,3.075134 0.71715,1.853957 0.205392,4.067617 -1.254488,5.418667 0.04774,1.34552 0.340842,2.62774 0.840408,3.80119 1.942764,0.58283 3.389316,2.4046 3.515869,4.43063 1.029117,0.75603 2.199227,1.32997 3.462581,1.67855 1.673003,-1.17786 4.022088,-1.17786 5.69509,0 1.263355,-0.34858 2.433463,-0.92252 3.463689,-1.67855 0.125446,-2.02603 1.571996,-3.8478 3.51587,-4.43063 0.499566,-1.17345 0.792663,-2.45567 0.83927,-3.80119 -1.45985,-1.35105 -1.970501,-3.56471 -1.25446,-5.418667" | |||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.28420019" /> | |||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2879144" | |||
d="m 103.36809,92.943667 c -0.6377,-1.189896 -1.49355,-2.244833 -2.51139,-3.115323 -1.962536,0.275543 -3.99481,-0.701791 -5.009247,-2.403411 -0.652299,-0.123713 -1.32599,-0.190069 -2.01428,-0.190069 -0.688287,0 -1.360855,0.06636 -2.014277,0.190069 -1.014438,1.70162 -3.045587,2.678954 -5.00925,2.403411 -1.017835,0.87049 -1.873689,1.925427 -2.51139,3.115323 0.726523,1.878194 0.208076,4.120774 -1.270883,5.489499 0.04838,1.363087 0.345295,2.662074 0.851391,3.850844 1.968154,0.59045 3.433609,2.43604 3.561817,4.48854 1.042568,0.76591 2.227968,1.34736 3.507834,1.7005 1.694867,-1.19327 4.074651,-1.19327 5.769516,0 1.279864,-0.35314 2.465268,-0.93459 3.508959,-1.7005 0.12709,-2.0525 1.59254,-3.89809 3.56182,-4.48854 0.50609,-1.18877 0.80302,-2.487757 0.85024,-3.850844 -1.47894,-1.368725 -1.99626,-3.611305 -1.27086,-5.489499" | |||
id="path109720" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path8605" | |||
d="m 48.76709,91.713777 c 0,0.249785 -0.203146,0.450724 -0.451821,0.450724 -0.248676,0 -0.450713,-0.200939 -0.450713,-0.450724 0,-0.249785 0.202037,-0.450726 0.450713,-0.450726 0.248675,0 0.451821,0.200941 0.451821,0.450726" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.28420019" /> | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2879144" | |||
d="m 94.2909,86.161932 c 0,0.253052 -0.205801,0.456617 -0.457727,0.456617 -0.251924,0 -0.456603,-0.203565 -0.456603,-0.456617 0,-0.253046 0.204679,-0.456614 0.456603,-0.456614 0.251926,0 0.457727,0.203568 0.457727,0.456614" | |||
id="path109722" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path8607" | |||
d="m 48.76709,103.48809 h -0.902534 v -9.733847 h 0.902534 z m 0,0" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.28420019" /> | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2879144" | |||
d="m 94.2909,98.090134 h -0.91433 v -9.861065 h 0.91433 z m 0,0" | |||
id="path109724" /> | |||
</g> | |||
</svg> |
@@ -9,376 +9,15 @@ | |||
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="8.6999998mm" | |||
height="8.7000618mm" | |||
viewBox="0 0 8.7000002 8.7000631" | |||
width="9.0000019mm" | |||
height="9.0000801mm" | |||
viewBox="0 0 9.0000016 9.00008" | |||
version="1.1" | |||
id="svg15246" | |||
sodipodi:docname="BefacoTinyKnob.svg" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06"> | |||
id="svg113936" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
sodipodi:docname="BefacoTinyKnob.svg"> | |||
<defs | |||
id="defs15240"> | |||
<clipPath | |||
id="clip89"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="18" | |||
height="19" | |||
id="rect4864" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip90"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 0.898438,0.128906 h 16.25 v 17.882813 h -16.25 z m 0,0" | |||
id="path4861" /> | |||
</clipPath> | |||
<mask | |||
id="mask44"> | |||
<g | |||
style="filter:url(#alpha)" | |||
id="g4858" | |||
transform="matrix(0.26458333,0,0,0.26458333,89.358789,128.57765)"> | |||
<rect | |||
x="0" | |||
y="0" | |||
width="3052.8701" | |||
height="3351.5" | |||
style="fill:#000000;fill-opacity:0.14999402;stroke:none" | |||
id="rect4856" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="alpha" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix4149" /> | |||
</filter> | |||
<clipPath | |||
id="clipPath17821"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="18" | |||
height="19" | |||
id="rect17819" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath17825"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 0.898438,0.128906 h 16.25 v 17.882813 h -16.25 z m 0,0" | |||
id="path17823" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip87"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="24" | |||
height="26" | |||
id="rect4848" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip88"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 0.683594,0.921875 h 22.679687 v 24.9375 H 0.683594 Z m 0,0" | |||
id="path4845" /> | |||
</clipPath> | |||
<mask | |||
id="mask43"> | |||
<g | |||
style="filter:url(#alpha)" | |||
id="g4842" | |||
transform="matrix(0.26458333,0,0,0.26458333,89.358789,128.57765)"> | |||
<rect | |||
x="0" | |||
y="0" | |||
width="3052.8701" | |||
height="3351.5" | |||
style="fill:#000000;fill-opacity:0.14999402;stroke:none" | |||
id="rect4840" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="filter17836" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix17834" /> | |||
</filter> | |||
<clipPath | |||
id="clipPath17840"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="24" | |||
height="26" | |||
id="rect17838" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath17844"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 0.683594,0.921875 h 22.679687 v 24.9375 H 0.683594 Z m 0,0" | |||
id="path17842" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip95"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="18" | |||
height="18" | |||
id="rect4912" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip96"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.140625,0.140625 H 17.199219 V 17.199219 H 0.140625 Z m 0,0" | |||
id="path4909" /> | |||
</clipPath> | |||
<mask | |||
id="mask47"> | |||
<g | |||
style="filter:url(#alpha-3)" | |||
id="g4906" | |||
transform="matrix(0.26458333,0,0,0.26458333,88.611154,119.19859)"> | |||
<rect | |||
x="0" | |||
y="0" | |||
width="3052.8701" | |||
height="3351.5" | |||
style="fill:#000000;fill-opacity:0.33000201;stroke:none" | |||
id="rect4904" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="alpha-3" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix4149-6" /> | |||
</filter> | |||
<clipPath | |||
id="clipPath18541"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="18" | |||
height="18" | |||
id="rect18539" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath18545"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.140625,0.140625 H 17.199219 V 17.199219 H 0.140625 Z m 0,0" | |||
id="path18543" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip93"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="22" | |||
height="24" | |||
id="rect4896" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip94"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.0390625,0.0390625 H 21.300781 V 23.421875 H 0.0390625 Z m 0,0" | |||
id="path4893" /> | |||
</clipPath> | |||
<mask | |||
id="mask46"> | |||
<g | |||
style="filter:url(#alpha-3)" | |||
id="g4890" | |||
transform="matrix(0.26458333,0,0,0.26458333,88.611154,119.19859)"> | |||
<rect | |||
x="0" | |||
y="0" | |||
width="3052.8701" | |||
height="3351.5" | |||
style="fill:#000000;fill-opacity:0.14999402;stroke:none" | |||
id="rect4888" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="filter18556" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix18554" /> | |||
</filter> | |||
<clipPath | |||
id="clipPath18560"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="22" | |||
height="24" | |||
id="rect18558" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath18564"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.0390625,0.0390625 H 21.300781 V 23.421875 H 0.0390625 Z m 0,0" | |||
id="path18562" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip91"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="29" | |||
height="32" | |||
id="rect4880" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip92"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.507812,0.5 H 28.855469 V 31.679688 H 0.507812 Z m 0,0" | |||
id="path4877" /> | |||
</clipPath> | |||
<mask | |||
id="mask45"> | |||
<g | |||
style="filter:url(#alpha-3)" | |||
id="g4874" | |||
transform="matrix(0.26458333,0,0,0.26458333,88.611154,119.19859)"> | |||
<rect | |||
x="0" | |||
y="0" | |||
width="3052.8701" | |||
height="3351.5" | |||
style="fill:#000000;fill-opacity:0.14999402;stroke:none" | |||
id="rect4872" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="filter18575" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix18573" /> | |||
</filter> | |||
<clipPath | |||
id="clipPath18579"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="29" | |||
height="32" | |||
id="rect18577" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath18583"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.507812,0.5 H 28.855469 V 31.679688 H 0.507812 Z m 0,0" | |||
id="path18581" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip202"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="18" | |||
height="18" | |||
id="rect5795" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip203"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.855469,0.140625 H 17.914062 V 17.199219 H 0.855469 Z m 0,0" | |||
id="path5792" /> | |||
</clipPath> | |||
<mask | |||
id="mask104"> | |||
<g | |||
style="filter:url(#alpha-7)" | |||
id="g5789" | |||
transform="matrix(0.26458333,0,0,0.26458333,74.416306,97.613551)"> | |||
<rect | |||
x="0" | |||
y="0" | |||
width="3052.8701" | |||
height="3351.5" | |||
style="fill:#000000;fill-opacity:0.33000201;stroke:none" | |||
id="rect5787" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="alpha-7" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix4149-5" /> | |||
</filter> | |||
<clipPath | |||
id="clipPath18765"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="18" | |||
height="18" | |||
id="rect18763" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath18769"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.855469,0.140625 H 17.914062 V 17.199219 H 0.855469 Z m 0,0" | |||
id="path18767" /> | |||
</clipPath> | |||
</defs> | |||
id="defs113930" /> | |||
<sodipodi:namedview | |||
id="base" | |||
pagecolor="#ffffff" | |||
@@ -386,24 +25,23 @@ | |||
borderopacity="1.0" | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="11.2" | |||
inkscape:cx="6.9301735" | |||
inkscape:cy="26.379575" | |||
inkscape:zoom="2.8" | |||
inkscape:cx="-45.569736" | |||
inkscape:cy="83.754679" | |||
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" | |||
units="px" | |||
fit-margin-top="0" | |||
fit-margin-left="0" | |||
fit-margin-right="0" | |||
fit-margin-bottom="0" /> | |||
inkscape:window-maximized="0" /> | |||
<metadata | |||
id="metadata15243"> | |||
id="metadata113933"> | |||
<rdf:RDF> | |||
<cc:Work | |||
rdf:about=""> | |||
@@ -418,26 +56,31 @@ | |||
inkscape:label="Layer 1" | |||
inkscape:groupmode="layer" | |||
id="layer1" | |||
transform="translate(-44.329061,-94.497224)"> | |||
transform="translate(-111.86932,-85.795053)"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
style="fill:#d4d4d4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.28209424" | |||
d="m 120.10511,92.798549 c 1.38512,-2.062815 0.83525,-4.854005 -1.22757,-6.23803 -2.0617,-1.384026 -4.86062,-0.840773 -6.24463,1.222041 -1.38514,2.062814 -0.83306,4.866126 1.22866,6.251255 2.06282,1.384023 4.8595,0.827547 6.24354,-1.235266" | |||
id="path109730" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path8613" | |||
d="m 52.290324,101.26723 c 1.338942,-1.994021 0.807417,-4.692165 -1.186639,-6.030054 -1.992992,-1.337892 -4.698607,-0.812749 -6.036486,1.181298 -1.338972,1.994058 -0.805286,4.703946 1.187706,6.042896 1.994056,1.33787 4.69751,0.79991 6.035419,-1.19414" | |||
style="fill:#d4d4d4;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2726914" /> | |||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.28209424" | |||
d="m 120.02026,91.143448 c -0.46281,2.022043 -2.47716,3.285957 -4.49919,2.823148 -2.02205,-0.462813 -3.28598,-2.47714 -2.82314,-4.499182 0.46281,-2.020944 2.47713,-3.285958 4.49918,-2.82315 2.02093,0.462812 3.28594,2.477141 2.82315,4.499184" | |||
id="path109732" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path8615" | |||
d="m 52.208301,99.667339 c -0.44738,1.954671 -2.394585,3.176391 -4.349209,2.729081 -1.954654,-0.44739 -3.176442,-2.39461 -2.729042,-4.349251 0.44738,-1.953574 2.394563,-3.176427 4.349208,-2.729043 1.953568,0.447388 3.176423,2.394569 2.729043,4.349213" | |||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2726914" /> | |||
style="fill:none;stroke:#7f7878;stroke-width:0.11481237;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" | |||
d="m 120.02026,91.143463 c -0.46281,2.022042 -2.47715,3.285956 -4.49919,2.823145 -2.02204,-0.462811 -3.28595,-2.47714 -2.82314,-4.499183 0.46281,-2.020941 2.47714,-3.285957 4.49918,-2.823145 2.02094,0.46281 3.28596,2.47714 2.82315,4.499183 z m 0,0" | |||
id="path109734" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path8617" | |||
d="m 52.208301,99.667339 c -0.44738,1.954671 -2.394585,3.176391 -4.349209,2.729081 -1.954654,-0.44739 -3.176442,-2.39461 -2.729042,-4.349251 0.44738,-1.953574 2.394563,-3.176427 4.349208,-2.729043 1.953568,0.447388 3.176423,2.394569 2.729043,4.349213 z m 0,0" | |||
style="fill:none;stroke:#7f7878;stroke-width:0.11098535;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" /> | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.28209424" | |||
d="m 116.20648,88.009558 c -0.11239,-0.07603 -0.14328,-0.229201 -0.0672,-0.342701 0.0761,-0.113495 0.23029,-0.143251 0.34379,-0.06722 0.11356,0.07603 0.14325,0.229201 0.0672,0.342701 -0.076,0.113495 -0.23031,0.14325 -0.34379,0.06722" | |||
id="path109736" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path8619" | |||
d="m 48.391403,96.830763 c -0.21444,-0.145066 -0.273308,-0.437224 -0.128239,-0.653739 0.145022,-0.216515 0.439333,-0.273263 0.65581,-0.128222 0.216541,0.145032 0.273259,0.437221 0.128239,0.653732 -0.145017,0.216521 -0.439318,0.27326 -0.65581,0.128291" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.53812313" /> | |||
style="fill:none;stroke:#000000;stroke-width:0.46912277;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" | |||
d="m 116.20647,88.009571 c -0.11239,-0.07603 -0.14326,-0.229202 -0.0672,-0.3427 0.076,-0.113495 0.23032,-0.14325 0.34381,-0.06722 0.11356,0.07602 0.14325,0.229201 0.0672,0.3427 -0.076,0.113495 -0.2303,0.143251 -0.3438,0.06722 z m 0,0" | |||
id="path109738" /> | |||
</g> | |||
</svg> |
@@ -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> |
@@ -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> |
@@ -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> |
@@ -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> |
@@ -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> |
@@ -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> |
@@ -7,209 +7,17 @@ | |||
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:xlink="http://www.w3.org/1999/xlink" | |||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
width="10.000438mm" | |||
height="10.000403mm" | |||
viewBox="0 0 10.000438 10.000403" | |||
version="1.1" | |||
id="svg81475" | |||
id="svg27765" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
sodipodi:docname="PB61303.svg"> | |||
<defs | |||
id="defs81469"> | |||
<clipPath | |||
id="clip176"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="23" | |||
height="23" | |||
id="rect5578" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip177"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.335938,0.0585938 H 22.300781 V 22.023438 H 0.335938 Z m 0,0" | |||
id="path5566" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip178"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 11.316406,0.0585938 c -6.0625,0 -10.980468,4.9179682 -10.980468,10.9843752 0,6.0625 4.917968,10.980469 10.980468,10.980469 6.070313,0 10.988282,-4.917969 10.988282,-10.980469 0,-6.066407 -4.917969,-10.9843752 -10.988282,-10.9843752 m 0,0.5000002 c 5.785156,0 10.488282,4.703125 10.488282,10.484375 0,5.777343 -4.703126,10.480469 -10.488282,10.480469 -5.777344,0 -10.480468,-4.703126 -10.480468,-10.480469 0,-5.78125 4.703124,-10.484375 10.480468,-10.484375" | |||
id="path5569" /> | |||
</clipPath> | |||
<mask | |||
id="mask89"> | |||
<g | |||
style="filter:url(#alpha)" | |||
id="g5575"> | |||
<image | |||
y="-0.00263398" | |||
x="-0.51525402" | |||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAYAAADgKtSgAAAABmJLR0QA/wD/AP+gvaeTAAABMklEQVRIia3UuUoEQRDG8d+2432hoIIHCBqIqWAqGGiggan4CoKJYCr4Tia+hhiLmRhosGKg7Bp0r7ses85q/6Goobr6m5mqrq7pTq3Dmsm3aHbYj/SVxAsMpedGsuYXq2EgWWv9V8YxUiUxETCJwd8SZ6oklTCF0bLF2W6LFZnXLucHw1j4pzCxD6tfg2ti7XIwI1ZBQH8KNjKJP3SKL+I+k3CLAiGIv/GUWfwFE0E8epUGoFfxQrvmOQlSWQZ8vjNyMI16EOs9l1l8Ho8B19jILD6G14C6eC7LbsheWcddZ2AZ+xmEazhO/mPkb8UmrPxT/AhXfjjaAWdY+qPwAXa7JRQ4xVYPooM4wXbVDXu4wKby23IchzgXe/aNbsNTYCe94C3lNpLvwzMucVP1i7PyDvnKKY/BOBMhAAAAAElFTkSuQmCC" | |||
height="0.27702156" | |||
width="0.27702156" | |||
id="use5573" | |||
transform="rotate(-90)" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="alpha" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix4149" /> | |||
</filter> | |||
<mask | |||
id="mask88"> | |||
<g | |||
style="filter:url(#alpha)" | |||
id="g5563" | |||
transform="scale(0.26458333)"> | |||
<rect | |||
x="0" | |||
y="0" | |||
width="3052.8701" | |||
height="3351.5" | |||
style="fill:#000000;fill-opacity:0.33000201;stroke:none" | |||
id="rect5561" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="filter81423" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix81421" /> | |||
</filter> | |||
<clipPath | |||
id="clipPath81427"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="23" | |||
height="23" | |||
id="rect81425" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath81431"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.335938,0.0585938 H 22.300781 V 22.023438 H 0.335938 Z m 0,0" | |||
id="path81429" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath81435"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 11.316406,0.0585938 c -6.0625,0 -10.980468,4.9179682 -10.980468,10.9843752 0,6.0625 4.917968,10.980469 10.980468,10.980469 6.070313,0 10.988282,-4.917969 10.988282,-10.980469 0,-6.066407 -4.917969,-10.9843752 -10.988282,-10.9843752 m 0,0.5000002 c 5.785156,0 10.488282,4.703125 10.488282,10.484375 0,5.777343 -4.703126,10.480469 -10.488282,10.480469 -5.777344,0 -10.480468,-4.703126 -10.480468,-10.480469 0,-5.78125 4.703124,-10.484375 10.480468,-10.484375" | |||
id="path81433" /> | |||
</clipPath> | |||
<mask | |||
id="mask81441"> | |||
<g | |||
style="filter:url(#alpha)" | |||
id="g81439"> | |||
<image | |||
y="-0.00263398" | |||
x="-0.51525402" | |||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAYAAADgKtSgAAAABmJLR0QA/wD/AP+gvaeTAAABMklEQVRIia3UuUoEQRDG8d+2432hoIIHCBqIqWAqGGiggan4CoKJYCr4Tia+hhiLmRhosGKg7Bp0r7ses85q/6Goobr6m5mqrq7pTq3Dmsm3aHbYj/SVxAsMpedGsuYXq2EgWWv9V8YxUiUxETCJwd8SZ6oklTCF0bLF2W6LFZnXLucHw1j4pzCxD6tfg2ti7XIwI1ZBQH8KNjKJP3SKL+I+k3CLAiGIv/GUWfwFE0E8epUGoFfxQrvmOQlSWQZ8vjNyMI16EOs9l1l8Ho8B19jILD6G14C6eC7LbsheWcddZ2AZ+xmEazhO/mPkb8UmrPxT/AhXfjjaAWdY+qPwAXa7JRQ4xVYPooM4wXbVDXu4wKby23IchzgXe/aNbsNTYCe94C3lNpLvwzMucVP1i7PyDvnKKY/BOBMhAAAAAElFTkSuQmCC" | |||
height="0.27702156" | |||
width="0.27702156" | |||
id="use81437" | |||
transform="rotate(-90)" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="filter81445" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix81443" /> | |||
</filter> | |||
<clipPath | |||
id="clip174"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="27" | |||
height="26" | |||
id="rect5553" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip175"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.558594,0.289062 H 26.070312 V 25.800781 H 0.558594 Z m 0,0" | |||
id="path5550" /> | |||
</clipPath> | |||
<mask | |||
id="mask87"> | |||
<g | |||
style="filter:url(#alpha)" | |||
id="g5547" | |||
transform="scale(0.26458333)"> | |||
<rect | |||
x="0" | |||
y="0" | |||
width="3052.8701" | |||
height="3351.5" | |||
style="fill:#000000;fill-opacity:0.33000201;stroke:none" | |||
id="rect5545" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="filter81456" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix81454" /> | |||
</filter> | |||
<clipPath | |||
id="clipPath81460"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="27" | |||
height="26" | |||
id="rect81458" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath81464"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.558594,0.289062 H 26.070312 V 25.800781 H 0.558594 Z m 0,0" | |||
id="path81462" /> | |||
</clipPath> | |||
</defs> | |||
id="defs27759" /> | |||
<sodipodi:namedview | |||
id="base" | |||
pagecolor="#ffffff" | |||
@@ -217,9 +25,9 @@ | |||
borderopacity="1.0" | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="3.959798" | |||
inkscape:cx="-30.133384" | |||
inkscape:cy="16.667692" | |||
inkscape:zoom="2.8" | |||
inkscape:cx="-41.967543" | |||
inkscape:cy="-16.198567" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
showgrid="false" | |||
@@ -233,7 +41,7 @@ | |||
inkscape:window-y="18" | |||
inkscape:window-maximized="0" /> | |||
<metadata | |||
id="metadata81472"> | |||
id="metadata27762"> | |||
<rdf:RDF> | |||
<cc:Work | |||
rdf:about=""> | |||
@@ -248,16 +56,11 @@ | |||
inkscape:label="Layer 1" | |||
inkscape:groupmode="layer" | |||
id="layer1" | |||
transform="translate(-57.743829,-79.577179)"> | |||
transform="translate(-52.452162,-82.600989)"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path9091" | |||
d="m 67.744267,84.578086 c 0,2.760204 -2.239327,4.999496 -5.000907,4.999496 -2.760204,0 -4.999531,-2.239292 -4.999531,-4.999496 0,-2.761614 2.239327,-5.000907 4.999531,-5.000907 2.76158,0 5.000907,2.239293 5.000907,5.000907" | |||
style="fill:#211e1e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
id="path81613" | |||
d="m 67.244028,84.578086 c 0,2.484579 -2.014678,4.499293 -4.500668,4.499293 -2.484614,0 -4.499293,-2.014714 -4.499293,-4.499293 0,-2.485989 2.014679,-4.500668 4.499293,-4.500668 2.48599,0 4.500668,2.014679 4.500668,4.500668" | |||
style="clip-rule:nonzero;fill:#6a6868;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" | |||
inkscape:connector-curvature="0" /> | |||
style="fill:#211e1e;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" | |||
d="m 62.4526,87.601896 c 0,2.760204 -2.239327,4.999496 -4.999531,4.999496 -2.76158,0 -5.000907,-2.239292 -5.000907,-4.999496 0,-2.761615 2.239327,-5.000907 5.000907,-5.000907 2.760204,0 4.999531,2.239292 4.999531,5.000907" | |||
id="path26168" /> | |||
</g> | |||
</svg> |
@@ -392,9 +392,9 @@ | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
showgrid="false" | |||
inkscape:window-width="1274" | |||
inkscape:window-height="1434" | |||
inkscape:window-x="1280" | |||
inkscape:window-width="2560" | |||
inkscape:window-height="1440" | |||
inkscape:window-x="0" | |||
inkscape:window-y="0" | |||
inkscape:window-maximized="0" | |||
units="px" | |||
@@ -410,7 +410,7 @@ | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title></dc:title> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
@@ -428,11 +428,11 @@ | |||
inkscape:connector-curvature="0" | |||
id="path7717" | |||
d="m 60.430463,91.091863 c 0,2.182813 -1.768016,3.950836 -3.950828,3.950836 -2.181437,0 -3.950829,-1.768023 -3.950829,-3.950836 0,-2.181433 1.769392,-3.949456 3.950829,-3.949456 2.182812,0 3.950828,1.768023 3.950828,3.949456" | |||
style="fill:#42c5bd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#00a1a7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path7719" | |||
d="m 57.18519,85.60383 c -0.231493,-0.02893 -0.465772,-0.04961 -0.705555,-0.04961 -0.239783,0 -0.474028,0.02067 -0.705556,0.04961 v 1.701878 h 1.411111 z m 0,0" | |||
style="fill:#42c5bd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#00a1a7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
</g> | |||
</svg> |
@@ -387,15 +387,15 @@ | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="5.6" | |||
inkscape:cx="35.570219" | |||
inkscape:cx="4.6773619" | |||
inkscape:cy="11.017728" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
showgrid="false" | |||
inkscape:window-width="1274" | |||
inkscape:window-height="1434" | |||
inkscape:window-x="1280" | |||
inkscape:window-y="0" | |||
inkscape:window-width="2560" | |||
inkscape:window-height="1422" | |||
inkscape:window-x="0" | |||
inkscape:window-y="18" | |||
inkscape:window-maximized="0" | |||
units="px" | |||
fit-margin-top="0" | |||
@@ -410,7 +410,7 @@ | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title></dc:title> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
@@ -428,11 +428,11 @@ | |||
inkscape:connector-curvature="0" | |||
id="path7725" | |||
d="m 58.530155,91.196795 c 0,2.182812 -1.768016,3.950836 -3.950828,3.950836 -2.181437,0 -3.950829,-1.768024 -3.950829,-3.950836 0,-2.181433 1.769392,-3.949457 3.950829,-3.949457 2.182812,0 3.950828,1.768024 3.950828,3.949457" | |||
style="fill:#e147c5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#da4061;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path7727" | |||
d="m 55.284882,85.708758 c -0.231493,-0.02893 -0.465772,-0.04961 -0.705555,-0.04961 -0.239783,0 -0.474028,0.02067 -0.705556,0.04961 v 1.701878 h 1.411111 z m 0,0" | |||
style="fill:#e147c5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#da4061;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
</g> | |||
</svg> |
@@ -387,15 +387,15 @@ | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="5.6" | |||
inkscape:cx="45.219096" | |||
inkscape:cx="14.326239" | |||
inkscape:cy="27.987957" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
showgrid="false" | |||
inkscape:window-width="1274" | |||
inkscape:window-height="1434" | |||
inkscape:window-x="1280" | |||
inkscape:window-y="0" | |||
inkscape:window-width="2560" | |||
inkscape:window-height="1422" | |||
inkscape:window-x="0" | |||
inkscape:window-y="18" | |||
inkscape:window-maximized="0" | |||
units="px" | |||
fit-margin-top="0" | |||
@@ -410,7 +410,7 @@ | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title></dc:title> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
@@ -428,7 +428,7 @@ | |||
inkscape:connector-curvature="0" | |||
id="path7691" | |||
d="m 57.439346,94.226115 c 0,2.181437 -1.769392,3.950836 -3.950829,3.950836 -2.182812,0 -3.952204,-1.769399 -3.952204,-3.950836 0,-2.182812 1.769392,-3.950832 3.952204,-3.950832 2.181437,0 3.950829,1.76802 3.950829,3.950832" | |||
style="fill:#42c5bd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#00a1a7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path7693" | |||
@@ -438,6 +438,6 @@ | |||
inkscape:connector-curvature="0" | |||
id="path7695" | |||
d="m 54.125176,87.258067 c -0.20948,-0.0193 -0.421676,-0.03168 -0.638034,-0.03168 -0.260456,0 -0.51816,0.01654 -0.773077,0.0441 v 3.168111 h 1.411111 z m 0,0" | |||
style="fill:#42c5bd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#00a1a7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
</g> | |||
</svg> |
@@ -387,15 +387,15 @@ | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="5.6" | |||
inkscape:cx="50.246257" | |||
inkscape:cx="19.3534" | |||
inkscape:cy="20.515109" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
showgrid="false" | |||
inkscape:window-width="1274" | |||
inkscape:window-height="1434" | |||
inkscape:window-x="1280" | |||
inkscape:window-y="0" | |||
inkscape:window-width="2560" | |||
inkscape:window-height="1422" | |||
inkscape:window-x="0" | |||
inkscape:window-y="18" | |||
inkscape:window-maximized="0" | |||
units="px" | |||
fit-margin-top="0" | |||
@@ -410,7 +410,7 @@ | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title></dc:title> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
@@ -428,7 +428,7 @@ | |||
inkscape:connector-curvature="0" | |||
id="path7699" | |||
d="m 56.109243,92.248924 c 0,2.181437 -1.769392,3.950836 -3.950829,3.950836 -2.182812,0 -3.952204,-1.769399 -3.952204,-3.950836 0,-2.182812 1.769392,-3.950832 3.952204,-3.950832 2.181437,0 3.950829,1.76802 3.950829,3.950832" | |||
style="fill:#e147c5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#da4061;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path7701" | |||
@@ -438,6 +438,6 @@ | |||
inkscape:connector-curvature="0" | |||
id="path7703" | |||
d="m 52.795073,85.280876 c -0.20948,-0.0193 -0.421676,-0.03168 -0.638034,-0.03168 -0.260456,0 -0.51816,0.01654 -0.773077,0.0441 v 3.168111 h 1.411111 z m 0,0" | |||
style="fill:#e147c5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#da4061;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
</g> | |||
</svg> |
@@ -387,15 +387,15 @@ | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="5.6" | |||
inkscape:cx="19.905014" | |||
inkscape:cx="-10.987843" | |||
inkscape:cy="37.67402" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
showgrid="false" | |||
inkscape:window-width="1274" | |||
inkscape:window-height="1434" | |||
inkscape:window-x="1280" | |||
inkscape:window-y="0" | |||
inkscape:window-width="2560" | |||
inkscape:window-height="1422" | |||
inkscape:window-x="0" | |||
inkscape:window-y="18" | |||
inkscape:window-maximized="0" | |||
units="px" | |||
fit-margin-top="0" | |||
@@ -410,7 +410,7 @@ | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title></dc:title> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
@@ -428,11 +428,11 @@ | |||
inkscape:connector-curvature="0" | |||
id="path7673" | |||
d="m 63.549962,97.739725 c 0,2.382635 -1.931977,4.314635 -4.31462,4.314635 -2.382629,0 -4.316017,-1.932 -4.316017,-4.314635 0,-2.384005 1.933388,-4.314638 4.316017,-4.314638 2.382643,0 4.31462,1.930633 4.31462,4.314638" | |||
style="fill:#42c5bd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#00a1a7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path7675" | |||
d="m 59.939514,91.734925 c -0.23151,-0.02618 -0.465775,-0.0441 -0.705555,-0.0441 -0.2384,0 -0.472666,0.01792 -0.705556,0.0441 v 1.901691 h 1.411111 z m 0,0" | |||
style="fill:#42c5bd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#00a1a7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
</g> | |||
</svg> |
@@ -387,15 +387,15 @@ | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="5.6" | |||
inkscape:cx="51.516994" | |||
inkscape:cx="20.624137" | |||
inkscape:cy="37.321731" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
showgrid="false" | |||
inkscape:window-width="1274" | |||
inkscape:window-height="1434" | |||
inkscape:window-x="1280" | |||
inkscape:window-y="0" | |||
inkscape:window-width="2560" | |||
inkscape:window-height="1422" | |||
inkscape:window-x="0" | |||
inkscape:window-y="18" | |||
inkscape:window-maximized="0" | |||
units="px" | |||
fit-margin-top="0" | |||
@@ -410,7 +410,7 @@ | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title></dc:title> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
@@ -428,11 +428,11 @@ | |||
inkscape:connector-curvature="0" | |||
id="path7679" | |||
d="m 55.185959,97.646518 c 0,2.382632 -1.931991,4.314642 -4.314616,4.314642 -2.38263,0 -4.316018,-1.93201 -4.316018,-4.314642 0,-2.384005 1.933388,-4.314638 4.316018,-4.314638 2.382625,0 4.314616,1.930633 4.314616,4.314638" | |||
style="fill:#e147c5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#da4061;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path7681" | |||
d="m 51.575511,91.641718 c -0.23151,-0.02618 -0.465775,-0.0441 -0.705555,-0.0441 -0.2384,0 -0.472666,0.01792 -0.705556,0.0441 v 1.901691 h 1.411111 z m 0,0" | |||
style="fill:#e147c5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#da4061;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
</g> | |||
</svg> |
@@ -387,15 +387,15 @@ | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="5.6" | |||
inkscape:cx="17.70635" | |||
inkscape:cx="-13.186507" | |||
inkscape:cy="40.123343" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
showgrid="false" | |||
inkscape:window-width="1274" | |||
inkscape:window-height="1434" | |||
inkscape:window-x="1280" | |||
inkscape:window-y="0" | |||
inkscape:window-width="2560" | |||
inkscape:window-height="1422" | |||
inkscape:window-x="0" | |||
inkscape:window-y="18" | |||
inkscape:window-maximized="0" | |||
units="px" | |||
fit-margin-top="0" | |||
@@ -410,7 +410,7 @@ | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title></dc:title> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
@@ -433,11 +433,11 @@ | |||
inkscape:connector-curvature="0" | |||
id="path7651" | |||
d="m 65.728163,96.79133 c 0,2.382629 -1.932012,4.31464 -4.316017,4.31464 -2.382626,0 -4.314638,-1.932011 -4.314638,-4.31464 0,-2.384005 1.932012,-4.314638 4.314638,-4.314638 2.384005,0 4.316017,1.930633 4.316017,4.314638" | |||
style="fill:#42c5bd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#00a1a7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path7653" | |||
d="m 62.11839,89.179045 c -0.231511,-0.02205 -0.467156,-0.03443 -0.705556,-0.03443 -0.2384,0 -0.472666,0.01238 -0.705556,0.03443 v 3.507108 h 1.411112 z m 0,0" | |||
style="fill:#42c5bd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#00a1a7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
</g> | |||
</svg> |
@@ -387,15 +387,15 @@ | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="5.6" | |||
inkscape:cx="28.209324" | |||
inkscape:cx="-2.6835331" | |||
inkscape:cy="41.164604" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
showgrid="false" | |||
inkscape:window-width="1274" | |||
inkscape:window-height="1434" | |||
inkscape:window-x="1280" | |||
inkscape:window-y="0" | |||
inkscape:window-width="2560" | |||
inkscape:window-height="1422" | |||
inkscape:window-x="0" | |||
inkscape:window-y="18" | |||
inkscape:window-maximized="0" | |||
units="px" | |||
fit-margin-top="0" | |||
@@ -410,7 +410,7 @@ | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title></dc:title> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
@@ -433,11 +433,11 @@ | |||
inkscape:connector-curvature="0" | |||
id="path7659" | |||
d="m 62.949251,97.066827 c 0,2.382629 -1.932012,4.314643 -4.316017,4.314643 -2.382626,0 -4.314638,-1.932014 -4.314638,-4.314643 0,-2.384005 1.932012,-4.314638 4.314638,-4.314638 2.384005,0 4.316017,1.930633 4.316017,4.314638" | |||
style="fill:#e147c5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#da4061;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path7661" | |||
d="m 59.339478,89.454542 c -0.231511,-0.02205 -0.467156,-0.03443 -0.705556,-0.03443 -0.2384,0 -0.472666,0.01238 -0.705556,0.03443 v 3.507108 h 1.411112 z m 0,0" | |||
style="fill:#e147c5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#da4061;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
</g> | |||
</svg> |
@@ -387,15 +387,15 @@ | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="5.6" | |||
inkscape:cx="32.218991" | |||
inkscape:cx="1.3261339" | |||
inkscape:cy="50.179458" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
showgrid="false" | |||
inkscape:window-width="1274" | |||
inkscape:window-height="1434" | |||
inkscape:window-x="1280" | |||
inkscape:window-y="0" | |||
inkscape:window-width="2560" | |||
inkscape:window-height="1422" | |||
inkscape:window-x="0" | |||
inkscape:window-y="18" | |||
inkscape:window-maximized="0" | |||
units="px" | |||
fit-margin-top="0" | |||
@@ -410,7 +410,7 @@ | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title></dc:title> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
@@ -428,11 +428,11 @@ | |||
inkscape:connector-curvature="0" | |||
id="path7631" | |||
d="m 62.261116,99.730359 c 0,2.743681 -2.222775,4.967831 -4.967827,4.967831 -2.742293,0 -4.966448,-2.22415 -4.966448,-4.967831 0,-2.742292 2.224155,-4.966443 4.966448,-4.966443 2.745052,0 4.967827,2.224151 4.967827,4.966443" | |||
style="fill:#42c5bd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#00a1a7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path7633" | |||
d="m 57.998844,92.400584 c -0.23151,-0.02205 -0.467155,-0.03583 -0.705555,-0.03583 -0.2384,0 -0.472666,0.01379 -0.705556,0.03583 v 2.491493 h 1.411111 z m 0,0" | |||
style="fill:#42c5bd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#00a1a7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
</g> | |||
</svg> |
@@ -387,15 +387,15 @@ | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="5.6" | |||
inkscape:cx="38.452993" | |||
inkscape:cx="7.5601359" | |||
inkscape:cy="47.306337" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
showgrid="false" | |||
inkscape:window-width="1274" | |||
inkscape:window-height="1434" | |||
inkscape:window-x="1280" | |||
inkscape:window-y="0" | |||
inkscape:window-width="2560" | |||
inkscape:window-height="1422" | |||
inkscape:window-x="0" | |||
inkscape:window-y="18" | |||
inkscape:window-maximized="0" | |||
units="px" | |||
fit-margin-top="0" | |||
@@ -410,7 +410,7 @@ | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title></dc:title> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
@@ -428,11 +428,11 @@ | |||
inkscape:connector-curvature="0" | |||
id="path7637" | |||
d="m 60.611703,98.97018 c 0,2.74368 -2.222775,4.96783 -4.967827,4.96783 -2.742293,0 -4.966448,-2.22415 -4.966448,-4.96783 0,-2.742297 2.224155,-4.966448 4.966448,-4.966448 2.745052,0 4.967827,2.224151 4.967827,4.966448" | |||
style="fill:#e147c5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#da4061;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path7639" | |||
d="m 56.349431,91.6404 c -0.23151,-0.02205 -0.467155,-0.03583 -0.705555,-0.03583 -0.2384,0 -0.472666,0.01379 -0.705556,0.03583 v 2.491493 h 1.411111 z m 0,0" | |||
style="fill:#e147c5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#da4061;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
</g> | |||
</svg> |
@@ -387,15 +387,15 @@ | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="5.6" | |||
inkscape:cx="39.52628" | |||
inkscape:cx="8.6334229" | |||
inkscape:cy="35.160107" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
showgrid="false" | |||
inkscape:window-width="1274" | |||
inkscape:window-height="1434" | |||
inkscape:window-x="1280" | |||
inkscape:window-y="0" | |||
inkscape:window-width="2560" | |||
inkscape:window-height="1422" | |||
inkscape:window-x="0" | |||
inkscape:window-y="18" | |||
inkscape:window-maximized="0" | |||
units="px" | |||
fit-margin-top="0" | |||
@@ -410,7 +410,7 @@ | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title></dc:title> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
@@ -428,7 +428,7 @@ | |||
inkscape:connector-curvature="0" | |||
id="path7607" | |||
d="m 62.688998,93.978827 c 0,3.064757 -2.484604,5.550739 -5.55074,5.550739 -3.064757,0 -5.549357,-2.485982 -5.549357,-5.550739 0,-3.064757 2.4846,-5.54936 5.549357,-5.54936 3.066136,0 5.55074,2.484603 5.55074,5.54936" | |||
style="fill:#42c5bd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#00a1a7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path7609" | |||
@@ -438,6 +438,6 @@ | |||
inkscape:connector-curvature="0" | |||
id="path7611" | |||
d="m 57.844505,84.865861 c -0.232886,-0.01792 -0.468531,-0.0303 -0.705556,-0.0303 -0.2384,0 -0.472665,0.01242 -0.705555,0.0303 v 4.43177 h 1.411111 z m 0,0" | |||
style="fill:#42c5bd;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#00a1a7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
</g> | |||
</svg> |
@@ -392,9 +392,9 @@ | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
showgrid="false" | |||
inkscape:window-width="1274" | |||
inkscape:window-height="1434" | |||
inkscape:window-x="1280" | |||
inkscape:window-width="2560" | |||
inkscape:window-height="1440" | |||
inkscape:window-x="0" | |||
inkscape:window-y="0" | |||
inkscape:window-maximized="0" | |||
units="px" | |||
@@ -410,7 +410,7 @@ | |||
<dc:format>image/svg+xml</dc:format> | |||
<dc:type | |||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
<dc:title></dc:title> | |||
<dc:title /> | |||
</cc:Work> | |||
</rdf:RDF> | |||
</metadata> | |||
@@ -428,7 +428,7 @@ | |||
inkscape:connector-curvature="0" | |||
id="path7615" | |||
d="m 62.71026,94.193113 c 0,3.064757 -2.484604,5.550739 -5.55074,5.550739 -3.064757,0 -5.549357,-2.485982 -5.549357,-5.550739 0,-3.064757 2.4846,-5.54936 5.549357,-5.54936 3.066136,0 5.55074,2.484603 5.55074,5.54936" | |||
style="fill:#e147c5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#da4061;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path7617" | |||
@@ -438,6 +438,6 @@ | |||
inkscape:connector-curvature="0" | |||
id="path7619" | |||
d="m 57.865767,85.080147 c -0.232886,-0.01792 -0.468531,-0.0303 -0.705556,-0.0303 -0.2384,0 -0.472665,0.01242 -0.705555,0.0303 v 4.43177 h 1.411111 z m 0,0" | |||
style="fill:#e147c5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#da4061;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
</g> | |||
</svg> |
@@ -1,123 +0,0 @@ | |||
<?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="37.556625" | |||
height="37.556622" | |||
viewBox="0 0 9.9368575 9.9368564" | |||
version="1.1" | |||
id="svg49872" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
sodipodi:docname="RoundBlack.svg"> | |||
<defs | |||
id="defs49866"> | |||
<clipPath | |||
id="clip12"> | |||
<path | |||
d="m 143,129.75 h 3 V 158 h -3 z m 0,0" | |||
id="path28860" | |||
inkscape:connector-curvature="0" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip11"> | |||
<path | |||
d="m 117.39453,129.75 h 54 v 54.00391 h -54 z m 0,0" | |||
id="path28857" | |||
inkscape:connector-curvature="0" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip150"> | |||
<path | |||
d="m 176,208.92578 h 2 V 228 h -2 z m 0,0" | |||
id="path29465" | |||
inkscape:connector-curvature="0" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip149"> | |||
<path | |||
d="m 159.27734,208.92578 h 36 v 36 h -36 z m 0,0" | |||
id="path29462" | |||
inkscape:connector-curvature="0" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip142"> | |||
<path | |||
d="m 110,208.92578 h 3 V 228 h -3 z m 0,0" | |||
id="path29320" | |||
inkscape:connector-curvature="0" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip141"> | |||
<path | |||
d="m 93.511719,208.92578 h 36.000001 v 36 H 93.511719 Z m 0,0" | |||
id="path29317" | |||
inkscape:connector-curvature="0" /> | |||
</clipPath> | |||
</defs> | |||
<sodipodi:namedview | |||
id="base" | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1.0" | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="22.4" | |||
inkscape:cx="15.038057" | |||
inkscape:cy="23.041" | |||
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" | |||
units="px" | |||
inkscape:window-width="2560" | |||
inkscape:window-height="1422" | |||
inkscape:window-x="0" | |||
inkscape:window-y="18" | |||
inkscape:window-maximized="0" | |||
inkscape:snap-global="true" | |||
inkscape:snap-bbox="true" | |||
inkscape:snap-bbox-midpoints="true" | |||
inkscape:snap-object-midpoints="true" | |||
inkscape:snap-bbox-edge-midpoints="true" | |||
inkscape:object-paths="true" | |||
inkscape:pagecheckerboard="true" /> | |||
<metadata | |||
id="metadata49869"> | |||
<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(-73.816227,-78.610433)"> | |||
<path | |||
style="clip-rule:nonzero;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.27602378" | |||
d="m 83.753084,83.578861 c 0,2.744065 -2.224363,4.968428 -4.968429,4.968428 -2.744065,0 -4.968428,-2.224363 -4.968428,-4.968428 0,-2.744066 2.224363,-4.968428 4.968428,-4.968428 2.744066,0 4.968429,2.224362 4.968429,4.968428" | |||
id="path38955" | |||
inkscape:connector-curvature="0" /> | |||
<path | |||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.396875;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||
d="m 78.784655,83.578861 0,-4.968428" | |||
id="path53181" | |||
inkscape:connector-curvature="0" | |||
sodipodi:nodetypes="cc" /> | |||
</g> | |||
</svg> |
@@ -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="10.0004mm" | |||
height="10.000431mm" | |||
viewBox="0 0 10.000399 10.000431" | |||
version="1.1" | |||
id="svg111794" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
sodipodi:docname="RoundBlackKnob.svg"> | |||
<defs | |||
id="defs111788" /> | |||
<sodipodi:namedview | |||
id="base" | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1.0" | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="2.8" | |||
inkscape:cx="-66.596017" | |||
inkscape:cy="-47.298945" | |||
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="metadata111791"> | |||
<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(-135.80716,-61.39592)"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" | |||
d="m 145.80756,66.395451 c 0,2.761586 -2.23791,5.0009 -4.99949,5.0009 -2.76162,0 -5.00091,-2.239314 -5.00091,-5.0009 0,-2.76159 2.23929,-4.999524 5.00091,-4.999524 2.76158,0 4.99949,2.237934 4.99949,4.999524" | |||
id="path110594" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.35277775" | |||
d="m 140.97479,61.41522 c -0.0551,-0.01242 -0.11024,-0.0193 -0.16672,-0.0193 -0.0579,0 -0.11162,0.0069 -0.16676,0.0193 v 5.043618 h 0.33348 z m 0,0" | |||
id="path110596" /> | |||
</g> | |||
</svg> |
@@ -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="19.000362mm" | |||
height="19.000389mm" | |||
viewBox="0 0 19.000362 19.000389" | |||
version="1.1" | |||
id="svg111794" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
sodipodi:docname="RoundHugeBlackKnob.svg"> | |||
<defs | |||
id="defs111788" /> | |||
<sodipodi:namedview | |||
id="base" | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1.0" | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="2.8" | |||
inkscape:cx="-18.065819" | |||
inkscape:cy="35.516889" | |||
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="metadata111791"> | |||
<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(-98.209438,-77.425955)"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" | |||
d="m 117.2098,86.92615 c 0,5.247569 -4.25397,9.500195 -9.50016,9.500195 -5.24757,0 -9.500202,-4.252626 -9.500202,-9.500195 0,-5.24619 4.252632,-9.500193 9.500202,-9.500193 5.24619,0 9.50016,4.254003 9.50016,9.500193" | |||
id="path110586" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.35277775" | |||
d="m 108.0252,77.463165 c -0.10337,-0.02343 -0.2067,-0.03721 -0.31556,-0.03721 -0.10887,0 -0.21361,0.01379 -0.3156,0.03721 v 9.582876 h 0.63116 z m 0,0" | |||
id="path110588" /> | |||
</g> | |||
</svg> |
@@ -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="12.69999mm" | |||
height="12.7mm" | |||
viewBox="0 0 12.69999 12.7" | |||
version="1.1" | |||
id="svg111794" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
sodipodi:docname="RoundLargeBlackKnob.svg"> | |||
<defs | |||
id="defs111788" /> | |||
<sodipodi:namedview | |||
id="base" | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1.0" | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="2.8" | |||
inkscape:cx="-130.49441" | |||
inkscape:cy="-43.340255" | |||
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="metadata111791"> | |||
<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(-127.95617,-62.862058)"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" | |||
d="m 140.65616,69.212058 c 0,3.505729 -2.84289,6.35 -6.35,6.35 -3.5071,0 -6.34999,-2.844271 -6.34999,-6.35 0,-3.507109 2.84289,-6.35 6.34999,-6.35 3.50711,0 6.35,2.842891 6.35,6.35" | |||
id="path110590" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.35277775" | |||
d="m 134.51698,62.885486 c -0.0689,-0.01517 -0.13917,-0.02342 -0.21082,-0.02342 -0.0731,0 -0.14333,0.0083 -0.21085,0.02342 v 6.405121 h 0.42167 z m 0,0" | |||
id="path110592" /> | |||
</g> | |||
</svg> |
@@ -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="7.9995098mm" | |||
height="7.9995222mm" | |||
viewBox="0 0 7.9995093 7.9995222" | |||
version="1.1" | |||
id="svg111794" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
sodipodi:docname="RoundSmallBlackKnob.svg"> | |||
<defs | |||
id="defs111788" /> | |||
<sodipodi:namedview | |||
id="base" | |||
pagecolor="#ffffff" | |||
bordercolor="#666666" | |||
borderopacity="1.0" | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="2.8" | |||
inkscape:cx="-87.928177" | |||
inkscape:cy="-71.041818" | |||
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="metadata111791"> | |||
<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(-168.09312,-67.39659)"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" | |||
d="m 176.09263,71.397045 c 0,2.208995 -1.79006,3.999067 -3.99905,3.999067 -2.20902,0 -4.00046,-1.790072 -4.00046,-3.999067 0,-2.210372 1.79144,-4.000444 4.00046,-4.000444 2.20899,0 3.99905,1.790072 3.99905,4.000444" | |||
id="path110598" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.35277775" | |||
d="m 172.22587,67.41176 c -0.0427,-0.0097 -0.0868,-0.01517 -0.13229,-0.01517 -0.0455,0 -0.0896,0.0055 -0.13367,0.01517 v 4.034896 h 0.26596 z m 0,0" | |||
id="path110600" /> | |||
</g> | |||
</svg> |
@@ -9,376 +9,15 @@ | |||
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="6.2990241mm" | |||
height="6.3003879mm" | |||
viewBox="0 0 6.2990242 6.3003887" | |||
width="6.2990298mm" | |||
height="6.3003922mm" | |||
viewBox="0 0 6.2990294 6.3003921" | |||
version="1.1" | |||
id="svg15246" | |||
sodipodi:docname="Trimpot.svg" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06"> | |||
id="svg111794" | |||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||
sodipodi:docname="Trimpot.svg"> | |||
<defs | |||
id="defs15240"> | |||
<clipPath | |||
id="clip89"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="18" | |||
height="19" | |||
id="rect4864" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip90"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 0.898438,0.128906 h 16.25 v 17.882813 h -16.25 z m 0,0" | |||
id="path4861" /> | |||
</clipPath> | |||
<mask | |||
id="mask44"> | |||
<g | |||
style="filter:url(#alpha)" | |||
id="g4858" | |||
transform="matrix(0.26458333,0,0,0.26458333,89.358789,128.57765)"> | |||
<rect | |||
x="0" | |||
y="0" | |||
width="3052.8701" | |||
height="3351.5" | |||
style="fill:#000000;fill-opacity:0.14999402;stroke:none" | |||
id="rect4856" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="alpha" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix4149" /> | |||
</filter> | |||
<clipPath | |||
id="clipPath17821"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="18" | |||
height="19" | |||
id="rect17819" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath17825"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 0.898438,0.128906 h 16.25 v 17.882813 h -16.25 z m 0,0" | |||
id="path17823" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip87"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="24" | |||
height="26" | |||
id="rect4848" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip88"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 0.683594,0.921875 h 22.679687 v 24.9375 H 0.683594 Z m 0,0" | |||
id="path4845" /> | |||
</clipPath> | |||
<mask | |||
id="mask43"> | |||
<g | |||
style="filter:url(#alpha)" | |||
id="g4842" | |||
transform="matrix(0.26458333,0,0,0.26458333,89.358789,128.57765)"> | |||
<rect | |||
x="0" | |||
y="0" | |||
width="3052.8701" | |||
height="3351.5" | |||
style="fill:#000000;fill-opacity:0.14999402;stroke:none" | |||
id="rect4840" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="filter17836" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix17834" /> | |||
</filter> | |||
<clipPath | |||
id="clipPath17840"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="24" | |||
height="26" | |||
id="rect17838" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath17844"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="m 0.683594,0.921875 h 22.679687 v 24.9375 H 0.683594 Z m 0,0" | |||
id="path17842" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip95"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="18" | |||
height="18" | |||
id="rect4912" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip96"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.140625,0.140625 H 17.199219 V 17.199219 H 0.140625 Z m 0,0" | |||
id="path4909" /> | |||
</clipPath> | |||
<mask | |||
id="mask47"> | |||
<g | |||
style="filter:url(#alpha-3)" | |||
id="g4906" | |||
transform="matrix(0.26458333,0,0,0.26458333,88.611154,119.19859)"> | |||
<rect | |||
x="0" | |||
y="0" | |||
width="3052.8701" | |||
height="3351.5" | |||
style="fill:#000000;fill-opacity:0.33000201;stroke:none" | |||
id="rect4904" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="alpha-3" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix4149-6" /> | |||
</filter> | |||
<clipPath | |||
id="clipPath18541"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="18" | |||
height="18" | |||
id="rect18539" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath18545"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.140625,0.140625 H 17.199219 V 17.199219 H 0.140625 Z m 0,0" | |||
id="path18543" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip93"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="22" | |||
height="24" | |||
id="rect4896" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip94"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.0390625,0.0390625 H 21.300781 V 23.421875 H 0.0390625 Z m 0,0" | |||
id="path4893" /> | |||
</clipPath> | |||
<mask | |||
id="mask46"> | |||
<g | |||
style="filter:url(#alpha-3)" | |||
id="g4890" | |||
transform="matrix(0.26458333,0,0,0.26458333,88.611154,119.19859)"> | |||
<rect | |||
x="0" | |||
y="0" | |||
width="3052.8701" | |||
height="3351.5" | |||
style="fill:#000000;fill-opacity:0.14999402;stroke:none" | |||
id="rect4888" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="filter18556" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix18554" /> | |||
</filter> | |||
<clipPath | |||
id="clipPath18560"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="22" | |||
height="24" | |||
id="rect18558" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath18564"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.0390625,0.0390625 H 21.300781 V 23.421875 H 0.0390625 Z m 0,0" | |||
id="path18562" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip91"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="29" | |||
height="32" | |||
id="rect4880" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip92"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.507812,0.5 H 28.855469 V 31.679688 H 0.507812 Z m 0,0" | |||
id="path4877" /> | |||
</clipPath> | |||
<mask | |||
id="mask45"> | |||
<g | |||
style="filter:url(#alpha-3)" | |||
id="g4874" | |||
transform="matrix(0.26458333,0,0,0.26458333,88.611154,119.19859)"> | |||
<rect | |||
x="0" | |||
y="0" | |||
width="3052.8701" | |||
height="3351.5" | |||
style="fill:#000000;fill-opacity:0.14999402;stroke:none" | |||
id="rect4872" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="filter18575" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix18573" /> | |||
</filter> | |||
<clipPath | |||
id="clipPath18579"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="29" | |||
height="32" | |||
id="rect18577" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath18583"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.507812,0.5 H 28.855469 V 31.679688 H 0.507812 Z m 0,0" | |||
id="path18581" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip202"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="18" | |||
height="18" | |||
id="rect5795" /> | |||
</clipPath> | |||
<clipPath | |||
id="clip203"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.855469,0.140625 H 17.914062 V 17.199219 H 0.855469 Z m 0,0" | |||
id="path5792" /> | |||
</clipPath> | |||
<mask | |||
id="mask104"> | |||
<g | |||
style="filter:url(#alpha-7)" | |||
id="g5789" | |||
transform="matrix(0.26458333,0,0,0.26458333,74.416306,97.613551)"> | |||
<rect | |||
x="0" | |||
y="0" | |||
width="3052.8701" | |||
height="3351.5" | |||
style="fill:#000000;fill-opacity:0.33000201;stroke:none" | |||
id="rect5787" /> | |||
</g> | |||
</mask> | |||
<filter | |||
id="alpha-7" | |||
filterUnits="objectBoundingBox" | |||
x="0" | |||
y="0" | |||
width="1" | |||
height="1"> | |||
<feColorMatrix | |||
type="matrix" | |||
in="SourceGraphic" | |||
values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" | |||
id="feColorMatrix4149-5" /> | |||
</filter> | |||
<clipPath | |||
id="clipPath18765"> | |||
<rect | |||
y="0" | |||
x="0" | |||
width="18" | |||
height="18" | |||
id="rect18763" /> | |||
</clipPath> | |||
<clipPath | |||
id="clipPath18769"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
d="M 0.855469,0.140625 H 17.914062 V 17.199219 H 0.855469 Z m 0,0" | |||
id="path18767" /> | |||
</clipPath> | |||
</defs> | |||
id="defs111788" /> | |||
<sodipodi:namedview | |||
id="base" | |||
pagecolor="#ffffff" | |||
@@ -386,24 +25,23 @@ | |||
borderopacity="1.0" | |||
inkscape:pageopacity="0.0" | |||
inkscape:pageshadow="2" | |||
inkscape:zoom="5.6" | |||
inkscape:cx="26.106375" | |||
inkscape:cy="37.463453" | |||
inkscape:zoom="2.8" | |||
inkscape:cx="-118.16736" | |||
inkscape:cy="0.15014965" | |||
inkscape:document-units="mm" | |||
inkscape:current-layer="layer1" | |||
showgrid="false" | |||
inkscape:window-width="1274" | |||
inkscape:window-height="1434" | |||
inkscape:window-x="1280" | |||
inkscape:window-y="0" | |||
inkscape:window-maximized="0" | |||
units="px" | |||
fit-margin-top="0" | |||
fit-margin-left="0" | |||
fit-margin-right="0" | |||
fit-margin-bottom="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="metadata15243"> | |||
id="metadata111791"> | |||
<rdf:RDF> | |||
<cc:Work | |||
rdf:about=""> | |||
@@ -418,16 +56,16 @@ | |||
inkscape:label="Layer 1" | |||
inkscape:groupmode="layer" | |||
id="layer1" | |||
transform="translate(-46.318588,-97.647662)"> | |||
transform="translate(-183.93691,-77.348595)"> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path7219" | |||
d="m 46.318588,100.79786 c 0,1.74046 1.409735,3.15019 3.1502,3.15019 1.739088,0 3.148824,-1.40973 3.148824,-3.15019 0,-1.739087 -1.409736,-3.150198 -3.148824,-3.150198 -1.740465,0 -3.1502,1.411111 -3.1502,3.150198" | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" | |||
d="m 183.93691,80.498791 c 0,1.740461 1.40974,3.150196 3.1502,3.150196 1.73909,0 3.14883,-1.409735 3.14883,-3.150196 0,-1.739085 -1.40974,-3.150196 -3.14883,-3.150196 -1.74046,0 -3.1502,1.411111 -3.1502,3.150196" | |||
id="path108214" /> | |||
<path | |||
inkscape:connector-curvature="0" | |||
id="path7221" | |||
d="m 49.672764,97.658686 c -0.06752,-0.0055 -0.135079,-0.01101 -0.203976,-0.01101 -0.0689,0 -0.137795,0.0055 -0.205317,0.01101 v 3.139174 h 0.409293 z m 0,0" | |||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" | |||
d="m 187.29109,77.359619 c -0.0675,-0.0055 -0.13508,-0.01101 -0.20398,-0.01101 -0.0689,0 -0.13779,0.0055 -0.20531,0.01101 v 3.139172 h 0.40929 z m 0,0" | |||
id="path108216" /> | |||
</g> | |||
</svg> |
@@ -43,10 +43,10 @@ struct AudioInterfaceIO : AudioIO { | |||
for (int i = 0; i < frames; i++) { | |||
if (inputBuffer.full()) | |||
break; | |||
Frame<INPUTS> f; | |||
memset(&f, 0, sizeof(f)); | |||
memcpy(&f, &input[numInputs * i], numInputs * sizeof(float)); | |||
inputBuffer.push(f); | |||
Frame<INPUTS> inputFrame; | |||
memset(&inputFrame, 0, sizeof(inputFrame)); | |||
memcpy(&inputFrame, &input[numInputs * i], numInputs * sizeof(float)); | |||
inputBuffer.push(inputFrame); | |||
} | |||
} | |||
@@ -71,13 +71,17 @@ struct AudioInterfaceIO : AudioIO { | |||
} | |||
// Notify engine when finished processing | |||
engineCv.notify_all(); | |||
engineCv.notify_one(); | |||
} | |||
void onCloseStream() override { | |||
inputBuffer.clear(); | |||
outputBuffer.clear(); | |||
} | |||
void onChannelsChange() override { | |||
debug("Channels changed %d %d", numOutputs, numInputs); | |||
} | |||
}; | |||
@@ -127,12 +131,6 @@ struct AudioInterface : Module { | |||
} | |||
void onSampleRateChange() override { | |||
// for (int i = 0; i < INPUTS; i++) { | |||
// inputSrc[i].setRates(audioIO.sampleRate, engineGetSampleRate()); | |||
// } | |||
// for (int i = 0; i < OUTPUTS; i++) { | |||
// outputSrc[i].setRates(engineGetSampleRate(), audioIO.sampleRate); | |||
// } | |||
inputSrc.setRates(audioIO.sampleRate, engineGetSampleRate()); | |||
outputSrc.setRates(engineGetSampleRate(), audioIO.sampleRate); | |||
} | |||
@@ -154,6 +152,7 @@ void AudioInterface::step() { | |||
} | |||
if (audioIO.numInputs > 0) { | |||
// Convert inputs if needed | |||
if (inputBuffer.empty()) { | |||
int inLen = audioIO.inputBuffer.size(); | |||
int outLen = inputBuffer.capacity(); | |||
@@ -163,25 +162,27 @@ void AudioInterface::step() { | |||
} | |||
} | |||
// Take input from buffer | |||
if (!inputBuffer.empty()) { | |||
inputFrame = inputBuffer.shift(); | |||
} | |||
for (int i = 0; i < INPUTS; i++) { | |||
outputs[AUDIO_OUTPUT + i].value = 10.0 * inputFrame.samples[i]; | |||
outputs[AUDIO_OUTPUT + i].value = 10.f * inputFrame.samples[i]; | |||
} | |||
if (audioIO.numOutputs > 0) { | |||
// Get and push output SRC frame | |||
if (!outputBuffer.full()) { | |||
Frame<OUTPUTS> f; | |||
for (int i = 0; i < audioIO.numOutputs; i++) { | |||
f.samples[i] = inputs[AUDIO_INPUT + i].value / 10.0; | |||
Frame<OUTPUTS> outputFrame; | |||
for (int i = 0; i < OUTPUTS; i++) { | |||
outputFrame.samples[i] = inputs[AUDIO_INPUT + i].value / 10.f; | |||
} | |||
outputBuffer.push(f); | |||
outputBuffer.push(outputFrame); | |||
} | |||
if (outputBuffer.full()) { | |||
// Wait until outputs are needed | |||
// Wait until outputs are needed. | |||
// Give up after a timeout in case the audio device is being unresponsive. | |||
std::unique_lock<std::mutex> lock(audioIO.engineMutex); | |||
auto cond = [&] { | |||
return (audioIO.outputBuffer.size() < (size_t) audioIO.blockSize); | |||
@@ -200,14 +201,16 @@ void AudioInterface::step() { | |||
debug("Audio Interface underflow"); | |||
} | |||
} | |||
// Notify audio thread that an output is potentially ready | |||
audioIO.audioCv.notify_one(); | |||
} | |||
// Turn on light if at least one port is enabled in the nearby pair | |||
for (int i = 0; i < INPUTS / 2; i++) | |||
lights[INPUT_LIGHT + i].value = (audioIO.numOutputs >= 2*i+1); | |||
for (int i = 0; i < OUTPUTS / 2; i++) | |||
lights[OUTPUT_LIGHT + i].value = (audioIO.numInputs >= 2*i+1); | |||
audioIO.audioCv.notify_all(); | |||
} | |||
@@ -43,6 +43,7 @@ struct QuadMIDIToCVInterface : Module { | |||
uint8_t notes[4]; | |||
bool gates[4]; | |||
bool pedal; | |||
int rotateIndex; | |||
QuadMIDIToCVInterface() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS), heldNotes(128) { | |||
onReset(); | |||
@@ -71,6 +72,7 @@ struct QuadMIDIToCVInterface : Module { | |||
gates[i] = false; | |||
} | |||
pedal = false; | |||
rotateIndex = 0; | |||
} | |||
void pressNote(uint8_t note) { | |||
@@ -84,17 +86,23 @@ struct QuadMIDIToCVInterface : Module { | |||
// Set notes and gates | |||
switch (polyMode) { | |||
case ROTATE_MODE: { | |||
} break; | |||
case RESET_MODE: { | |||
} break; | |||
case REASSIGN_MODE: { | |||
} break; | |||
case UNISON_MODE: { | |||
case UNISON_MODE: { | |||
for (int i = 0; i < 4; i++) { | |||
notes[i] = note; | |||
gates[i] = true; | |||
} | |||
} break; | |||
default: break; | |||
} | |||
} | |||
@@ -105,18 +113,41 @@ struct QuadMIDIToCVInterface : Module { | |||
if (it != heldNotes.end()) | |||
heldNotes.erase(it); | |||
// Hold note if pedal is pressed | |||
// if (pedal) | |||
// return; | |||
// // Set last note | |||
// if (!heldNotes.empty()) { | |||
// auto it2 = heldNotes.end(); | |||
// it2--; | |||
// lastNote = *it2; | |||
// gate = true; | |||
// } | |||
// else { | |||
// gate = false; | |||
// } | |||
if (pedal) | |||
return; | |||
// Set last note | |||
switch (polyMode) { | |||
case ROTATE_MODE: { | |||
} break; | |||
case RESET_MODE: { | |||
} break; | |||
case REASSIGN_MODE: { | |||
} break; | |||
case UNISON_MODE: { | |||
if (!heldNotes.empty()) { | |||
auto it2 = heldNotes.end(); | |||
it2--; | |||
for (int i = 0; i < 4; i++) { | |||
notes[i] = *it2; | |||
gates[i] = true; | |||
} | |||
} | |||
else { | |||
for (int i = 0; i < 4; i++) { | |||
gates[i] = false; | |||
} | |||
} | |||
} break; | |||
default: break; | |||
} | |||
} | |||
void pressPedal() { | |||
@@ -4,15 +4,22 @@ | |||
namespace rack { | |||
CircularShadow::CircularShadow() { | |||
blurRadius = 0; | |||
opacity = 0.15; | |||
} | |||
void CircularShadow::draw(NVGcontext *vg) { | |||
if (opacity < 0.0) | |||
return; | |||
nvgBeginPath(vg); | |||
nvgRect(vg, -blur, -blur, box.size.x + 2*blur, box.size.y + 2*blur); | |||
nvgFillColor(vg, nvgRGBAf(0.0, 0.0, 0.0, 0.25)); | |||
Vec c = box.size.div(2.0); | |||
float radius = c.x; | |||
NVGcolor icol = nvgRGBAf(0.0, 0.0, 0.0, 0.25); | |||
nvgRect(vg, -blurRadius, -blurRadius, box.size.x + 2*blurRadius, box.size.y + 2*blurRadius); | |||
Vec center = box.size.div(2.0); | |||
float radius = center.x; | |||
NVGcolor icol = nvgRGBAf(0.0, 0.0, 0.0, opacity); | |||
NVGcolor ocol = nvgRGBAf(0.0, 0.0, 0.0, 0.0); | |||
NVGpaint paint = nvgRadialGradient(vg, c.x, c.y, radius - blur/2, radius + blur/2, icol, ocol); | |||
NVGpaint paint = nvgRadialGradient(vg, center.x, center.y, radius - blurRadius, radius, icol, ocol); | |||
nvgFillPaint(vg, paint); | |||
nvgFill(vg); | |||
} | |||
@@ -21,15 +21,20 @@ void Knob::onDragStart(EventDragStart &e) { | |||
} | |||
void Knob::onDragMove(EventDragMove &e) { | |||
float range = maxValue - minValue; | |||
float delta = KNOB_SENSITIVITY * -e.mouseRel.y * speed; | |||
if (isfinite(range)) | |||
delta *= range; | |||
float range; | |||
if (isfinite(minValue) && isfinite(maxValue)) { | |||
range = maxValue - minValue; | |||
} | |||
else { | |||
range = 1.0 - (-1.0); | |||
} | |||
float delta = KNOB_SENSITIVITY * -e.mouseRel.y * speed * range; | |||
// Drag slower if Mod is held | |||
if (windowIsModPressed()) | |||
delta /= 16.0; | |||
dragValue += delta; | |||
dragValue = clamp2(dragValue, minValue, maxValue); | |||
if (snap) | |||
setValue(roundf(dragValue)); | |||
else | |||
@@ -34,7 +34,7 @@ void LightWidget::drawHalo(NVGcontext *vg) { | |||
nvgRect(vg, radius - oradius, radius - oradius, 2*oradius, 2*oradius); | |||
NVGpaint paint; | |||
NVGcolor icol = colorMult(color, 0.15); | |||
NVGcolor icol = colorMult(color, 0.25); | |||
NVGcolor ocol = nvgRGB(0, 0, 0); | |||
paint = nvgRadialGradient(vg, radius, radius, radius, oradius, icol, ocol); | |||
nvgFillPaint(vg, paint); | |||
@@ -0,0 +1,18 @@ | |||
#include "app.hpp" | |||
namespace rack { | |||
void MomentarySwitch::onDragStart(EventDragStart &e) { | |||
setValue(maxValue); | |||
EventAction eAction; | |||
onAction(eAction); | |||
} | |||
void MomentarySwitch::onDragEnd(EventDragEnd &e) { | |||
setValue(minValue); | |||
} | |||
} // namespace rack |
@@ -5,29 +5,29 @@ | |||
namespace rack { | |||
json_t *ParamWidget::toJson() { | |||
json_t *Parameter::toJson() { | |||
json_t *rootJ = json_object(); | |||
json_object_set_new(rootJ, "paramId", json_integer(paramId)); | |||
json_object_set_new(rootJ, "value", json_real(value)); | |||
return rootJ; | |||
} | |||
void ParamWidget::fromJson(json_t *rootJ) { | |||
void Parameter::fromJson(json_t *rootJ) { | |||
json_t *valueJ = json_object_get(rootJ, "value"); | |||
if (valueJ) | |||
setValue(json_number_value(valueJ)); | |||
} | |||
void ParamWidget::reset() { | |||
void Parameter::reset() { | |||
setValue(defaultValue); | |||
} | |||
void ParamWidget::randomize() { | |||
if (randomizable) | |||
void Parameter::randomize() { | |||
if (randomizable && isfinite(minValue) && isfinite(maxValue)) | |||
setValue(rescale(randomUniform(), 0.0, 1.0, minValue, maxValue)); | |||
} | |||
void ParamWidget::onMouseDown(EventMouseDown &e) { | |||
void Parameter::onMouseDown(EventMouseDown &e) { | |||
if (e.button == 1) { | |||
setValue(defaultValue); | |||
} | |||
@@ -35,7 +35,7 @@ void ParamWidget::onMouseDown(EventMouseDown &e) { | |||
e.target = this; | |||
} | |||
void ParamWidget::onChange(EventChange &e) { | |||
void Parameter::onChange(EventChange &e) { | |||
if (!module) | |||
return; | |||
@@ -0,0 +1,32 @@ | |||
#include "app.hpp" | |||
namespace rack { | |||
SVGButton::SVGButton() { | |||
sw = new SVGWidget(); | |||
addChild(sw); | |||
} | |||
void SVGButton::setSVGs(std::shared_ptr<SVG> defaultSVG, std::shared_ptr<SVG> activeSVG) { | |||
sw->setSVG(defaultSVG); | |||
box.size = sw->box.size; | |||
this->defaultSVG = defaultSVG; | |||
this->activeSVG = activeSVG ? activeSVG : defaultSVG; | |||
} | |||
void SVGButton::onDragStart(EventDragStart &e) { | |||
EventAction eAction; | |||
onAction(eAction); | |||
sw->setSVG(activeSVG); | |||
dirty = true; | |||
} | |||
void SVGButton::onDragEnd(EventDragEnd &e) { | |||
sw->setSVG(defaultSVG); | |||
dirty = true; | |||
} | |||
} // namespace rack |
@@ -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 |
@@ -5,6 +5,10 @@ namespace rack { | |||
SVGKnob::SVGKnob() { | |||
shadow = new CircularShadow(); | |||
addChild(shadow); | |||
shadow->box.size = Vec(); | |||
tw = new TransformWidget(); | |||
addChild(tw); | |||
@@ -13,22 +17,26 @@ SVGKnob::SVGKnob() { | |||
} | |||
void SVGKnob::setSVG(std::shared_ptr<SVG> svg) { | |||
sw->svg = svg; | |||
sw->wrap(); | |||
sw->setSVG(svg); | |||
tw->box.size = sw->box.size; | |||
box.size = sw->box.size; | |||
shadow->box.size = sw->box.size; | |||
shadow->box.pos = Vec(0, sw->box.size.y * 0.1); | |||
// shadow->box = shadow->box.grow(Vec(2, 2)); | |||
} | |||
void SVGKnob::step() { | |||
// Re-transform TransformWidget if dirty | |||
if (dirty) { | |||
tw->box.size = box.size; | |||
float angle = 0.0; | |||
if (isfinite(minValue) && isfinite(maxValue)) | |||
float angle; | |||
if (isfinite(minValue) && isfinite(maxValue)) { | |||
angle = rescale(value, minValue, maxValue, minAngle, maxAngle); | |||
} | |||
else { | |||
angle = rescale(value, -1.0, 1.0, minAngle, maxAngle); | |||
angle = fmodf(angle, 2*M_PI); | |||
} | |||
tw->identity(); | |||
// Scale SVG to box | |||
tw->scale(box.size.div(sw->box.size)); | |||
// Rotate SVG | |||
Vec center = sw->box.getCenter(); | |||
tw->translate(center); | |||
@@ -44,5 +52,4 @@ void SVGKnob::onChange(EventChange &e) { | |||
} | |||
} // namespace rack |
@@ -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); | |||
@@ -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 |
@@ -24,7 +24,7 @@ void SVGSwitch::onChange(EventChange &e) { | |||
int index = clamp((int) roundf(valueScaled), 0, frames.size() - 1); | |||
sw->setSVG(frames[index]); | |||
dirty = true; | |||
Switch::onChange(e); | |||
ParamWidget::onChange(e); | |||
} | |||
@@ -0,0 +1,17 @@ | |||
#include "app.hpp" | |||
namespace rack { | |||
void ToggleSwitch::onDragStart(EventDragStart &e) { | |||
// Cycle through values | |||
// e.g. a range of [0.0, 3.0] would have modes 0, 1, 2, and 3. | |||
if (value >= maxValue) | |||
setValue(minValue); | |||
else | |||
setValue(value + 1.0); | |||
} | |||
} // namespace rack |
@@ -46,8 +46,10 @@ std::string AudioIO::getDriverName(int driver) { | |||
} | |||
void AudioIO::setDriver(int driver) { | |||
// Close device | |||
setDevice(-1, 0); | |||
// Close driver | |||
if (rtAudio) { | |||
delete rtAudio; | |||
rtAudio = NULL; | |||
@@ -69,7 +71,7 @@ int AudioIO::getDeviceCount() { | |||
return rtAudio->getDeviceCount(); | |||
} | |||
if (driver == BRIDGE_DRIVER) { | |||
return BRIDGE_CHANNELS; | |||
return BRIDGE_NUM_PORTS; | |||
} | |||
return 0; | |||
} | |||
@@ -90,13 +92,11 @@ bool AudioIO::getDeviceInfo(int device, RtAudio::DeviceInfo *deviceInfo) { | |||
} | |||
catch (RtAudioError &e) { | |||
warn("Failed to query RtAudio device: %s", e.what()); | |||
return false; | |||
} | |||
} | |||
} | |||
else { | |||
return false; | |||
} | |||
return false; | |||
} | |||
int AudioIO::getDeviceChannels(int device) { | |||
@@ -148,7 +148,7 @@ std::string AudioIO::getDeviceDetail(int device, int offset) { | |||
} | |||
} | |||
if (driver == BRIDGE_DRIVER) { | |||
return stringf("Channel %d", device + 1); | |||
return stringf("Port %d", device + 1); | |||
} | |||
return ""; | |||
} | |||
@@ -172,6 +172,12 @@ void AudioIO::setBlockSize(int blockSize) { | |||
openStream(); | |||
} | |||
void AudioIO::setChannels(int numOutputs, int numInputs) { | |||
this->numOutputs = numOutputs; | |||
this->numInputs = numInputs; | |||
onChannelsChange(); | |||
} | |||
static int rtCallback(void *outputBuffer, void *inputBuffer, unsigned int nFrames, double streamTime, RtAudioStreamStatus status, void *userData) { | |||
AudioIO *audioIO = (AudioIO*) userData; | |||
@@ -197,8 +203,7 @@ void AudioIO::openStream() { | |||
if (rtAudio->isStreamOpen()) | |||
return; | |||
numOutputs = clamp((int) deviceInfo.outputChannels - offset, 0, maxChannels); | |||
numInputs = clamp((int) deviceInfo.inputChannels - offset, 0, maxChannels); | |||
setChannels(clamp((int) deviceInfo.outputChannels - offset, 0, maxChannels), clamp((int) deviceInfo.inputChannels - offset, 0, maxChannels)); | |||
if (numOutputs == 0 && numInputs == 0) { | |||
warn("RtAudio device %d has 0 inputs and 0 outputs"); | |||
@@ -252,8 +257,7 @@ void AudioIO::openStream() { | |||
onOpenStream(); | |||
} | |||
if (driver == BRIDGE_DRIVER) { | |||
numOutputs = 2; | |||
numInputs = 2; | |||
setChannels(0, 0); | |||
// TEMP | |||
sampleRate = 44100; | |||
blockSize = 256; | |||
@@ -262,8 +266,7 @@ void AudioIO::openStream() { | |||
} | |||
void AudioIO::closeStream() { | |||
numOutputs = 0; | |||
numInputs = 0; | |||
setChannels(0, 0); | |||
if (rtAudio) { | |||
if (rtAudio->isStreamRunning()) { | |||
@@ -293,17 +296,6 @@ void AudioIO::closeStream() { | |||
onCloseStream(); | |||
} | |||
bool AudioIO::isActive() { | |||
if (rtAudio) { | |||
return rtAudio->isStreamRunning(); | |||
} | |||
if (driver == BRIDGE_DRIVER) { | |||
bridgeAudioIsSubscribed(device, this); | |||
} | |||
return false; | |||
} | |||
std::vector<int> AudioIO::getSampleRates() { | |||
if (rtAudio) { | |||
try { | |||
@@ -25,11 +25,13 @@ enum BridgeCommand { | |||
NO_COMMAND = 0, | |||
START_COMMAND, | |||
QUIT_COMMAND, | |||
CHANNEL_SET_COMMAND, | |||
PORT_SET_COMMAND, | |||
MIDI_MESSAGE_SEND_COMMAND, | |||
AUDIO_SAMPLE_RATE_SET_COMMAND, | |||
AUDIO_CHANNELS_SET_COMMAND, | |||
AUDIO_BUFFER_SEND_COMMAND, | |||
MIDI_MESSAGE_SEND_COMMAND, | |||
AUDIO_ACTIVATE, | |||
AUDIO_DEACTIVATE, | |||
NUM_COMMANDS | |||
}; | |||
@@ -37,19 +39,46 @@ enum BridgeCommand { | |||
static const int RECV_BUFFER_SIZE = (1<<13); | |||
static const int RECV_QUEUE_SIZE = (1<<17); | |||
static AudioIO *audioListeners[BRIDGE_CHANNELS]; | |||
struct BridgeClientConnection; | |||
static BridgeClientConnection *connections[BRIDGE_NUM_PORTS] = {}; | |||
static AudioIO *audioListeners[BRIDGE_NUM_PORTS] = {}; | |||
static std::thread serverThread; | |||
static bool serverQuit; | |||
struct BridgeClientConnection { | |||
int client; | |||
RingBuffer<uint8_t, RECV_QUEUE_SIZE> recvQueue; | |||
BridgeCommand currentCommand = START_COMMAND; | |||
bool closeRequested = false; | |||
int channel = -1; | |||
int port = -1; | |||
int sampleRate = -1; | |||
int audioChannels = 0; | |||
int audioBufferLength = -1; | |||
bool audioActive = false; | |||
~BridgeClientConnection() { | |||
setPort(-1); | |||
} | |||
void send(const uint8_t *buffer, int length) { | |||
if (length <= 0) | |||
return; | |||
#ifdef ARCH_LIN | |||
int sendFlags = MSG_NOSIGNAL; | |||
#else | |||
int sendFlags = 0; | |||
#endif | |||
ssize_t written = ::send(client, (const char*) buffer, length, sendFlags); | |||
// We must write the entire buffer | |||
if (written < length) | |||
closeRequested = true; | |||
} | |||
template <typename T> | |||
void send(T x) { | |||
send((uint8_t*) &x, sizeof(x)); | |||
} | |||
/** Does not check if the queue has enough data. | |||
You must do that yourself before calling this method. | |||
@@ -61,6 +90,35 @@ struct BridgeClientConnection { | |||
return x; | |||
} | |||
void run() { | |||
info("Bridge client connected"); | |||
while (!closeRequested) { | |||
uint8_t buffer[RECV_BUFFER_SIZE]; | |||
#ifdef ARCH_LIN | |||
int recvFlags = MSG_NOSIGNAL; | |||
#else | |||
int recvFlags = 0; | |||
#endif | |||
ssize_t received = ::recv(client, (char*) buffer, sizeof(buffer), recvFlags); | |||
if (received <= 0) | |||
break; | |||
// Make sure we can fill the buffer | |||
if (recvQueue.capacity() < (size_t) received) { | |||
// If we can't accept it, future messages will be incomplete | |||
break; | |||
} | |||
recvQueue.pushBuffer(buffer, received); | |||
// Loop the state machine until it returns false | |||
while (step()) {} | |||
} | |||
info("Bridge client closed"); | |||
} | |||
/** Steps the state machine | |||
Returns true if step() should be called again | |||
*/ | |||
@@ -96,10 +154,21 @@ struct BridgeClientConnection { | |||
debug("Quitting!"); | |||
} break; | |||
case CHANNEL_SET_COMMAND: { | |||
case PORT_SET_COMMAND: { | |||
if (recvQueue.size() >= 1) { | |||
channel = shift<uint8_t>(); | |||
debug("Set channel %d", channel); | |||
int port = shift<uint8_t>(); | |||
setPort(port); | |||
debug("Set port %d", port); | |||
currentCommand = NO_COMMAND; | |||
return true; | |||
} | |||
} break; | |||
case MIDI_MESSAGE_SEND_COMMAND: { | |||
if (recvQueue.size() >= 3) { | |||
uint8_t midiBuffer[3]; | |||
recvQueue.shiftBuffer(midiBuffer, 3); | |||
// debug("MIDI: %02x %02x %02x", midiBuffer[0], midiBuffer[1], midiBuffer[2]); | |||
currentCommand = NO_COMMAND; | |||
return true; | |||
} | |||
@@ -117,7 +186,7 @@ struct BridgeClientConnection { | |||
case AUDIO_CHANNELS_SET_COMMAND: { | |||
if (recvQueue.size() >= 1) { | |||
audioChannels = shift<uint8_t>(); | |||
debug("Set audio channels %d", channel); | |||
debug("Set audio channels %d", audioChannels); | |||
currentCommand = NO_COMMAND; | |||
return true; | |||
} | |||
@@ -139,12 +208,18 @@ struct BridgeClientConnection { | |||
} | |||
else { | |||
if (recvQueue.size() >= (size_t) (sizeof(float) * audioBufferLength)) { | |||
// Get input buffer | |||
int frames = audioBufferLength / 2; | |||
float input[audioBufferLength]; | |||
float output[audioBufferLength]; | |||
memset(output, 0, sizeof(output)); | |||
recvQueue.shiftBuffer((uint8_t*) input, sizeof(float) * audioBufferLength); | |||
int frames = audioBufferLength / 2; | |||
// Process stream | |||
float output[audioBufferLength]; | |||
processStream(input, output, frames); | |||
// Send output buffer | |||
send<uint8_t>(AUDIO_BUFFER_SEND_COMMAND); | |||
send<uint32_t>(audioBufferLength); | |||
send((uint8_t*) output, audioBufferLength * sizeof(float)); | |||
audioBufferLength = -1; | |||
currentCommand = NO_COMMAND; | |||
return true; | |||
@@ -152,14 +227,18 @@ struct BridgeClientConnection { | |||
} | |||
} break; | |||
case MIDI_MESSAGE_SEND_COMMAND: { | |||
if (recvQueue.size() >= 3) { | |||
uint8_t midiBuffer[3]; | |||
recvQueue.shiftBuffer(midiBuffer, 3); | |||
debug("MIDI: %02x %02x %02x", midiBuffer[0], midiBuffer[1], midiBuffer[2]); | |||
currentCommand = NO_COMMAND; | |||
return true; | |||
} | |||
case AUDIO_ACTIVATE: { | |||
audioActive = true; | |||
refreshAudioActive(); | |||
currentCommand = NO_COMMAND; | |||
return true; | |||
} break; | |||
case AUDIO_DEACTIVATE: { | |||
audioActive = false; | |||
refreshAudioActive(); | |||
currentCommand = NO_COMMAND; | |||
return true; | |||
} break; | |||
default: { | |||
@@ -167,51 +246,58 @@ struct BridgeClientConnection { | |||
closeRequested = true; | |||
} break; | |||
} | |||
// Stop looping the state machine | |||
return false; | |||
} | |||
void recv(uint8_t *buffer, int length) { | |||
// Make sure we can fill the buffer | |||
if (recvQueue.capacity() < (size_t) length) { | |||
// If we can't accept it, future messages will be incomplete | |||
closeRequested = true; | |||
return; | |||
void setPort(int newPort) { | |||
// Unbind from existing port | |||
if (port >= 0 && connections[port] == this) { | |||
if (audioListeners[port]) | |||
audioListeners[port]->setChannels(0, 0); | |||
connections[port] = NULL; | |||
} | |||
recvQueue.pushBuffer(buffer, length); | |||
// Loop the state machine until it returns false | |||
while (step()) {} | |||
// Bind to new port | |||
if (newPort >= 0 && !connections[newPort]) { | |||
connections[newPort] = this; | |||
refreshAudioActive(); | |||
port = newPort; | |||
} | |||
else { | |||
port = -1; | |||
} | |||
} | |||
void processStream(const float *input, float *output, int frames) { | |||
if (!(0 <= channel && channel < BRIDGE_CHANNELS)) | |||
if (!(0 <= port && port < BRIDGE_NUM_PORTS)) | |||
return; | |||
if (!audioListeners[channel]) | |||
if (!audioListeners[port]) | |||
return; | |||
audioListeners[channel]->processStream(input, output, frames); | |||
audioListeners[port]->processStream(input, output, frames); | |||
debug("%d frames", frames); | |||
} | |||
}; | |||
void refreshAudioActive() { | |||
if (!(0 <= port && port < BRIDGE_NUM_PORTS)) | |||
return; | |||
if (!audioListeners[port]) | |||
return; | |||
if (audioActive) | |||
audioListeners[port]->setChannels(2, 2); | |||
else | |||
audioListeners[port]->setChannels(0, 0); | |||
} | |||
}; | |||
static void clientRun(int client) { | |||
defer({ | |||
close(client); | |||
}); | |||
int err; | |||
BridgeClientConnection connection; | |||
// // Get client address | |||
// struct sockaddr_in addr; | |||
// socklen_t clientAddrLen = sizeof(addr); | |||
// err = getpeername(client, (struct sockaddr*) &addr, &clientAddrLen); | |||
// assert(!err); | |||
// // Get client IP address | |||
// struct in_addr ipAddr = addr.sin_addr; | |||
// char ipBuffer[INET_ADDRSTRLEN]; | |||
// inet_ntop(AF_INET, &ipAddr, ipBuffer, INET_ADDRSTRLEN); | |||
// info("Bridge client %s connected", ipBuffer); | |||
info("Bridge client connected"); | |||
(void) err; | |||
#ifdef ARCH_MAC | |||
// Avoid SIGPIPE | |||
@@ -219,29 +305,17 @@ static void clientRun(int client) { | |||
setsockopt(client, SOL_SOCKET, SO_NOSIGPIPE, &flag, sizeof(int)); | |||
#endif | |||
// Disable non-blocking | |||
#ifdef ARCH_WIN | |||
unsigned long blockingMode = 1; | |||
unsigned long blockingMode = 0; | |||
ioctlsocket(client, FIONBIO, &blockingMode); | |||
#else | |||
err = fcntl(client, F_SETFL, fcntl(client, F_GETFL, 0) & ~O_NONBLOCK); | |||
#endif | |||
while (!connection.closeRequested) { | |||
uint8_t buffer[RECV_BUFFER_SIZE]; | |||
#ifdef ARCH_LIN | |||
ssize_t received = recv(client, (char*) buffer, sizeof(buffer), MSG_NOSIGNAL); | |||
#else | |||
ssize_t received = recv(client, (char*) buffer, sizeof(buffer), 0); | |||
#endif | |||
if (received <= 0) | |||
break; | |||
connection.recv(buffer, received); | |||
} | |||
err = close(client); | |||
(void) err; | |||
info("Bridge client closed"); | |||
BridgeClientConnection connection; | |||
connection.client = client; | |||
connection.run(); | |||
} | |||
@@ -270,7 +344,7 @@ static void serverRun() { | |||
hints.ai_socktype = SOCK_STREAM; | |||
hints.ai_protocol = IPPROTO_TCP; | |||
hints.ai_flags = AI_PASSIVE; | |||
err = getaddrinfo(NULL, "5000", &hints, &result); | |||
err = getaddrinfo("127.0.0.1", "5000", &hints, &result); | |||
if (err) { | |||
warn("Could not get Bridge server address"); | |||
return; | |||
@@ -301,7 +375,6 @@ static void serverRun() { | |||
close(server); | |||
}); | |||
// Bind socket to address | |||
#ifdef ARCH_WIN | |||
err = bind(server, result->ai_addr, (int)result->ai_addrlen); | |||
@@ -321,12 +394,13 @@ static void serverRun() { | |||
} | |||
info("Bridge server started"); | |||
// Make server non-blocking | |||
// Enable non-blocking | |||
#ifdef ARCH_WIN | |||
unsigned long blockingMode = 1; | |||
ioctlsocket(server, FIONBIO, &blockingMode); | |||
#else | |||
err = fcntl(server, F_SETFL, fcntl(server, F_GETFL, 0) | O_NONBLOCK); | |||
int flags = fcntl(server, F_GETFL, 0); | |||
err = fcntl(server, F_SETFL, flags | O_NONBLOCK); | |||
#endif | |||
// Accept clients | |||
@@ -357,26 +431,24 @@ void bridgeDestroy() { | |||
serverThread.join(); | |||
} | |||
void bridgeAudioSubscribe(int channel, AudioIO *audio) { | |||
if (!(0 <= channel && channel < BRIDGE_CHANNELS)) | |||
void bridgeAudioSubscribe(int port, AudioIO *audio) { | |||
if (!(0 <= port && port < BRIDGE_NUM_PORTS)) | |||
return; | |||
if (audioListeners[channel]) | |||
// Check if an Audio is already subscribed on the port | |||
if (audioListeners[port]) | |||
return; | |||
audioListeners[channel] = audio; | |||
audioListeners[port] = audio; | |||
if (connections[port]) | |||
connections[port]->refreshAudioActive(); | |||
} | |||
void bridgeAudioUnsubscribe(int channel, AudioIO *audio) { | |||
if (!(0 <= channel && channel < BRIDGE_CHANNELS)) | |||
void bridgeAudioUnsubscribe(int port, AudioIO *audio) { | |||
if (!(0 <= port && port < BRIDGE_NUM_PORTS)) | |||
return; | |||
if (audioListeners[channel] != audio) | |||
if (audioListeners[port] != audio) | |||
return; | |||
audioListeners[channel] = NULL; | |||
} | |||
bool bridgeAudioIsSubscribed(int channel, AudioIO *audio) { | |||
if (!(0 <= channel && channel < BRIDGE_CHANNELS)) | |||
return false; | |||
return (audioListeners[channel] == audio); | |||
audioListeners[port] = NULL; | |||
audio->setChannels(0, 0); | |||
} | |||
@@ -20,7 +20,7 @@ int main(int argc, char* argv[]) { | |||
gLogFile = fopen(logFilename.c_str(), "w"); | |||
#endif | |||
info("Rack v%s", gApplicationVersion.c_str()); | |||
info("Rack %s", gApplicationVersion.c_str()); | |||
{ | |||
char *cwd = getcwd(NULL, 0); | |||