| @@ -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/). | 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 Wire; | ||||
| struct RackWidget; | struct RackWidget; | ||||
| struct ParamWidget; | |||||
| struct Parameter; | |||||
| struct Port; | struct Port; | ||||
| struct SVGPanel; | struct SVGPanel; | ||||
| @@ -58,14 +58,14 @@ struct ModuleWidget : OpaqueWidget { | |||||
| SVGPanel *panel = NULL; | SVGPanel *panel = NULL; | ||||
| std::vector<Port*> inputs; | std::vector<Port*> inputs; | ||||
| std::vector<Port*> outputs; | std::vector<Port*> outputs; | ||||
| std::vector<ParamWidget*> params; | |||||
| std::vector<Parameter*> params; | |||||
| ModuleWidget(Module *module); | ModuleWidget(Module *module); | ||||
| ~ModuleWidget(); | ~ModuleWidget(); | ||||
| /** Convenience functions for adding special widgets (calls addChild()) */ | /** Convenience functions for adding special widgets (calls addChild()) */ | ||||
| void addInput(Port *input); | void addInput(Port *input); | ||||
| void addOutput(Port *output); | void addOutput(Port *output); | ||||
| void addParam(ParamWidget *param); | |||||
| void addParam(Parameter *param); | |||||
| void setPanel(std::shared_ptr<SVG> svg); | void setPanel(std::shared_ptr<SVG> svg); | ||||
| virtual json_t *toJson(); | 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 { | struct CircularShadow : TransparentWidget { | ||||
| float blur = 0.0; | |||||
| float blurRadius; | |||||
| float opacity; | |||||
| CircularShadow(); | |||||
| void draw(NVGcontext *vg) override; | 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; | int paramId; | ||||
| /** Used to momentarily disable value randomization | /** Used to momentarily disable value randomization | ||||
| To permanently disable or change randomization behavior, override the randomize() method instead of changing this. | 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 onMouseDown(EventMouseDown &e) override; | ||||
| void onChange(EventChange &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) { | 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->paramId = paramId; | ||||
| o->setLimits(minValue, maxValue); | o->setLimits(minValue, maxValue); | ||||
| o->setDefaultValue(defaultValue); | o->setDefaultValue(defaultValue); | ||||
| @@ -236,8 +250,11 @@ struct ParamWidget : OpaqueWidget, QuantityWidget { | |||||
| } | } | ||||
| }; | }; | ||||
| /** Deprecated name of Parameter */ | |||||
| typedef Parameter ParamWidget; | |||||
| /** Implements vertical dragging behavior for ParamWidgets */ | /** Implements vertical dragging behavior for ParamWidgets */ | ||||
| struct Knob : ParamWidget { | |||||
| struct Knob : Parameter { | |||||
| /** Snap to nearest integer while dragging */ | /** Snap to nearest integer while dragging */ | ||||
| bool snap = false; | bool snap = false; | ||||
| /** Multiplier for mouse movement to adjust knob value */ | /** Multiplier for mouse movement to adjust knob value */ | ||||
| @@ -249,18 +266,19 @@ struct Knob : ParamWidget { | |||||
| void onDragEnd(EventDragEnd &e) override; | void onDragEnd(EventDragEnd &e) override; | ||||
| }; | }; | ||||
| struct SpriteKnob : virtual Knob, SpriteWidget { | |||||
| /** Deprecated */ | |||||
| struct SpriteKnob : Knob, SpriteWidget { | |||||
| int minIndex, maxIndex, spriteCount; | int minIndex, maxIndex, spriteCount; | ||||
| void step() override; | void step() override; | ||||
| }; | }; | ||||
| /** A knob which rotates an SVG and caches it in a framebuffer */ | /** 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; | TransformWidget *tw; | ||||
| SVGWidget *sw; | SVGWidget *sw; | ||||
| CircularShadow *shadow; | |||||
| /** Angles in radians */ | |||||
| float minAngle, maxAngle; | |||||
| SVGKnob(); | SVGKnob(); | ||||
| void setSVG(std::shared_ptr<SVG> svg); | void setSVG(std::shared_ptr<SVG> svg); | ||||
| @@ -268,26 +286,28 @@ struct SVGKnob : virtual Knob, FramebufferWidget { | |||||
| void onChange(EventChange &e) override; | 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 *background; | ||||
| SVGWidget *handle; | 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 step() override; | ||||
| void onChange(EventChange &e) 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; | std::vector<std::shared_ptr<SVG>> frames; | ||||
| /** Not owned */ | |||||
| SVGWidget *sw; | SVGWidget *sw; | ||||
| SVGSwitch(); | SVGSwitch(); | ||||
| /** Adds an SVG file to represent the next switch position */ | /** Adds an SVG file to represent the next switch position */ | ||||
| void addFrame(std::shared_ptr<SVG> svg); | void addFrame(std::shared_ptr<SVG> svg); | ||||
| @@ -295,29 +315,33 @@ struct SVGSwitch : virtual Switch, FramebufferWidget { | |||||
| }; | }; | ||||
| /** A switch that cycles through each mechanical position */ | /** 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 */ | /** Don't randomize state */ | ||||
| void randomize() override {} | 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 | // ports | ||||
| //////////////////// | //////////////////// | ||||
| struct Port : OpaqueWidget { | |||||
| struct Port : Component { | |||||
| enum PortType { | enum PortType { | ||||
| INPUT, | INPUT, | ||||
| OUTPUT | OUTPUT | ||||
| }; | }; | ||||
| Module *module = NULL; | |||||
| PortType type = INPUT; | PortType type = INPUT; | ||||
| int portId; | int portId; | ||||
| MultiLightWidget *plugLight; | MultiLightWidget *plugLight; | ||||
| @@ -450,9 +472,8 @@ struct Port : OpaqueWidget { | |||||
| template <typename T = Port> | template <typename T = Port> | ||||
| static T *create(Vec pos, PortType type, Module *module, int portId) { | 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->type = type; | ||||
| o->module = module; | |||||
| o->portId = portId; | o->portId = portId; | ||||
| return o; | return o; | ||||
| } | } | ||||
| @@ -460,8 +481,10 @@ struct Port : OpaqueWidget { | |||||
| struct SVGPort : Port, FramebufferWidget { | struct SVGPort : Port, FramebufferWidget { | ||||
| SVGWidget *background; | SVGWidget *background; | ||||
| CircularShadow *shadow; | |||||
| SVGPort(); | SVGPort(); | ||||
| void setSVG(std::shared_ptr<SVG> svg); | |||||
| void draw(NVGcontext *vg) override; | void draw(NVGcontext *vg) override; | ||||
| }; | }; | ||||
| @@ -43,17 +43,18 @@ struct AudioIO { | |||||
| void setSampleRate(int sampleRate); | void setSampleRate(int sampleRate); | ||||
| void setBlockSize(int blockSize); | void setBlockSize(int blockSize); | ||||
| void setChannels(int numOutputs, int numInputs); | |||||
| /** Must close the stream before opening */ | /** Must close the stream before opening */ | ||||
| void openStream(); | void openStream(); | ||||
| void closeStream(); | void closeStream(); | ||||
| /** Returns whether the audio stream is open and running */ | |||||
| bool isActive(); | |||||
| std::vector<int> getSampleRates(); | std::vector<int> getSampleRates(); | ||||
| virtual void processStream(const float *input, float *output, int frames) {} | virtual void processStream(const float *input, float *output, int frames) {} | ||||
| virtual void onCloseStream() {} | virtual void onCloseStream() {} | ||||
| virtual void onOpenStream() {} | virtual void onOpenStream() {} | ||||
| virtual void onChannelsChange() {} | |||||
| json_t *toJson(); | json_t *toJson(); | ||||
| void fromJson(json_t *rootJ); | void fromJson(json_t *rootJ); | ||||
| }; | }; | ||||
| @@ -5,14 +5,13 @@ | |||||
| namespace rack { | namespace rack { | ||||
| static const int BRIDGE_CHANNELS = 16; | |||||
| static const int BRIDGE_NUM_PORTS = 16; | |||||
| void bridgeInit(); | void bridgeInit(); | ||||
| void bridgeDestroy(); | void bridgeDestroy(); | ||||
| void bridgeAudioSubscribe(int channel, AudioIO *audio); | void bridgeAudioSubscribe(int channel, AudioIO *audio); | ||||
| void bridgeAudioUnsubscribe(int channel, AudioIO *audio); | void bridgeAudioUnsubscribe(int channel, AudioIO *audio); | ||||
| bool bridgeAudioIsSubscribed(int channel, AudioIO *audio); | |||||
| } // namespace rack | } // namespace rack | ||||
| @@ -36,31 +36,30 @@ struct RoundKnob : SVGKnob { | |||||
| struct RoundBlackKnob : RoundKnob { | struct RoundBlackKnob : RoundKnob { | ||||
| RoundBlackKnob() { | 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() { | RoundSmallBlackKnob() { | ||||
| box.size = Vec(28, 28); | |||||
| setSVG(SVG::load(assetGlobal("res/ComponentLibrary/RoundSmallBlackKnob.svg"))); | |||||
| } | } | ||||
| }; | }; | ||||
| struct RoundLargeBlackKnob : RoundBlackKnob { | |||||
| struct RoundLargeBlackKnob : RoundKnob { | |||||
| RoundLargeBlackKnob() { | RoundLargeBlackKnob() { | ||||
| box.size = Vec(46, 46); | |||||
| setSVG(SVG::load(assetGlobal("res/ComponentLibrary/RoundLargeBlackKnob.svg"))); | |||||
| } | } | ||||
| }; | }; | ||||
| struct RoundHugeBlackKnob : RoundBlackKnob { | |||||
| struct RoundHugeBlackKnob : RoundKnob { | |||||
| RoundHugeBlackKnob() { | RoundHugeBlackKnob() { | ||||
| box.size = Vec(56, 56); | |||||
| setSVG(SVG::load(assetGlobal("res/ComponentLibrary/RoundHugeBlackKnob.svg"))); | |||||
| } | } | ||||
| }; | }; | ||||
| struct RoundSmallBlackSnapKnob : RoundSmallBlackKnob { | |||||
| RoundSmallBlackSnapKnob() { | |||||
| struct RoundBlackSnapKnob : RoundBlackKnob { | |||||
| RoundBlackSnapKnob() { | |||||
| snap = true; | snap = true; | ||||
| smooth = false; | smooth = false; | ||||
| } | } | ||||
| @@ -294,7 +293,6 @@ struct SynthTechAlco : SVGKnob { | |||||
| struct Trimpot : SVGKnob { | struct Trimpot : SVGKnob { | ||||
| Trimpot() { | Trimpot() { | ||||
| box.size = Vec(17, 17); | |||||
| minAngle = -0.75*M_PI; | minAngle = -0.75*M_PI; | ||||
| maxAngle = 0.75*M_PI; | maxAngle = 0.75*M_PI; | ||||
| setSVG(SVG::load(assetGlobal("res/ComponentLibrary/Trimpot.svg"))); | setSVG(SVG::load(assetGlobal("res/ComponentLibrary/Trimpot.svg"))); | ||||
| @@ -303,7 +301,6 @@ struct Trimpot : SVGKnob { | |||||
| struct BefacoBigKnob : SVGKnob { | struct BefacoBigKnob : SVGKnob { | ||||
| BefacoBigKnob() { | BefacoBigKnob() { | ||||
| box.size = Vec(75, 75); | |||||
| minAngle = -0.75*M_PI; | minAngle = -0.75*M_PI; | ||||
| maxAngle = 0.75*M_PI; | maxAngle = 0.75*M_PI; | ||||
| setSVG(SVG::load(assetGlobal("res/ComponentLibrary/BefacoBigKnob.svg"))); | setSVG(SVG::load(assetGlobal("res/ComponentLibrary/BefacoBigKnob.svg"))); | ||||
| @@ -319,52 +316,81 @@ struct BefacoBigSnapKnob : BefacoBigKnob { | |||||
| struct BefacoTinyKnob : SVGKnob { | struct BefacoTinyKnob : SVGKnob { | ||||
| BefacoTinyKnob() { | BefacoTinyKnob() { | ||||
| box.size = Vec(26, 26); | |||||
| minAngle = -0.75*M_PI; | minAngle = -0.75*M_PI; | ||||
| maxAngle = 0.75*M_PI; | maxAngle = 0.75*M_PI; | ||||
| setSVG(SVG::load(assetGlobal("res/ComponentLibrary/BefacoTinyKnob.svg"))); | setSVG(SVG::load(assetGlobal("res/ComponentLibrary/BefacoTinyKnob.svg"))); | ||||
| } | } | ||||
| }; | }; | ||||
| struct BefacoSlidePot : SVGFader { | |||||
| struct BefacoSlidePot : SVGSlider { | |||||
| BefacoSlidePot() { | BefacoSlidePot() { | ||||
| Vec margin = Vec(3.5, 3.5); | Vec margin = Vec(3.5, 3.5); | ||||
| maxHandlePos = Vec(-1, -2).plus(margin); | maxHandlePos = Vec(-1, -2).plus(margin); | ||||
| minHandlePos = Vec(-1, 87).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; | background->box.pos = margin; | ||||
| box.size = background->box.size.plus(margin.mult(2)); | 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 { | struct PJ301MPort : SVGPort { | ||||
| PJ301MPort() { | 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 { | struct PJ3410Port : SVGPort { | ||||
| PJ3410Port() { | 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 { | struct CL1362Port : SVGPort { | ||||
| CL1362Port() { | 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 | // 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 { | struct PB61303 : SVGSwitch, MomentarySwitch { | ||||
| PB61303() { | PB61303() { | ||||
| addFrame(SVG::load(assetGlobal("res/ComponentLibrary/PB61303.svg"))); | 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 | // Misc | ||||
| @@ -257,6 +257,12 @@ struct Rect { | |||||
| r.size = size; | r.size = size; | ||||
| return r; | 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="http://www.w3.org/2000/svg" | ||||
| xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | 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" | 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 | <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 | <sodipodi:namedview | ||||
| id="base" | id="base" | ||||
| pagecolor="#ffffff" | pagecolor="#ffffff" | ||||
| @@ -386,24 +25,23 @@ | |||||
| borderopacity="1.0" | borderopacity="1.0" | ||||
| inkscape:pageopacity="0.0" | inkscape:pageopacity="0.0" | ||||
| inkscape:pageshadow="2" | 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" | inkscape:current-layer="layer1" | ||||
| showgrid="false" | 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-top="0" | ||||
| fit-margin-left="0" | fit-margin-left="0" | ||||
| fit-margin-right="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 | <metadata | ||||
| id="metadata15243"> | |||||
| id="metadata113933"> | |||||
| <rdf:RDF> | <rdf:RDF> | ||||
| <cc:Work | <cc:Work | ||||
| rdf:about=""> | rdf:about=""> | ||||
| @@ -418,26 +56,26 @@ | |||||
| inkscape:label="Layer 1" | inkscape:label="Layer 1" | ||||
| inkscape:groupmode="layer" | inkscape:groupmode="layer" | ||||
| id="layer1" | id="layer1" | ||||
| transform="translate(-35.482976,-90.654687)"> | |||||
| transform="translate(-80.833177,-85.089003)"> | |||||
| <path | <path | ||||
| inkscape:connector-curvature="0" | 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 | <path | ||||
| inkscape:connector-curvature="0" | 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 | <path | ||||
| inkscape:connector-curvature="0" | 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 | <path | ||||
| inkscape:connector-curvature="0" | 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> | </g> | ||||
| </svg> | </svg> | ||||
| @@ -9,376 +9,15 @@ | |||||
| xmlns="http://www.w3.org/2000/svg" | xmlns="http://www.w3.org/2000/svg" | ||||
| xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | 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" | 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 | <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 | <sodipodi:namedview | ||||
| id="base" | id="base" | ||||
| pagecolor="#ffffff" | pagecolor="#ffffff" | ||||
| @@ -386,24 +25,23 @@ | |||||
| borderopacity="1.0" | borderopacity="1.0" | ||||
| inkscape:pageopacity="0.0" | inkscape:pageopacity="0.0" | ||||
| inkscape:pageshadow="2" | 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:document-units="mm" | ||||
| inkscape:current-layer="layer1" | inkscape:current-layer="layer1" | ||||
| showgrid="false" | showgrid="false" | ||||
| fit-margin-top="0" | |||||
| fit-margin-left="0" | |||||
| fit-margin-right="0" | |||||
| fit-margin-bottom="0" | |||||
| inkscape:window-width="2560" | inkscape:window-width="2560" | ||||
| inkscape:window-height="1422" | inkscape:window-height="1422" | ||||
| inkscape:window-x="0" | inkscape:window-x="0" | ||||
| inkscape:window-y="18" | 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 | <metadata | ||||
| id="metadata15243"> | |||||
| id="metadata113933"> | |||||
| <rdf:RDF> | <rdf:RDF> | ||||
| <cc:Work | <cc:Work | ||||
| rdf:about=""> | rdf:about=""> | ||||
| @@ -418,26 +56,31 @@ | |||||
| inkscape:label="Layer 1" | inkscape:label="Layer 1" | ||||
| inkscape:groupmode="layer" | inkscape:groupmode="layer" | ||||
| id="layer1" | 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 | <path | ||||
| inkscape:connector-curvature="0" | 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 | <path | ||||
| inkscape:connector-curvature="0" | 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 | <path | ||||
| inkscape:connector-curvature="0" | 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 | <path | ||||
| inkscape:connector-curvature="0" | 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> | </g> | ||||
| </svg> | </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:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||||
| xmlns:svg="http://www.w3.org/2000/svg" | xmlns:svg="http://www.w3.org/2000/svg" | ||||
| xmlns="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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||||
| width="10.000438mm" | width="10.000438mm" | ||||
| height="10.000403mm" | height="10.000403mm" | ||||
| viewBox="0 0 10.000438 10.000403" | viewBox="0 0 10.000438 10.000403" | ||||
| version="1.1" | version="1.1" | ||||
| id="svg81475" | |||||
| id="svg27765" | |||||
| inkscape:version="0.92.2 5c3e80d, 2017-08-06" | inkscape:version="0.92.2 5c3e80d, 2017-08-06" | ||||
| sodipodi:docname="PB61303.svg"> | sodipodi:docname="PB61303.svg"> | ||||
| <defs | <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 | <sodipodi:namedview | ||||
| id="base" | id="base" | ||||
| pagecolor="#ffffff" | pagecolor="#ffffff" | ||||
| @@ -217,9 +25,9 @@ | |||||
| borderopacity="1.0" | borderopacity="1.0" | ||||
| inkscape:pageopacity="0.0" | inkscape:pageopacity="0.0" | ||||
| inkscape:pageshadow="2" | 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:document-units="mm" | ||||
| inkscape:current-layer="layer1" | inkscape:current-layer="layer1" | ||||
| showgrid="false" | showgrid="false" | ||||
| @@ -233,7 +41,7 @@ | |||||
| inkscape:window-y="18" | inkscape:window-y="18" | ||||
| inkscape:window-maximized="0" /> | inkscape:window-maximized="0" /> | ||||
| <metadata | <metadata | ||||
| id="metadata81472"> | |||||
| id="metadata27762"> | |||||
| <rdf:RDF> | <rdf:RDF> | ||||
| <cc:Work | <cc:Work | ||||
| rdf:about=""> | rdf:about=""> | ||||
| @@ -248,16 +56,11 @@ | |||||
| inkscape:label="Layer 1" | inkscape:label="Layer 1" | ||||
| inkscape:groupmode="layer" | inkscape:groupmode="layer" | ||||
| id="layer1" | id="layer1" | ||||
| transform="translate(-57.743829,-79.577179)"> | |||||
| transform="translate(-52.452162,-82.600989)"> | |||||
| <path | <path | ||||
| inkscape:connector-curvature="0" | 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> | </g> | ||||
| </svg> | </svg> | ||||
| @@ -392,9 +392,9 @@ | |||||
| inkscape:document-units="mm" | inkscape:document-units="mm" | ||||
| inkscape:current-layer="layer1" | inkscape:current-layer="layer1" | ||||
| showgrid="false" | 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-y="0" | ||||
| inkscape:window-maximized="0" | inkscape:window-maximized="0" | ||||
| units="px" | units="px" | ||||
| @@ -410,7 +410,7 @@ | |||||
| <dc:format>image/svg+xml</dc:format> | <dc:format>image/svg+xml</dc:format> | ||||
| <dc:type | <dc:type | ||||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||||
| <dc:title></dc:title> | |||||
| <dc:title /> | |||||
| </cc:Work> | </cc:Work> | ||||
| </rdf:RDF> | </rdf:RDF> | ||||
| </metadata> | </metadata> | ||||
| @@ -428,11 +428,11 @@ | |||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7717" | 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" | 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 | <path | ||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7719" | 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" | 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> | </g> | ||||
| </svg> | </svg> | ||||
| @@ -387,15 +387,15 @@ | |||||
| inkscape:pageopacity="0.0" | inkscape:pageopacity="0.0" | ||||
| inkscape:pageshadow="2" | inkscape:pageshadow="2" | ||||
| inkscape:zoom="5.6" | inkscape:zoom="5.6" | ||||
| inkscape:cx="35.570219" | |||||
| inkscape:cx="4.6773619" | |||||
| inkscape:cy="11.017728" | inkscape:cy="11.017728" | ||||
| inkscape:document-units="mm" | inkscape:document-units="mm" | ||||
| inkscape:current-layer="layer1" | inkscape:current-layer="layer1" | ||||
| showgrid="false" | 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" | inkscape:window-maximized="0" | ||||
| units="px" | units="px" | ||||
| fit-margin-top="0" | fit-margin-top="0" | ||||
| @@ -410,7 +410,7 @@ | |||||
| <dc:format>image/svg+xml</dc:format> | <dc:format>image/svg+xml</dc:format> | ||||
| <dc:type | <dc:type | ||||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||||
| <dc:title></dc:title> | |||||
| <dc:title /> | |||||
| </cc:Work> | </cc:Work> | ||||
| </rdf:RDF> | </rdf:RDF> | ||||
| </metadata> | </metadata> | ||||
| @@ -428,11 +428,11 @@ | |||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7725" | 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" | 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 | <path | ||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7727" | 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" | 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> | </g> | ||||
| </svg> | </svg> | ||||
| @@ -387,15 +387,15 @@ | |||||
| inkscape:pageopacity="0.0" | inkscape:pageopacity="0.0" | ||||
| inkscape:pageshadow="2" | inkscape:pageshadow="2" | ||||
| inkscape:zoom="5.6" | inkscape:zoom="5.6" | ||||
| inkscape:cx="45.219096" | |||||
| inkscape:cx="14.326239" | |||||
| inkscape:cy="27.987957" | inkscape:cy="27.987957" | ||||
| inkscape:document-units="mm" | inkscape:document-units="mm" | ||||
| inkscape:current-layer="layer1" | inkscape:current-layer="layer1" | ||||
| showgrid="false" | 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" | inkscape:window-maximized="0" | ||||
| units="px" | units="px" | ||||
| fit-margin-top="0" | fit-margin-top="0" | ||||
| @@ -410,7 +410,7 @@ | |||||
| <dc:format>image/svg+xml</dc:format> | <dc:format>image/svg+xml</dc:format> | ||||
| <dc:type | <dc:type | ||||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||||
| <dc:title></dc:title> | |||||
| <dc:title /> | |||||
| </cc:Work> | </cc:Work> | ||||
| </rdf:RDF> | </rdf:RDF> | ||||
| </metadata> | </metadata> | ||||
| @@ -428,7 +428,7 @@ | |||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7691" | 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" | 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 | <path | ||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7693" | id="path7693" | ||||
| @@ -438,6 +438,6 @@ | |||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7695" | 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" | 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> | </g> | ||||
| </svg> | </svg> | ||||
| @@ -387,15 +387,15 @@ | |||||
| inkscape:pageopacity="0.0" | inkscape:pageopacity="0.0" | ||||
| inkscape:pageshadow="2" | inkscape:pageshadow="2" | ||||
| inkscape:zoom="5.6" | inkscape:zoom="5.6" | ||||
| inkscape:cx="50.246257" | |||||
| inkscape:cx="19.3534" | |||||
| inkscape:cy="20.515109" | inkscape:cy="20.515109" | ||||
| inkscape:document-units="mm" | inkscape:document-units="mm" | ||||
| inkscape:current-layer="layer1" | inkscape:current-layer="layer1" | ||||
| showgrid="false" | 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" | inkscape:window-maximized="0" | ||||
| units="px" | units="px" | ||||
| fit-margin-top="0" | fit-margin-top="0" | ||||
| @@ -410,7 +410,7 @@ | |||||
| <dc:format>image/svg+xml</dc:format> | <dc:format>image/svg+xml</dc:format> | ||||
| <dc:type | <dc:type | ||||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||||
| <dc:title></dc:title> | |||||
| <dc:title /> | |||||
| </cc:Work> | </cc:Work> | ||||
| </rdf:RDF> | </rdf:RDF> | ||||
| </metadata> | </metadata> | ||||
| @@ -428,7 +428,7 @@ | |||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7699" | 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" | 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 | <path | ||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7701" | id="path7701" | ||||
| @@ -438,6 +438,6 @@ | |||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7703" | 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" | 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> | </g> | ||||
| </svg> | </svg> | ||||
| @@ -387,15 +387,15 @@ | |||||
| inkscape:pageopacity="0.0" | inkscape:pageopacity="0.0" | ||||
| inkscape:pageshadow="2" | inkscape:pageshadow="2" | ||||
| inkscape:zoom="5.6" | inkscape:zoom="5.6" | ||||
| inkscape:cx="19.905014" | |||||
| inkscape:cx="-10.987843" | |||||
| inkscape:cy="37.67402" | inkscape:cy="37.67402" | ||||
| inkscape:document-units="mm" | inkscape:document-units="mm" | ||||
| inkscape:current-layer="layer1" | inkscape:current-layer="layer1" | ||||
| showgrid="false" | 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" | inkscape:window-maximized="0" | ||||
| units="px" | units="px" | ||||
| fit-margin-top="0" | fit-margin-top="0" | ||||
| @@ -410,7 +410,7 @@ | |||||
| <dc:format>image/svg+xml</dc:format> | <dc:format>image/svg+xml</dc:format> | ||||
| <dc:type | <dc:type | ||||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||||
| <dc:title></dc:title> | |||||
| <dc:title /> | |||||
| </cc:Work> | </cc:Work> | ||||
| </rdf:RDF> | </rdf:RDF> | ||||
| </metadata> | </metadata> | ||||
| @@ -428,11 +428,11 @@ | |||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7673" | 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" | 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 | <path | ||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7675" | 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" | 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> | </g> | ||||
| </svg> | </svg> | ||||
| @@ -387,15 +387,15 @@ | |||||
| inkscape:pageopacity="0.0" | inkscape:pageopacity="0.0" | ||||
| inkscape:pageshadow="2" | inkscape:pageshadow="2" | ||||
| inkscape:zoom="5.6" | inkscape:zoom="5.6" | ||||
| inkscape:cx="51.516994" | |||||
| inkscape:cx="20.624137" | |||||
| inkscape:cy="37.321731" | inkscape:cy="37.321731" | ||||
| inkscape:document-units="mm" | inkscape:document-units="mm" | ||||
| inkscape:current-layer="layer1" | inkscape:current-layer="layer1" | ||||
| showgrid="false" | 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" | inkscape:window-maximized="0" | ||||
| units="px" | units="px" | ||||
| fit-margin-top="0" | fit-margin-top="0" | ||||
| @@ -410,7 +410,7 @@ | |||||
| <dc:format>image/svg+xml</dc:format> | <dc:format>image/svg+xml</dc:format> | ||||
| <dc:type | <dc:type | ||||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||||
| <dc:title></dc:title> | |||||
| <dc:title /> | |||||
| </cc:Work> | </cc:Work> | ||||
| </rdf:RDF> | </rdf:RDF> | ||||
| </metadata> | </metadata> | ||||
| @@ -428,11 +428,11 @@ | |||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7679" | 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" | 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 | <path | ||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7681" | 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" | 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> | </g> | ||||
| </svg> | </svg> | ||||
| @@ -387,15 +387,15 @@ | |||||
| inkscape:pageopacity="0.0" | inkscape:pageopacity="0.0" | ||||
| inkscape:pageshadow="2" | inkscape:pageshadow="2" | ||||
| inkscape:zoom="5.6" | inkscape:zoom="5.6" | ||||
| inkscape:cx="17.70635" | |||||
| inkscape:cx="-13.186507" | |||||
| inkscape:cy="40.123343" | inkscape:cy="40.123343" | ||||
| inkscape:document-units="mm" | inkscape:document-units="mm" | ||||
| inkscape:current-layer="layer1" | inkscape:current-layer="layer1" | ||||
| showgrid="false" | 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" | inkscape:window-maximized="0" | ||||
| units="px" | units="px" | ||||
| fit-margin-top="0" | fit-margin-top="0" | ||||
| @@ -410,7 +410,7 @@ | |||||
| <dc:format>image/svg+xml</dc:format> | <dc:format>image/svg+xml</dc:format> | ||||
| <dc:type | <dc:type | ||||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||||
| <dc:title></dc:title> | |||||
| <dc:title /> | |||||
| </cc:Work> | </cc:Work> | ||||
| </rdf:RDF> | </rdf:RDF> | ||||
| </metadata> | </metadata> | ||||
| @@ -433,11 +433,11 @@ | |||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7651" | 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" | 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 | <path | ||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7653" | 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" | 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> | </g> | ||||
| </svg> | </svg> | ||||
| @@ -387,15 +387,15 @@ | |||||
| inkscape:pageopacity="0.0" | inkscape:pageopacity="0.0" | ||||
| inkscape:pageshadow="2" | inkscape:pageshadow="2" | ||||
| inkscape:zoom="5.6" | inkscape:zoom="5.6" | ||||
| inkscape:cx="28.209324" | |||||
| inkscape:cx="-2.6835331" | |||||
| inkscape:cy="41.164604" | inkscape:cy="41.164604" | ||||
| inkscape:document-units="mm" | inkscape:document-units="mm" | ||||
| inkscape:current-layer="layer1" | inkscape:current-layer="layer1" | ||||
| showgrid="false" | 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" | inkscape:window-maximized="0" | ||||
| units="px" | units="px" | ||||
| fit-margin-top="0" | fit-margin-top="0" | ||||
| @@ -410,7 +410,7 @@ | |||||
| <dc:format>image/svg+xml</dc:format> | <dc:format>image/svg+xml</dc:format> | ||||
| <dc:type | <dc:type | ||||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||||
| <dc:title></dc:title> | |||||
| <dc:title /> | |||||
| </cc:Work> | </cc:Work> | ||||
| </rdf:RDF> | </rdf:RDF> | ||||
| </metadata> | </metadata> | ||||
| @@ -433,11 +433,11 @@ | |||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7659" | 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" | 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 | <path | ||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7661" | 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" | 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> | </g> | ||||
| </svg> | </svg> | ||||
| @@ -387,15 +387,15 @@ | |||||
| inkscape:pageopacity="0.0" | inkscape:pageopacity="0.0" | ||||
| inkscape:pageshadow="2" | inkscape:pageshadow="2" | ||||
| inkscape:zoom="5.6" | inkscape:zoom="5.6" | ||||
| inkscape:cx="32.218991" | |||||
| inkscape:cx="1.3261339" | |||||
| inkscape:cy="50.179458" | inkscape:cy="50.179458" | ||||
| inkscape:document-units="mm" | inkscape:document-units="mm" | ||||
| inkscape:current-layer="layer1" | inkscape:current-layer="layer1" | ||||
| showgrid="false" | 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" | inkscape:window-maximized="0" | ||||
| units="px" | units="px" | ||||
| fit-margin-top="0" | fit-margin-top="0" | ||||
| @@ -410,7 +410,7 @@ | |||||
| <dc:format>image/svg+xml</dc:format> | <dc:format>image/svg+xml</dc:format> | ||||
| <dc:type | <dc:type | ||||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||||
| <dc:title></dc:title> | |||||
| <dc:title /> | |||||
| </cc:Work> | </cc:Work> | ||||
| </rdf:RDF> | </rdf:RDF> | ||||
| </metadata> | </metadata> | ||||
| @@ -428,11 +428,11 @@ | |||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7631" | 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" | 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 | <path | ||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7633" | 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" | 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> | </g> | ||||
| </svg> | </svg> | ||||
| @@ -387,15 +387,15 @@ | |||||
| inkscape:pageopacity="0.0" | inkscape:pageopacity="0.0" | ||||
| inkscape:pageshadow="2" | inkscape:pageshadow="2" | ||||
| inkscape:zoom="5.6" | inkscape:zoom="5.6" | ||||
| inkscape:cx="38.452993" | |||||
| inkscape:cx="7.5601359" | |||||
| inkscape:cy="47.306337" | inkscape:cy="47.306337" | ||||
| inkscape:document-units="mm" | inkscape:document-units="mm" | ||||
| inkscape:current-layer="layer1" | inkscape:current-layer="layer1" | ||||
| showgrid="false" | 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" | inkscape:window-maximized="0" | ||||
| units="px" | units="px" | ||||
| fit-margin-top="0" | fit-margin-top="0" | ||||
| @@ -410,7 +410,7 @@ | |||||
| <dc:format>image/svg+xml</dc:format> | <dc:format>image/svg+xml</dc:format> | ||||
| <dc:type | <dc:type | ||||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||||
| <dc:title></dc:title> | |||||
| <dc:title /> | |||||
| </cc:Work> | </cc:Work> | ||||
| </rdf:RDF> | </rdf:RDF> | ||||
| </metadata> | </metadata> | ||||
| @@ -428,11 +428,11 @@ | |||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7637" | 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" | 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 | <path | ||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7639" | 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" | 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> | </g> | ||||
| </svg> | </svg> | ||||
| @@ -387,15 +387,15 @@ | |||||
| inkscape:pageopacity="0.0" | inkscape:pageopacity="0.0" | ||||
| inkscape:pageshadow="2" | inkscape:pageshadow="2" | ||||
| inkscape:zoom="5.6" | inkscape:zoom="5.6" | ||||
| inkscape:cx="39.52628" | |||||
| inkscape:cx="8.6334229" | |||||
| inkscape:cy="35.160107" | inkscape:cy="35.160107" | ||||
| inkscape:document-units="mm" | inkscape:document-units="mm" | ||||
| inkscape:current-layer="layer1" | inkscape:current-layer="layer1" | ||||
| showgrid="false" | 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" | inkscape:window-maximized="0" | ||||
| units="px" | units="px" | ||||
| fit-margin-top="0" | fit-margin-top="0" | ||||
| @@ -410,7 +410,7 @@ | |||||
| <dc:format>image/svg+xml</dc:format> | <dc:format>image/svg+xml</dc:format> | ||||
| <dc:type | <dc:type | ||||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||||
| <dc:title></dc:title> | |||||
| <dc:title /> | |||||
| </cc:Work> | </cc:Work> | ||||
| </rdf:RDF> | </rdf:RDF> | ||||
| </metadata> | </metadata> | ||||
| @@ -428,7 +428,7 @@ | |||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7607" | 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" | 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 | <path | ||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7609" | id="path7609" | ||||
| @@ -438,6 +438,6 @@ | |||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7611" | 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" | 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> | </g> | ||||
| </svg> | </svg> | ||||
| @@ -392,9 +392,9 @@ | |||||
| inkscape:document-units="mm" | inkscape:document-units="mm" | ||||
| inkscape:current-layer="layer1" | inkscape:current-layer="layer1" | ||||
| showgrid="false" | 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-y="0" | ||||
| inkscape:window-maximized="0" | inkscape:window-maximized="0" | ||||
| units="px" | units="px" | ||||
| @@ -410,7 +410,7 @@ | |||||
| <dc:format>image/svg+xml</dc:format> | <dc:format>image/svg+xml</dc:format> | ||||
| <dc:type | <dc:type | ||||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||||
| <dc:title></dc:title> | |||||
| <dc:title /> | |||||
| </cc:Work> | </cc:Work> | ||||
| </rdf:RDF> | </rdf:RDF> | ||||
| </metadata> | </metadata> | ||||
| @@ -428,7 +428,7 @@ | |||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7615" | 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" | 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 | <path | ||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7617" | id="path7617" | ||||
| @@ -438,6 +438,6 @@ | |||||
| inkscape:connector-curvature="0" | inkscape:connector-curvature="0" | ||||
| id="path7619" | 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" | 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> | </g> | ||||
| </svg> | </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="http://www.w3.org/2000/svg" | ||||
| xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | 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" | 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 | <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 | <sodipodi:namedview | ||||
| id="base" | id="base" | ||||
| pagecolor="#ffffff" | pagecolor="#ffffff" | ||||
| @@ -386,24 +25,23 @@ | |||||
| borderopacity="1.0" | borderopacity="1.0" | ||||
| inkscape:pageopacity="0.0" | inkscape:pageopacity="0.0" | ||||
| inkscape:pageshadow="2" | 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:document-units="mm" | ||||
| inkscape:current-layer="layer1" | inkscape:current-layer="layer1" | ||||
| showgrid="false" | 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-top="0" | ||||
| fit-margin-left="0" | fit-margin-left="0" | ||||
| fit-margin-right="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 | <metadata | ||||
| id="metadata15243"> | |||||
| id="metadata111791"> | |||||
| <rdf:RDF> | <rdf:RDF> | ||||
| <cc:Work | <cc:Work | ||||
| rdf:about=""> | rdf:about=""> | ||||
| @@ -418,16 +56,16 @@ | |||||
| inkscape:label="Layer 1" | inkscape:label="Layer 1" | ||||
| inkscape:groupmode="layer" | inkscape:groupmode="layer" | ||||
| id="layer1" | id="layer1" | ||||
| transform="translate(-46.318588,-97.647662)"> | |||||
| transform="translate(-183.93691,-77.348595)"> | |||||
| <path | <path | ||||
| inkscape:connector-curvature="0" | 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 | <path | ||||
| inkscape:connector-curvature="0" | 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> | </g> | ||||
| </svg> | </svg> | ||||
| @@ -43,10 +43,10 @@ struct AudioInterfaceIO : AudioIO { | |||||
| for (int i = 0; i < frames; i++) { | for (int i = 0; i < frames; i++) { | ||||
| if (inputBuffer.full()) | if (inputBuffer.full()) | ||||
| break; | 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 | // Notify engine when finished processing | ||||
| engineCv.notify_all(); | |||||
| engineCv.notify_one(); | |||||
| } | } | ||||
| void onCloseStream() override { | void onCloseStream() override { | ||||
| inputBuffer.clear(); | inputBuffer.clear(); | ||||
| outputBuffer.clear(); | outputBuffer.clear(); | ||||
| } | } | ||||
| void onChannelsChange() override { | |||||
| debug("Channels changed %d %d", numOutputs, numInputs); | |||||
| } | |||||
| }; | }; | ||||
| @@ -127,12 +131,6 @@ struct AudioInterface : Module { | |||||
| } | } | ||||
| void onSampleRateChange() override { | 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()); | inputSrc.setRates(audioIO.sampleRate, engineGetSampleRate()); | ||||
| outputSrc.setRates(engineGetSampleRate(), audioIO.sampleRate); | outputSrc.setRates(engineGetSampleRate(), audioIO.sampleRate); | ||||
| } | } | ||||
| @@ -154,6 +152,7 @@ void AudioInterface::step() { | |||||
| } | } | ||||
| if (audioIO.numInputs > 0) { | if (audioIO.numInputs > 0) { | ||||
| // Convert inputs if needed | |||||
| if (inputBuffer.empty()) { | if (inputBuffer.empty()) { | ||||
| int inLen = audioIO.inputBuffer.size(); | int inLen = audioIO.inputBuffer.size(); | ||||
| int outLen = inputBuffer.capacity(); | int outLen = inputBuffer.capacity(); | ||||
| @@ -163,25 +162,27 @@ void AudioInterface::step() { | |||||
| } | } | ||||
| } | } | ||||
| // Take input from buffer | |||||
| if (!inputBuffer.empty()) { | if (!inputBuffer.empty()) { | ||||
| inputFrame = inputBuffer.shift(); | inputFrame = inputBuffer.shift(); | ||||
| } | } | ||||
| for (int i = 0; i < INPUTS; i++) { | 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) { | if (audioIO.numOutputs > 0) { | ||||
| // Get and push output SRC frame | // Get and push output SRC frame | ||||
| if (!outputBuffer.full()) { | 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()) { | 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); | std::unique_lock<std::mutex> lock(audioIO.engineMutex); | ||||
| auto cond = [&] { | auto cond = [&] { | ||||
| return (audioIO.outputBuffer.size() < (size_t) audioIO.blockSize); | return (audioIO.outputBuffer.size() < (size_t) audioIO.blockSize); | ||||
| @@ -200,14 +201,16 @@ void AudioInterface::step() { | |||||
| debug("Audio Interface underflow"); | 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++) | for (int i = 0; i < INPUTS / 2; i++) | ||||
| lights[INPUT_LIGHT + i].value = (audioIO.numOutputs >= 2*i+1); | lights[INPUT_LIGHT + i].value = (audioIO.numOutputs >= 2*i+1); | ||||
| for (int i = 0; i < OUTPUTS / 2; i++) | for (int i = 0; i < OUTPUTS / 2; i++) | ||||
| lights[OUTPUT_LIGHT + i].value = (audioIO.numInputs >= 2*i+1); | 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]; | uint8_t notes[4]; | ||||
| bool gates[4]; | bool gates[4]; | ||||
| bool pedal; | bool pedal; | ||||
| int rotateIndex; | |||||
| QuadMIDIToCVInterface() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS), heldNotes(128) { | QuadMIDIToCVInterface() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS), heldNotes(128) { | ||||
| onReset(); | onReset(); | ||||
| @@ -71,6 +72,7 @@ struct QuadMIDIToCVInterface : Module { | |||||
| gates[i] = false; | gates[i] = false; | ||||
| } | } | ||||
| pedal = false; | pedal = false; | ||||
| rotateIndex = 0; | |||||
| } | } | ||||
| void pressNote(uint8_t note) { | void pressNote(uint8_t note) { | ||||
| @@ -84,17 +86,23 @@ struct QuadMIDIToCVInterface : Module { | |||||
| // Set notes and gates | // Set notes and gates | ||||
| switch (polyMode) { | switch (polyMode) { | ||||
| case ROTATE_MODE: { | case ROTATE_MODE: { | ||||
| } break; | } break; | ||||
| case RESET_MODE: { | case RESET_MODE: { | ||||
| } break; | } break; | ||||
| case REASSIGN_MODE: { | case REASSIGN_MODE: { | ||||
| } break; | } break; | ||||
| case UNISON_MODE: { | |||||
| case UNISON_MODE: { | |||||
| for (int i = 0; i < 4; i++) { | |||||
| notes[i] = note; | |||||
| gates[i] = true; | |||||
| } | |||||
| } break; | } break; | ||||
| default: break; | default: break; | ||||
| } | } | ||||
| } | } | ||||
| @@ -105,18 +113,41 @@ struct QuadMIDIToCVInterface : Module { | |||||
| if (it != heldNotes.end()) | if (it != heldNotes.end()) | ||||
| heldNotes.erase(it); | heldNotes.erase(it); | ||||
| // Hold note if pedal is pressed | // 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() { | void pressPedal() { | ||||
| @@ -4,15 +4,22 @@ | |||||
| namespace rack { | namespace rack { | ||||
| CircularShadow::CircularShadow() { | |||||
| blurRadius = 0; | |||||
| opacity = 0.15; | |||||
| } | |||||
| void CircularShadow::draw(NVGcontext *vg) { | void CircularShadow::draw(NVGcontext *vg) { | ||||
| if (opacity < 0.0) | |||||
| return; | |||||
| nvgBeginPath(vg); | 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); | 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); | nvgFillPaint(vg, paint); | ||||
| nvgFill(vg); | nvgFill(vg); | ||||
| } | } | ||||
| @@ -21,15 +21,20 @@ void Knob::onDragStart(EventDragStart &e) { | |||||
| } | } | ||||
| void Knob::onDragMove(EventDragMove &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 | // Drag slower if Mod is held | ||||
| if (windowIsModPressed()) | if (windowIsModPressed()) | ||||
| delta /= 16.0; | delta /= 16.0; | ||||
| dragValue += delta; | dragValue += delta; | ||||
| dragValue = clamp2(dragValue, minValue, maxValue); | |||||
| if (snap) | if (snap) | ||||
| setValue(roundf(dragValue)); | setValue(roundf(dragValue)); | ||||
| else | else | ||||
| @@ -34,7 +34,7 @@ void LightWidget::drawHalo(NVGcontext *vg) { | |||||
| nvgRect(vg, radius - oradius, radius - oradius, 2*oradius, 2*oradius); | nvgRect(vg, radius - oradius, radius - oradius, 2*oradius, 2*oradius); | ||||
| NVGpaint paint; | NVGpaint paint; | ||||
| NVGcolor icol = colorMult(color, 0.15); | |||||
| NVGcolor icol = colorMult(color, 0.25); | |||||
| NVGcolor ocol = nvgRGB(0, 0, 0); | NVGcolor ocol = nvgRGB(0, 0, 0); | ||||
| paint = nvgRadialGradient(vg, radius, radius, radius, oradius, icol, ocol); | paint = nvgRadialGradient(vg, radius, radius, radius, oradius, icol, ocol); | ||||
| nvgFillPaint(vg, paint); | 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 { | namespace rack { | ||||
| json_t *ParamWidget::toJson() { | |||||
| json_t *Parameter::toJson() { | |||||
| json_t *rootJ = json_object(); | json_t *rootJ = json_object(); | ||||
| json_object_set_new(rootJ, "paramId", json_integer(paramId)); | json_object_set_new(rootJ, "paramId", json_integer(paramId)); | ||||
| json_object_set_new(rootJ, "value", json_real(value)); | json_object_set_new(rootJ, "value", json_real(value)); | ||||
| return rootJ; | return rootJ; | ||||
| } | } | ||||
| void ParamWidget::fromJson(json_t *rootJ) { | |||||
| void Parameter::fromJson(json_t *rootJ) { | |||||
| json_t *valueJ = json_object_get(rootJ, "value"); | json_t *valueJ = json_object_get(rootJ, "value"); | ||||
| if (valueJ) | if (valueJ) | ||||
| setValue(json_number_value(valueJ)); | setValue(json_number_value(valueJ)); | ||||
| } | } | ||||
| void ParamWidget::reset() { | |||||
| void Parameter::reset() { | |||||
| setValue(defaultValue); | 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)); | setValue(rescale(randomUniform(), 0.0, 1.0, minValue, maxValue)); | ||||
| } | } | ||||
| void ParamWidget::onMouseDown(EventMouseDown &e) { | |||||
| void Parameter::onMouseDown(EventMouseDown &e) { | |||||
| if (e.button == 1) { | if (e.button == 1) { | ||||
| setValue(defaultValue); | setValue(defaultValue); | ||||
| } | } | ||||
| @@ -35,7 +35,7 @@ void ParamWidget::onMouseDown(EventMouseDown &e) { | |||||
| e.target = this; | e.target = this; | ||||
| } | } | ||||
| void ParamWidget::onChange(EventChange &e) { | |||||
| void Parameter::onChange(EventChange &e) { | |||||
| if (!module) | if (!module) | ||||
| return; | 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() { | SVGKnob::SVGKnob() { | ||||
| shadow = new CircularShadow(); | |||||
| addChild(shadow); | |||||
| shadow->box.size = Vec(); | |||||
| tw = new TransformWidget(); | tw = new TransformWidget(); | ||||
| addChild(tw); | addChild(tw); | ||||
| @@ -13,22 +17,26 @@ SVGKnob::SVGKnob() { | |||||
| } | } | ||||
| void SVGKnob::setSVG(std::shared_ptr<SVG> svg) { | void SVGKnob::setSVG(std::shared_ptr<SVG> svg) { | ||||
| sw->svg = svg; | |||||
| sw->wrap(); | |||||
| sw->setSVG(svg); | |||||
| tw->box.size = sw->box.size; | tw->box.size = sw->box.size; | ||||
| 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() { | void SVGKnob::step() { | ||||
| // Re-transform TransformWidget if dirty | // Re-transform TransformWidget if dirty | ||||
| 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); | 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(); | tw->identity(); | ||||
| // Scale SVG to box | |||||
| tw->scale(box.size.div(sw->box.size)); | |||||
| // Rotate SVG | // Rotate SVG | ||||
| Vec center = sw->box.getCenter(); | Vec center = sw->box.getCenter(); | ||||
| tw->translate(center); | tw->translate(center); | ||||
| @@ -44,5 +52,4 @@ void SVGKnob::onChange(EventChange &e) { | |||||
| } | } | ||||
| } // namespace rack | } // namespace rack | ||||
| @@ -5,10 +5,24 @@ namespace rack { | |||||
| SVGPort::SVGPort() { | 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(); | background = new SVGWidget(); | ||||
| addChild(background); | 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) { | void SVGPort::draw(NVGcontext *vg) { | ||||
| Port::draw(vg); | Port::draw(vg); | ||||
| FramebufferWidget::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); | int index = clamp((int) roundf(valueScaled), 0, frames.size() - 1); | ||||
| sw->setSVG(frames[index]); | sw->setSVG(frames[index]); | ||||
| dirty = true; | 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) { | void AudioIO::setDriver(int driver) { | ||||
| // Close device | |||||
| setDevice(-1, 0); | setDevice(-1, 0); | ||||
| // Close driver | |||||
| if (rtAudio) { | if (rtAudio) { | ||||
| delete rtAudio; | delete rtAudio; | ||||
| rtAudio = NULL; | rtAudio = NULL; | ||||
| @@ -69,7 +71,7 @@ int AudioIO::getDeviceCount() { | |||||
| return rtAudio->getDeviceCount(); | return rtAudio->getDeviceCount(); | ||||
| } | } | ||||
| if (driver == BRIDGE_DRIVER) { | if (driver == BRIDGE_DRIVER) { | ||||
| return BRIDGE_CHANNELS; | |||||
| return BRIDGE_NUM_PORTS; | |||||
| } | } | ||||
| return 0; | return 0; | ||||
| } | } | ||||
| @@ -90,13 +92,11 @@ bool AudioIO::getDeviceInfo(int device, RtAudio::DeviceInfo *deviceInfo) { | |||||
| } | } | ||||
| catch (RtAudioError &e) { | catch (RtAudioError &e) { | ||||
| warn("Failed to query RtAudio device: %s", e.what()); | warn("Failed to query RtAudio device: %s", e.what()); | ||||
| return false; | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| else { | |||||
| return false; | |||||
| } | |||||
| return false; | |||||
| } | } | ||||
| int AudioIO::getDeviceChannels(int device) { | int AudioIO::getDeviceChannels(int device) { | ||||
| @@ -148,7 +148,7 @@ std::string AudioIO::getDeviceDetail(int device, int offset) { | |||||
| } | } | ||||
| } | } | ||||
| if (driver == BRIDGE_DRIVER) { | if (driver == BRIDGE_DRIVER) { | ||||
| return stringf("Channel %d", device + 1); | |||||
| return stringf("Port %d", device + 1); | |||||
| } | } | ||||
| return ""; | return ""; | ||||
| } | } | ||||
| @@ -172,6 +172,12 @@ void AudioIO::setBlockSize(int blockSize) { | |||||
| openStream(); | 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) { | static int rtCallback(void *outputBuffer, void *inputBuffer, unsigned int nFrames, double streamTime, RtAudioStreamStatus status, void *userData) { | ||||
| AudioIO *audioIO = (AudioIO*) userData; | AudioIO *audioIO = (AudioIO*) userData; | ||||
| @@ -197,8 +203,7 @@ void AudioIO::openStream() { | |||||
| if (rtAudio->isStreamOpen()) | if (rtAudio->isStreamOpen()) | ||||
| return; | 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) { | if (numOutputs == 0 && numInputs == 0) { | ||||
| warn("RtAudio device %d has 0 inputs and 0 outputs"); | warn("RtAudio device %d has 0 inputs and 0 outputs"); | ||||
| @@ -252,8 +257,7 @@ void AudioIO::openStream() { | |||||
| onOpenStream(); | onOpenStream(); | ||||
| } | } | ||||
| if (driver == BRIDGE_DRIVER) { | if (driver == BRIDGE_DRIVER) { | ||||
| numOutputs = 2; | |||||
| numInputs = 2; | |||||
| setChannels(0, 0); | |||||
| // TEMP | // TEMP | ||||
| sampleRate = 44100; | sampleRate = 44100; | ||||
| blockSize = 256; | blockSize = 256; | ||||
| @@ -262,8 +266,7 @@ void AudioIO::openStream() { | |||||
| } | } | ||||
| void AudioIO::closeStream() { | void AudioIO::closeStream() { | ||||
| numOutputs = 0; | |||||
| numInputs = 0; | |||||
| setChannels(0, 0); | |||||
| if (rtAudio) { | if (rtAudio) { | ||||
| if (rtAudio->isStreamRunning()) { | if (rtAudio->isStreamRunning()) { | ||||
| @@ -293,17 +296,6 @@ void AudioIO::closeStream() { | |||||
| onCloseStream(); | onCloseStream(); | ||||
| } | } | ||||
| bool AudioIO::isActive() { | |||||
| if (rtAudio) { | |||||
| return rtAudio->isStreamRunning(); | |||||
| } | |||||
| if (driver == BRIDGE_DRIVER) { | |||||
| bridgeAudioIsSubscribed(device, this); | |||||
| } | |||||
| return false; | |||||
| } | |||||
| std::vector<int> AudioIO::getSampleRates() { | std::vector<int> AudioIO::getSampleRates() { | ||||
| if (rtAudio) { | if (rtAudio) { | ||||
| try { | try { | ||||
| @@ -25,11 +25,13 @@ enum BridgeCommand { | |||||
| NO_COMMAND = 0, | NO_COMMAND = 0, | ||||
| START_COMMAND, | START_COMMAND, | ||||
| QUIT_COMMAND, | QUIT_COMMAND, | ||||
| CHANNEL_SET_COMMAND, | |||||
| PORT_SET_COMMAND, | |||||
| MIDI_MESSAGE_SEND_COMMAND, | |||||
| AUDIO_SAMPLE_RATE_SET_COMMAND, | AUDIO_SAMPLE_RATE_SET_COMMAND, | ||||
| AUDIO_CHANNELS_SET_COMMAND, | AUDIO_CHANNELS_SET_COMMAND, | ||||
| AUDIO_BUFFER_SEND_COMMAND, | AUDIO_BUFFER_SEND_COMMAND, | ||||
| MIDI_MESSAGE_SEND_COMMAND, | |||||
| AUDIO_ACTIVATE, | |||||
| AUDIO_DEACTIVATE, | |||||
| NUM_COMMANDS | NUM_COMMANDS | ||||
| }; | }; | ||||
| @@ -37,19 +39,46 @@ enum BridgeCommand { | |||||
| static const int RECV_BUFFER_SIZE = (1<<13); | static const int RECV_BUFFER_SIZE = (1<<13); | ||||
| static const int RECV_QUEUE_SIZE = (1<<17); | 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 std::thread serverThread; | ||||
| static bool serverQuit; | static bool serverQuit; | ||||
| struct BridgeClientConnection { | struct BridgeClientConnection { | ||||
| int client; | |||||
| RingBuffer<uint8_t, RECV_QUEUE_SIZE> recvQueue; | RingBuffer<uint8_t, RECV_QUEUE_SIZE> recvQueue; | ||||
| BridgeCommand currentCommand = START_COMMAND; | BridgeCommand currentCommand = START_COMMAND; | ||||
| bool closeRequested = false; | bool closeRequested = false; | ||||
| int channel = -1; | |||||
| int port = -1; | |||||
| int sampleRate = -1; | int sampleRate = -1; | ||||
| int audioChannels = 0; | int audioChannels = 0; | ||||
| int audioBufferLength = -1; | 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. | /** Does not check if the queue has enough data. | ||||
| You must do that yourself before calling this method. | You must do that yourself before calling this method. | ||||
| @@ -61,6 +90,35 @@ struct BridgeClientConnection { | |||||
| return x; | 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 | /** Steps the state machine | ||||
| Returns true if step() should be called again | Returns true if step() should be called again | ||||
| */ | */ | ||||
| @@ -96,10 +154,21 @@ struct BridgeClientConnection { | |||||
| debug("Quitting!"); | debug("Quitting!"); | ||||
| } break; | } break; | ||||
| case CHANNEL_SET_COMMAND: { | |||||
| case PORT_SET_COMMAND: { | |||||
| if (recvQueue.size() >= 1) { | 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; | currentCommand = NO_COMMAND; | ||||
| return true; | return true; | ||||
| } | } | ||||
| @@ -117,7 +186,7 @@ struct BridgeClientConnection { | |||||
| case AUDIO_CHANNELS_SET_COMMAND: { | case AUDIO_CHANNELS_SET_COMMAND: { | ||||
| if (recvQueue.size() >= 1) { | if (recvQueue.size() >= 1) { | ||||
| audioChannels = shift<uint8_t>(); | audioChannels = shift<uint8_t>(); | ||||
| debug("Set audio channels %d", channel); | |||||
| debug("Set audio channels %d", audioChannels); | |||||
| currentCommand = NO_COMMAND; | currentCommand = NO_COMMAND; | ||||
| return true; | return true; | ||||
| } | } | ||||
| @@ -139,12 +208,18 @@ struct BridgeClientConnection { | |||||
| } | } | ||||
| else { | else { | ||||
| if (recvQueue.size() >= (size_t) (sizeof(float) * audioBufferLength)) { | if (recvQueue.size() >= (size_t) (sizeof(float) * audioBufferLength)) { | ||||
| // Get input buffer | |||||
| int frames = audioBufferLength / 2; | |||||
| float input[audioBufferLength]; | float input[audioBufferLength]; | ||||
| float output[audioBufferLength]; | |||||
| memset(output, 0, sizeof(output)); | |||||
| recvQueue.shiftBuffer((uint8_t*) input, sizeof(float) * audioBufferLength); | recvQueue.shiftBuffer((uint8_t*) input, sizeof(float) * audioBufferLength); | ||||
| int frames = audioBufferLength / 2; | |||||
| // Process stream | |||||
| float output[audioBufferLength]; | |||||
| processStream(input, output, frames); | 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; | audioBufferLength = -1; | ||||
| currentCommand = NO_COMMAND; | currentCommand = NO_COMMAND; | ||||
| return true; | return true; | ||||
| @@ -152,14 +227,18 @@ struct BridgeClientConnection { | |||||
| } | } | ||||
| } break; | } 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; | } break; | ||||
| default: { | default: { | ||||
| @@ -167,51 +246,58 @@ struct BridgeClientConnection { | |||||
| closeRequested = true; | closeRequested = true; | ||||
| } break; | } break; | ||||
| } | } | ||||
| // Stop looping the state machine | |||||
| return false; | 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) { | void processStream(const float *input, float *output, int frames) { | ||||
| if (!(0 <= channel && channel < BRIDGE_CHANNELS)) | |||||
| if (!(0 <= port && port < BRIDGE_NUM_PORTS)) | |||||
| return; | return; | ||||
| if (!audioListeners[channel]) | |||||
| if (!audioListeners[port]) | |||||
| return; | 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) { | static void clientRun(int client) { | ||||
| defer({ | |||||
| close(client); | |||||
| }); | |||||
| int err; | 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 | #ifdef ARCH_MAC | ||||
| // Avoid SIGPIPE | // Avoid SIGPIPE | ||||
| @@ -219,29 +305,17 @@ static void clientRun(int client) { | |||||
| setsockopt(client, SOL_SOCKET, SO_NOSIGPIPE, &flag, sizeof(int)); | setsockopt(client, SOL_SOCKET, SO_NOSIGPIPE, &flag, sizeof(int)); | ||||
| #endif | #endif | ||||
| // Disable non-blocking | |||||
| #ifdef ARCH_WIN | #ifdef ARCH_WIN | ||||
| unsigned long blockingMode = 1; | |||||
| unsigned long blockingMode = 0; | |||||
| ioctlsocket(client, FIONBIO, &blockingMode); | ioctlsocket(client, FIONBIO, &blockingMode); | ||||
| #else | #else | ||||
| err = fcntl(client, F_SETFL, fcntl(client, F_GETFL, 0) & ~O_NONBLOCK); | err = fcntl(client, F_SETFL, fcntl(client, F_GETFL, 0) & ~O_NONBLOCK); | ||||
| #endif | #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_socktype = SOCK_STREAM; | ||||
| hints.ai_protocol = IPPROTO_TCP; | hints.ai_protocol = IPPROTO_TCP; | ||||
| hints.ai_flags = AI_PASSIVE; | hints.ai_flags = AI_PASSIVE; | ||||
| err = getaddrinfo(NULL, "5000", &hints, &result); | |||||
| err = getaddrinfo("127.0.0.1", "5000", &hints, &result); | |||||
| if (err) { | if (err) { | ||||
| warn("Could not get Bridge server address"); | warn("Could not get Bridge server address"); | ||||
| return; | return; | ||||
| @@ -301,7 +375,6 @@ static void serverRun() { | |||||
| close(server); | close(server); | ||||
| }); | }); | ||||
| // Bind socket to address | // Bind socket to address | ||||
| #ifdef ARCH_WIN | #ifdef ARCH_WIN | ||||
| err = bind(server, result->ai_addr, (int)result->ai_addrlen); | err = bind(server, result->ai_addr, (int)result->ai_addrlen); | ||||
| @@ -321,12 +394,13 @@ static void serverRun() { | |||||
| } | } | ||||
| info("Bridge server started"); | info("Bridge server started"); | ||||
| // Make server non-blocking | |||||
| // Enable non-blocking | |||||
| #ifdef ARCH_WIN | #ifdef ARCH_WIN | ||||
| unsigned long blockingMode = 1; | unsigned long blockingMode = 1; | ||||
| ioctlsocket(server, FIONBIO, &blockingMode); | ioctlsocket(server, FIONBIO, &blockingMode); | ||||
| #else | #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 | #endif | ||||
| // Accept clients | // Accept clients | ||||
| @@ -357,26 +431,24 @@ void bridgeDestroy() { | |||||
| serverThread.join(); | 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; | return; | ||||
| if (audioListeners[channel]) | |||||
| // Check if an Audio is already subscribed on the port | |||||
| if (audioListeners[port]) | |||||
| return; | 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; | return; | ||||
| if (audioListeners[channel] != audio) | |||||
| if (audioListeners[port] != audio) | |||||
| return; | 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"); | gLogFile = fopen(logFilename.c_str(), "w"); | ||||
| #endif | #endif | ||||
| info("Rack v%s", gApplicationVersion.c_str()); | |||||
| info("Rack %s", gApplicationVersion.c_str()); | |||||
| { | { | ||||
| char *cwd = getcwd(NULL, 0); | char *cwd = getcwd(NULL, 0); | ||||