@@ -87,7 +87,12 @@ struct ModuleWidget : OpaqueWidget { | |||||
Called when the user clicks Randomize in the context menu. | Called when the user clicks Randomize in the context menu. | ||||
*/ | */ | ||||
virtual void randomize(); | virtual void randomize(); | ||||
/** Do not subclass this to add context menu entries. Use appendContextMenu() instead */ | |||||
virtual Menu *createContextMenu(); | virtual Menu *createContextMenu(); | ||||
/** Override to add context menu entries to your subclass. | |||||
It is recommended to add a blank MenuEntry first for spacing. | |||||
*/ | |||||
virtual void appendContextMenu(Menu *menu) {} | |||||
void draw(NVGcontext *vg) override; | void draw(NVGcontext *vg) override; | ||||
void drawShadow(NVGcontext *vg); | void drawShadow(NVGcontext *vg); | ||||
@@ -320,19 +325,54 @@ struct MomentarySwitch : virtual Switch { | |||||
// IO widgets | // IO widgets | ||||
//////////////////// | //////////////////// | ||||
struct LedDisplay : Widget { | |||||
void draw(NVGcontext *vg) override; | |||||
}; | |||||
struct LedDisplaySeparator : TransparentWidget { | |||||
LedDisplaySeparator(); | |||||
void draw(NVGcontext *vg) override; | |||||
}; | |||||
struct LedDisplayChoice : TransparentWidget { | |||||
std::string text; | |||||
std::shared_ptr<Font> font; | |||||
NVGcolor color; | |||||
LedDisplayChoice(); | |||||
void draw(NVGcontext *vg) override; | |||||
void onMouseDown(EventMouseDown &e) override; | |||||
}; | |||||
struct LedDisplayTextField : TextField { | |||||
std::shared_ptr<Font> font; | |||||
NVGcolor color; | |||||
LedDisplayTextField(); | |||||
void draw(NVGcontext *vg) override; | |||||
int getTextPosition(Vec mousePos) override; | |||||
}; | |||||
struct AudioIO; | struct AudioIO; | ||||
struct MidiIO; | struct MidiIO; | ||||
struct AudioWidget : OpaqueWidget { | |||||
struct AudioWidget : LedDisplay { | |||||
/** Not owned */ | /** Not owned */ | ||||
AudioIO *audioIO = NULL; | AudioIO *audioIO = NULL; | ||||
void onMouseDown(EventMouseDown &e) override; | |||||
struct Internal; | |||||
Internal *internal; | |||||
AudioWidget(); | |||||
~AudioWidget(); | |||||
void step() override; | |||||
}; | }; | ||||
struct MidiWidget : OpaqueWidget { | |||||
struct MidiWidget : LedDisplay { | |||||
/** Not owned */ | /** Not owned */ | ||||
MidiIO *midiIO = NULL; | MidiIO *midiIO = NULL; | ||||
void onMouseDown(EventMouseDown &e) override; | |||||
struct Internal; | |||||
Internal *internal; | |||||
MidiWidget(); | |||||
~MidiWidget(); | |||||
void step() override; | |||||
}; | }; | ||||
//////////////////// | //////////////////// | ||||
@@ -23,6 +23,7 @@ struct AudioIO { | |||||
int numOutputs = 0; | int numOutputs = 0; | ||||
int numInputs = 0; | int numInputs = 0; | ||||
RtAudio *rtAudio = NULL; | RtAudio *rtAudio = NULL; | ||||
RtAudio::DeviceInfo deviceInfo; | |||||
AudioIO(); | AudioIO(); | ||||
virtual ~AudioIO(); | virtual ~AudioIO(); | ||||
@@ -338,22 +338,6 @@ struct BefacoSlidePot : SVGFader { | |||||
} | } | ||||
}; | }; | ||||
//////////////////// | |||||
// IO widgets | |||||
//////////////////// | |||||
struct USB_B_AudioWidget : AudioWidget, SVGWidget { | |||||
USB_B_AudioWidget() { | |||||
setSVG(SVG::load(assetGlobal("res/ComponentLibrary/USB-B.svg"))); | |||||
} | |||||
}; | |||||
struct MIDI_DIN_MidiWidget : MidiWidget, SVGWidget { | |||||
MIDI_DIN_MidiWidget() { | |||||
setSVG(SVG::load(assetGlobal("res/ComponentLibrary/MIDI_DIN.svg"))); | |||||
} | |||||
}; | |||||
//////////////////// | //////////////////// | ||||
// Jacks | // Jacks | ||||
//////////////////// | //////////////////// | ||||
@@ -44,24 +44,46 @@ struct Menu : OpaqueWidget { | |||||
}; | }; | ||||
struct MenuEntry : OpaqueWidget { | struct MenuEntry : OpaqueWidget { | ||||
std::string text; | |||||
MenuEntry() { | MenuEntry() { | ||||
box.size = Vec(0, BND_WIDGET_HEIGHT); | box.size = Vec(0, BND_WIDGET_HEIGHT); | ||||
} | } | ||||
template <typename T = MenuEntry> | |||||
static T *create() { | |||||
T *o = Widget::create<T>(Vec()); | |||||
return o; | |||||
} | |||||
}; | }; | ||||
struct MenuLabel : MenuEntry { | struct MenuLabel : MenuEntry { | ||||
std::string text; | |||||
void draw(NVGcontext *vg) override; | void draw(NVGcontext *vg) override; | ||||
void step() override; | void step() override; | ||||
template <typename T = MenuLabel> | |||||
static T *create(std::string text) { | |||||
T *o = MenuEntry::create<T>(); | |||||
o->text = text; | |||||
return o; | |||||
} | |||||
}; | }; | ||||
struct MenuItem : MenuEntry { | struct MenuItem : MenuEntry { | ||||
std::string text; | |||||
std::string rightText; | std::string rightText; | ||||
void draw(NVGcontext *vg) override; | void draw(NVGcontext *vg) override; | ||||
void step() override; | void step() override; | ||||
virtual Menu *createChildMenu() {return NULL;} | virtual Menu *createChildMenu() {return NULL;} | ||||
void onMouseEnter(EventMouseEnter &e) override; | void onMouseEnter(EventMouseEnter &e) override; | ||||
void onDragDrop(EventDragDrop &e) override; | void onDragDrop(EventDragDrop &e) override; | ||||
template <typename T = MenuItem> | |||||
static T *create(std::string text, std::string rightText = "") { | |||||
T *o = MenuEntry::create<T>(); | |||||
o->text = text; | |||||
o->rightText = rightText; | |||||
return o; | |||||
} | |||||
}; | }; | ||||
struct WindowOverlay : OpaqueWidget { | struct WindowOverlay : OpaqueWidget { | ||||
@@ -153,16 +175,19 @@ struct TextField : OpaqueWidget { | |||||
bool multiline = false; | bool multiline = false; | ||||
int begin = 0; | int begin = 0; | ||||
int end = 0; | int end = 0; | ||||
int dragPos = 0; | |||||
TextField() { | TextField() { | ||||
box.size.y = BND_WIDGET_HEIGHT; | box.size.y = BND_WIDGET_HEIGHT; | ||||
} | } | ||||
void draw(NVGcontext *vg) override; | void draw(NVGcontext *vg) override; | ||||
void onMouseDown(EventMouseDown &e) override; | void onMouseDown(EventMouseDown &e) override; | ||||
void onMouseMove(EventMouseMove &e) override; | |||||
void onFocus(EventFocus &e) override; | void onFocus(EventFocus &e) override; | ||||
void onText(EventText &e) override; | void onText(EventText &e) override; | ||||
void onKey(EventKey &e) override; | void onKey(EventKey &e) override; | ||||
void insertText(std::string newText); | void insertText(std::string newText); | ||||
virtual int getTextPosition(Vec mousePos); | |||||
virtual void onTextChange() {} | virtual void onTextChange() {} | ||||
}; | }; | ||||
@@ -170,7 +195,7 @@ struct PasswordField : TextField { | |||||
void draw(NVGcontext *vg) override; | void draw(NVGcontext *vg) override; | ||||
}; | }; | ||||
struct ProgressBar : TransparentWidget, QuantityWidget { | |||||
struct ProgressBar : QuantityWidget { | |||||
ProgressBar() { | ProgressBar() { | ||||
box.size.y = BND_WIDGET_HEIGHT; | box.size.y = BND_WIDGET_HEIGHT; | ||||
} | } | ||||
@@ -0,0 +1,463 @@ | |||||
<?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="50.799999mm" | |||||
height="128.4993mm" | |||||
viewBox="0 0 50.799999 128.4993" | |||||
version="1.1" | |||||
id="svg28799" | |||||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||||
sodipodi:docname="Audio.svg"> | |||||
<defs | |||||
id="defs28793" /> | |||||
<sodipodi:namedview | |||||
id="base" | |||||
pagecolor="#ffffff" | |||||
bordercolor="#666666" | |||||
borderopacity="1.0" | |||||
inkscape:pageopacity="0.0" | |||||
inkscape:pageshadow="2" | |||||
inkscape:zoom="0.98994949" | |||||
inkscape:cx="173.75816" | |||||
inkscape:cy="245.43317" | |||||
inkscape:document-units="mm" | |||||
inkscape:current-layer="layer2" | |||||
showgrid="false" | |||||
fit-margin-top="0" | |||||
fit-margin-left="0" | |||||
fit-margin-right="0" | |||||
fit-margin-bottom="0" | |||||
inkscape:window-width="1600" | |||||
inkscape:window-height="882" | |||||
inkscape:window-x="0" | |||||
inkscape:window-y="18" | |||||
inkscape:window-maximized="0" | |||||
inkscape:snap-bbox="true" | |||||
inkscape:bbox-nodes="true" /> | |||||
<metadata | |||||
id="metadata28796"> | |||||
<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(88.9,-244.84559)" | |||||
style="display:inline"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path3819" | |||||
d="m -88.806295,244.93792 h 50.613966 v 128.31327 h -50.613966 z m 0,0" | |||||
style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path3821" | |||||
d="m -38.1,244.84559 h -50.8 v 128.4993 h 50.8 z m -0.186039,128.31189 H -88.712587 V 245.03163 h 50.426548 z m 0,0" | |||||
style="fill:#ababab;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path3847" | |||||
d="m -66.251942,369.20251 c -0.117133,0 -0.224621,-0.0661 -0.275608,-0.17088 l -1.003212,-2.00504 c -0.07579,-0.15297 -0.01379,-0.33762 0.139182,-0.41341 0.151585,-0.0772 0.337619,-0.0152 0.413409,0.1378 l 0.726229,1.45246 0.726224,-1.45246 c 0.07579,-0.15296 0.261828,-0.21497 0.413414,-0.1378 0.15296,0.0758 0.214972,0.26044 0.137802,0.41341 l -1.001833,2.00504 c -0.05237,0.10474 -0.158474,0.17088 -0.275607,0.17088" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path3849" | |||||
d="m -60.74668,369.20251 c -0.117136,0 -0.223245,-0.0661 -0.275608,-0.17088 l -1.00321,-2.00504 c -0.07579,-0.15297 -0.01378,-0.33762 0.139181,-0.41341 0.15158,-0.0772 0.337619,-0.0152 0.413409,0.1378 l 0.726228,1.45246 0.727604,-1.45246 c 0.07579,-0.15296 0.260448,-0.21497 0.413409,-0.1378 0.151585,0.0758 0.213598,0.26044 0.137806,0.41341 l -1.00321,2.00504 c -0.05237,0.10474 -0.158475,0.17088 -0.275609,0.17088" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path3851" | |||||
d="m -63.349795,369.20251 c -0.72347,0 -1.310513,-0.58842 -1.310513,-1.31189 0,-0.72209 0.587043,-1.31052 1.310513,-1.31052 0.286632,0 0.558105,0.091 0.78686,0.26183 0.136426,0.10335 0.163985,0.29628 0.06063,0.43271 -0.101974,0.13642 -0.294897,0.16398 -0.431324,0.0606 -0.121267,-0.0896 -0.264583,-0.13918 -0.416168,-0.13918 -0.383095,0 -0.694531,0.31282 -0.694531,0.69453 0,0.38309 0.311436,0.69453 0.694531,0.69453 0.151585,0 0.294901,-0.0482 0.416168,-0.13918 0.136427,-0.10198 0.32935,-0.0744 0.431324,0.062 0.103353,0.13643 0.07579,0.32935 -0.06063,0.43132 -0.228755,0.17226 -0.500228,0.26321 -0.78686,0.26321" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path3853" | |||||
d="m -62.929492,367.87546 c 0,0.22186 -0.179147,0.40101 -0.399634,0.40101 -0.221862,0 -0.401009,-0.17915 -0.401009,-0.40101 0,-0.22186 0.179147,-0.40101 0.401009,-0.40101 0.220487,0 0.399634,0.17915 0.399634,0.40101" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -70.706464,254.12899 c 0,0.17088 0.126778,0.30868 0.297657,0.30868 0.137801,0 0.248045,-0.0772 0.303166,-0.20395 l 0.203951,-0.49058 h 1.306379 l 0.198437,0.46854 c 0.06064,0.13229 0.159855,0.22599 0.314195,0.22599 0.170875,0 0.308681,-0.14331 0.308681,-0.31419 0,-0.0441 -0.01101,-0.0882 -0.03306,-0.13229 l -1.03628,-2.33164 c -0.07166,-0.15985 -0.198438,-0.25907 -0.374827,-0.25907 h -0.03859 c -0.176389,0 -0.30868,0.0992 -0.380336,0.25907 l -1.030775,2.33164 c -0.02205,0.0441 -0.03858,0.0937 -0.03858,0.1378 z m 1.047309,-0.95911 0.41341,-0.97565 0.407899,0.97565 z m 0,0" | |||||
id="path26666" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -66.11777,254.45421 c 0.793749,0 1.300868,-0.43546 1.300868,-1.33394 v -1.37253 c 0,-0.1819 -0.148827,-0.32521 -0.33073,-0.32521 -0.181899,0 -0.325215,0.14331 -0.325215,0.32521 v 1.39458 c 0,0.47404 -0.242535,0.71106 -0.639409,0.71106 -0.396875,0 -0.63941,-0.24804 -0.63941,-0.7276 v -1.37804 c 0,-0.1819 -0.143316,-0.32521 -0.325219,-0.32521 -0.181899,0 -0.325215,0.14331 -0.325215,0.32521 v 1.39458 c 0,0.87092 0.485069,1.31189 1.28433,1.31189 z m 0,0" | |||||
id="path26662" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -64.088593,254.08489 c 0,0.18191 0.143316,0.32522 0.325219,0.32522 h 0.826823 c 0.931553,0 1.576475,-0.65043 1.576475,-1.48277 v -0.005 c 0,-0.83784 -0.644922,-1.47725 -1.576475,-1.47725 h -0.826823 c -0.181903,0 -0.325219,0.14882 -0.325219,0.33072 z m 0.650434,-0.26458 v -1.78594 h 0.501608 c 0.534678,0 0.892968,0.36932 0.892968,0.89297 v 0.011 c 0,0.52366 -0.35829,0.88194 -0.892968,0.88194 z m 0,0" | |||||
id="path26650" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -60.742094,254.10694 c 0,0.18191 0.143316,0.33073 0.325215,0.33073 0.181903,0 0.32522,-0.14882 0.32522,-0.33073 v -2.3592 c 0,-0.1819 -0.143317,-0.32521 -0.32522,-0.32521 -0.181899,0 -0.325215,0.14331 -0.325215,0.32521 z m 0,0" | |||||
id="path26654" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -57.900115,254.45972 c 0.915017,0 1.576475,-0.68902 1.576475,-1.53238 v -0.005 c 0,-0.84336 -0.655947,-1.52687 -1.570966,-1.52687 -0.915017,0 -1.576475,0.68903 -1.576475,1.53238 v 0.011 c 0,0.84336 0.655947,1.52135 1.570966,1.52135 z m 0.0055,-0.60082 c -0.523652,0 -0.89848,-0.42444 -0.89848,-0.93156 v -0.005 c 0,-0.50712 0.363802,-0.92604 0.892969,-0.92604 0.523653,0 0.892969,0.42443 0.892969,0.93155 v 0.011 c 0,0.50712 -0.363802,0.92053 -0.887458,0.92053 z m 0,0" | |||||
id="path26658" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path3871" | |||||
d="m -41.258466,349.26368 c 0,-0.54984 -0.449239,-0.99908 -1.000453,-0.99908 h -7.681185 c -0.549841,0 -1.000459,0.44924 -1.000459,0.99908 v 12.17359 c 0,0.54983 0.450618,0.99908 1.000459,0.99908 h 7.681185 c 0.551214,0 1.000453,-0.44925 1.000453,-0.99908 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path3873" | |||||
d="m -52.858792,349.26368 c 0,-0.54984 -0.449241,-0.99908 -0.999077,-0.99908 h -7.682561 c -0.549838,0 -0.99908,0.44924 -0.99908,0.99908 v 12.17359 c 0,0.54983 0.449242,0.99908 0.99908,0.99908 h 7.682561 c 0.549836,0 0.999077,-0.44925 0.999077,-0.99908 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path3875" | |||||
d="m -64.459115,349.26368 c 0,-0.54984 -0.449241,-0.99908 -0.999077,-0.99908 h -7.682565 c -0.549836,0 -0.999078,0.44924 -0.999078,0.99908 v 12.17359 c 0,0.54983 0.449242,0.99908 0.999078,0.99908 h 7.682565 c 0.549836,0 0.999077,-0.44925 0.999077,-0.99908 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path3877" | |||||
d="m -76.058064,349.26368 c 0,-0.54984 -0.450617,-0.99908 -1.000456,-0.99908 h -7.681182 c -0.551216,0 -1.000457,0.44924 -1.000457,0.99908 v 12.17359 c 0,0.54983 0.449241,0.99908 1.000457,0.99908 h 7.681182 c 0.549839,0 1.000456,-0.44925 1.000456,-0.99908 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -80.910483,351.37939 c 0.352778,0 0.600826,-0.21498 0.600826,-0.55673 v -0.005 c 0,-0.35829 -0.248048,-0.51263 -0.562239,-0.51263 -0.09371,0 -0.14883,0.011 -0.214976,0.0276 l 0.02205,-0.27561 h 0.540191 c 0.08268,0 0.15434,-0.0717 0.15434,-0.15434 0,-0.0827 -0.07166,-0.15434 -0.15434,-0.15434 h -0.700042 c -0.08268,0 -0.14883,0.0662 -0.15434,0.14883 l -0.03306,0.5457 c -0.0055,0.0606 0.01654,0.10473 0.06615,0.14332 0.07166,0.0496 0.110243,0.0717 0.159851,0.0717 0.04961,0 0.110243,-0.0441 0.242534,-0.0441 0.170879,0 0.286632,0.0827 0.286632,0.22049 0,0.14331 -0.110243,0.226 -0.259069,0.226 -0.115757,0 -0.209462,-0.0331 -0.30868,-0.10473 -0.02755,-0.022 -0.05512,-0.0331 -0.09371,-0.0331 -0.0937,0 -0.165365,0.0772 -0.165365,0.17087 0,0.0606 0.02755,0.10474 0.06615,0.13781 0.132292,0.0882 0.286632,0.14883 0.507118,0.14883 z m 0,0" | |||||
id="path26646" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -69.280458,351.37939 c 0.347267,0 0.61185,-0.226 0.61185,-0.55673 v -0.005 c 0,-0.33073 -0.242534,-0.50712 -0.562239,-0.50712 -0.159855,0 -0.253559,0.0496 -0.336243,0.0992 0.02755,-0.20947 0.126781,-0.36932 0.325218,-0.36932 0.09922,0 0.165365,0.022 0.237021,0.0661 0.02755,0.011 0.05512,0.022 0.08819,0.022 0.08819,0 0.165364,-0.0717 0.165364,-0.15986 0,-0.0717 -0.03858,-0.12126 -0.0937,-0.15434 -0.09371,-0.0551 -0.226,-0.0937 -0.38585,-0.0937 -0.479559,0 -0.705556,0.38034 -0.705556,0.87643 v 0.005 c 0,0.3142 0.07717,0.49058 0.192924,0.60634 0.110243,0.11024 0.253559,0.17088 0.463021,0.17088 z m -0.01101,-0.30317 c -0.176389,0 -0.281118,-0.10473 -0.281118,-0.23703 v -0.005 c 0,-0.1378 0.09922,-0.23151 0.275607,-0.23151 0.170875,0 0.275608,0.0992 0.275608,0.23151 v 0.005 c 0,0.13781 -0.09922,0.23703 -0.270097,0.23703 z m 0,0" | |||||
id="path26642" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -58.127831,351.20851 c 0,0.0992 0.0882,0.15434 0.181903,0.15434 0.07166,0 0.121267,-0.033 0.170876,-0.11576 l 0.644922,-1.16857 c 0.02755,-0.0551 0.04961,-0.12127 0.04961,-0.17088 0,-0.10473 -0.06063,-0.15985 -0.159851,-0.15985 h -0.870921 c -0.08819,0 -0.15434,0.0661 -0.15434,0.15434 0,0.0827 0.06615,0.14883 0.15434,0.14883 h 0.611846 l -0.595312,1.04731 c -0.01654,0.0331 -0.03306,0.0772 -0.03306,0.11024 z m 0,0" | |||||
id="path26638" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -46.100053,351.37388 c 0.358294,0 0.617363,-0.17088 0.617363,-0.47405 0,-0.19293 -0.0937,-0.29766 -0.259069,-0.38034 0.126777,-0.0772 0.203946,-0.17639 0.203946,-0.35278 0,-0.24804 -0.220485,-0.44097 -0.56224,-0.44097 -0.341752,0 -0.562239,0.19293 -0.562239,0.44097 0,0.17639 0.07717,0.27561 0.203951,0.35278 -0.170878,0.0772 -0.259072,0.19293 -0.259072,0.38585 v 0.006 c 0,0.28112 0.264583,0.46302 0.61736,0.46302 z m 0,-0.97014 c -0.1378,0 -0.23151,-0.0882 -0.23151,-0.19844 v -0.006 c 0,-0.0992 0.0882,-0.18741 0.23151,-0.18741 0.143317,0 0.231511,0.0937 0.231511,0.19293 0,0.11575 -0.0937,0.19844 -0.231511,0.19844 z m 0,0.67799 c -0.176387,0 -0.275606,-0.0882 -0.275606,-0.19844 v -0.005 c 0,-0.12127 0.115756,-0.19293 0.275606,-0.19293 0.159856,0 0.275609,0.0717 0.275609,0.19293 v 0.005 c 0,0.11576 -0.09922,0.19844 -0.275609,0.19844 z m 0,0" | |||||
id="path26634" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path3975" | |||||
d="m -41.258466,333.26465 c 0,-0.55121 -0.449239,-1.00045 -1.000453,-1.00045 h -7.681185 c -0.549841,0 -1.000459,0.44924 -1.000459,1.00045 v 12.17222 c 0,0.54983 0.450618,1.00045 1.000459,1.00045 h 7.681185 c 0.551214,0 1.000453,-0.45062 1.000453,-1.00045 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path3977" | |||||
d="m -52.858792,333.26465 c 0,-0.55121 -0.449241,-1.00045 -0.999077,-1.00045 h -7.682561 c -0.549838,0 -0.99908,0.44924 -0.99908,1.00045 v 12.17222 c 0,0.54983 0.449242,1.00045 0.99908,1.00045 h 7.682561 c 0.549836,0 0.999077,-0.45062 0.999077,-1.00045 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path3979" | |||||
d="m -64.459115,333.26465 c 0,-0.55121 -0.449241,-1.00045 -0.999077,-1.00045 h -7.682565 c -0.549836,0 -0.999078,0.44924 -0.999078,1.00045 v 12.17222 c 0,0.54983 0.449242,1.00045 0.999078,1.00045 h 7.682565 c 0.549836,0 0.999077,-0.45062 0.999077,-1.00045 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path3981" | |||||
d="m -76.058064,333.26465 c 0,-0.55121 -0.450617,-1.00045 -1.000456,-1.00045 h -7.681182 c -0.551216,0 -1.000457,0.44924 -1.000457,1.00045 v 12.17222 c 0,0.54983 0.449241,1.00045 1.000457,1.00045 h 7.681182 c 0.549839,0 1.000456,-0.45062 1.000456,-1.00045 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -80.975243,335.19123 c 0,0.0937 0.07717,0.17088 0.176389,0.17088 0.0937,0 0.170875,-0.0772 0.170875,-0.17088 v -1.29535 c 0,-0.0937 -0.07717,-0.17088 -0.170875,-0.17088 h -0.0055 c -0.04961,0 -0.09922,0.011 -0.165364,0.0275 l -0.226,0.0661 c -0.07166,0.022 -0.121267,0.0827 -0.121267,0.15434 0,0.0827 0.07166,0.14883 0.15434,0.14883 0.02205,0 0.0441,-0.005 0.06615,-0.011 l 0.121267,-0.0276 z m 0,0" | |||||
id="path26582" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -69.91495,335.18572 c 0,0.10473 0.07717,0.16537 0.187413,0.16537 h 0.87092 c 0.08819,0 0.15434,-0.0661 0.15434,-0.14883 0,-0.0882 -0.06615,-0.15434 -0.15434,-0.15434 h -0.556729 l 0.259073,-0.20395 c 0.286631,-0.22049 0.424434,-0.35278 0.424434,-0.62287 v -0.005 c 0,-0.29766 -0.220486,-0.49059 -0.551216,-0.49059 -0.242534,0 -0.396875,0.0827 -0.523652,0.23151 -0.02755,0.0331 -0.0441,0.0717 -0.0441,0.11024 0,0.0937 0.07166,0.16537 0.159851,0.16537 0.05512,0 0.09922,-0.0275 0.121268,-0.0551 0.08819,-0.0937 0.159854,-0.1378 0.264583,-0.1378 0.121267,0 0.214975,0.0717 0.214975,0.20946 0,0.13229 -0.07717,0.22048 -0.281121,0.38585 l -0.451997,0.37483 c -0.06063,0.0441 -0.0937,0.10473 -0.0937,0.17639 z m 0,0" | |||||
id="path26578" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -57.700243,335.37865 c 0.358293,0 0.578778,-0.22049 0.578778,-0.52366 v -0.005 c 0,-0.29765 -0.209462,-0.4134 -0.429948,-0.45199 l 0.31419,-0.29766 c 0.06615,-0.0606 0.104733,-0.11024 0.104733,-0.19844 0,-0.0937 -0.07717,-0.15434 -0.176387,-0.15434 h -0.782727 c -0.08268,0 -0.15434,0.0662 -0.15434,0.14883 0,0.0827 0.07166,0.15434 0.15434,0.15434 h 0.490579 l -0.308678,0.3142 c -0.05512,0.0551 -0.07717,0.0937 -0.07717,0.14331 0,0.0827 0.06615,0.14883 0.14883,0.14883 h 0.05512 c 0.198437,0 0.31419,0.0772 0.31419,0.20395 v 0.005 c 0,0.12127 -0.0937,0.19844 -0.225996,0.19844 -0.126781,0 -0.220486,-0.0441 -0.314193,-0.12127 -0.02755,-0.022 -0.06063,-0.0441 -0.110244,-0.0441 -0.0937,0 -0.170876,0.0772 -0.170876,0.17087 0,0.0496 0.02755,0.0992 0.06063,0.12678 0.132292,0.11024 0.30317,0.1819 0.529167,0.1819 z m 0,0" | |||||
id="path26574" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -45.97369,335.19675 c 0,0.0937 0.07166,0.16536 0.165364,0.16536 0.09371,0 0.170879,-0.0717 0.170879,-0.16536 v -0.19293 h 0.08268 c 0.08268,0 0.143317,-0.0606 0.143317,-0.14331 0,-0.0772 -0.06063,-0.14332 -0.143317,-0.14332 h -0.08268 v -0.82682 c 0,-0.0937 -0.07717,-0.17088 -0.170879,-0.17088 -0.10473,0 -0.154339,0.0441 -0.220485,0.12127 l -0.694531,0.81028 c -0.05512,0.0606 -0.08268,0.11576 -0.08268,0.19293 0,0.0937 0.07717,0.15985 0.170876,0.15985 h 0.661456 z m -0.429948,-0.47956 0.429948,-0.50161 v 0.50161 z m 0,0" | |||||
id="path26570" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -69.474133,328.91013 c 0.606336,0 1.036284,-0.46302 1.036284,-1.01975 v -0.005 c 0,-0.55673 -0.424434,-1.01975 -1.030771,-1.01975 -0.606336,0 -1.036284,0.46853 -1.036284,1.02526 v 0.005 c 0,0.55672 0.424434,1.01423 1.030771,1.01423 z m 0.0055,-0.31971 c -0.391365,0 -0.672483,-0.3197 -0.672483,-0.70004 v -0.005 c 0,-0.38585 0.275608,-0.70005 0.666969,-0.70005 0.391364,0 0.672483,0.31971 0.672483,0.70556 v 0.005 c 0,0.38033 -0.275608,0.69453 -0.666969,0.69453 z m 0,0" | |||||
id="path26518" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -67.138109,328.91013 c 0.518142,0 0.848871,-0.29766 0.848871,-0.88746 v -0.96462 c 0,-0.0937 -0.07717,-0.17088 -0.170875,-0.17088 -0.09922,0 -0.176389,0.0772 -0.176389,0.17088 v 0.98116 c 0,0.3638 -0.187413,0.5457 -0.496094,0.5457 -0.30868,0 -0.501607,-0.19292 -0.501607,-0.56224 v -0.96462 c 0,-0.0937 -0.07166,-0.17088 -0.170875,-0.17088 -0.09922,0 -0.176389,0.0772 -0.176389,0.17088 v 0.98116 c 0,0.57326 0.330729,0.87092 0.843358,0.87092 z m 0,0" | |||||
id="path26510" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -65.267636,328.7172 c 0,0.0992 0.07717,0.17639 0.176389,0.17639 0.0937,0 0.176389,-0.0772 0.176389,-0.17639 v -1.49379 h 0.479555 c 0.08819,0 0.159854,-0.0717 0.159854,-0.15986 0,-0.0882 -0.07166,-0.15985 -0.159854,-0.15985 h -1.311892 c -0.0882,0 -0.159851,0.0717 -0.159851,0.15985 0,0.0882 0.07166,0.15986 0.159851,0.15986 h 0.479559 z m 0,0" | |||||
id="path26514" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -63.879875,328.7172 c 0,0.0992 0.07717,0.17639 0.176389,0.17639 0.0937,0 0.170875,-0.0772 0.170875,-0.17639 v -0.47404 h 0.391364 c 0.435458,0 0.793751,-0.23151 0.793751,-0.678 v -0.005 c 0,-0.39687 -0.292147,-0.65594 -0.755168,-0.65594 h -0.600822 c -0.09922,0 -0.176389,0.0717 -0.176389,0.17087 z m 0.347264,-0.78824 v -0.71106 h 0.402388 c 0.25907,0 0.429948,0.12126 0.429948,0.35277 v 0.005 c 0,0.20395 -0.165364,0.35278 -0.429948,0.35278 z m 0,0" | |||||
id="path26506" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -61.127058,328.91013 c 0.518142,0 0.848871,-0.29766 0.848871,-0.88746 v -0.96462 c 0,-0.0937 -0.07717,-0.17088 -0.170876,-0.17088 -0.09922,0 -0.176387,0.0772 -0.176387,0.17088 v 0.98116 c 0,0.3638 -0.187415,0.5457 -0.496094,0.5457 -0.308681,0 -0.501608,-0.19292 -0.501608,-0.56224 v -0.96462 c 0,-0.0937 -0.07166,-0.17088 -0.170876,-0.17088 -0.09922,0 -0.176389,0.0772 -0.176389,0.17088 v 0.98116 c 0,0.57326 0.330729,0.87092 0.843359,0.87092 z m 0,0" | |||||
id="path26502" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -59.257996,328.7172 c 0,0.0992 0.07717,0.17639 0.176389,0.17639 0.0937,0 0.176388,-0.0772 0.176388,-0.17639 v -1.49379 h 0.479557 c 0.08819,0 0.159853,-0.0717 0.159853,-0.15986 0,-0.0882 -0.07166,-0.15985 -0.159853,-0.15985 h -1.311894 c -0.08819,0 -0.159851,0.0717 -0.159851,0.15985 0,0.0882 0.07166,0.15986 0.159851,0.15986 h 0.47956 z m 0,0" | |||||
id="path26498" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -57.187566,328.90462 c 0.413412,0 0.705557,-0.22049 0.705557,-0.5898 v -0.005 c 0,-0.32522 -0.214977,-0.47405 -0.633899,-0.57878 -0.380336,-0.0882 -0.474046,-0.15985 -0.474046,-0.30868 v -0.005 c 0,-0.13229 0.121269,-0.23702 0.32522,-0.23702 0.154339,0 0.297656,0.0551 0.451996,0.14883 0.02755,0.0165 0.05512,0.0276 0.0937,0.0276 0.08819,0 0.159853,-0.0717 0.159853,-0.15986 0,-0.0661 -0.03305,-0.11575 -0.07717,-0.1378 -0.176389,-0.12127 -0.374827,-0.18742 -0.622876,-0.18742 -0.391361,0 -0.677992,0.23703 -0.677992,0.57327 v 0.005 c 0,0.3638 0.237021,0.49058 0.661458,0.5898 0.363802,0.0882 0.446482,0.16536 0.446482,0.30317 v 0.005 c 0,0.14882 -0.137801,0.24804 -0.352777,0.24804 -0.214972,0 -0.391361,-0.0716 -0.551215,-0.20394 -0.02204,-0.0165 -0.05512,-0.0275 -0.10473,-0.0275 -0.08819,0 -0.159853,0.0717 -0.159853,0.15985 0,0.0551 0.02755,0.10473 0.06615,0.13229 0.220485,0.16537 0.474043,0.24805 0.74414,0.24805 z m 0,0" | |||||
id="path26494" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -80.945609,298.2157 c 0,0.0772 0.06615,0.1378 0.137802,0.1378 0.08268,0 0.143316,-0.0606 0.143316,-0.1378 v -1.36151 c 0,-0.0772 -0.06063,-0.1378 -0.143316,-0.1378 -0.0441,0 -0.08268,0.011 -0.137802,0.0276 l -0.242535,0.0772 c -0.06064,0.0165 -0.09922,0.0606 -0.09922,0.12127 0,0.0606 0.06063,0.11576 0.126778,0.11576 0.01101,0 0.03306,0 0.04961,-0.005 l 0.165365,-0.0496 z m 0,0" | |||||
id="path26490" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -80.907068,313.37809 c 0.347264,0 0.589798,-0.22049 0.589798,-0.54571 0,-0.34175 -0.248045,-0.50711 -0.562239,-0.50711 -0.104729,0 -0.176389,0.0165 -0.253559,0.0441 l 0.02755,-0.37483 h 0.600823 c 0.06615,0 0.126781,-0.0551 0.126781,-0.12127 0,-0.0717 -0.06064,-0.12678 -0.126781,-0.12678 h -0.727604 c -0.06615,0 -0.121268,0.0496 -0.126778,0.12678 l -0.03305,0.57878 c -0.0055,0.0496 0.01101,0.0937 0.05512,0.12126 0.04961,0.0386 0.08819,0.0551 0.132292,0.0551 0.0441,0 0.115753,-0.0551 0.275607,-0.0551 0.192924,0 0.330729,0.0992 0.330729,0.26459 v 0.005 c 0,0.17087 -0.132291,0.2756 -0.314194,0.2756 -0.126778,0 -0.237021,-0.0441 -0.347264,-0.13229 -0.02205,-0.0165 -0.04961,-0.0276 -0.08268,-0.0276 -0.07166,0 -0.132292,0.0606 -0.132292,0.13229 0,0.0496 0.02205,0.0827 0.05512,0.11025 0.132292,0.10473 0.297656,0.17639 0.512632,0.17639 z m 0,0" | |||||
id="path26486" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -69.903065,298.21018 c 0,0.0827 0.06614,0.13229 0.148826,0.13229 h 0.909507 c 0.07166,0 0.126778,-0.0551 0.126778,-0.12126 0,-0.0717 -0.05512,-0.12678 -0.126778,-0.12678 h -0.650434 l 0.330729,-0.27561 c 0.286632,-0.23151 0.418924,-0.36931 0.418924,-0.62287 0,-0.28663 -0.214976,-0.47956 -0.529167,-0.47956 -0.253559,0 -0.402389,0.0937 -0.534681,0.25907 -0.01654,0.022 -0.02755,0.0551 -0.02755,0.0827 0,0.0717 0.05512,0.13229 0.126777,0.13229 0.0441,0 0.07717,-0.022 0.09922,-0.0441 0.09922,-0.12126 0.187413,-0.1819 0.314194,-0.1819 0.148827,0 0.25907,0.0937 0.25907,0.25356 0,0.14331 -0.07717,0.24805 -0.297656,0.42995 l -0.496094,0.41892 c -0.04961,0.0441 -0.07166,0.0882 -0.07166,0.14332 z m 0,0" | |||||
id="path26458" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -69.281027,313.37809 c 0.33624,0 0.595313,-0.226 0.595313,-0.54571 v -0.005 c 0,-0.3197 -0.248048,-0.5016 -0.556729,-0.5016 -0.192924,0 -0.303167,0.0772 -0.385851,0.15985 0.01101,-0.29214 0.14883,-0.51263 0.385851,-0.51263 0.104733,0 0.187413,0.0331 0.275608,0.0937 0.02205,0.011 0.0441,0.0165 0.07166,0.0165 0.07166,0 0.132292,-0.0551 0.132292,-0.12678 0,-0.0606 -0.02755,-0.0937 -0.07166,-0.12127 -0.104729,-0.0717 -0.237021,-0.11575 -0.396875,-0.11575 -0.457507,0 -0.689017,0.38034 -0.689017,0.87092 v 0.006 c 0,0.32522 0.07166,0.49058 0.192924,0.61185 0.110243,0.11024 0.248048,0.17088 0.446484,0.17088 z m -0.0055,-0.24805 c -0.198437,0 -0.330729,-0.12127 -0.330729,-0.28663 0,-0.15434 0.126781,-0.28663 0.325219,-0.28663 0.198437,0 0.325215,0.12126 0.325215,0.28111 v 0.005 c 0,0.16537 -0.121267,0.28664 -0.319705,0.28664 z m 0,0" | |||||
id="path26454" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -57.697074,298.37004 c 0.336243,0 0.56224,-0.21498 0.56224,-0.50712 v -0.005 c 0,-0.29766 -0.225997,-0.41892 -0.468532,-0.452 l 0.374827,-0.39136 c 0.04961,-0.0496 0.08268,-0.0882 0.08268,-0.15434 0,-0.0717 -0.06063,-0.12127 -0.143317,-0.12127 h -0.821309 c -0.06615,0 -0.121267,0.0551 -0.121267,0.12127 0,0.0661 0.05512,0.12127 0.121267,0.12127 h 0.58429 l -0.374827,0.40238 c -0.0441,0.0441 -0.06064,0.0772 -0.06064,0.11576 0,0.0661 0.05512,0.12127 0.121266,0.12127 h 0.06064 c 0.220488,0 0.369313,0.0882 0.369313,0.24804 v 0.005 c 0,0.14332 -0.121266,0.24254 -0.281117,0.24254 -0.148831,0 -0.264583,-0.0551 -0.363802,-0.15434 -0.02204,-0.022 -0.05512,-0.0386 -0.09371,-0.0386 -0.07165,0 -0.1378,0.0662 -0.1378,0.1378 0,0.0386 0.02204,0.0772 0.04961,0.0992 0.126781,0.12678 0.308682,0.20947 0.540192,0.20947 z m 0,0" | |||||
id="path26426" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -58.082484,313.23477 c 0,0.0827 0.06615,0.12678 0.143317,0.12678 0.06063,0 0.104732,-0.0276 0.137805,-0.0937 l 0.661458,-1.26228 c 0.02755,-0.0441 0.03858,-0.0937 0.03858,-0.13229 0,-0.0827 -0.04961,-0.12678 -0.126778,-0.12678 h -0.898482 c -0.07165,0 -0.126778,0.0551 -0.126778,0.12127 0,0.0717 0.05512,0.12678 0.126778,0.12678 h 0.694531 l -0.622872,1.15203 c -0.01654,0.0276 -0.02755,0.0661 -0.02755,0.0882 z m 0,0" | |||||
id="path26422" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -45.939318,298.22121 c 0,0.0772 0.06063,0.13229 0.137805,0.13229 0.07717,0 0.132292,-0.0551 0.132292,-0.13229 v -0.23702 h 0.126778 c 0.06614,0 0.115755,-0.0496 0.115755,-0.11576 0,-0.0661 -0.04961,-0.11575 -0.115755,-0.11575 h -0.126778 v -0.904 c 0,-0.0772 -0.06064,-0.13229 -0.132292,-0.13229 -0.08268,0 -0.126783,0.0276 -0.17639,0.0882 l -0.755165,0.89848 c -0.03859,0.0441 -0.06063,0.0937 -0.06063,0.14883 0,0.0772 0.06063,0.13229 0.1378,0.13229 h 0.716582 z m -0.523653,-0.46853 0.523653,-0.63941 v 0.63941 z m 0,0" | |||||
id="path26394" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -46.10019,313.37257 c 0.352779,0 0.611849,-0.17638 0.611849,-0.46302 v -0.006 c 0,-0.19292 -0.110244,-0.30316 -0.286634,-0.38585 0.132292,-0.0717 0.23151,-0.17639 0.23151,-0.35828 v -0.005 c 0,-0.24805 -0.237019,-0.42995 -0.556725,-0.42995 -0.319704,0 -0.556729,0.18741 -0.556729,0.42995 v 0.005 c 0,0.18189 0.09922,0.28663 0.231511,0.35828 -0.17639,0.0772 -0.286631,0.19844 -0.286631,0.39137 v 0.006 c 0,0.27561 0.259072,0.45751 0.611849,0.45751 z m 0,-0.94809 c -0.165365,0 -0.286631,-0.0992 -0.286631,-0.23702 v -0.005 c 0,-0.12127 0.115752,-0.226 0.286631,-0.226 0.170875,0 0.286633,0.10473 0.286633,0.226 v 0.005 c 0,0.13781 -0.121269,0.23702 -0.286633,0.23702 z m 0,0.71107 c -0.20946,0 -0.336243,-0.11024 -0.336243,-0.23702 v -0.005 c 0,-0.14883 0.14883,-0.24254 0.336243,-0.24254 0.192923,0 0.33624,0.0937 0.33624,0.24254 v 0.005 c 0,0.13229 -0.126778,0.23702 -0.33624,0.23702 z m 0,0" | |||||
id="path26390" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -68.763766,293.60392 c 0,0.0992 0.07166,0.17639 0.170875,0.17639 0.09922,0 0.176389,-0.0772 0.176389,-0.17639 v -1.65916 c 0,-0.0937 -0.07717,-0.17088 -0.176389,-0.17088 -0.09922,0 -0.170875,0.0772 -0.170875,0.17088 z m 0,0" | |||||
id="path26350" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -67.822029,293.60943 c 0,0.0937 0.07717,0.17088 0.170875,0.17088 0.09371,0 0.170878,-0.0772 0.170878,-0.17088 v -1.25126 l 1.014236,1.31189 c 0.04961,0.0606 0.09922,0.10474 0.1819,0.10474 h 0.01654 c 0.0937,0 0.165365,-0.0772 0.165365,-0.17088 v -1.65916 c 0,-0.0937 -0.07166,-0.17088 -0.170879,-0.17088 -0.0937,0 -0.170875,0.0772 -0.170875,0.17088 v 1.21268 l -0.986677,-1.27882 c -0.0441,-0.0606 -0.0937,-0.0992 -0.181899,-0.0992 h -0.03306 c -0.09922,0 -0.176388,0.0772 -0.176388,0.17087 z m 0,0" | |||||
id="path26346" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -65.510347,293.60392 c 0,0.0992 0.07717,0.17639 0.176389,0.17639 0.0937,0 0.170875,-0.0772 0.170875,-0.17639 v -0.47405 h 0.391364 c 0.435459,0 0.79375,-0.23151 0.79375,-0.67799 v -0.006 c 0,-0.39688 -0.292146,-0.65594 -0.755166,-0.65594 h -0.600823 c -0.09922,0 -0.176389,0.0717 -0.176389,0.17087 z m 0.347264,-0.78824 v -0.71107 h 0.402389 c 0.259069,0 0.429948,0.12127 0.429948,0.35278 v 0.006 c 0,0.20395 -0.165365,0.35278 -0.429948,0.35278 z m 0,0" | |||||
id="path26334" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -62.758377,293.79684 c 0.518143,0 0.848872,-0.29765 0.848872,-0.88745 v -0.96463 c 0,-0.0937 -0.07717,-0.17088 -0.170876,-0.17088 -0.09922,0 -0.17639,0.0772 -0.17639,0.17088 v 0.98117 c 0,0.3638 -0.187412,0.5457 -0.496092,0.5457 -0.308681,0 -0.501608,-0.19293 -0.501608,-0.56224 v -0.96463 c 0,-0.0937 -0.07166,-0.17088 -0.170875,-0.17088 -0.09922,0 -0.176389,0.0772 -0.176389,0.17088 v 0.98117 c 0,0.57326 0.330729,0.87091 0.843358,0.87091 z m 0,0" | |||||
id="path26338" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -60.890722,293.60392 c 0,0.0992 0.07717,0.17639 0.176388,0.17639 0.0937,0 0.176389,-0.0772 0.176389,-0.17639 v -1.49379 h 0.479555 c 0.0882,0 0.159856,-0.0717 0.159856,-0.15986 0,-0.0882 -0.07166,-0.15985 -0.159856,-0.15985 h -1.311891 c -0.08819,0 -0.159851,0.0717 -0.159851,0.15985 0,0.0882 0.07166,0.15986 0.159851,0.15986 h 0.479559 z m 0,0" | |||||
id="path26342" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m -58.819719,293.79133 c 0.413409,0 0.705556,-0.22048 0.705556,-0.5898 v -0.005 c 0,-0.32521 -0.214976,-0.47404 -0.633899,-0.57877 -0.380339,-0.0882 -0.474046,-0.15986 -0.474046,-0.30868 v -0.005 c 0,-0.1323 0.121266,-0.23702 0.325218,-0.23702 0.154342,0 0.297656,0.0551 0.451998,0.14882 0.02755,0.0165 0.05512,0.0276 0.0937,0.0276 0.08819,0 0.159853,-0.0717 0.159853,-0.15985 0,-0.0661 -0.03305,-0.11575 -0.07717,-0.1378 -0.176387,-0.12127 -0.374825,-0.18742 -0.622874,-0.18742 -0.391361,0 -0.677992,0.23703 -0.677992,0.57327 v 0.006 c 0,0.3638 0.237019,0.49058 0.661458,0.5898 0.363802,0.0882 0.446482,0.16536 0.446482,0.30317 v 0.005 c 0,0.14882 -0.137803,0.24804 -0.352777,0.24804 -0.214974,0 -0.391361,-0.0717 -0.551217,-0.20395 -0.02204,-0.0165 -0.05512,-0.0275 -0.104727,-0.0275 -0.0882,0 -0.159856,0.0717 -0.159856,0.15986 0,0.0551 0.02755,0.10473 0.06615,0.13229 0.220488,0.16536 0.474046,0.24804 0.744144,0.24804 z m 0,0" | |||||
id="path26330" /> | |||||
</g> | |||||
<g | |||||
inkscape:groupmode="layer" | |||||
id="layer2" | |||||
inkscape:label="widgets" | |||||
style="display:none"> | |||||
<rect | |||||
style="opacity:1;vector-effect:none;fill:#ffff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.38020268;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||||
id="rect29342" | |||||
width="43.999382" | |||||
height="28.000349" | |||||
x="3.4009969" | |||||
y="14.837341" | |||||
rx="0" | |||||
ry="0" /> | |||||
<rect | |||||
ry="0" | |||||
rx="0" | |||||
y="55.5308" | |||||
x="3.894335" | |||||
height="8.21173" | |||||
width="8.2117281" | |||||
id="rect30149" | |||||
style="opacity:1;vector-effect:none;fill:#00ff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.08894975;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> | |||||
<rect | |||||
style="opacity:1;vector-effect:none;fill:#00ff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.08894975;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||||
id="rect30151" | |||||
width="8.2117281" | |||||
height="8.21173" | |||||
x="15.494663" | |||||
y="55.5308" | |||||
rx="0" | |||||
ry="0" /> | |||||
<rect | |||||
ry="0" | |||||
rx="0" | |||||
y="55.5308" | |||||
x="27.094986" | |||||
height="8.21173" | |||||
width="8.2117281" | |||||
id="rect30153" | |||||
style="opacity:1;vector-effect:none;fill:#00ff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.08894975;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> | |||||
<rect | |||||
style="opacity:1;vector-effect:none;fill:#00ff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.08894975;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||||
id="rect30155" | |||||
width="8.2117281" | |||||
height="8.21173" | |||||
x="38.695312" | |||||
y="55.5308" | |||||
rx="0" | |||||
ry="0" /> | |||||
<rect | |||||
ry="0" | |||||
rx="0" | |||||
y="70.144897" | |||||
x="3.8943348" | |||||
height="8.21173" | |||||
width="8.2117281" | |||||
id="rect30157" | |||||
style="opacity:1;vector-effect:none;fill:#00ff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.08894975;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> | |||||
<rect | |||||
style="opacity:1;vector-effect:none;fill:#00ff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.08894975;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||||
id="rect30159" | |||||
width="8.2117281" | |||||
height="8.21173" | |||||
x="15.494663" | |||||
y="70.144897" | |||||
rx="0" | |||||
ry="0" /> | |||||
<rect | |||||
ry="0" | |||||
rx="0" | |||||
y="70.144897" | |||||
x="27.094986" | |||||
height="8.21173" | |||||
width="8.2117281" | |||||
id="rect30161" | |||||
style="opacity:1;vector-effect:none;fill:#00ff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.08894975;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> | |||||
<rect | |||||
style="opacity:1;vector-effect:none;fill:#00ff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.08894975;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||||
id="rect30163" | |||||
width="8.2117281" | |||||
height="8.21173" | |||||
x="38.695312" | |||||
y="70.144897" | |||||
rx="0" | |||||
ry="0" /> | |||||
<rect | |||||
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.08894975;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||||
id="rect30167" | |||||
width="8.2117281" | |||||
height="8.21173" | |||||
x="3.8929532" | |||||
y="92.143898" | |||||
rx="0" | |||||
ry="0" /> | |||||
<rect | |||||
ry="0" | |||||
rx="0" | |||||
y="92.143898" | |||||
x="15.49328" | |||||
height="8.21173" | |||||
width="8.2117281" | |||||
id="rect30169" | |||||
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.08894975;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> | |||||
<rect | |||||
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.08894975;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||||
id="rect30171" | |||||
width="8.2117281" | |||||
height="8.21173" | |||||
x="27.093605" | |||||
y="92.143898" | |||||
rx="0" | |||||
ry="0" /> | |||||
<rect | |||||
ry="0" | |||||
rx="0" | |||||
y="92.143898" | |||||
x="38.693932" | |||||
height="8.21173" | |||||
width="8.2117281" | |||||
id="rect30173" | |||||
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.08894975;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> | |||||
<rect | |||||
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.08894975;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||||
id="rect30175" | |||||
width="8.2117281" | |||||
height="8.21173" | |||||
x="3.894335" | |||||
y="108.1443" | |||||
rx="0" | |||||
ry="0" /> | |||||
<rect | |||||
ry="0" | |||||
rx="0" | |||||
y="108.1443" | |||||
x="15.494662" | |||||
height="8.21173" | |||||
width="8.2117281" | |||||
id="rect30177" | |||||
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.08894975;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> | |||||
<rect | |||||
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.08894975;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||||
id="rect30179" | |||||
width="8.2117281" | |||||
height="8.21173" | |||||
x="27.094988" | |||||
y="108.1443" | |||||
rx="0" | |||||
ry="0" /> | |||||
<rect | |||||
ry="0" | |||||
rx="0" | |||||
y="108.1443" | |||||
x="38.695312" | |||||
height="8.21173" | |||||
width="8.2117281" | |||||
id="rect30181" | |||||
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.08894975;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> | |||||
</g> | |||||
</svg> |
@@ -0,0 +1,3 @@ | |||||
Core panel and VCV logo design © 2018 by Grayscale | |||||
Derivative works may not use Core panel and VCV logo design. |
@@ -0,0 +1,505 @@ | |||||
<?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="40.639725mm" | |||||
height="128.4993mm" | |||||
viewBox="0 0 40.639725 128.4993" | |||||
version="1.1" | |||||
id="svg33850" | |||||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||||
sodipodi:docname="MIDIToCVInterface.svg"> | |||||
<defs | |||||
id="defs33844" /> | |||||
<sodipodi:namedview | |||||
id="base" | |||||
pagecolor="#ffffff" | |||||
bordercolor="#666666" | |||||
borderopacity="1.0" | |||||
inkscape:pageopacity="0.0" | |||||
inkscape:pageshadow="2" | |||||
inkscape:zoom="1.4" | |||||
inkscape:cx="172.96098" | |||||
inkscape:cy="230.90717" | |||||
inkscape:document-units="mm" | |||||
inkscape:current-layer="layer4" | |||||
showgrid="false" | |||||
fit-margin-top="0" | |||||
fit-margin-left="0" | |||||
fit-margin-right="0" | |||||
fit-margin-bottom="0" | |||||
inkscape:snap-bbox="true" | |||||
inkscape:bbox-nodes="true" | |||||
inkscape:window-width="2560" | |||||
inkscape:window-height="1422" | |||||
inkscape:window-x="0" | |||||
inkscape:window-y="18" | |||||
inkscape:window-maximized="0" /> | |||||
<metadata | |||||
id="metadata33847"> | |||||
<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(-65.102757,-21.083683)"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path3823" | |||||
d="M 65.196461,21.176012 H 105.65015 V 149.48928 H 65.196461 Z m 0,0" | |||||
style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path3825" | |||||
d="M 105.74248,21.083683 H 65.102757 V 149.58298 H 105.74248 Z M 105.55644,149.39557 H 65.29017 V 21.269721 h 40.26627 z m 0,0" | |||||
style="fill:#ababab;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path4441" | |||||
d="m 82.669986,145.4406 c -0.117133,0 -0.223242,-0.0661 -0.275608,-0.17088 l -1.001832,-2.00504 c -0.07717,-0.15297 -0.01517,-0.33762 0.137805,-0.41341 0.151582,-0.0772 0.337619,-0.0152 0.41341,0.1378 l 0.726225,1.45246 0.727604,-1.45246 c 0.07579,-0.15296 0.260452,-0.21497 0.413413,-0.1378 0.151585,0.0758 0.213596,0.26044 0.137802,0.41341 l -1.003212,2.00504 c -0.05236,0.10474 -0.158471,0.17088 -0.275607,0.17088" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path4443" | |||||
d="m 88.175249,145.4406 c -0.115754,0 -0.223242,-0.0661 -0.275608,-0.17088 l -1.001832,-2.00504 c -0.07579,-0.15297 -0.01517,-0.33762 0.137802,-0.41341 0.151585,-0.0772 0.337622,-0.0152 0.413413,0.1378 l 0.726225,1.45246 0.727604,-1.45246 c 0.07579,-0.15296 0.260448,-0.21497 0.413413,-0.1378 0.152961,0.0758 0.213596,0.26044 0.137802,0.41341 l -1.001832,2.00504 c -0.05237,0.10474 -0.159855,0.17088 -0.276987,0.17088" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path4445" | |||||
d="m 85.572137,145.4406 c -0.722094,0 -1.310517,-0.58842 -1.310517,-1.31189 0,-0.72209 0.588423,-1.31052 1.310517,-1.31052 0.286632,0 0.559481,0.091 0.78686,0.26183 0.136423,0.10335 0.163985,0.29628 0.06201,0.43271 -0.101977,0.13642 -0.29628,0.16398 -0.432707,0.0606 -0.119888,-0.0896 -0.264583,-0.13918 -0.416164,-0.13918 -0.381716,0 -0.693156,0.31282 -0.693156,0.69453 0,0.38309 0.31144,0.69453 0.693156,0.69453 0.151581,0 0.296276,-0.0482 0.416164,-0.13918 0.136427,-0.10198 0.33073,-0.0744 0.432707,0.062 0.101974,0.13643 0.07441,0.32935 -0.06201,0.43132 -0.227379,0.17226 -0.500228,0.26321 -0.78686,0.26321" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path4447" | |||||
d="m 85.993815,144.11355 c 0,0.22186 -0.179144,0.40101 -0.401009,0.40101 -0.221866,0 -0.40101,-0.17915 -0.40101,-0.40101 0,-0.22186 0.179144,-0.40101 0.40101,-0.40101 0.221865,0 0.401009,0.17915 0.401009,0.40101" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 79.106895,30.356062 c 0,0.176389 0.137805,0.319705 0.314194,0.319705 0.176389,0 0.319705,-0.143316 0.319705,-0.319705 v -1.471743 l 0.56775,0.865407 c 0.06615,0.104732 0.14883,0.165364 0.270098,0.165364 0.115753,0 0.203947,-0.06063 0.270093,-0.165364 l 0.573264,-0.881945 v 1.477257 c 0,0.181903 0.143316,0.330729 0.319705,0.330729 0.181903,0 0.325219,-0.148826 0.325219,-0.330729 v -2.353687 c 0,-0.181903 -0.143316,-0.325219 -0.325219,-0.325219 h -0.07166 c -0.132292,0 -0.226,0.05512 -0.292146,0.165365 l -0.793746,1.289843 -0.788236,-1.28433 c -0.05512,-0.09922 -0.154341,-0.170878 -0.292146,-0.170878 h -0.07166 c -0.181903,0 -0.325219,0.143316 -0.325219,0.325219 z m 0,0" | |||||
id="path26004" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 82.852598,30.345038 c 0,0.181903 0.143315,0.330729 0.325215,0.330729 0.181903,0 0.325219,-0.148826 0.325219,-0.330729 v -2.359201 c 0,-0.181899 -0.143316,-0.325215 -0.325219,-0.325215 -0.1819,0 -0.325215,0.143316 -0.325215,0.325215 z m 0,0" | |||||
id="path26000" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 84.281722,30.322989 c 0,0.181903 0.143316,0.325219 0.325218,0.325219 h 0.826823 c 0.931552,0 1.576476,-0.650434 1.576476,-1.48277 v -0.0055 c 0,-0.837848 -0.644924,-1.477257 -1.576476,-1.477257 H 84.60694 c -0.181902,0 -0.325218,0.148826 -0.325218,0.330729 z m 0.650433,-0.264583 v -1.785937 h 0.501608 c 0.534677,0 0.892969,0.369316 0.892969,0.892969 v 0.01101 c 0,0.523656 -0.358292,0.881944 -0.892969,0.881944 z m 0,0" | |||||
id="path25996" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 87.627371,30.345038 c 0,0.181903 0.143316,0.330729 0.325218,0.330729 0.1819,0 0.325216,-0.148826 0.325216,-0.330729 v -2.359201 c 0,-0.181899 -0.143316,-0.325215 -0.325216,-0.325215 -0.181902,0 -0.325218,0.143316 -0.325218,0.325215 z m 0,0" | |||||
id="path25992" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 89.2396,29.644997 h 0.733115 c 0.170878,0 0.314194,-0.137806 0.314194,-0.308681 0,-0.170878 -0.143316,-0.308681 -0.314194,-0.308681 H 89.2396 c -0.170878,0 -0.30868,0.137803 -0.30868,0.308681 0,0.170875 0.137802,0.308681 0.30868,0.308681 z m 0,0" | |||||
id="path25984" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 91.103107,30.350552 c 0,0.176389 0.143315,0.325215 0.319704,0.325215 0.17639,0 0.319704,-0.148826 0.319704,-0.325215 v -2.386764 c 0,-0.176389 -0.143314,-0.319705 -0.319704,-0.319705 h -0.0055 c -0.09371,0 -0.181903,0.02205 -0.308681,0.05512 l -0.418923,0.121268 c -0.132292,0.03859 -0.214976,0.14883 -0.214976,0.281121 0,0.148827 0.132292,0.275608 0.281122,0.275608 0.03858,0 0.08268,-0.0055 0.115753,-0.01654 l 0.231511,-0.05512 z m 0,0" | |||||
id="path25988" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 79.44849,73.706906 c 0.606337,0 1.036284,-0.463021 1.036284,-1.019752 v -0.0055 c 0,-0.556728 -0.424437,-1.019749 -1.030774,-1.019749 -0.606337,0 -1.036285,0.468535 -1.036285,1.025261 v 0.0055 c 0,0.556726 0.424438,1.014235 1.030775,1.014235 z m 0.0055,-0.319707 c -0.391361,0 -0.672483,-0.319704 -0.672483,-0.700045 v -0.0055 c 0,-0.385849 0.275608,-0.700045 0.666973,-0.700045 0.391361,0 0.672482,0.319707 0.672482,0.705557 v 0.0055 c 0,0.380336 -0.275607,0.694531 -0.666972,0.694531 z m 0,0" | |||||
id="path25980" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 81.78451,73.706906 c 0.518142,0 0.848871,-0.297657 0.848871,-0.887461 v -0.964623 c 0,-0.09371 -0.07717,-0.170878 -0.170874,-0.170878 -0.09922,0 -0.176389,0.07717 -0.176389,0.170878 v 0.981163 c 0,0.363802 -0.187413,0.5457 -0.496094,0.5457 -0.308681,0 -0.501608,-0.192924 -0.501608,-0.56224 v -0.964623 c 0,-0.09371 -0.07166,-0.170878 -0.170875,-0.170878 -0.09922,0 -0.176389,0.07717 -0.176389,0.170878 v 0.981163 c 0,0.573264 0.33073,0.870921 0.843358,0.870921 z m 0,0" | |||||
id="path25972" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 83.654984,73.513977 c 0,0.09922 0.07717,0.176389 0.176388,0.176389 0.09371,0 0.176389,-0.07717 0.176389,-0.176389 v -1.49379 h 0.47956 c 0.08819,0 0.15985,-0.07166 0.15985,-0.159856 0,-0.08819 -0.07166,-0.159851 -0.15985,-0.159851 h -1.311893 c -0.08819,0 -0.159854,0.07166 -0.159854,0.159851 0,0.0882 0.07166,0.159856 0.159854,0.159856 h 0.479556 z m 0,0" | |||||
id="path25976" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 85.042744,73.513977 c 0,0.09922 0.07717,0.176389 0.176389,0.176389 0.09371,0 0.170879,-0.07717 0.170879,-0.176389 v -0.474044 h 0.391361 c 0.435462,0 0.79375,-0.23151 0.79375,-0.677994 v -0.0055 c 0,-0.396875 -0.292143,-0.655944 -0.755163,-0.655944 h -0.600827 c -0.09922,0 -0.176389,0.07166 -0.176389,0.170876 z m 0.347268,-0.788236 v -0.711068 h 0.402385 c 0.259073,0 0.429948,0.121266 0.429948,0.352777 v 0.0055 c 0,0.203949 -0.165365,0.352777 -0.429948,0.352777 z m 0,0" | |||||
id="path25968" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 87.795568,73.706906 c 0.518142,0 0.848872,-0.297657 0.848872,-0.887461 v -0.964623 c 0,-0.09371 -0.07717,-0.170878 -0.170876,-0.170878 -0.09922,0 -0.176388,0.07717 -0.176388,0.170878 v 0.981163 c 0,0.363802 -0.187414,0.5457 -0.496094,0.5457 -0.308681,0 -0.501608,-0.192924 -0.501608,-0.56224 v -0.964623 c 0,-0.09371 -0.07166,-0.170878 -0.170875,-0.170878 -0.09922,0 -0.176389,0.07717 -0.176389,0.170878 v 0.981163 c 0,0.573264 0.330729,0.870921 0.843358,0.870921 z m 0,0" | |||||
id="path25964" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 89.664631,73.513977 c 0,0.09922 0.07717,0.176389 0.176388,0.176389 0.0937,0 0.176389,-0.07717 0.176389,-0.176389 v -1.49379 h 0.479556 c 0.08819,0 0.159854,-0.07166 0.159854,-0.159856 0,-0.08819 -0.07166,-0.159851 -0.159854,-0.159851 h -1.311893 c -0.08819,0 -0.15985,0.07166 -0.15985,0.159851 0,0.0882 0.07166,0.159856 0.15985,0.159856 h 0.47956 z m 0,0" | |||||
id="path25960" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 91.735064,73.701392 c 0.413412,0 0.705557,-0.220488 0.705557,-0.589799 v -0.0055 c 0,-0.325216 -0.214977,-0.474046 -0.633899,-0.578776 -0.380337,-0.08819 -0.474045,-0.159854 -0.474045,-0.308679 v -0.0055 c 0,-0.132292 0.121267,-0.237022 0.325219,-0.237022 0.154339,0 0.297656,0.05512 0.451996,0.148825 0.02755,0.01654 0.05512,0.02755 0.0937,0.02755 0.08819,0 0.159853,-0.07166 0.159853,-0.159856 0,-0.06615 -0.03306,-0.115752 -0.07717,-0.1378 -0.176389,-0.121269 -0.374827,-0.187415 -0.622876,-0.187415 -0.39136,0 -0.677992,0.237022 -0.677992,0.573265 v 0.0055 c 0,0.363802 0.237021,0.490582 0.661458,0.589801 0.363802,0.0882 0.446482,0.165365 0.446482,0.303168 v 0.0055 c 0,0.148826 -0.137801,0.248044 -0.352777,0.248044 -0.214972,0 -0.391361,-0.07165 -0.551215,-0.203946 -0.02205,-0.01654 -0.05512,-0.02755 -0.104729,-0.02755 -0.08819,0 -0.159855,0.07166 -0.159855,0.159856 0,0.05512 0.02755,0.104728 0.06615,0.132292 0.220486,0.165365 0.474045,0.248044 0.744141,0.248044 z m 0,0" | |||||
id="path25956" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path4513" | |||||
d="m 101.86468,93.502345 c 0,-0.549836 -0.45062,-1.000453 -1.00046,-1.000453 h -7.681178 c -0.551215,0 -1.000456,0.450617 -1.000456,1.000453 v 12.172215 c 0,0.54983 0.449241,1.00045 1.000456,1.00045 h 7.681178 c 0.54984,0 1.00046,-0.45062 1.00046,-1.00045 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path4515" | |||||
d="m 90.264356,93.502345 c 0,-0.549836 -0.450621,-1.000453 -1.000456,-1.000453 h -7.681186 c -0.551215,0 -1.000453,0.450617 -1.000453,1.000453 v 12.172215 c 0,0.54983 0.449238,1.00045 1.000453,1.00045 H 89.2639 c 0.549835,0 1.000456,-0.45062 1.000456,-1.00045 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path4517" | |||||
d="m 78.664032,93.502345 c 0,-0.549836 -0.449241,-1.000453 -1.000457,-1.000453 h -7.681186 c -0.549836,0 -1.000456,0.450617 -1.000456,1.000453 v 12.172215 c 0,0.54983 0.45062,1.00045 1.000456,1.00045 h 7.681186 c 0.551216,0 1.000457,-0.45062 1.000457,-1.00045 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 71.735264,95.429941 c 0,0.09922 0.07717,0.170878 0.170879,0.170878 0.09922,0 0.176389,-0.07166 0.176389,-0.170878 v -0.79375 l 0.303166,0.468534 c 0.03859,0.05512 0.08268,0.08819 0.14883,0.08819 0.06063,0 0.110243,-0.03305 0.143316,-0.08819 l 0.308681,-0.479559 v 0.799263 c 0,0.09922 0.08268,0.17639 0.176389,0.17639 0.09922,0 0.176389,-0.07717 0.176389,-0.17639 V 94.15112 c 0,-0.09922 -0.07717,-0.176388 -0.176389,-0.176388 h -0.03859 c -0.07166,0 -0.121268,0.03306 -0.159851,0.08819 l -0.424437,0.700049 -0.429948,-0.694531 c -0.03306,-0.05512 -0.08268,-0.09371 -0.159851,-0.09371 h -0.03859 c -0.09922,0 -0.176389,0.07717 -0.176389,0.176388 z m 0,0" | |||||
id="path25948" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 74.125644,95.468528 c 0.03306,0.0937 0.09922,0.148825 0.1819,0.148825 h 0.03859 c 0.08819,0 0.148826,-0.05512 0.181899,-0.148825 l 0.314194,-0.91502 0.319705,0.91502 c 0.03306,0.0937 0.0937,0.148825 0.1819,0.148825 h 0.03305 c 0.08819,0 0.15434,-0.05512 0.187413,-0.148825 l 0.446486,-1.256771 c 0.0055,-0.02204 0.01655,-0.04961 0.01655,-0.07166 0,-0.0937 -0.08268,-0.170876 -0.176389,-0.170876 -0.0882,0 -0.148827,0.06063 -0.170875,0.126778 l -0.319705,0.986676 -0.319705,-0.975651 c -0.02755,-0.0882 -0.08819,-0.143317 -0.176389,-0.143317 h -0.02755 c -0.0937,0 -0.15434,0.06063 -0.181899,0.143317 l -0.319705,0.975651 -0.319705,-0.986676 c -0.02205,-0.07166 -0.08819,-0.126778 -0.170879,-0.126778 -0.09922,0 -0.181899,0.07717 -0.181899,0.17639 0,0.01654 0.0055,0.04409 0.01654,0.06615 z m 0,0" | |||||
id="path25952" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 83.558259,95.424429 c 0,0.09922 0.07717,0.17639 0.176389,0.17639 0.09922,0 0.176389,-0.07717 0.176389,-0.17639 v -0.314195 h 0.270097 c 0.358288,0 0.64492,-0.192923 0.64492,-0.567748 v -0.0055 c 0,-0.325216 -0.23151,-0.551217 -0.611847,-0.551217 h -0.479559 c -0.09922,0 -0.176389,0.07717 -0.176389,0.176389 z m 0.352778,-0.628385 v -0.490582 h 0.275607 c 0.176389,0 0.286632,0.08268 0.286632,0.242533 v 0.0055 c 0,0.137803 -0.104729,0.242535 -0.281118,0.242535 z m 0,0" | |||||
id="path25940" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 85.506086,95.468528 c 0.03306,0.0937 0.09922,0.148825 0.181899,0.148825 h 0.03859 c 0.08819,0 0.148826,-0.05512 0.181899,-0.148825 l 0.314195,-0.91502 0.319705,0.91502 c 0.03306,0.0937 0.0937,0.148825 0.181899,0.148825 h 0.03306 c 0.08819,0 0.154341,-0.05512 0.187413,-0.148825 l 0.446487,-1.256771 c 0.0055,-0.02204 0.01654,-0.04961 0.01654,-0.07166 0,-0.0937 -0.08268,-0.170876 -0.176389,-0.170876 -0.08819,0 -0.148826,0.06063 -0.170875,0.126778 L 86.740805,95.082675 86.4211,94.107024 c -0.02755,-0.0882 -0.0882,-0.143317 -0.176389,-0.143317 h -0.02755 c -0.0937,0 -0.15434,0.06063 -0.181899,0.143317 l -0.319705,0.975651 -0.319705,-0.986676 c -0.02205,-0.07166 -0.08819,-0.126778 -0.170879,-0.126778 -0.09922,0 -0.181899,0.07717 -0.181899,0.17639 0,0.01654 0.0055,0.04409 0.01654,0.06615 z m 0,0" | |||||
id="path25944" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 94.658768,95.440963 c 0,0.0882 0.07166,0.159856 0.165365,0.159856 0.07166,0 0.132292,-0.03859 0.159853,-0.104732 l 0.110244,-0.264584 h 0.711065 l 0.104733,0.248047 c 0.03305,0.07717 0.08819,0.121269 0.170876,0.121269 0.09371,0 0.165364,-0.07166 0.165364,-0.165364 0,-0.02204 -0.0055,-0.04961 -0.01654,-0.07166 l -0.56224,-1.262282 c -0.03859,-0.08819 -0.104732,-0.143317 -0.203951,-0.143317 h -0.01654 c -0.09922,0 -0.170879,0.05512 -0.209463,0.143317 l -0.556728,1.262282 c -0.01101,0.02204 -0.02204,0.04961 -0.02204,0.07717 z m 0.567754,-0.523652 0.220485,-0.529167 0.225997,0.529167 z m 0,0" | |||||
id="path25932" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 96.569063,95.424429 c 0,0.09922 0.07717,0.17639 0.17639,0.17639 0.09922,0 0.176387,-0.07717 0.176387,-0.17639 V 94.96692 h 0.617363 c 0.09371,0 0.159853,-0.07166 0.159853,-0.159851 0,-0.0882 -0.06615,-0.159856 -0.159853,-0.159856 H 96.92184 v -0.341751 h 0.722095 c 0.08819,0 0.159851,-0.07166 0.159851,-0.159851 0,-0.0882 -0.07166,-0.159856 -0.159851,-0.159856 h -0.898482 c -0.09922,0 -0.17639,0.07717 -0.17639,0.17639 z m 0,0" | |||||
id="path25936" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 98.553837,95.424429 c 0,0.09922 0.07717,0.17639 0.176387,0.17639 0.09922,0 0.17639,-0.07717 0.17639,-0.17639 v -1.113454 h 0.336243 c 0.0937,0 0.165365,-0.07166 0.165365,-0.165364 0,-0.0882 -0.07166,-0.159856 -0.165365,-0.159856 h -1.030774 c -0.08819,0 -0.159851,0.07166 -0.159851,0.159856 0,0.0937 0.07166,0.165364 0.159851,0.165364 h 0.341754 z m 0,0" | |||||
id="path25928" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path4583" | |||||
d="m 101.86468,77.501946 c 0,-0.549839 -0.45062,-0.99908 -1.00046,-0.99908 h -7.681178 c -0.551215,0 -1.000456,0.449241 -1.000456,0.99908 v 12.172209 c 0,0.551215 0.449241,1.000456 1.000456,1.000456 h 7.681178 c 0.54984,0 1.00046,-0.449241 1.00046,-1.000456 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path4585" | |||||
d="m 90.264356,77.501946 c 0,-0.549839 -0.450621,-0.99908 -1.000456,-0.99908 h -7.681186 c -0.551215,0 -1.000453,0.449241 -1.000453,0.99908 v 12.172209 c 0,0.551215 0.449238,1.000456 1.000453,1.000456 H 89.2639 c 0.549835,0 1.000456,-0.449241 1.000456,-1.000456 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path4587" | |||||
d="m 78.664032,77.501946 c 0,-0.549839 -0.449241,-0.99908 -1.000457,-0.99908 h -7.681186 c -0.549836,0 -1.000456,0.449241 -1.000456,0.99908 v 12.172209 c 0,0.551215 0.45062,1.000456 1.000456,1.000456 h 7.681186 c 0.551216,0 1.000457,-0.449241 1.000457,-1.000456 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 73.050914,79.61662 c 0.259073,0 0.429948,-0.07717 0.573264,-0.203948 0.03306,-0.02755 0.06064,-0.07166 0.06064,-0.121267 0,-0.09371 -0.07717,-0.165364 -0.165365,-0.165364 -0.0441,0 -0.07717,0.01654 -0.104733,0.03858 -0.104729,0.08268 -0.198437,0.126783 -0.352777,0.126783 -0.270094,0 -0.463021,-0.23151 -0.463021,-0.507119 0,-0.275608 0.192927,-0.501607 0.463021,-0.501607 0.126781,0 0.23151,0.03859 0.330729,0.115757 0.02755,0.01654 0.05512,0.03305 0.104733,0.03305 0.09922,0 0.176389,-0.07717 0.176389,-0.170879 0,-0.06615 -0.03306,-0.115752 -0.07166,-0.143317 -0.132292,-0.09922 -0.292143,-0.15985 -0.534678,-0.15985 -0.496093,0 -0.837847,0.374827 -0.837847,0.826823 v 0.0055 c 0,0.463021 0.352778,0.826823 0.821309,0.826823 z m 0,0" | |||||
id="path25888" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 74.694163,79.61662 h 0.02205 c 0.09922,0 0.165365,-0.05512 0.198438,-0.143316 l 0.529167,-1.256771 c 0.0055,-0.02204 0.01654,-0.04961 0.01654,-0.07717 0,-0.0937 -0.07717,-0.170874 -0.176389,-0.170874 -0.08268,0 -0.143316,0.05512 -0.170875,0.115753 l -0.402385,1.047307 -0.402386,-1.036283 c -0.02755,-0.07166 -0.08819,-0.126778 -0.176388,-0.126778 -0.09922,0 -0.176389,0.07717 -0.176389,0.176388 0,0.02755 0.0055,0.05512 0.01654,0.08268 l 0.523656,1.245746 c 0.03306,0.08819 0.09922,0.143316 0.198438,0.143316 z m 0,0" | |||||
id="path25884" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 83.100498,79.61662 c 0.242535,0 0.429948,-0.08268 0.56224,-0.15985 0.08268,-0.04961 0.126777,-0.121269 0.126777,-0.226002 v -0.391361 c 0,-0.09922 -0.08268,-0.176387 -0.181899,-0.176387 h -0.402389 c -0.08268,0 -0.15434,0.07165 -0.15434,0.154339 0,0.08819 0.07166,0.15434 0.15434,0.15434 h 0.242535 v 0.225996 c -0.0937,0.06615 -0.203948,0.09922 -0.33624,0.09922 -0.281121,0 -0.485069,-0.214972 -0.485069,-0.512628 0,-0.275608 0.203948,-0.501607 0.463021,-0.501607 0.148826,0 0.253559,0.03859 0.347264,0.110243 0.02755,0.01654 0.06063,0.03859 0.110243,0.03859 0.09371,0 0.170878,-0.08268 0.170878,-0.176389 0,-0.07166 -0.03859,-0.115758 -0.07166,-0.143317 -0.143317,-0.09922 -0.303167,-0.15434 -0.545702,-0.15434 -0.485069,0 -0.843361,0.374828 -0.843361,0.826823 v 0.0055 c 0,0.474046 0.341753,0.826822 0.843361,0.826822 z m 0,0" | |||||
id="path25876" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 84.069049,79.440231 c 0,0.08819 0.07166,0.159853 0.165365,0.159853 0.07166,0 0.132292,-0.03859 0.159854,-0.104733 l 0.110243,-0.264583 h 0.711066 l 0.104733,0.248049 c 0.03306,0.07717 0.08819,0.121267 0.170875,0.121267 0.09371,0 0.165364,-0.07166 0.165364,-0.165365 0,-0.02204 -0.0055,-0.04961 -0.01654,-0.07166 l -0.56224,-1.26228 c -0.03859,-0.0882 -0.104732,-0.143317 -0.203951,-0.143317 h -0.01654 c -0.09922,0 -0.170879,0.05512 -0.209462,0.143317 l -0.556729,1.26228 c -0.01101,0.02204 -0.02205,0.04961 -0.02205,0.07717 z m 0.567754,-0.523653 0.220486,-0.529167 0.225996,0.529167 z m 0,0" | |||||
id="path25880" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 86.203062,79.423697 c 0,0.09922 0.07717,0.176387 0.176389,0.176387 0.09922,0 0.176389,-0.07717 0.176389,-0.176387 V 78.31024 h 0.33624 c 0.09371,0 0.165364,-0.07166 0.165364,-0.165364 0,-0.08819 -0.07166,-0.159854 -0.165364,-0.159854 h -1.030771 c -0.0882,0 -0.159854,0.07166 -0.159854,0.159854 0,0.0937 0.07166,0.165364 0.159854,0.165364 h 0.341753 z m 0,0" | |||||
id="path25868" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 87.543261,79.589061 h 0.898479 c 0.0882,0 0.159855,-0.06614 0.159855,-0.154342 0,-0.08819 -0.07166,-0.159853 -0.159855,-0.159853 h -0.72209 v -0.33624 h 0.611847 c 0.08268,0 0.154341,-0.07166 0.154341,-0.15434 0,-0.08819 -0.07166,-0.159853 -0.154341,-0.159853 H 87.71965 v -0.325215 h 0.711066 c 0.08819,0 0.159854,-0.07166 0.159854,-0.154342 0,-0.08819 -0.07166,-0.159854 -0.159854,-0.159854 h -0.887455 c -0.09922,0 -0.176389,0.07717 -0.176389,0.17639 v 1.25126 c 0,0.09922 0.07717,0.176389 0.176389,0.176389 z m 0,0" | |||||
id="path25872" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 95.470388,79.61662 h 0.02204 c 0.09922,0 0.165365,-0.05512 0.198438,-0.143316 l 0.529166,-1.256771 c 0.0055,-0.02204 0.01654,-0.04961 0.01654,-0.07717 0,-0.0937 -0.07717,-0.170874 -0.17639,-0.170874 -0.08268,0 -0.143314,0.05512 -0.170878,0.115753 L 95.48692,79.13155 95.084531,78.095267 c -0.02755,-0.07166 -0.0882,-0.126778 -0.17639,-0.126778 -0.09922,0 -0.176389,0.07717 -0.176389,0.176388 0,0.02755 0.0055,0.05512 0.01654,0.08268 l 0.523653,1.245746 c 0.03305,0.08819 0.09922,0.143316 0.198437,0.143316 z m 0,0" | |||||
id="path25860" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 96.729011,79.589061 h 0.898483 c 0.0882,0 0.159851,-0.06614 0.159851,-0.154342 0,-0.08819 -0.07165,-0.159853 -0.159851,-0.159853 h -0.722093 v -0.33624 h 0.611852 c 0.08268,0 0.154339,-0.07166 0.154339,-0.15434 0,-0.08819 -0.07166,-0.159853 -0.154339,-0.159853 h -0.611852 v -0.325215 h 0.71107 c 0.08819,0 0.159851,-0.07166 0.159851,-0.154342 0,-0.08819 -0.07166,-0.159854 -0.159851,-0.159854 h -0.88746 c -0.09922,0 -0.176387,0.07717 -0.176387,0.17639 v 1.25126 c 0,0.09922 0.07717,0.176389 0.176387,0.176389 z m 0,0" | |||||
id="path25864" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 98.169453,79.412672 c 0,0.09922 0.07717,0.176389 0.17639,0.176389 h 0.832332 c 0.0882,0 0.159856,-0.07166 0.159856,-0.159856 0,-0.08819 -0.07166,-0.15985 -0.159856,-0.15985 H 98.52223 v -1.124479 c 0,-0.09922 -0.07717,-0.176388 -0.176387,-0.176388 -0.09922,0 -0.17639,0.07717 -0.17639,0.176388 z m 0,0" | |||||
id="path25856" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path6757" | |||||
d="m 101.86468,109.50275 c 0,-0.55122 -0.45062,-1.00046 -1.00046,-1.00046 h -7.681178 c -0.551215,0 -1.000456,0.44924 -1.000456,1.00046 v 12.17221 c 0,0.54983 0.449241,1.00045 1.000456,1.00045 h 7.681178 c 0.54984,0 1.00046,-0.45062 1.00046,-1.00045 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path6759" | |||||
d="m 90.264356,109.50275 c 0,-0.55122 -0.450621,-1.00046 -1.000456,-1.00046 h -7.681186 c -0.551215,0 -1.000453,0.44924 -1.000453,1.00046 v 12.17221 c 0,0.54983 0.449238,1.00045 1.000453,1.00045 H 89.2639 c 0.549835,0 1.000456,-0.45062 1.000456,-1.00045 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path6761" | |||||
d="m 78.664032,109.50275 c 0,-0.55122 -0.449241,-1.00046 -1.000457,-1.00046 h -7.681186 c -0.549836,0 -1.000456,0.44924 -1.000456,1.00046 v 12.17221 c 0,0.54983 0.45062,1.00045 1.000456,1.00045 h 7.681186 c 0.551216,0 1.000457,-0.45062 1.000457,-1.00045 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 71.458267,111.6119 c 0.341753,0 0.584288,-0.17639 0.584288,-0.4961 v -0.005 c 0,-0.28111 -0.181899,-0.39687 -0.507118,-0.47955 -0.275608,-0.0717 -0.347264,-0.10473 -0.347264,-0.21498 0,-0.0827 0.07166,-0.14331 0.209462,-0.14331 0.110243,0 0.220486,0.0386 0.336239,0.11024 0.02755,0.0165 0.05512,0.022 0.08819,0.022 0.09371,0 0.165365,-0.0717 0.165365,-0.15985 0,-0.0717 -0.03858,-0.11576 -0.07717,-0.14332 -0.143316,-0.0882 -0.314191,-0.1378 -0.507118,-0.1378 -0.330729,0 -0.562239,0.19292 -0.562239,0.47956 v 0.005 c 0,0.3197 0.203951,0.40789 0.529166,0.49058 0.270097,0.0717 0.325219,0.11575 0.325219,0.20395 v 0.005 c 0,0.0937 -0.08819,0.15434 -0.231511,0.15434 -0.159854,0 -0.292145,-0.0551 -0.413413,-0.14883 -0.02205,-0.0165 -0.05512,-0.0276 -0.09922,-0.0276 -0.0937,0 -0.165364,0.0662 -0.165364,0.15985 0,0.0551 0.02755,0.10473 0.06615,0.13229 0.181902,0.13229 0.391364,0.19292 0.606336,0.19292 z m 0,0" | |||||
id="path23608" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 72.787008,111.42449 c 0,0.0992 0.07717,0.17639 0.176389,0.17639 0.09922,0 0.176389,-0.0772 0.176389,-0.17639 v -1.11346 h 0.336243 c 0.0937,0 0.165364,-0.0717 0.165364,-0.16536 0,-0.0882 -0.07166,-0.15986 -0.165364,-0.15986 h -1.030775 c -0.08819,0 -0.15985,0.0717 -0.15985,0.15986 0,0.0937 0.07166,0.16536 0.15985,0.16536 h 0.341754 z m 0,0" | |||||
id="path23596" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 73.950815,111.42449 c 0,0.0992 0.07717,0.17639 0.176389,0.17639 0.09922,0 0.176388,-0.0772 0.176388,-0.17639 v -0.34727 h 0.281122 l 0.347264,0.43546 c 0.03859,0.0496 0.09371,0.0882 0.170879,0.0882 0.08819,0 0.170875,-0.0606 0.170875,-0.15986 0,-0.0551 -0.02755,-0.0937 -0.06063,-0.1378 l -0.242538,-0.29766 c 0.192925,-0.0772 0.319706,-0.23702 0.319706,-0.48507 v -0.005 c 0,-0.15434 -0.04961,-0.2756 -0.137806,-0.36931 -0.104729,-0.10474 -0.264583,-0.15986 -0.468531,-0.15986 h -0.556729 c -0.09922,0 -0.176389,0.0772 -0.176389,0.17639 z m 0.352777,-0.66146 v -0.45751 h 0.352778 c 0.170879,0 0.275608,0.0772 0.275608,0.226 v 0.005 c 0,0.1378 -0.09922,0.226 -0.270094,0.226 z m 0,0" | |||||
id="path23600" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 76.036261,111.42449 c 0,0.0992 0.07717,0.17639 0.176389,0.17639 0.09922,0 0.176389,-0.0772 0.176389,-0.17639 v -1.11346 h 0.336243 c 0.0937,0 0.165364,-0.0717 0.165364,-0.16536 0,-0.0882 -0.07166,-0.15986 -0.165364,-0.15986 h -1.030775 c -0.08819,0 -0.15985,0.0717 -0.15985,0.15986 0,0.0937 0.07166,0.16536 0.15985,0.16536 h 0.341754 z m 0,0" | |||||
id="path23604" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 82.907493,111.6119 c 0.341754,0 0.584289,-0.17639 0.584289,-0.4961 v -0.005 c 0,-0.28111 -0.1819,-0.39687 -0.507119,-0.47955 -0.275607,-0.0717 -0.347263,-0.10473 -0.347263,-0.21498 0,-0.0827 0.07166,-0.14331 0.209462,-0.14331 0.110242,0 0.220486,0.0386 0.336239,0.11024 0.02755,0.0165 0.05512,0.022 0.08819,0.022 0.09371,0 0.165364,-0.0717 0.165364,-0.15985 0,-0.0717 -0.03858,-0.11576 -0.07717,-0.14332 -0.143316,-0.0882 -0.314191,-0.1378 -0.507118,-0.1378 -0.330729,0 -0.56224,0.19292 -0.56224,0.47956 v 0.005 c 0,0.3197 0.203952,0.40789 0.529167,0.49058 0.270097,0.0717 0.325219,0.11575 0.325219,0.20395 v 0.005 c 0,0.0937 -0.0882,0.15434 -0.231511,0.15434 -0.159854,0 -0.292146,-0.0551 -0.413413,-0.14883 -0.02205,-0.0165 -0.05512,-0.0276 -0.09922,-0.0276 -0.0937,0 -0.165364,0.0662 -0.165364,0.15985 0,0.0551 0.02755,0.10473 0.06615,0.13229 0.181902,0.13229 0.391364,0.19292 0.606336,0.19292 z m 0,0" | |||||
id="path23592" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 84.236234,111.42449 c 0,0.0992 0.07717,0.17639 0.176389,0.17639 0.09922,0 0.176389,-0.0772 0.176389,-0.17639 v -1.11346 h 0.336243 c 0.0937,0 0.165365,-0.0717 0.165365,-0.16536 0,-0.0882 -0.07166,-0.15986 -0.165365,-0.15986 h -1.030774 c -0.08819,0 -0.159851,0.0717 -0.159851,0.15986 0,0.0937 0.07166,0.16536 0.159851,0.16536 h 0.341753 z m 0,0" | |||||
id="path23584" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 86.119937,111.61741 c 0.496094,0 0.859896,-0.37483 0.859896,-0.83234 0,-0.4575 -0.358292,-0.82682 -0.854386,-0.82682 -0.496093,0 -0.854381,0.37483 -0.854381,0.82682 v 0.005 c 0,0.45752 0.358288,0.82683 0.848871,0.82683 z m 0.0055,-0.32522 c -0.281118,0 -0.485069,-0.23151 -0.485069,-0.50712 0,-0.2756 0.198437,-0.5016 0.479559,-0.5016 0.286632,0 0.49058,0.226 0.49058,0.5016 v 0.005 c 0,0.27561 -0.198438,0.50161 -0.48507,0.50161 z m 0,0" | |||||
id="path23588" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 87.367031,111.42449 c 0,0.0992 0.07717,0.17639 0.176389,0.17639 0.09922,0 0.176389,-0.0772 0.176389,-0.17639 v -0.3142 h 0.270094 c 0.358291,0 0.644923,-0.19292 0.644923,-0.56775 v -0.005 c 0,-0.32521 -0.23151,-0.55122 -0.61185,-0.55122 H 87.54342 c -0.09922,0 -0.176389,0.0772 -0.176389,0.17639 z m 0.352778,-0.62839 v -0.49058 h 0.275608 c 0.176388,0 0.286631,0.0827 0.286631,0.24253 v 0.005 c 0,0.1378 -0.104732,0.24254 -0.281121,0.24254 z m 0,0" | |||||
id="path23580" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 95.184337,111.61741 c 0.259072,0 0.429948,-0.0772 0.573262,-0.20395 0.03306,-0.0276 0.06064,-0.0717 0.06064,-0.12127 0,-0.0937 -0.07717,-0.16536 -0.165364,-0.16536 -0.0441,0 -0.07717,0.0165 -0.104733,0.0386 -0.10473,0.0827 -0.198438,0.12678 -0.35278,0.12678 -0.270092,0 -0.46302,-0.23151 -0.46302,-0.50712 0,-0.27561 0.192928,-0.50161 0.46302,-0.50161 0.126783,0 0.231511,0.0386 0.33073,0.11576 0.02755,0.0165 0.05512,0.0331 0.104732,0.0331 0.09922,0 0.17639,-0.0772 0.17639,-0.17088 0,-0.0661 -0.03305,-0.11575 -0.07166,-0.14331 -0.132291,-0.0992 -0.292142,-0.15985 -0.534678,-0.15985 -0.496093,0 -0.837845,0.37482 -0.837845,0.82682 v 0.005 c 0,0.46302 0.352777,0.82682 0.821309,0.82682 z m 0,0" | |||||
id="path23572" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 96.938572,111.61741 c 0.496094,0 0.859896,-0.37483 0.859896,-0.83234 0,-0.4575 -0.358288,-0.82682 -0.854382,-0.82682 -0.496094,0 -0.854385,0.37483 -0.854385,0.82682 v 0.005 c 0,0.45752 0.358291,0.82683 0.848871,0.82683 z m 0.0055,-0.32522 c -0.28112,0 -0.485068,-0.23151 -0.485068,-0.50712 0,-0.2756 0.198437,-0.5016 0.479554,-0.5016 0.286634,0 0.490585,0.226 0.490585,0.5016 v 0.005 c 0,0.27561 -0.198437,0.50161 -0.485071,0.50161 z m 0,0" | |||||
id="path23576" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 98.185664,111.43 c 0,0.0937 0.07717,0.17088 0.176387,0.17088 0.09371,0 0.170879,-0.0772 0.170879,-0.17088 v -0.8599 l 0.705556,0.92604 c 0.04961,0.0606 0.09922,0.10474 0.187413,0.10474 h 0.01101 c 0.09922,0 0.17639,-0.0772 0.17639,-0.17639 v -1.27882 c 0,-0.0992 -0.07717,-0.17639 -0.17639,-0.17639 -0.09371,0 -0.176387,0.0772 -0.176387,0.17639 v 0.82682 l -0.677997,-0.89297 c -0.04961,-0.0606 -0.09922,-0.10473 -0.181899,-0.10473 h -0.03859 c -0.09922,0 -0.17639,0.0772 -0.17639,0.17639 z m 0,0" | |||||
id="path23568" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path6841" | |||||
d="m 101.86468,125.50177 c 0,-0.54984 -0.45062,-0.99908 -1.00046,-0.99908 h -7.681178 c -0.551215,0 -1.000456,0.44924 -1.000456,0.99908 v 12.17359 c 0,0.54983 0.449241,0.99908 1.000456,0.99908 h 7.681178 c 0.54984,0 1.00046,-0.44925 1.00046,-0.99908 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path6843" | |||||
d="m 90.264356,125.50177 c 0,-0.54984 -0.450621,-0.99908 -1.000456,-0.99908 h -7.681186 c -0.551215,0 -1.000453,0.44924 -1.000453,0.99908 v 12.17359 c 0,0.54983 0.449238,0.99908 1.000453,0.99908 H 89.2639 c 0.549835,0 1.000456,-0.44925 1.000456,-0.99908 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path6845" | |||||
d="m 78.664032,125.50177 c 0,-0.54984 -0.449241,-0.99908 -1.000457,-0.99908 h -7.681186 c -0.549836,0 -1.000456,0.44924 -1.000456,0.99908 v 12.17359 c 0,0.54983 0.45062,0.99908 1.000456,0.99908 h 7.681186 c 0.551216,0 1.000457,-0.44925 1.000457,-0.99908 z m 0,0" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 72.330231,127.61748 c 0.259073,0 0.429948,-0.0772 0.573264,-0.20395 0.03305,-0.0275 0.06063,-0.0717 0.06063,-0.12127 0,-0.0937 -0.07717,-0.16536 -0.165365,-0.16536 -0.0441,0 -0.07717,0.0165 -0.104732,0.0386 -0.104729,0.0827 -0.198438,0.12678 -0.352778,0.12678 -0.270094,0 -0.463021,-0.23151 -0.463021,-0.50712 0,-0.27561 0.192927,-0.50161 0.463021,-0.50161 0.126781,0 0.231511,0.0386 0.330729,0.11576 0.02755,0.0165 0.05512,0.0331 0.104733,0.0331 0.09922,0 0.176389,-0.0772 0.176389,-0.17088 0,-0.0662 -0.03306,-0.11575 -0.07166,-0.14332 -0.132292,-0.0992 -0.292142,-0.15985 -0.534677,-0.15985 -0.496094,0 -0.837847,0.37483 -0.837847,0.82682 v 0.006 c 0,0.46302 0.352777,0.82682 0.821309,0.82682 z m 0,0" | |||||
id="path23528" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 73.344855,127.41353 c 0,0.0992 0.07717,0.17639 0.176389,0.17639 h 0.832337 c 0.08819,0 0.159851,-0.0717 0.159851,-0.15986 0,-0.0882 -0.07166,-0.15985 -0.159851,-0.15985 h -0.655948 v -1.12448 c 0,-0.0992 -0.07717,-0.17639 -0.176389,-0.17639 -0.09922,0 -0.176389,0.0772 -0.176389,0.17639 z m 0,0" | |||||
id="path23520" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 74.81929,127.42455 c 0,0.0992 0.07717,0.17639 0.176389,0.17639 0.09922,0 0.176389,-0.0772 0.176389,-0.17639 v -0.3197 l 0.203952,-0.18742 0.457506,0.60083 c 0.03859,0.0496 0.07717,0.0827 0.14883,0.0827 0.104729,0 0.176389,-0.0717 0.176389,-0.17088 0,-0.0496 -0.01654,-0.0882 -0.0441,-0.12126 l -0.496094,-0.61737 0.451997,-0.42443 c 0.03858,-0.0386 0.06615,-0.0772 0.06615,-0.13229 0,-0.0882 -0.06615,-0.16537 -0.165365,-0.16537 -0.06063,0 -0.104733,0.0276 -0.14883,0.0717 l -0.650434,0.64492 v -0.54019 c 0,-0.0992 -0.07717,-0.17639 -0.176389,-0.17639 -0.09922,0 -0.176389,0.0772 -0.176389,0.17639 z m 0,0" | |||||
id="path23524" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 82.596724,127.42455 c 0,0.10473 0.07717,0.16537 0.187414,0.16537 h 0.87092 c 0.08819,0 0.15434,-0.0662 0.15434,-0.14883 0,-0.0882 -0.06615,-0.15434 -0.15434,-0.15434 h -0.55673 l 0.259074,-0.20395 c 0.286631,-0.22049 0.424434,-0.35278 0.424434,-0.62288 v -0.005 c 0,-0.29766 -0.220487,-0.49058 -0.551216,-0.49058 -0.242534,0 -0.396875,0.0827 -0.523653,0.23151 -0.02755,0.0331 -0.0441,0.0717 -0.0441,0.11024 0,0.0937 0.07166,0.16536 0.159851,0.16536 0.05512,0 0.09922,-0.0276 0.121267,-0.0551 0.08819,-0.0937 0.159854,-0.1378 0.264584,-0.1378 0.121267,0 0.214975,0.0717 0.214975,0.20946 0,0.1323 -0.07717,0.22049 -0.281121,0.38585 l -0.451997,0.37483 c -0.06063,0.0441 -0.0937,0.10473 -0.0937,0.17639 z m 0,0" | |||||
id="path23516" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 83.99878,127.7663 c 0,0.0717 0.06064,0.1323 0.137805,0.1323 0.05512,0 0.0937,-0.0276 0.121268,-0.0827 l 0.892968,-1.87413 c 0.01101,-0.0165 0.01655,-0.0386 0.01655,-0.0661 0,-0.0661 -0.06063,-0.12677 -0.132292,-0.12677 -0.05512,0 -0.09922,0.0275 -0.121268,0.0772 l -0.898479,1.87413 c -0.0055,0.0165 -0.01654,0.0386 -0.01654,0.0661 z m 0,0" | |||||
id="path23508" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 86.107586,127.61748 c 0.259073,0 0.429948,-0.0772 0.573264,-0.20395 0.03306,-0.0275 0.06064,-0.0717 0.06064,-0.12127 0,-0.0937 -0.07717,-0.16536 -0.165365,-0.16536 -0.0441,0 -0.07717,0.0165 -0.104733,0.0386 -0.104729,0.0827 -0.198437,0.12678 -0.352777,0.12678 -0.270094,0 -0.463021,-0.23151 -0.463021,-0.50712 0,-0.27561 0.192927,-0.50161 0.463021,-0.50161 0.126781,0 0.23151,0.0386 0.330729,0.11576 0.02755,0.0165 0.05512,0.0331 0.104732,0.0331 0.09922,0 0.176389,-0.0772 0.176389,-0.17088 0,-0.0662 -0.03306,-0.11575 -0.07166,-0.14332 -0.132292,-0.0992 -0.292143,-0.15985 -0.534677,-0.15985 -0.496094,0 -0.837848,0.37483 -0.837848,0.82682 v 0.006 c 0,0.46302 0.352778,0.82682 0.821309,0.82682 z m 0,0" | |||||
id="path23512" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 87.122225,127.41353 c 0,0.0992 0.07717,0.17639 0.176388,0.17639 h 0.832334 c 0.08819,0 0.159854,-0.0717 0.159854,-0.15986 0,-0.0882 -0.07166,-0.15985 -0.159854,-0.15985 h -0.655945 v -1.12448 c 0,-0.0992 -0.07717,-0.17639 -0.176389,-0.17639 -0.09922,0 -0.176388,0.0772 -0.176388,0.17639 z m 0,0" | |||||
id="path23504" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 95.003968,127.61748 c 0.259069,0 0.429948,-0.0772 0.573264,-0.20395 0.03305,-0.0275 0.06063,-0.0717 0.06063,-0.12127 0,-0.0937 -0.07717,-0.16536 -0.165364,-0.16536 -0.0441,0 -0.07717,0.0165 -0.10473,0.0386 -0.104733,0.0827 -0.198438,0.12678 -0.352777,0.12678 -0.270097,0 -0.463021,-0.23151 -0.463021,-0.50712 0,-0.27561 0.192924,-0.50161 0.463021,-0.50161 0.126778,0 0.23151,0.0386 0.330729,0.11576 0.02755,0.0165 0.05512,0.0331 0.104727,0.0331 0.09922,0 0.17639,-0.0772 0.17639,-0.17088 0,-0.0662 -0.03305,-0.11575 -0.07166,-0.14332 -0.132292,-0.0992 -0.292145,-0.15985 -0.53468,-0.15985 -0.496094,0 -0.837846,0.37483 -0.837846,0.82682 v 0.006 c 0,0.46302 0.352777,0.82682 0.821312,0.82682 z m 0,0" | |||||
id="path23500" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 96.018589,127.41353 c 0,0.0992 0.07717,0.17639 0.176387,0.17639 h 0.832337 c 0.0882,0 0.159851,-0.0717 0.159851,-0.15986 0,-0.0882 -0.07165,-0.15985 -0.159851,-0.15985 h -0.655947 v -1.12448 c 0,-0.0992 -0.07717,-0.17639 -0.17639,-0.17639 -0.09922,0 -0.176387,0.0772 -0.176387,0.17639 z m 0,0" | |||||
id="path23496" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 97.341379,127.7663 c 0,0.0717 0.06063,0.1323 0.137805,0.1323 0.05512,0 0.0937,-0.0276 0.121267,-0.0827 l 0.892969,-1.87413 c 0.01101,-0.0165 0.01654,-0.0386 0.01654,-0.0661 0,-0.0661 -0.06063,-0.12677 -0.132291,-0.12677 -0.05512,0 -0.09922,0.0275 -0.121267,0.0772 l -0.89848,1.87413 c -0.0055,0.0165 -0.01654,0.0386 -0.01654,0.0661 z m 0,0" | |||||
id="path23488" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 98.657284,127.42455 c 0,0.10473 0.07717,0.16537 0.187415,0.16537 h 0.870918 c 0.0882,0 0.154342,-0.0662 0.154342,-0.14883 0,-0.0882 -0.06614,-0.15434 -0.154342,-0.15434 h -0.556725 l 0.259069,-0.20395 c 0.286634,-0.22049 0.424439,-0.35278 0.424439,-0.62288 v -0.005 c 0,-0.29766 -0.220487,-0.49058 -0.551217,-0.49058 -0.242532,0 -0.396875,0.0827 -0.523655,0.23151 -0.02755,0.0331 -0.0441,0.0717 -0.0441,0.11024 0,0.0937 0.07166,0.16536 0.159856,0.16536 0.05512,0 0.09922,-0.0276 0.121266,-0.0551 0.08819,-0.0937 0.159851,-0.1378 0.264584,-0.1378 0.121266,0 0.214971,0.0717 0.214971,0.20946 0,0.1323 -0.07717,0.22049 -0.281117,0.38585 l -0.451996,0.37483 c -0.06064,0.0441 -0.09371,0.10473 -0.09371,0.17639 z m 0,0" | |||||
id="path23492" /> | |||||
</g> | |||||
<g | |||||
inkscape:groupmode="layer" | |||||
id="layer4" | |||||
inkscape:label="widgets" | |||||
style="display:none"> | |||||
<rect | |||||
style="opacity:1;vector-effect:none;fill:#ffff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.25282064;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||||
id="rect34285" | |||||
width="33.840481" | |||||
height="28.000355" | |||||
x="3.4189141" | |||||
y="14.837338" /> | |||||
<rect | |||||
y="60.144478" | |||||
x="4.6150489" | |||||
height="8.21173" | |||||
width="8.2117281" | |||||
id="rect34830" | |||||
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.06744459;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> | |||||
<rect | |||||
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.06744459;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||||
id="rect34832" | |||||
width="8.2117281" | |||||
height="8.21173" | |||||
x="16.213999" | |||||
y="60.144478" /> | |||||
<rect | |||||
y="60.144478" | |||||
x="27.814323" | |||||
height="8.21173" | |||||
width="8.2117281" | |||||
id="rect34834" | |||||
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.06744459;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> | |||||
<rect | |||||
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.06744459;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||||
id="rect34836" | |||||
width="8.2117281" | |||||
height="8.21173" | |||||
x="4.6150489" | |||||
y="76.144875" /> | |||||
<rect | |||||
y="76.144875" | |||||
x="16.213999" | |||||
height="8.21173" | |||||
width="8.2117281" | |||||
id="rect34838" | |||||
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.06744459;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> | |||||
<rect | |||||
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.06744459;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||||
id="rect34840" | |||||
width="8.2117281" | |||||
height="8.21173" | |||||
x="27.814323" | |||||
y="76.144875" /> | |||||
<rect | |||||
y="92.143906" | |||||
x="4.6150489" | |||||
height="8.21173" | |||||
width="8.2117281" | |||||
id="rect34842" | |||||
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.06744459;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> | |||||
<rect | |||||
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.06744459;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||||
id="rect34844" | |||||
width="8.2117281" | |||||
height="8.21173" | |||||
x="16.213999" | |||||
y="92.143906" /> | |||||
<rect | |||||
y="92.143906" | |||||
x="27.814323" | |||||
height="8.21173" | |||||
width="8.2117281" | |||||
id="rect34846" | |||||
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.06744459;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> | |||||
<rect | |||||
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.06744459;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||||
id="rect34848" | |||||
width="8.2117281" | |||||
height="8.21173" | |||||
x="4.6150489" | |||||
y="108.14429" /> | |||||
<rect | |||||
y="108.14429" | |||||
x="16.213999" | |||||
height="8.21173" | |||||
width="8.2117281" | |||||
id="rect34850" | |||||
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.06744459;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" /> | |||||
<rect | |||||
style="opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.06744459;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||||
id="rect34852" | |||||
width="8.2117281" | |||||
height="8.21173" | |||||
x="27.814323" | |||||
y="108.14429" /> | |||||
</g> | |||||
</svg> |
@@ -0,0 +1,132 @@ | |||||
<?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="81.279434mm" | |||||
height="128.4993mm" | |||||
viewBox="0 0 81.279434 128.4993" | |||||
version="1.1" | |||||
id="svg30767" | |||||
inkscape:version="0.92.2 5c3e80d, 2017-08-06" | |||||
sodipodi:docname="Notes.svg"> | |||||
<defs | |||||
id="defs30761" /> | |||||
<sodipodi:namedview | |||||
id="base" | |||||
pagecolor="#ffffff" | |||||
bordercolor="#666666" | |||||
borderopacity="1.0" | |||||
inkscape:pageopacity="0.0" | |||||
inkscape:pageshadow="2" | |||||
inkscape:zoom="1.979899" | |||||
inkscape:cx="163.70046" | |||||
inkscape:cy="242.83332" | |||||
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" | |||||
inkscape:snap-bbox="true" | |||||
inkscape:bbox-nodes="true" /> | |||||
<metadata | |||||
id="metadata30764"> | |||||
<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(-30.557143,-52.92097)" | |||||
style="display:inline"> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path3835" | |||||
d="M 30.649472,53.013299 H 111.74288 V 181.32657 H 30.649472 Z m 0,0" | |||||
style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path3837" | |||||
d="M 111.83658,52.92097 H 30.557143 v 128.4993 h 81.279437 z m -0.18739,128.31189 H 30.74318 V 53.107008 h 80.90601 z m 0,0" | |||||
style="fill:#ababab;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path6935" | |||||
d="m 68.44354,177.27789 c -0.117124,0 -0.22324,-0.0661 -0.27559,-0.17088 l -1.001856,-2.00504 c -0.07715,-0.15297 -0.01516,-0.33762 0.137832,-0.41341 0.151554,-0.0772 0.337609,-0.0152 0.413385,0.1378 l 0.726229,1.45246 0.727604,-1.45246 c 0.07581,-0.15296 0.260456,-0.21497 0.413419,-0.1378 0.151588,0.0758 0.213606,0.26044 0.137795,0.41341 l -1.003194,2.00504 c -0.05239,0.10474 -0.158467,0.17088 -0.275624,0.17088" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path6937" | |||||
d="m 73.948812,177.27789 c -0.115747,0 -0.223237,-0.0661 -0.275624,-0.17088 l -1.001818,-2.00504 c -0.07578,-0.15297 -0.01516,-0.33762 0.137795,-0.41341 0.151587,-0.0772 0.337642,-0.0152 0.413419,0.1378 l 0.726228,1.45246 0.727604,-1.45246 c 0.07578,-0.15296 0.260456,-0.21497 0.41342,-0.1378 0.152966,0.0758 0.213572,0.26044 0.137795,0.41341 l -1.001818,2.00504 c -0.05239,0.10474 -0.159878,0.17088 -0.277001,0.17088" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path6939" | |||||
d="m 71.345701,177.27789 c -0.722101,0 -1.310534,-0.58842 -1.310534,-1.31189 0,-0.72209 0.588433,-1.31052 1.310534,-1.31052 0.286631,0 0.55947,0.091 0.786871,0.26183 0.136419,0.10335 0.16397,0.29628 0.06198,0.43271 -0.101952,0.13642 -0.296262,0.16398 -0.432681,0.0606 -0.119909,-0.0896 -0.264583,-0.13918 -0.416171,-0.13918 -0.381706,0 -0.693174,0.31282 -0.693174,0.69453 0,0.38309 0.311468,0.69453 0.693174,0.69453 0.151588,0 0.296262,-0.0482 0.416171,-0.13918 0.136419,-0.10198 0.330729,-0.0744 0.432681,0.062 0.101989,0.13643 0.07444,0.32935 -0.06198,0.43132 -0.227401,0.17226 -0.50024,0.26321 -0.786871,0.26321" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
id="path6941" | |||||
d="m 71.767376,175.95084 c 0,0.22186 -0.179142,0.40101 -0.401003,0.40101 -0.221861,0 -0.401002,-0.17915 -0.401002,-0.40101 0,-0.22186 0.179141,-0.40101 0.401002,-0.40101 0.221861,0 0.401003,0.17915 0.401003,0.40101" | |||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.35277775" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 63.983863,62.187839 c 0,0.176389 0.143333,0.325215 0.319723,0.325215 0.176389,0 0.319688,-0.148826 0.319688,-0.325215 v -1.5875 l 1.306406,1.714278 c 0.08819,0.110243 0.181891,0.187413 0.336233,0.187413 h 0.02188 c 0.181893,0 0.325226,-0.143316 0.325226,-0.325215 v -2.359201 c 0,-0.176389 -0.143333,-0.319705 -0.319723,-0.319705 -0.176387,0 -0.325226,0.143316 -0.325226,0.319705 v 1.526864 l -1.256769,-1.648132 c -0.08819,-0.115757 -0.181891,-0.192927 -0.336233,-0.192927 h -0.06615 c -0.18189,0 -0.325226,0.143316 -0.325226,0.325219 z m 0,0" | |||||
id="path23448" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 68.796528,62.535103 c 0.915001,0 1.576459,-0.689017 1.576459,-1.532378 v -0.0055 c 0,-0.843361 -0.655955,-1.526868 -1.570956,-1.526868 -0.915035,0 -1.576493,0.68902 -1.576493,1.532378 v 0.01101 c 0,0.843361 0.655955,1.521354 1.57099,1.521354 z m 0.0056,-0.600823 c -0.523664,0 -0.898488,-0.424437 -0.898488,-0.931555 v -0.0055 c 0,-0.507118 0.363818,-0.926042 0.892984,-0.926042 0.523629,0 0.892953,0.424434 0.892953,0.931552 v 0.01101 c 0,0.507118 -0.363786,0.920531 -0.887449,0.920531 z m 0,0" | |||||
id="path23440" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 71.518244,62.182325 c 0,0.181903 0.143298,0.330729 0.325191,0.330729 0.181928,0 0.325226,-0.148826 0.325226,-0.330729 V 60.12078 h 0.628402 c 0.165348,0 0.29764,-0.132292 0.29764,-0.297656 0,-0.165365 -0.132292,-0.303167 -0.29764,-0.303167 H 70.88984 c -0.165346,0 -0.297638,0.137802 -0.297638,0.303167 0,0.165364 0.132292,0.297656 0.297638,0.297656 h 0.628404 z m 0,0" | |||||
id="path23444" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 73.883196,62.485495 h 1.659149 c 0.165383,0 0.292171,-0.126781 0.292171,-0.286632 0,-0.159854 -0.126788,-0.292145 -0.292171,-0.292145 h -1.339427 v -0.622872 h 1.129983 c 0.159842,0 0.292134,-0.126781 0.292134,-0.286632 0,-0.165364 -0.132292,-0.292146 -0.292134,-0.292146 h -1.129983 v -0.600823 h 1.322917 c 0.159843,0 0.292134,-0.126781 0.292134,-0.292145 0,-0.159851 -0.132291,-0.292143 -0.292134,-0.292143 h -1.642639 c -0.181893,0 -0.325226,0.148827 -0.325226,0.33073 v 2.30959 c 0,0.181902 0.143333,0.325218 0.325226,0.325218 z m 0,0" | |||||
id="path23436" /> | |||||
<path | |||||
inkscape:connector-curvature="0" | |||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.35277775" | |||||
d="m 77.469993,62.529593 c 0.639411,0 1.085885,-0.33073 1.085885,-0.920532 v -0.01101 c 0,-0.512628 -0.336233,-0.727604 -0.937049,-0.887454 -0.512619,-0.132292 -0.639408,-0.192927 -0.639408,-0.385851 v -0.01101 c 0,-0.143316 0.126789,-0.259073 0.380328,-0.259073 0.203941,0 0.407919,0.07166 0.622866,0.198438 0.04964,0.03305 0.09924,0.04961 0.165381,0.04961 0.165349,0 0.303178,-0.132292 0.303178,-0.30317 0,-0.126778 -0.07168,-0.214973 -0.143333,-0.25907 -0.270086,-0.165364 -0.578768,-0.259072 -0.942588,-0.259072 -0.60632,0 -1.036283,0.352777 -1.036283,0.892968 v 0.0055 c 0,0.589799 0.385868,0.755164 0.98118,0.909504 0.496076,0.126781 0.600816,0.209462 0.600816,0.374826 v 0.01101 c 0,0.170879 -0.165348,0.275608 -0.429932,0.275608 -0.286631,0 -0.534704,-0.09922 -0.755189,-0.264583 -0.0441,-0.03306 -0.104707,-0.06063 -0.187397,-0.06063 -0.170886,0 -0.308681,0.132291 -0.308681,0.303166 0,0.09922 0.0551,0.192927 0.126788,0.242535 0.330729,0.237024 0.722066,0.358291 1.113438,0.35829 z m 0,0" | |||||
id="path23432" /> | |||||
</g> | |||||
<g | |||||
inkscape:groupmode="layer" | |||||
id="layer3" | |||||
inkscape:label="widgets" | |||||
style="display:none"> | |||||
<rect | |||||
style="opacity:1;vector-effect:none;fill:#ffff00;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:0.3213588;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" | |||||
id="rect33077" | |||||
width="74.480209" | |||||
height="102.75342" | |||||
x="3.399621" | |||||
y="14.837339" /> | |||||
</g> | |||||
</svg> |
@@ -1,6 +1,7 @@ | |||||
Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. | Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. | ||||
Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below) | Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below) | ||||
Bitstream Vera Fonts Copyright | Bitstream Vera Fonts Copyright | ||||
------------------------------ | ------------------------------ | ||||
@@ -46,7 +47,7 @@ Foundation, and Bitstream Inc., shall not be used in advertising or | |||||
otherwise to promote the sale, use or other dealings in this Font Software | otherwise to promote the sale, use or other dealings in this Font Software | ||||
without prior written authorization from the Gnome Foundation or Bitstream | without prior written authorization from the Gnome Foundation or Bitstream | ||||
Inc., respectively. For further information, contact: fonts at gnome dot | Inc., respectively. For further information, contact: fonts at gnome dot | ||||
org. | |||||
org. | |||||
Arev Fonts Copyright | Arev Fonts Copyright | ||||
------------------------------ | ------------------------------ | ||||
@@ -96,4 +97,91 @@ dealings in this Font Software without prior written authorization | |||||
from Tavmjong Bah. For further information, contact: tavmjong @ free | from Tavmjong Bah. For further information, contact: tavmjong @ free | ||||
. fr. | . fr. | ||||
$Id: LICENSE 2133 2007-11-28 02:46:28Z lechimp $ | |||||
TeX Gyre DJV Math | |||||
----------------- | |||||
Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. | |||||
Math extensions done by B. Jackowski, P. Strzelczyk and P. Pianowski | |||||
(on behalf of TeX users groups) are in public domain. | |||||
Letters imported from Euler Fraktur from AMSfonts are (c) American | |||||
Mathematical Society (see below). | |||||
Bitstream Vera Fonts Copyright | |||||
Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera | |||||
is a trademark of Bitstream, Inc. | |||||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
of the fonts accompanying this license (“Fonts”) and associated | |||||
documentation | |||||
files (the “Font Software”), to reproduce and distribute the Font Software, | |||||
including without limitation the rights to use, copy, merge, publish, | |||||
distribute, | |||||
and/or sell copies of the Font Software, and to permit persons to whom | |||||
the Font Software is furnished to do so, subject to the following | |||||
conditions: | |||||
The above copyright and trademark notices and this permission notice | |||||
shall be | |||||
included in all copies of one or more of the Font Software typefaces. | |||||
The Font Software may be modified, altered, or added to, and in particular | |||||
the designs of glyphs or characters in the Fonts may be modified and | |||||
additional | |||||
glyphs or characters may be added to the Fonts, only if the fonts are | |||||
renamed | |||||
to names not containing either the words “Bitstream” or the word “Vera”. | |||||
This License becomes null and void to the extent applicable to Fonts or | |||||
Font Software | |||||
that has been modified and is distributed under the “Bitstream Vera” | |||||
names. | |||||
The Font Software may be sold as part of a larger software package but | |||||
no copy | |||||
of one or more of the Font Software typefaces may be sold by itself. | |||||
THE FONT SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS | |||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, | |||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, | |||||
TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME | |||||
FOUNDATION | |||||
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, | |||||
SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN | |||||
ACTION | |||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR | |||||
INABILITY TO USE | |||||
THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. | |||||
Except as contained in this notice, the names of GNOME, the GNOME | |||||
Foundation, | |||||
and Bitstream Inc., shall not be used in advertising or otherwise to promote | |||||
the sale, use or other dealings in this Font Software without prior written | |||||
authorization from the GNOME Foundation or Bitstream Inc., respectively. | |||||
For further information, contact: fonts at gnome dot org. | |||||
AMSFonts (v. 2.2) copyright | |||||
The PostScript Type 1 implementation of the AMSFonts produced by and | |||||
previously distributed by Blue Sky Research and Y&Y, Inc. are now freely | |||||
available for general use. This has been accomplished through the | |||||
cooperation | |||||
of a consortium of scientific publishers with Blue Sky Research and Y&Y. | |||||
Members of this consortium include: | |||||
Elsevier Science IBM Corporation Society for Industrial and Applied | |||||
Mathematics (SIAM) Springer-Verlag American Mathematical Society (AMS) | |||||
In order to assure the authenticity of these fonts, copyright will be | |||||
held by | |||||
the American Mathematical Society. This is not meant to restrict in any way | |||||
the legitimate use of the fonts, such as (but not limited to) electronic | |||||
distribution of documents containing these fonts, inclusion of these fonts | |||||
into other public domain or commercial font collections or computer | |||||
applications, use of the outline data to create derivative fonts and/or | |||||
faces, etc. However, the AMS does require that the AMS copyright notice be | |||||
removed from any derivative versions of the fonts which have been altered in | |||||
any way. In addition, to ensure the fidelity of TeX documents using Computer | |||||
Modern fonts, Professor Donald Knuth, creator of the Computer Modern faces, | |||||
has requested that any alterations which yield different font metrics be | |||||
given a different name. | |||||
$Id$ |
@@ -0,0 +1,93 @@ | |||||
Copyright (c) 2012, Carrois Type Design, Ralph du Carrois (post@carrois.com www.carrois.com), with Reserved Font Name 'Share' | |||||
This Font Software is licensed under the SIL Open Font License, Version 1.1. | |||||
This license is copied below, and is also available with a FAQ at: | |||||
http://scripts.sil.org/OFL | |||||
----------------------------------------------------------- | |||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 | |||||
----------------------------------------------------------- | |||||
PREAMBLE | |||||
The goals of the Open Font License (OFL) are to stimulate worldwide | |||||
development of collaborative font projects, to support the font creation | |||||
efforts of academic and linguistic communities, and to provide a free and | |||||
open framework in which fonts may be shared and improved in partnership | |||||
with others. | |||||
The OFL allows the licensed fonts to be used, studied, modified and | |||||
redistributed freely as long as they are not sold by themselves. The | |||||
fonts, including any derivative works, can be bundled, embedded, | |||||
redistributed and/or sold with any software provided that any reserved | |||||
names are not used by derivative works. The fonts and derivatives, | |||||
however, cannot be released under any other type of license. The | |||||
requirement for fonts to remain under this license does not apply | |||||
to any document created using the fonts or their derivatives. | |||||
DEFINITIONS | |||||
"Font Software" refers to the set of files released by the Copyright | |||||
Holder(s) under this license and clearly marked as such. This may | |||||
include source files, build scripts and documentation. | |||||
"Reserved Font Name" refers to any names specified as such after the | |||||
copyright statement(s). | |||||
"Original Version" refers to the collection of Font Software components as | |||||
distributed by the Copyright Holder(s). | |||||
"Modified Version" refers to any derivative made by adding to, deleting, | |||||
or substituting -- in part or in whole -- any of the components of the | |||||
Original Version, by changing formats or by porting the Font Software to a | |||||
new environment. | |||||
"Author" refers to any designer, engineer, programmer, technical | |||||
writer or other person who contributed to the Font Software. | |||||
PERMISSION & CONDITIONS | |||||
Permission is hereby granted, free of charge, to any person obtaining | |||||
a copy of the Font Software, to use, study, copy, merge, embed, modify, | |||||
redistribute, and sell modified and unmodified copies of the Font | |||||
Software, subject to the following conditions: | |||||
1) Neither the Font Software nor any of its individual components, | |||||
in Original or Modified Versions, may be sold by itself. | |||||
2) Original or Modified Versions of the Font Software may be bundled, | |||||
redistributed and/or sold with any software, provided that each copy | |||||
contains the above copyright notice and this license. These can be | |||||
included either as stand-alone text files, human-readable headers or | |||||
in the appropriate machine-readable metadata fields within text or | |||||
binary files as long as those fields can be easily viewed by the user. | |||||
3) No Modified Version of the Font Software may use the Reserved Font | |||||
Name(s) unless explicit written permission is granted by the corresponding | |||||
Copyright Holder. This restriction only applies to the primary font name as | |||||
presented to the users. | |||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font | |||||
Software shall not be used to promote, endorse or advertise any | |||||
Modified Version, except to acknowledge the contribution(s) of the | |||||
Copyright Holder(s) and the Author(s) or with their explicit written | |||||
permission. | |||||
5) The Font Software, modified or unmodified, in part or in whole, | |||||
must be distributed entirely under this license, and must not be | |||||
distributed under any other license. The requirement for fonts to | |||||
remain under this license does not apply to any document created | |||||
using the Font Software. | |||||
TERMINATION | |||||
This license becomes null and void if any of the above conditions are | |||||
not met. | |||||
DISCLAIMER | |||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF | |||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT | |||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE | |||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL | |||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | |||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM | |||||
OTHER DEALINGS IN THE FONT SOFTWARE. |
@@ -55,7 +55,7 @@ struct MetadataMenu : ListMenu { | |||||
// Tag list | // Tag list | ||||
if (!model->tags.empty()) { | if (!model->tags.empty()) { | ||||
for (ModelTag tag : model->tags) { | for (ModelTag tag : model->tags) { | ||||
addChild(construct<MenuLabel>(&MenuEntry::text, gTagNames[tag])); | |||||
addChild(construct<MenuLabel>(&MenuLabel::text, gTagNames[tag])); | |||||
} | } | ||||
addChild(construct<MenuEntry>()); | addChild(construct<MenuEntry>()); | ||||
} | } | ||||
@@ -66,17 +66,17 @@ struct MetadataMenu : ListMenu { | |||||
pluginName += " v"; | pluginName += " v"; | ||||
pluginName += model->plugin->version; | pluginName += model->plugin->version; | ||||
} | } | ||||
addChild(construct<MenuLabel>(&MenuEntry::text, pluginName)); | |||||
addChild(construct<MenuLabel>(&MenuLabel::text, pluginName)); | |||||
// Plugin metadata | // Plugin metadata | ||||
if (!model->plugin->website.empty()) { | if (!model->plugin->website.empty()) { | ||||
addChild(construct<UrlItem>(&MenuEntry::text, "Website", &UrlItem::url, model->plugin->website)); | |||||
addChild(construct<UrlItem>(&MenuItem::text, "Website", &UrlItem::url, model->plugin->website)); | |||||
} | } | ||||
if (!model->plugin->manual.empty()) { | if (!model->plugin->manual.empty()) { | ||||
addChild(construct<UrlItem>(&MenuEntry::text, "Manual", &UrlItem::url, model->plugin->manual)); | |||||
addChild(construct<UrlItem>(&MenuItem::text, "Manual", &UrlItem::url, model->plugin->manual)); | |||||
} | } | ||||
if (!model->plugin->path.empty()) { | if (!model->plugin->path.empty()) { | ||||
addChild(construct<UrlItem>(&MenuEntry::text, "Browse directory", &UrlItem::url, model->plugin->path)); | |||||
addChild(construct<UrlItem>(&MenuItem::text, "Browse directory", &UrlItem::url, model->plugin->path)); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -137,7 +137,7 @@ struct ModelMenu : ListMenu { | |||||
for (Plugin *plugin : gPlugins) { | for (Plugin *plugin : gPlugins) { | ||||
for (Model *model : plugin->models) { | for (Model *model : plugin->models) { | ||||
if (model->manufacturer == manufacturer) { | if (model->manufacturer == manufacturer) { | ||||
addChild(construct<ModelItem>(&MenuEntry::text, model->name, &ModelItem::model, model)); | |||||
addChild(construct<ModelItem>(&MenuItem::text, model->name, &ModelItem::model, model)); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -190,7 +190,7 @@ struct ManufacturerMenu : ListMenu { | |||||
} | } | ||||
// Add menu item for each manufacturer name | // Add menu item for each manufacturer name | ||||
for (std::string manufacturer : manufacturers) { | for (std::string manufacturer : manufacturers) { | ||||
addChild(construct<ManufacturerItem>(&MenuEntry::text, manufacturer)); | |||||
addChild(construct<ManufacturerItem>(&MenuItem::text, manufacturer)); | |||||
} | } | ||||
} | } | ||||
@@ -13,6 +13,25 @@ struct AudioDriverItem : MenuItem { | |||||
} | } | ||||
}; | }; | ||||
struct AudioDriverChoice : LedDisplayChoice { | |||||
AudioWidget *audioWidget; | |||||
void onAction(EventAction &e) override { | |||||
Menu *menu = gScene->createMenu(); | |||||
menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Audio driver")); | |||||
for (int driver : audioWidget->audioIO->listDrivers()) { | |||||
AudioDriverItem *item = new AudioDriverItem(); | |||||
item->audioIO = audioWidget->audioIO; | |||||
item->driver = driver; | |||||
item->text = audioWidget->audioIO->getDriverName(driver); | |||||
item->rightText = CHECKMARK(item->driver == audioWidget->audioIO->driver); | |||||
menu->addChild(item); | |||||
} | |||||
} | |||||
void step() override { | |||||
text = audioWidget->audioIO->getDriverName(audioWidget->audioIO->driver); | |||||
} | |||||
}; | |||||
struct AudioDeviceItem : MenuItem { | struct AudioDeviceItem : MenuItem { | ||||
AudioIO *audioIO; | AudioIO *audioIO; | ||||
@@ -23,6 +42,42 @@ struct AudioDeviceItem : MenuItem { | |||||
} | } | ||||
}; | }; | ||||
struct AudioDeviceChoice : LedDisplayChoice { | |||||
AudioWidget *audioWidget; | |||||
void onAction(EventAction &e) override { | |||||
Menu *menu = gScene->createMenu(); | |||||
menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Audio device")); | |||||
int deviceCount = audioWidget->audioIO->getDeviceCount(); | |||||
{ | |||||
AudioDeviceItem *item = new AudioDeviceItem(); | |||||
item->audioIO = audioWidget->audioIO; | |||||
item->device = -1; | |||||
item->text = "(No device)"; | |||||
item->rightText = CHECKMARK(item->device == audioWidget->audioIO->device); | |||||
menu->addChild(item); | |||||
} | |||||
for (int device = 0; device < deviceCount; device++) { | |||||
AudioDeviceItem *item = new AudioDeviceItem(); | |||||
item->audioIO = audioWidget->audioIO; | |||||
item->device = device; | |||||
item->text = audioWidget->audioIO->getDeviceDetail(device); | |||||
item->rightText = CHECKMARK(item->device == audioWidget->audioIO->device); | |||||
menu->addChild(item); | |||||
} | |||||
} | |||||
void step() override { | |||||
text = audioWidget->audioIO->getDeviceDetail(audioWidget->audioIO->device); | |||||
if (text.empty()) { | |||||
text = "(No device)"; | |||||
color.a = 0.5f; | |||||
} | |||||
else { | |||||
color.a = 1.f; | |||||
} | |||||
text = ellipsize(text, 18); | |||||
} | |||||
}; | |||||
struct AudioSampleRateItem : MenuItem { | struct AudioSampleRateItem : MenuItem { | ||||
AudioIO *audioIO; | AudioIO *audioIO; | ||||
@@ -33,6 +88,25 @@ struct AudioSampleRateItem : MenuItem { | |||||
} | } | ||||
}; | }; | ||||
struct AudioSampleRateChoice : LedDisplayChoice { | |||||
AudioWidget *audioWidget; | |||||
void onAction(EventAction &e) override { | |||||
Menu *menu = gScene->createMenu(); | |||||
menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Sample rate")); | |||||
for (int sampleRate : audioWidget->audioIO->listSampleRates()) { | |||||
AudioSampleRateItem *item = new AudioSampleRateItem(); | |||||
item->audioIO = audioWidget->audioIO; | |||||
item->sampleRate = sampleRate; | |||||
item->text = stringf("%d Hz", sampleRate); | |||||
item->rightText = CHECKMARK(item->sampleRate == audioWidget->audioIO->sampleRate); | |||||
menu->addChild(item); | |||||
} | |||||
} | |||||
void step() override { | |||||
text = stringf("%g kHz", audioWidget->audioIO->sampleRate / 1000.f); | |||||
} | |||||
}; | |||||
struct AudioBlockSizeItem : MenuItem { | struct AudioBlockSizeItem : MenuItem { | ||||
AudioIO *audioIO; | AudioIO *audioIO; | ||||
@@ -43,72 +117,91 @@ struct AudioBlockSizeItem : MenuItem { | |||||
} | } | ||||
}; | }; | ||||
struct AudioBlockSizeChoice : LedDisplayChoice { | |||||
AudioWidget *audioWidget; | |||||
void onAction(EventAction &e) override { | |||||
Menu *menu = gScene->createMenu(); | |||||
menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Block size")); | |||||
std::vector<int> blockSizes = {64, 128, 256, 512, 1024, 2048, 4096}; | |||||
for (int blockSize : blockSizes) { | |||||
AudioBlockSizeItem *item = new AudioBlockSizeItem(); | |||||
item->audioIO = audioWidget->audioIO; | |||||
item->blockSize = blockSize; | |||||
float latency = (float) blockSize / audioWidget->audioIO->sampleRate * 1000.0; | |||||
item->text = stringf("%d (%.1f ms)", blockSize, latency); | |||||
item->rightText = CHECKMARK(item->blockSize == audioWidget->audioIO->blockSize); | |||||
menu->addChild(item); | |||||
} | |||||
} | |||||
void step() override { | |||||
text = stringf("%d", audioWidget->audioIO->blockSize); | |||||
} | |||||
}; | |||||
void AudioWidget::onMouseDown(EventMouseDown &e) { | |||||
OpaqueWidget::onMouseDown(e); | |||||
struct AudioWidget::Internal { | |||||
LedDisplayChoice *driverChoice; | |||||
LedDisplaySeparator *driverSeparator; | |||||
LedDisplayChoice *deviceChoice; | |||||
LedDisplaySeparator *deviceSeparator; | |||||
LedDisplayChoice *sampleRateChoice; | |||||
LedDisplaySeparator *sampleRateSeparator; | |||||
LedDisplayChoice *bufferSizeChoice; | |||||
}; | |||||
if (!audioIO) | |||||
return; | |||||
AudioWidget::AudioWidget() { | |||||
internal = new Internal(); | |||||
box.size = mm2px(Vec(44, 28)); | |||||
Menu *menu = gScene->createMenu(); | |||||
Vec pos = Vec(); | |||||
// Audio driver | |||||
menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Audio driver")); | |||||
for (int driver : audioIO->listDrivers()) { | |||||
AudioDriverItem *item = new AudioDriverItem(); | |||||
item->audioIO = audioIO; | |||||
item->driver = driver; | |||||
item->text = audioIO->getDriverName(driver); | |||||
item->rightText = CHECKMARK(item->driver == audioIO->driver); | |||||
menu->addChild(item); | |||||
} | |||||
menu->addChild(construct<MenuEntry>()); | |||||
// Audio device | |||||
menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Audio device")); | |||||
int deviceCount = audioIO->getDeviceCount(); | |||||
{ | |||||
AudioDeviceItem *item = new AudioDeviceItem(); | |||||
item->audioIO = audioIO; | |||||
item->device = -1; | |||||
item->text = "No device"; | |||||
item->rightText = CHECKMARK(item->device == audioIO->device); | |||||
menu->addChild(item); | |||||
} | |||||
for (int device = 0; device < deviceCount; device++) { | |||||
AudioDeviceItem *item = new AudioDeviceItem(); | |||||
item->audioIO = audioIO; | |||||
item->device = device; | |||||
item->text = audioIO->getDeviceDetail(device); | |||||
item->rightText = CHECKMARK(item->device == audioIO->device); | |||||
menu->addChild(item); | |||||
} | |||||
menu->addChild(construct<MenuEntry>()); | |||||
// Sample rate | |||||
menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Sample rate")); | |||||
for (int sampleRate : audioIO->listSampleRates()) { | |||||
AudioSampleRateItem *item = new AudioSampleRateItem(); | |||||
item->audioIO = audioIO; | |||||
item->sampleRate = sampleRate; | |||||
item->text = stringf("%d Hz", sampleRate); | |||||
item->rightText = CHECKMARK(item->sampleRate == audioIO->sampleRate); | |||||
menu->addChild(item); | |||||
} | |||||
menu->addChild(construct<MenuEntry>()); | |||||
// Block size | |||||
menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Block size")); | |||||
std::vector<int> blockSizes = {64, 128, 256, 512, 1024, 2048, 4096}; | |||||
for (int blockSize : blockSizes) { | |||||
AudioBlockSizeItem *item = new AudioBlockSizeItem(); | |||||
item->audioIO = audioIO; | |||||
item->blockSize = blockSize; | |||||
float latency = (float) blockSize / audioIO->sampleRate * 1000.0; | |||||
item->text = stringf("%d (%.1f ms)", blockSize, latency); | |||||
item->rightText = CHECKMARK(item->blockSize == audioIO->blockSize); | |||||
menu->addChild(item); | |||||
} | |||||
AudioDriverChoice *driverChoice = Widget::create<AudioDriverChoice>(pos); | |||||
driverChoice->audioWidget = this; | |||||
addChild(driverChoice); | |||||
pos = driverChoice->box.getBottomLeft(); | |||||
internal->driverChoice = driverChoice; | |||||
internal->driverSeparator = Widget::create<LedDisplaySeparator>(pos); | |||||
addChild(internal->driverSeparator); | |||||
AudioDeviceChoice *deviceChoice = Widget::create<AudioDeviceChoice>(pos); | |||||
deviceChoice->audioWidget = this; | |||||
addChild(deviceChoice); | |||||
pos = deviceChoice->box.getBottomLeft(); | |||||
internal->deviceChoice = deviceChoice; | |||||
internal->deviceSeparator = Widget::create<LedDisplaySeparator>(pos); | |||||
addChild(internal->deviceSeparator); | |||||
AudioSampleRateChoice *sampleRateChoice = Widget::create<AudioSampleRateChoice>(pos); | |||||
sampleRateChoice->audioWidget = this; | |||||
addChild(sampleRateChoice); | |||||
internal->sampleRateChoice = sampleRateChoice; | |||||
internal->sampleRateSeparator = Widget::create<LedDisplaySeparator>(pos); | |||||
internal->sampleRateSeparator->box.size.y = internal->sampleRateChoice->box.size.y; | |||||
addChild(internal->sampleRateSeparator); | |||||
AudioBlockSizeChoice *bufferSizeChoice = Widget::create<AudioBlockSizeChoice>(pos); | |||||
bufferSizeChoice->audioWidget = this; | |||||
addChild(bufferSizeChoice); | |||||
internal->bufferSizeChoice = bufferSizeChoice; | |||||
} | |||||
AudioWidget::~AudioWidget() { | |||||
delete internal; | |||||
} | |||||
void AudioWidget::step() { | |||||
internal->driverChoice->box.size.x = box.size.x; | |||||
internal->driverSeparator->box.size.x = box.size.x; | |||||
internal->deviceChoice->box.size.x = box.size.x; | |||||
internal->deviceSeparator->box.size.x = box.size.x; | |||||
internal->sampleRateChoice->box.size.x = box.size.x / 2; | |||||
internal->sampleRateSeparator->box.pos.x = box.size.x / 2; | |||||
internal->bufferSizeChoice->box.pos.x = box.size.x / 2; | |||||
internal->bufferSizeChoice->box.size.x = box.size.x / 2; | |||||
LedDisplay::step(); | |||||
} | } | ||||
@@ -0,0 +1,102 @@ | |||||
#include "app.hpp" | |||||
#include "asset.hpp" | |||||
#include "window.hpp" | |||||
namespace rack { | |||||
void LedDisplay::draw(NVGcontext *vg) { | |||||
nvgBeginPath(vg); | |||||
nvgRoundedRect(vg, 0, 0, box.size.x, box.size.y, 5.0); | |||||
nvgFillColor(vg, nvgRGB(0x00, 0x00, 0x00)); | |||||
nvgFill(vg); | |||||
Widget::draw(vg); | |||||
} | |||||
LedDisplaySeparator::LedDisplaySeparator() { | |||||
box.size = Vec(); | |||||
} | |||||
void LedDisplaySeparator::draw(NVGcontext *vg) { | |||||
nvgBeginPath(vg); | |||||
nvgMoveTo(vg, 0, 0); | |||||
nvgLineTo(vg, box.size.x, box.size.y); | |||||
nvgStrokeWidth(vg, 1.0); | |||||
nvgStrokeColor(vg, nvgRGB(0x33, 0x33, 0x33)); | |||||
nvgStroke(vg); | |||||
} | |||||
LedDisplayChoice::LedDisplayChoice() { | |||||
box.size = mm2px(Vec(0, 28.0 / 3)); | |||||
font = Font::load(assetGlobal("res/fonts/ShareTechMono-Regular.ttf")); | |||||
color = nvgRGB(0xff, 0xd7, 0x14); | |||||
} | |||||
void LedDisplayChoice::draw(NVGcontext *vg) { | |||||
if (font->handle < 0) | |||||
return; | |||||
nvgFillColor(vg, color); | |||||
nvgFontFaceId(vg, font->handle); | |||||
nvgTextLetterSpacing(vg, 0.0); | |||||
Vec textPos = Vec(10, 18); | |||||
nvgFontSize(vg, 12); | |||||
nvgText(vg, textPos.x, textPos.y, text.c_str(), NULL); | |||||
} | |||||
void LedDisplayChoice::onMouseDown(EventMouseDown &e) { | |||||
if (e.button == 1) { | |||||
EventAction eAction; | |||||
onAction(eAction); | |||||
e.consumed = true; | |||||
e.target = this; | |||||
} | |||||
} | |||||
LedDisplayTextField::LedDisplayTextField() { | |||||
font = Font::load(assetGlobal("res/fonts/ShareTechMono-Regular.ttf")); | |||||
color = nvgRGB(0xff, 0xd7, 0x14); | |||||
} | |||||
static const Vec textFieldPos = Vec(5, 5); | |||||
void LedDisplayTextField::draw(NVGcontext *vg) { | |||||
// Background | |||||
nvgBeginPath(vg); | |||||
nvgRoundedRect(vg, 0, 0, box.size.x, box.size.y, 5.0); | |||||
nvgFillColor(vg, nvgRGB(0x00, 0x00, 0x00)); | |||||
nvgFill(vg); | |||||
// Text | |||||
if (font->handle < 0) | |||||
return; | |||||
bndSetFont(font->handle); | |||||
NVGcolor highlightColor = color; | |||||
highlightColor.a = 0.5; | |||||
int cend = (this == gFocusedWidget) ? end : -1; | |||||
bndIconLabelCaret(vg, textFieldPos.x, textFieldPos.y, | |||||
box.size.x - 2*textFieldPos.x, box.size.y - 2*textFieldPos.y, | |||||
-1, color, 12, text.c_str(), highlightColor, begin, cend); | |||||
bndSetFont(gGuiFont->handle); | |||||
} | |||||
int LedDisplayTextField::getTextPosition(Vec mousePos) { | |||||
bndSetFont(font->handle); | |||||
int textPos = bndIconLabelTextPosition(gVg, textFieldPos.x, textFieldPos.y, | |||||
box.size.x - 2*textFieldPos.x, box.size.y - 2*textFieldPos.y, | |||||
-1, 12, text.c_str(), mousePos.x, mousePos.y); | |||||
bndSetFont(gGuiFont->handle); | |||||
return textPos; | |||||
} | |||||
} // namespace rack |
@@ -5,27 +5,141 @@ | |||||
namespace rack { | namespace rack { | ||||
struct MidiDriverItem : MenuItem { | |||||
MidiIO *midiIO; | |||||
int driver; | |||||
void onAction(EventAction &e) override { | |||||
// midiIO->openDriver(device); | |||||
} | |||||
}; | |||||
struct MidiDriverChoice : LedDisplayChoice { | |||||
MidiWidget *midiWidget; | |||||
void onAction(EventAction &e) override { | |||||
// Menu *menu = gScene->createMenu(); | |||||
// menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Audio driver")); | |||||
// for (int driver : audioWidget->audioIO->listDrivers()) { | |||||
// AudioDriverItem *item = new AudioDriverItem(); | |||||
// item->audioIO = audioWidget->audioIO; | |||||
// item->driver = driver; | |||||
// item->text = audioWidget->audioIO->getDriverName(driver); | |||||
// item->rightText = CHECKMARK(item->driver == audioWidget->audioIO->driver); | |||||
// menu->addChild(item); | |||||
// } | |||||
} | |||||
void step() override { | |||||
// text = audioWidget->audioIO->getDriverName(audioWidget->audioIO->driver); | |||||
} | |||||
}; | |||||
struct MidiDeviceItem : MenuItem { | struct MidiDeviceItem : MenuItem { | ||||
MidiIO *midiIO; | MidiIO *midiIO; | ||||
int device; | int device; | ||||
void onAction(EventAction &e) override { | void onAction(EventAction &e) override { | ||||
midiIO->openDevice(device); | |||||
// midiIO->openDevice(device); | |||||
} | } | ||||
}; | }; | ||||
struct MidiDeviceChoice : LedDisplayChoice { | |||||
MidiWidget *midiWidget; | |||||
void onAction(EventAction &e) override { | |||||
// Menu *menu = gScene->createMenu(); | |||||
// menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Audio driver")); | |||||
// for (int driver : audioWidget->audioIO->listDrivers()) { | |||||
// AudioDriverItem *item = new AudioDriverItem(); | |||||
// item->audioIO = audioWidget->audioIO; | |||||
// item->driver = driver; | |||||
// item->text = audioWidget->audioIO->getDriverName(driver); | |||||
// item->rightText = CHECKMARK(item->driver == audioWidget->audioIO->driver); | |||||
// menu->addChild(item); | |||||
// } | |||||
} | |||||
void step() override { | |||||
// text = audioWidget->audioIO->getDriverName(audioWidget->audioIO->driver); | |||||
} | |||||
}; | |||||
struct MidiChannelItem : MenuItem { | struct MidiChannelItem : MenuItem { | ||||
MidiIO *midiIO; | MidiIO *midiIO; | ||||
int channel; | int channel; | ||||
void onAction(EventAction &e) override { | void onAction(EventAction &e) override { | ||||
midiIO->channel = channel; | |||||
// midiIO->channel = channel; | |||||
} | |||||
}; | |||||
struct MidiChannelChoice : LedDisplayChoice { | |||||
MidiWidget *midiWidget; | |||||
void onAction(EventAction &e) override { | |||||
// Menu *menu = gScene->createMenu(); | |||||
// menu->addChild(construct<MenuLabel>(&MenuLabel::text, "Audio driver")); | |||||
// for (int driver : audioWidget->audioIO->listDrivers()) { | |||||
// AudioDriverItem *item = new AudioDriverItem(); | |||||
// item->audioIO = audioWidget->audioIO; | |||||
// item->driver = driver; | |||||
// item->text = audioWidget->audioIO->getDriverName(driver); | |||||
// item->rightText = CHECKMARK(item->driver == audioWidget->audioIO->driver); | |||||
// menu->addChild(item); | |||||
// } | |||||
} | } | ||||
void step() override { | |||||
// text = audioWidget->audioIO->getDriverName(audioWidget->audioIO->driver); | |||||
} | |||||
}; | |||||
struct MidiWidget::Internal { | |||||
LedDisplayChoice *driverChoice; | |||||
LedDisplaySeparator *driverSeparator; | |||||
LedDisplayChoice *deviceChoice; | |||||
LedDisplaySeparator *deviceSeparator; | |||||
LedDisplayChoice *channelChoice; | |||||
}; | }; | ||||
MidiWidget::MidiWidget() { | |||||
internal = new Internal(); | |||||
box.size = mm2px(Vec(44, 28)); | |||||
Vec pos = Vec(); | |||||
MidiDriverChoice *driverChoice = Widget::create<MidiDriverChoice>(pos); | |||||
driverChoice->midiWidget = this; | |||||
addChild(driverChoice); | |||||
pos = driverChoice->box.getBottomLeft(); | |||||
internal->driverChoice = driverChoice; | |||||
void MidiWidget::onMouseDown(EventMouseDown &e) { | |||||
OpaqueWidget::onMouseDown(e); | |||||
internal->driverSeparator = Widget::create<LedDisplaySeparator>(pos); | |||||
addChild(internal->driverSeparator); | |||||
MidiDeviceChoice *deviceChoice = Widget::create<MidiDeviceChoice>(pos); | |||||
deviceChoice->midiWidget = this; | |||||
addChild(deviceChoice); | |||||
pos = deviceChoice->box.getBottomLeft(); | |||||
internal->deviceChoice = deviceChoice; | |||||
internal->deviceSeparator = Widget::create<LedDisplaySeparator>(pos); | |||||
addChild(internal->deviceSeparator); | |||||
MidiChannelChoice *channelChoice = Widget::create<MidiChannelChoice>(pos); | |||||
channelChoice->midiWidget = this; | |||||
addChild(channelChoice); | |||||
internal->channelChoice = channelChoice; | |||||
} | |||||
MidiWidget::~MidiWidget() { | |||||
delete internal; | |||||
} | |||||
void MidiWidget::step() { | |||||
internal->driverChoice->box.size.x = box.size.x; | |||||
internal->driverSeparator->box.size.x = box.size.x; | |||||
internal->deviceChoice->box.size.x = box.size.x; | |||||
internal->deviceSeparator->box.size.x = box.size.x; | |||||
internal->channelChoice->box.size.x = box.size.x; | |||||
LedDisplay::step(); | |||||
} | |||||
/* | |||||
void MidiWidget::onAction(EventAction &e) { | |||||
if (!midiIO) | if (!midiIO) | ||||
return; | return; | ||||
@@ -69,6 +183,7 @@ void MidiWidget::onMouseDown(EventMouseDown &e) { | |||||
menu->addChild(item); | menu->addChild(item); | ||||
} | } | ||||
} | } | ||||
*/ | |||||
} // namespace rack | } // namespace rack |
@@ -346,6 +346,8 @@ Menu *ModuleWidget::createContextMenu() { | |||||
deleteItem->moduleWidget = this; | deleteItem->moduleWidget = this; | ||||
menu->addChild(deleteItem); | menu->addChild(deleteItem); | ||||
appendContextMenu(menu); | |||||
return menu; | return menu; | ||||
} | } | ||||
@@ -2,7 +2,8 @@ | |||||
#include "audio.hpp" | #include "audio.hpp" | ||||
#define DRIVER_BRIDGE -1 | |||||
#define BRIDGE_DRIVER -1 | |||||
#define BRIDGE_CHANNELS 16 | |||||
namespace rack { | namespace rack { | ||||
@@ -23,7 +24,7 @@ std::vector<int> AudioIO::listDrivers() { | |||||
for (RtAudio::Api api : apis) | for (RtAudio::Api api : apis) | ||||
drivers.push_back((int) api); | drivers.push_back((int) api); | ||||
// Add Bridge fake driver | // Add Bridge fake driver | ||||
// drivers.push_back(DRIVER_BRIDGE); | |||||
drivers.push_back(BRIDGE_DRIVER); | |||||
return drivers; | return drivers; | ||||
} | } | ||||
@@ -39,7 +40,7 @@ std::string AudioIO::getDriverName(int driver) { | |||||
case RtAudio::WINDOWS_ASIO: return "ASIO"; | case RtAudio::WINDOWS_ASIO: return "ASIO"; | ||||
case RtAudio::WINDOWS_DS: return "DirectSound"; | case RtAudio::WINDOWS_DS: return "DirectSound"; | ||||
case RtAudio::RTAUDIO_DUMMY: return "Dummy"; | case RtAudio::RTAUDIO_DUMMY: return "Dummy"; | ||||
case DRIVER_BRIDGE: return "VCV Bridge"; | |||||
case BRIDGE_DRIVER: return "Bridge"; | |||||
default: return "Unknown"; | default: return "Unknown"; | ||||
} | } | ||||
} | } | ||||
@@ -58,9 +59,9 @@ void AudioIO::setDriver(int driver) { | |||||
rtAudio = new RtAudio((RtAudio::Api) driver); | rtAudio = new RtAudio((RtAudio::Api) driver); | ||||
this->driver = (int) rtAudio->getCurrentApi(); | this->driver = (int) rtAudio->getCurrentApi(); | ||||
} | } | ||||
else if (driver == DRIVER_BRIDGE) { | |||||
else if (driver == BRIDGE_DRIVER) { | |||||
// TODO Connect to Bridge | // TODO Connect to Bridge | ||||
this->driver = DRIVER_BRIDGE; | |||||
this->driver = BRIDGE_DRIVER; | |||||
} | } | ||||
} | } | ||||
@@ -68,40 +69,56 @@ int AudioIO::getDeviceCount() { | |||||
if (rtAudio) { | if (rtAudio) { | ||||
return rtAudio->getDeviceCount(); | return rtAudio->getDeviceCount(); | ||||
} | } | ||||
if (driver == DRIVER_BRIDGE) { | |||||
return 16; | |||||
if (driver == BRIDGE_DRIVER) { | |||||
return BRIDGE_CHANNELS; | |||||
} | } | ||||
return 0; | return 0; | ||||
} | } | ||||
std::string AudioIO::getDeviceName(int device) { | std::string AudioIO::getDeviceName(int device) { | ||||
if (device < 0) | |||||
return ""; | |||||
if (rtAudio) { | if (rtAudio) { | ||||
try { | try { | ||||
RtAudio::DeviceInfo deviceInfo = rtAudio->getDeviceInfo(device); | |||||
RtAudio::DeviceInfo deviceInfo; | |||||
if (device == this->device) | |||||
deviceInfo = this->deviceInfo; | |||||
else | |||||
deviceInfo = rtAudio->getDeviceInfo(device); | |||||
return deviceInfo.name; | return deviceInfo.name; | ||||
} | } | ||||
catch (RtAudioError &e) { | catch (RtAudioError &e) { | ||||
warn("Failed to query RtAudio device: %s", e.what()); | warn("Failed to query RtAudio device: %s", e.what()); | ||||
} | } | ||||
} | } | ||||
if (driver == DRIVER_BRIDGE) { | |||||
return stringf("%d", device + 1); | |||||
if (driver == BRIDGE_DRIVER) { | |||||
if (device >= 0) | |||||
return stringf("%d", device + 1); | |||||
} | } | ||||
return ""; | return ""; | ||||
} | } | ||||
std::string AudioIO::getDeviceDetail(int device) { | std::string AudioIO::getDeviceDetail(int device) { | ||||
if (device < 0) | |||||
return ""; | |||||
if (rtAudio) { | if (rtAudio) { | ||||
try { | try { | ||||
RtAudio::DeviceInfo deviceInfo = rtAudio->getDeviceInfo(device); | |||||
RtAudio::DeviceInfo deviceInfo; | |||||
if (device == this->device) | |||||
deviceInfo = this->deviceInfo; | |||||
else | |||||
deviceInfo = rtAudio->getDeviceInfo(device); | |||||
return stringf("%s (%d in, %d out)", deviceInfo.name.c_str(), deviceInfo.inputChannels, deviceInfo.outputChannels); | return stringf("%s (%d in, %d out)", deviceInfo.name.c_str(), deviceInfo.inputChannels, deviceInfo.outputChannels); | ||||
} | } | ||||
catch (RtAudioError &e) { | catch (RtAudioError &e) { | ||||
warn("Failed to query RtAudio device: %s", e.what()); | warn("Failed to query RtAudio device: %s", e.what()); | ||||
} | } | ||||
} | } | ||||
if (driver == DRIVER_BRIDGE) { | |||||
return stringf("Channel %d", device + 1); | |||||
if (driver == BRIDGE_DRIVER) { | |||||
if (device >= 0) | |||||
return stringf("Channel %d", device + 1); | |||||
} | } | ||||
return ""; | return ""; | ||||
} | } | ||||
@@ -123,7 +140,6 @@ void AudioIO::openStream() { | |||||
if (rtAudio) { | if (rtAudio) { | ||||
// Open new device | // Open new device | ||||
RtAudio::DeviceInfo deviceInfo; | |||||
try { | try { | ||||
deviceInfo = rtAudio->getDeviceInfo(device); | deviceInfo = rtAudio->getDeviceInfo(device); | ||||
} | } | ||||
@@ -184,6 +200,11 @@ void AudioIO::openStream() { | |||||
this->device = device; | this->device = device; | ||||
onOpenStream(); | onOpenStream(); | ||||
} | } | ||||
if (driver == BRIDGE_DRIVER) { | |||||
if (device < BRIDGE_CHANNELS) { | |||||
this->device = device; | |||||
} | |||||
} | |||||
} | } | ||||
void AudioIO::closeStream() { | void AudioIO::closeStream() { | ||||
@@ -206,6 +227,7 @@ void AudioIO::closeStream() { | |||||
warn("Failed to close RtAudio stream %s", e.what()); | warn("Failed to close RtAudio stream %s", e.what()); | ||||
} | } | ||||
} | } | ||||
deviceInfo = RtAudio::DeviceInfo(); | |||||
} | } | ||||
// Reset rtAudio settings | // Reset rtAudio settings | ||||
@@ -234,7 +256,7 @@ std::vector<int> AudioIO::listSampleRates() { | |||||
warn("Failed to query RtAudio device: %s", e.what()); | warn("Failed to query RtAudio device: %s", e.what()); | ||||
} | } | ||||
} | } | ||||
if (driver == DRIVER_BRIDGE) { | |||||
if (driver == BRIDGE_DRIVER) { | |||||
return {44100, 48000, 88200, 96000, 176400, 192000}; | return {44100, 48000, 88200, 96000, 176400, 192000}; | ||||
} | } | ||||
@@ -15,8 +15,8 @@ | |||||
#pragma GCC diagnostic pop | #pragma GCC diagnostic pop | ||||
#define MAX_OUTPUTS 8 | |||||
#define MAX_INPUTS 8 | |||||
#define OUTPUTS 8 | |||||
#define INPUTS 8 | |||||
static const auto audioTimeout = std::chrono::milliseconds(100); | static const auto audioTimeout = std::chrono::milliseconds(100); | ||||
@@ -30,13 +30,13 @@ struct AudioInterfaceIO : AudioIO { | |||||
std::mutex audioMutex; | std::mutex audioMutex; | ||||
std::condition_variable audioCv; | std::condition_variable audioCv; | ||||
// Audio thread produces, engine thread consumes | // Audio thread produces, engine thread consumes | ||||
DoubleRingBuffer<Frame<MAX_INPUTS>, (1<<15)> inputBuffer; | |||||
DoubleRingBuffer<Frame<INPUTS>, (1<<15)> inputBuffer; | |||||
// Audio thread consumes, engine thread produces | // Audio thread consumes, engine thread produces | ||||
DoubleRingBuffer<Frame<MAX_OUTPUTS>, (1<<15)> outputBuffer; | |||||
DoubleRingBuffer<Frame<OUTPUTS>, (1<<15)> outputBuffer; | |||||
AudioInterfaceIO() { | AudioInterfaceIO() { | ||||
maxOutputs = MAX_OUTPUTS; | |||||
maxInputs = MAX_INPUTS; | |||||
maxOutputs = OUTPUTS; | |||||
maxInputs = INPUTS; | |||||
} | } | ||||
~AudioInterfaceIO() { | ~AudioInterfaceIO() { | ||||
@@ -49,7 +49,7 @@ struct AudioInterfaceIO : AudioIO { | |||||
for (int i = 0; i < length; i++) { | for (int i = 0; i < length; i++) { | ||||
if (inputBuffer.full()) | if (inputBuffer.full()) | ||||
break; | break; | ||||
Frame<MAX_INPUTS> f; | |||||
Frame<INPUTS> f; | |||||
memset(&f, 0, sizeof(f)); | memset(&f, 0, sizeof(f)); | ||||
memcpy(&f, &input[numInputs * i], numInputs * sizeof(float)); | memcpy(&f, &input[numInputs * i], numInputs * sizeof(float)); | ||||
inputBuffer.push(f); | inputBuffer.push(f); | ||||
@@ -64,7 +64,7 @@ struct AudioInterfaceIO : AudioIO { | |||||
if (audioCv.wait_for(lock, audioTimeout, cond)) { | if (audioCv.wait_for(lock, audioTimeout, cond)) { | ||||
// Consume audio block | // Consume audio block | ||||
for (int i = 0; i < length; i++) { | for (int i = 0; i < length; i++) { | ||||
Frame<MAX_OUTPUTS> f = outputBuffer.shift(); | |||||
Frame<OUTPUTS> f = outputBuffer.shift(); | |||||
memcpy(&output[numOutputs * i], &f, numOutputs * sizeof(float)); | memcpy(&output[numOutputs * i], &f, numOutputs * sizeof(float)); | ||||
} | } | ||||
} | } | ||||
@@ -90,27 +90,28 @@ struct AudioInterface : Module { | |||||
NUM_PARAMS | NUM_PARAMS | ||||
}; | }; | ||||
enum InputIds { | enum InputIds { | ||||
ENUMS(AUDIO_INPUT, MAX_INPUTS), | |||||
ENUMS(AUDIO_INPUT, INPUTS), | |||||
NUM_INPUTS | NUM_INPUTS | ||||
}; | }; | ||||
enum OutputIds { | enum OutputIds { | ||||
ENUMS(AUDIO_OUTPUT, MAX_OUTPUTS), | |||||
ENUMS(AUDIO_OUTPUT, OUTPUTS), | |||||
NUM_OUTPUTS | NUM_OUTPUTS | ||||
}; | }; | ||||
enum LightIds { | enum LightIds { | ||||
ACTIVE_LIGHT, | |||||
ENUMS(INPUT_LIGHT, INPUTS), | |||||
ENUMS(OUTPUT_LIGHT, OUTPUTS), | |||||
NUM_LIGHTS | NUM_LIGHTS | ||||
}; | }; | ||||
AudioInterfaceIO audioIO; | AudioInterfaceIO audioIO; | ||||
int lastSampleRate = 0; | int lastSampleRate = 0; | ||||
SampleRateConverter<MAX_INPUTS> inputSrc; | |||||
SampleRateConverter<MAX_OUTPUTS> outputSrc; | |||||
SampleRateConverter<INPUTS> inputSrc; | |||||
SampleRateConverter<OUTPUTS> outputSrc; | |||||
// in rack's sample rate | // in rack's sample rate | ||||
DoubleRingBuffer<Frame<MAX_INPUTS>, 16> inputBuffer; | |||||
DoubleRingBuffer<Frame<MAX_OUTPUTS>, 16> outputBuffer; | |||||
DoubleRingBuffer<Frame<INPUTS>, 16> inputBuffer; | |||||
DoubleRingBuffer<Frame<OUTPUTS>, 16> outputBuffer; | |||||
AudioInterface() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { | AudioInterface() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { | ||||
onSampleRateChange(); | onSampleRateChange(); | ||||
@@ -130,10 +131,10 @@ struct AudioInterface : Module { | |||||
} | } | ||||
void onSampleRateChange() override { | void onSampleRateChange() override { | ||||
// for (int i = 0; i < MAX_INPUTS; i++) { | |||||
// for (int i = 0; i < INPUTS; i++) { | |||||
// inputSrc[i].setRates(audioIO.sampleRate, engineGetSampleRate()); | // inputSrc[i].setRates(audioIO.sampleRate, engineGetSampleRate()); | ||||
// } | // } | ||||
// for (int i = 0; i < MAX_OUTPUTS; i++) { | |||||
// for (int i = 0; i < OUTPUTS; i++) { | |||||
// outputSrc[i].setRates(engineGetSampleRate(), audioIO.sampleRate); | // outputSrc[i].setRates(engineGetSampleRate(), audioIO.sampleRate); | ||||
// } | // } | ||||
inputSrc.setRates(audioIO.sampleRate, engineGetSampleRate()); | inputSrc.setRates(audioIO.sampleRate, engineGetSampleRate()); | ||||
@@ -147,7 +148,7 @@ struct AudioInterface : Module { | |||||
void AudioInterface::step() { | void AudioInterface::step() { | ||||
Frame<MAX_INPUTS> inputFrame; | |||||
Frame<INPUTS> inputFrame; | |||||
memset(&inputFrame, 0, sizeof(inputFrame)); | memset(&inputFrame, 0, sizeof(inputFrame)); | ||||
// Update sample rate if changed by audio driver | // Update sample rate if changed by audio driver | ||||
@@ -169,14 +170,14 @@ void AudioInterface::step() { | |||||
if (!inputBuffer.empty()) { | if (!inputBuffer.empty()) { | ||||
inputFrame = inputBuffer.shift(); | inputFrame = inputBuffer.shift(); | ||||
} | } | ||||
for (int i = 0; i < MAX_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.0 * 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<MAX_OUTPUTS> f; | |||||
Frame<OUTPUTS> f; | |||||
for (int i = 0; i < audioIO.numOutputs; i++) { | for (int i = 0; i < audioIO.numOutputs; i++) { | ||||
f.samples[i] = inputs[AUDIO_INPUT + i].value / 10.0; | f.samples[i] = inputs[AUDIO_INPUT + i].value / 10.0; | ||||
} | } | ||||
@@ -203,109 +204,72 @@ void AudioInterface::step() { | |||||
} | } | ||||
} | } | ||||
audioIO.audioCv.notify_all(); | |||||
for (int i = 0; i < INPUTS; i++) | |||||
lights[INPUT_LIGHT + i].value = (audioIO.numInputs > i); | |||||
for (int i = 0; i < OUTPUTS; i++) | |||||
lights[OUTPUT_LIGHT + i].value = (audioIO.numOutputs > i); | |||||
// Lights | |||||
lights[ACTIVE_LIGHT].value = audioIO.isActive() ? 1.0 : 0.0; | |||||
audioIO.audioCv.notify_all(); | |||||
} | } | ||||
struct AudioInterfaceWidget : ModuleWidget { | struct AudioInterfaceWidget : ModuleWidget { | ||||
AudioInterfaceWidget(AudioInterface *module) : ModuleWidget(module) { | |||||
box.size = Vec(15*12, 380); | |||||
{ | |||||
Panel *panel = new LightPanel(); | |||||
panel->box.size = box.size; | |||||
addChild(panel); | |||||
} | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x-30, 365))); | |||||
Vec margin = Vec(5, 2); | |||||
float labelHeight = 15; | |||||
float yPos = margin.y + 100; | |||||
float xPos; | |||||
{ | |||||
Label *label = new Label(); | |||||
label->box.pos = Vec(margin.x, yPos); | |||||
label->text = "Outputs (DACs)"; | |||||
addChild(label); | |||||
yPos += labelHeight + margin.y; | |||||
} | |||||
yPos += 5; | |||||
xPos = 10; | |||||
for (int i = 0; i < 4; i++) { | |||||
addInput(Port::create<PJ3410Port>(Vec(xPos, yPos), Port::INPUT, module, AudioInterface::AUDIO_INPUT + i)); | |||||
Label *label = new Label(); | |||||
label->box.pos = Vec(xPos + 4, yPos + 28); | |||||
label->text = stringf("%d", i + 1); | |||||
addChild(label); | |||||
xPos += 37 + margin.x; | |||||
} | |||||
yPos += 35 + margin.y; | |||||
yPos += 5; | |||||
xPos = 10; | |||||
for (int i = 4; i < 8; i++) { | |||||
addInput(Port::create<PJ3410Port>(Vec(xPos, yPos), Port::INPUT, module, AudioInterface::AUDIO_INPUT + i)); | |||||
Label *label = new Label(); | |||||
label->box.pos = Vec(xPos + 4, yPos + 28); | |||||
label->text = stringf("%d", i + 1); | |||||
addChild(label); | |||||
xPos += 37 + margin.x; | |||||
} | |||||
yPos += 35 + margin.y; | |||||
{ | |||||
Label *label = new Label(); | |||||
label->box.pos = Vec(margin.x, yPos); | |||||
label->text = "Inputs (ADCs)"; | |||||
addChild(label); | |||||
yPos += labelHeight + margin.y; | |||||
} | |||||
yPos += 5; | |||||
xPos = 10; | |||||
for (int i = 0; i < 4; i++) { | |||||
Port *port = Port::create<PJ3410Port>(Vec(xPos, yPos), Port::OUTPUT, module, AudioInterface::AUDIO_OUTPUT + i); | |||||
addOutput(port); | |||||
Label *label = new Label(); | |||||
label->box.pos = Vec(xPos + 4, yPos + 28); | |||||
label->text = stringf("%d", i + 1); | |||||
addChild(label); | |||||
xPos += 37 + margin.x; | |||||
} | |||||
yPos += 35 + margin.y; | |||||
yPos += 5; | |||||
xPos = 10; | |||||
for (int i = 4; i < 8; i++) { | |||||
addOutput(Port::create<PJ3410Port>(Vec(xPos, yPos), Port::OUTPUT, module, AudioInterface::AUDIO_OUTPUT + i)); | |||||
Label *label = new Label(); | |||||
label->box.pos = Vec(xPos + 4, yPos + 28); | |||||
label->text = stringf("%d", i + 1); | |||||
addChild(label); | |||||
xPos += 37 + margin.x; | |||||
} | |||||
yPos += 35 + margin.y; | |||||
AudioInterfaceWidget(AudioInterface *module); | |||||
}; | |||||
AudioWidget *audioWidget = construct<USB_B_AudioWidget>(); | |||||
audioWidget->audioIO = &module->audioIO; | |||||
addChild(audioWidget); | |||||
// Lights | |||||
addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(Vec(40, 20), module, AudioInterface::ACTIVE_LIGHT)); | |||||
} | |||||
}; | |||||
AudioInterfaceWidget::AudioInterfaceWidget(AudioInterface *module) : ModuleWidget(module) { | |||||
setPanel(SVG::load(assetGlobal("res/Core/AudioInterface.svg"))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); | |||||
addInput(Port::create<PJ301MPort>(mm2px(Vec(3.89433, 55.5308)), Port::INPUT, module, AudioInterface::AUDIO_INPUT + 0)); | |||||
addInput(Port::create<PJ301MPort>(mm2px(Vec(15.4947, 55.5308)), Port::INPUT, module, AudioInterface::AUDIO_INPUT + 1)); | |||||
addInput(Port::create<PJ301MPort>(mm2px(Vec(27.095, 55.5308)), Port::INPUT, module, AudioInterface::AUDIO_INPUT + 2)); | |||||
addInput(Port::create<PJ301MPort>(mm2px(Vec(38.6953, 55.5308)), Port::INPUT, module, AudioInterface::AUDIO_INPUT + 3)); | |||||
addInput(Port::create<PJ301MPort>(mm2px(Vec(3.89433, 70.1449)), Port::INPUT, module, AudioInterface::AUDIO_INPUT + 4)); | |||||
addInput(Port::create<PJ301MPort>(mm2px(Vec(15.4947, 70.1449)), Port::INPUT, module, AudioInterface::AUDIO_INPUT + 5)); | |||||
addInput(Port::create<PJ301MPort>(mm2px(Vec(27.095, 70.1449)), Port::INPUT, module, AudioInterface::AUDIO_INPUT + 6)); | |||||
addInput(Port::create<PJ301MPort>(mm2px(Vec(38.6953, 70.1449)), Port::INPUT, module, AudioInterface::AUDIO_INPUT + 7)); | |||||
addOutput(Port::create<PJ301MPort>(mm2px(Vec(3.89295, 92.1439)), Port::OUTPUT, module, AudioInterface::AUDIO_OUTPUT + 0)); | |||||
addOutput(Port::create<PJ301MPort>(mm2px(Vec(15.4933, 92.1439)), Port::OUTPUT, module, AudioInterface::AUDIO_OUTPUT + 1)); | |||||
addOutput(Port::create<PJ301MPort>(mm2px(Vec(27.0936, 92.1439)), Port::OUTPUT, module, AudioInterface::AUDIO_OUTPUT + 2)); | |||||
addOutput(Port::create<PJ301MPort>(mm2px(Vec(38.6939, 92.1439)), Port::OUTPUT, module, AudioInterface::AUDIO_OUTPUT + 3)); | |||||
addOutput(Port::create<PJ301MPort>(mm2px(Vec(3.89433, 108.144)), Port::OUTPUT, module, AudioInterface::AUDIO_OUTPUT + 4)); | |||||
addOutput(Port::create<PJ301MPort>(mm2px(Vec(15.4947, 108.144)), Port::OUTPUT, module, AudioInterface::AUDIO_OUTPUT + 5)); | |||||
addOutput(Port::create<PJ301MPort>(mm2px(Vec(27.095, 108.144)), Port::OUTPUT, module, AudioInterface::AUDIO_OUTPUT + 6)); | |||||
addOutput(Port::create<PJ301MPort>(mm2px(Vec(38.6953, 108.144)), Port::OUTPUT, module, AudioInterface::AUDIO_OUTPUT + 7)); | |||||
Vec lightOffset = mm2px(Vec(7.21812, -0.1833)); | |||||
addChild(ModuleLightWidget::create<TinyLight<YellowLight>>(mm2px(Vec(3.89433, 55.5308)).plus(lightOffset), module, AudioInterface::INPUT_LIGHT + 0)); | |||||
addChild(ModuleLightWidget::create<TinyLight<YellowLight>>(mm2px(Vec(15.4947, 55.5308)).plus(lightOffset), module, AudioInterface::INPUT_LIGHT + 1)); | |||||
addChild(ModuleLightWidget::create<TinyLight<YellowLight>>(mm2px(Vec(27.095, 55.5308)).plus(lightOffset), module, AudioInterface::INPUT_LIGHT + 2)); | |||||
addChild(ModuleLightWidget::create<TinyLight<YellowLight>>(mm2px(Vec(38.6953, 55.5308)).plus(lightOffset), module, AudioInterface::INPUT_LIGHT + 3)); | |||||
addChild(ModuleLightWidget::create<TinyLight<YellowLight>>(mm2px(Vec(3.89433, 70.1449)).plus(lightOffset), module, AudioInterface::INPUT_LIGHT + 4)); | |||||
addChild(ModuleLightWidget::create<TinyLight<YellowLight>>(mm2px(Vec(15.4947, 70.1449)).plus(lightOffset), module, AudioInterface::INPUT_LIGHT + 5)); | |||||
addChild(ModuleLightWidget::create<TinyLight<YellowLight>>(mm2px(Vec(27.095, 70.1449)).plus(lightOffset), module, AudioInterface::INPUT_LIGHT + 6)); | |||||
addChild(ModuleLightWidget::create<TinyLight<YellowLight>>(mm2px(Vec(38.6953, 70.1449)).plus(lightOffset), module, AudioInterface::INPUT_LIGHT + 7)); | |||||
addChild(ModuleLightWidget::create<TinyLight<YellowLight>>(mm2px(Vec(3.89295, 92.1439)).plus(lightOffset), module, AudioInterface::OUTPUT_LIGHT + 0)); | |||||
addChild(ModuleLightWidget::create<TinyLight<YellowLight>>(mm2px(Vec(15.4933, 92.1439)).plus(lightOffset), module, AudioInterface::OUTPUT_LIGHT + 1)); | |||||
addChild(ModuleLightWidget::create<TinyLight<YellowLight>>(mm2px(Vec(27.0936, 92.1439)).plus(lightOffset), module, AudioInterface::OUTPUT_LIGHT + 2)); | |||||
addChild(ModuleLightWidget::create<TinyLight<YellowLight>>(mm2px(Vec(38.6939, 92.1439)).plus(lightOffset), module, AudioInterface::OUTPUT_LIGHT + 3)); | |||||
addChild(ModuleLightWidget::create<TinyLight<YellowLight>>(mm2px(Vec(3.89433, 108.144)).plus(lightOffset), module, AudioInterface::OUTPUT_LIGHT + 4)); | |||||
addChild(ModuleLightWidget::create<TinyLight<YellowLight>>(mm2px(Vec(15.4947, 108.144)).plus(lightOffset), module, AudioInterface::OUTPUT_LIGHT + 5)); | |||||
addChild(ModuleLightWidget::create<TinyLight<YellowLight>>(mm2px(Vec(27.095, 108.144)).plus(lightOffset), module, AudioInterface::OUTPUT_LIGHT + 6)); | |||||
addChild(ModuleLightWidget::create<TinyLight<YellowLight>>(mm2px(Vec(38.6953, 108.144)).plus(lightOffset), module, AudioInterface::OUTPUT_LIGHT + 7)); | |||||
AudioWidget *audioWidget = Widget::create<AudioWidget>(mm2px(Vec(3.401, 14.8373))); | |||||
audioWidget->box.size = mm2px(Vec(44, 28)); | |||||
audioWidget->audioIO = &module->audioIO; | |||||
addChild(audioWidget); | |||||
} | |||||
Model *modelAudioInterface = Model::create<AudioInterface, AudioInterfaceWidget>("Core", "AudioInterface", "Audio Interface", EXTERNAL_TAG); | |||||
Model *modelAudioInterface = Model::create<AudioInterface, AudioInterfaceWidget>("Core", "AudioInterface", "Audio", EXTERNAL_TAG); |
@@ -6,7 +6,7 @@ | |||||
/* | /* | ||||
* MidiToCvInterface converts midi note on/off events, velocity , channel aftertouch, pitch wheel and mod wheel to | |||||
* MIDIToCVInterface converts midi note on/off events, velocity , channel aftertouch, pitch wheel and mod wheel to | |||||
* CV | * CV | ||||
*/ | */ | ||||
struct MidiValue { | struct MidiValue { | ||||
@@ -16,29 +16,34 @@ struct MidiValue { | |||||
}; | }; | ||||
struct MidiToCvInterface : Module { | |||||
struct MIDIToCVInterface : Module { | |||||
enum ParamIds { | enum ParamIds { | ||||
RESET_PARAM, | |||||
NUM_PARAMS | NUM_PARAMS | ||||
}; | }; | ||||
enum InputIds { | enum InputIds { | ||||
NUM_INPUTS | NUM_INPUTS | ||||
}; | }; | ||||
enum OutputIds { | enum OutputIds { | ||||
PITCH_OUTPUT = 0, | |||||
CV_OUTPUT, | |||||
GATE_OUTPUT, | GATE_OUTPUT, | ||||
VELOCITY_OUTPUT, | VELOCITY_OUTPUT, | ||||
MOD_OUTPUT, | MOD_OUTPUT, | ||||
PITCHWHEEL_OUTPUT, | |||||
CHANNEL_AFTERTOUCH_OUTPUT, | |||||
PITCH_OUTPUT, | |||||
AFTERTOUCH_OUTPUT, | |||||
START_OUTPUT, | |||||
STOP_OUTPUT, | |||||
CONTINUE_OUTPUT, | |||||
CLOCK_OUTPUT, | |||||
CLOCK_2_OUTPUT, | |||||
CLOCK_HALF_OUTPUT, | |||||
NUM_OUTPUTS | NUM_OUTPUTS | ||||
}; | }; | ||||
enum LightIds { | enum LightIds { | ||||
ACTIVE_LIGHT, | |||||
RESET_LIGHT, | |||||
NUM_LIGHTS | NUM_LIGHTS | ||||
}; | }; | ||||
MidiInput midiIO; | |||||
MidiInputQueue midiInput; | MidiInputQueue midiInput; | ||||
std::list<int> notes; | std::list<int> notes; | ||||
bool pedal = false; | bool pedal = false; | ||||
@@ -51,12 +56,12 @@ struct MidiToCvInterface : Module { | |||||
SchmittTrigger resetTrigger; | SchmittTrigger resetTrigger; | ||||
MidiToCvInterface() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { | |||||
MIDIToCVInterface() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { | |||||
pitchWheel.val = 64; | pitchWheel.val = 64; | ||||
// pitchWheel.tSmooth.set(0, 0); | // pitchWheel.tSmooth.set(0, 0); | ||||
} | } | ||||
~MidiToCvInterface() { | |||||
~MIDIToCVInterface() { | |||||
}; | }; | ||||
void step() override; | void step() override; | ||||
@@ -85,7 +90,7 @@ struct MidiToCvInterface : Module { | |||||
}; | }; | ||||
/* | /* | ||||
void MidiToCvInterface::resetMidi() { | |||||
void MIDIToCVInterface::resetMidi() { | |||||
mod.val = 0; | mod.val = 0; | ||||
mod.tSmooth.set(0, 0); | mod.tSmooth.set(0, 0); | ||||
pitchWheel.val = 64; | pitchWheel.val = 64; | ||||
@@ -98,7 +103,7 @@ void MidiToCvInterface::resetMidi() { | |||||
} | } | ||||
*/ | */ | ||||
void MidiToCvInterface::step() { | |||||
void MIDIToCVInterface::step() { | |||||
/* | /* | ||||
if (isPortOpen()) { | if (isPortOpen()) { | ||||
std::vector<unsigned char> message; | std::vector<unsigned char> message; | ||||
@@ -138,12 +143,9 @@ void MidiToCvInterface::step() { | |||||
outputs[CHANNEL_AFTERTOUCH_OUTPUT].value = afterTouch.val / 127.0 * 10.0; | outputs[CHANNEL_AFTERTOUCH_OUTPUT].value = afterTouch.val / 127.0 * 10.0; | ||||
*/ | */ | ||||
// Lights | |||||
lights[ACTIVE_LIGHT].value = midiInput.isActive() ? 1.0 : 0.0; | |||||
} | } | ||||
void MidiToCvInterface::pressNote(int note) { | |||||
void MIDIToCVInterface::pressNote(int note) { | |||||
// Remove existing similar note | // Remove existing similar note | ||||
auto it = std::find(notes.begin(), notes.end(), note); | auto it = std::find(notes.begin(), notes.end(), note); | ||||
if (it != notes.end()) | if (it != notes.end()) | ||||
@@ -154,7 +156,7 @@ void MidiToCvInterface::pressNote(int note) { | |||||
gate = true; | gate = true; | ||||
} | } | ||||
void MidiToCvInterface::releaseNote(int note) { | |||||
void MIDIToCVInterface::releaseNote(int note) { | |||||
// Remove the note | // Remove the note | ||||
auto it = std::find(notes.begin(), notes.end(), note); | auto it = std::find(notes.begin(), notes.end(), note); | ||||
if (it != notes.end()) | if (it != notes.end()) | ||||
@@ -174,7 +176,7 @@ void MidiToCvInterface::releaseNote(int note) { | |||||
} | } | ||||
} | } | ||||
void MidiToCvInterface::processMidi(std::vector<unsigned char> msg) { | |||||
void MIDIToCVInterface::processMidi(std::vector<unsigned char> msg) { | |||||
/* | /* | ||||
int channel = msg[0] & 0xf; | int channel = msg[0] & 0xf; | ||||
int status = (msg[0] >> 4) & 0xf; | int status = (msg[0] >> 4) & 0xf; | ||||
@@ -229,58 +231,34 @@ void MidiToCvInterface::processMidi(std::vector<unsigned char> msg) { | |||||
} | } | ||||
struct MidiToCvInterfaceWidget : ModuleWidget { | |||||
MidiToCvInterfaceWidget(MidiToCvInterface *module) : ModuleWidget(module) { | |||||
box.size = Vec(15 * 9, 380); | |||||
{ | |||||
Panel *panel = new LightPanel(); | |||||
panel->box.size = box.size; | |||||
addChild(panel); | |||||
} | |||||
float margin = 5; | |||||
float labelHeight = 15; | |||||
float yPos = margin; | |||||
float yGap = 35; | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365))); | |||||
{ | |||||
Label *label = new Label(); | |||||
label->box.pos = Vec(box.size.x - margin - 7 * 15, margin); | |||||
label->text = "MIDI to CV"; | |||||
addChild(label); | |||||
yPos = labelHeight * 2; | |||||
} | |||||
addParam(ParamWidget::create<LEDButton>(Vec(7 * 15, labelHeight), module, MidiToCvInterface::RESET_PARAM, 0.0, 1.0, 0.0)); | |||||
addChild(ModuleLightWidget::create<SmallLight<RedLight>>(Vec(7 * 15 + 5, labelHeight + 5), module, MidiToCvInterface::RESET_LIGHT)); | |||||
std::string labels[MidiToCvInterface::NUM_OUTPUTS] = {"1V/oct", "Gate", "Velocity", "Mod Wheel", "Pitch Wheel", "Aftertouch"}; | |||||
for (int i = 0; i < MidiToCvInterface::NUM_OUTPUTS; i++) { | |||||
Label *label = new Label(); | |||||
label->box.pos = Vec(margin, yPos); | |||||
label->text = labels[i]; | |||||
addChild(label); | |||||
addOutput(Port::create<PJ3410Port>(Vec(15 * 6, yPos - 5), Port::OUTPUT, module, i)); | |||||
yPos += yGap + margin; | |||||
} | |||||
MidiWidget *midiWidget = construct<MIDI_DIN_MidiWidget>(); | |||||
midiWidget->midiIO = &module->midiInput; | |||||
struct MIDIToCVInterfaceWidget : ModuleWidget { | |||||
MIDIToCVInterfaceWidget(MIDIToCVInterface *module) : ModuleWidget(module) { | |||||
setPanel(SVG::load(assetGlobal("res/Core/MIDIToCVInterface.svg"))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); | |||||
addOutput(Port::create<PJ301MPort>(mm2px(Vec(4.61505, 60.1445)), Port::OUTPUT, module, MIDIToCVInterface::CV_OUTPUT)); | |||||
addOutput(Port::create<PJ301MPort>(mm2px(Vec(16.214, 60.1445)), Port::OUTPUT, module, MIDIToCVInterface::GATE_OUTPUT)); | |||||
addOutput(Port::create<PJ301MPort>(mm2px(Vec(27.8143, 60.1445)), Port::OUTPUT, module, MIDIToCVInterface::VELOCITY_OUTPUT)); | |||||
addOutput(Port::create<PJ301MPort>(mm2px(Vec(4.61505, 76.1449)), Port::OUTPUT, module, MIDIToCVInterface::MOD_OUTPUT)); | |||||
addOutput(Port::create<PJ301MPort>(mm2px(Vec(16.214, 76.1449)), Port::OUTPUT, module, MIDIToCVInterface::PITCH_OUTPUT)); | |||||
addOutput(Port::create<PJ301MPort>(mm2px(Vec(27.8143, 76.1449)), Port::OUTPUT, module, MIDIToCVInterface::AFTERTOUCH_OUTPUT)); | |||||
addOutput(Port::create<PJ301MPort>(mm2px(Vec(4.61505, 92.1439)), Port::OUTPUT, module, MIDIToCVInterface::START_OUTPUT)); | |||||
addOutput(Port::create<PJ301MPort>(mm2px(Vec(16.214, 92.1439)), Port::OUTPUT, module, MIDIToCVInterface::STOP_OUTPUT)); | |||||
addOutput(Port::create<PJ301MPort>(mm2px(Vec(27.8143, 92.1439)), Port::OUTPUT, module, MIDIToCVInterface::CONTINUE_OUTPUT)); | |||||
addOutput(Port::create<PJ301MPort>(mm2px(Vec(4.61505, 108.144)), Port::OUTPUT, module, MIDIToCVInterface::CLOCK_OUTPUT)); | |||||
addOutput(Port::create<PJ301MPort>(mm2px(Vec(16.214, 108.144)), Port::OUTPUT, module, MIDIToCVInterface::CLOCK_2_OUTPUT)); | |||||
addOutput(Port::create<PJ301MPort>(mm2px(Vec(27.8143, 108.144)), Port::OUTPUT, module, MIDIToCVInterface::CLOCK_HALF_OUTPUT)); | |||||
MidiWidget *midiWidget = Widget::create<MidiWidget>(mm2px(Vec(3.41891, 14.8373))); | |||||
midiWidget->box.size = mm2px(Vec(33.840, 28)); | |||||
midiWidget->midiIO = &module->midiIO; | |||||
addChild(midiWidget); | addChild(midiWidget); | ||||
// Lights | |||||
addChild(ModuleLightWidget::create<SmallLight<GreenLight>>(Vec(40, 20), module, MidiToCvInterface::ACTIVE_LIGHT)); | |||||
} | } | ||||
}; | }; | ||||
Model *modelMidiToCvInterface = Model::create<MidiToCvInterface, MidiToCvInterfaceWidget>("Core", "MIDIToCVInterface", "MIDI-to-CV Interface", MIDI_TAG, EXTERNAL_TAG); | |||||
Model *modelMidiToCvInterface = Model::create<MIDIToCVInterface, MIDIToCVInterfaceWidget>("Core", "MIDIToCVInterface", "MIDI-1", MIDI_TAG, EXTERNAL_TAG); |
@@ -8,22 +8,15 @@ struct NotesWidget : ModuleWidget { | |||||
TextField *textField; | TextField *textField; | ||||
NotesWidget(Module *module) : ModuleWidget(module) { | NotesWidget(Module *module) : ModuleWidget(module) { | ||||
box.size = Vec(RACK_GRID_WIDTH * 18, RACK_GRID_HEIGHT); | |||||
{ | |||||
Panel *panel = new LightPanel(); | |||||
panel->box.size = box.size; | |||||
addChild(panel); | |||||
} | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(15, 365))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 30, 365))); | |||||
textField = new TextField(); | |||||
textField->box.pos = Vec(15, 15); | |||||
textField->box.size = box.size.minus(Vec(30, 30)); | |||||
setPanel(SVG::load(assetGlobal("res/Core/Notes.svg"))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); | |||||
addChild(Widget::create<ScrewSilver>(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); | |||||
textField = Widget::create<LedDisplayTextField>(mm2px(Vec(3.39962, 14.8373))); | |||||
textField->box.size = mm2px(Vec(74.480, 102.753)); | |||||
textField->multiline = true; | textField->multiline = true; | ||||
addChild(textField); | addChild(textField); | ||||
} | } | ||||
@@ -72,15 +72,15 @@ static void engineStep() { | |||||
if (smoothModule) { | if (smoothModule) { | ||||
float value = smoothModule->params[smoothParamId].value; | float value = smoothModule->params[smoothParamId].value; | ||||
const float lambda = 60.0; // decay rate is 1 graphics frame | const float lambda = 60.0; // decay rate is 1 graphics frame | ||||
const float snap = 0.0001; | |||||
float delta = smoothValue - value; | float delta = smoothValue - value; | ||||
if (fabsf(delta) < snap) { | |||||
float newValue = value + delta * lambda * sampleTime; | |||||
if (value == newValue) { | |||||
// Snap to actual smooth value if the value doesn't change enough (due to the granularity of floats) | |||||
smoothModule->params[smoothParamId].value = smoothValue; | smoothModule->params[smoothParamId].value = smoothValue; | ||||
smoothModule = NULL; | smoothModule = NULL; | ||||
} | } | ||||
else { | else { | ||||
value += delta * lambda * sampleTime; | |||||
smoothModule->params[smoothParamId].value = value; | |||||
smoothModule->params[smoothParamId].value = newValue; | |||||
} | } | ||||
} | } | ||||
@@ -25,10 +25,22 @@ void TextField::draw(NVGcontext *vg) { | |||||
} | } | ||||
void TextField::onMouseDown(EventMouseDown &e) { | void TextField::onMouseDown(EventMouseDown &e) { | ||||
end = begin = bndTextFieldTextPosition(gVg, 0.0, 0.0, box.size.x, box.size.y, -1, text.c_str(), e.pos.x, e.pos.y); | |||||
dragPos = getTextPosition(e.pos); | |||||
begin = end = dragPos; | |||||
OpaqueWidget::onMouseDown(e); | OpaqueWidget::onMouseDown(e); | ||||
} | } | ||||
void TextField::onMouseMove(EventMouseMove &e) { | |||||
if (this == gDraggedWidget) { | |||||
int pos = getTextPosition(e.pos); | |||||
if (pos != dragPos) { | |||||
begin = min(dragPos, pos); | |||||
end = max(dragPos, pos); | |||||
} | |||||
} | |||||
OpaqueWidget::onMouseMove(e); | |||||
} | |||||
void TextField::onFocus(EventFocus &e) { | void TextField::onFocus(EventFocus &e) { | ||||
begin = 0; | begin = 0; | ||||
end = text.size(); | end = text.size(); | ||||
@@ -131,5 +143,9 @@ void TextField::insertText(std::string newText) { | |||||
onTextChange(); | onTextChange(); | ||||
} | } | ||||
int TextField::getTextPosition(Vec mousePos) { | |||||
return bndTextFieldTextPosition(gVg, 0.0, 0.0, box.size.x, box.size.y, -1, text.c_str(), mousePos.x, mousePos.y); | |||||
} | |||||
} // namespace rack | } // namespace rack |
@@ -382,7 +382,7 @@ void windowInit() { | |||||
assert(gFramebufferVg); | assert(gFramebufferVg); | ||||
// Set up Blendish | // Set up Blendish | ||||
gGuiFont = Font::load(assetGlobal("res/DejaVuSans.ttf")); | |||||
gGuiFont = Font::load(assetGlobal("res/fonts/DejaVuSans.ttf")); | |||||
bndSetFont(gGuiFont->handle); | bndSetFont(gGuiFont->handle); | ||||
// bndSetIconImage(loadImage(assetGlobal("res/icons.png"))); | // bndSetIconImage(loadImage(assetGlobal("res/icons.png"))); | ||||