Browse Source

AudioInterface rework, Notes rework, partial MIDIToCVInterface rework

tags/v0.6.0
Andrew Belt 6 years ago
parent
commit
1ab4b2cb85
24 changed files with 1938 additions and 319 deletions
  1. +44
    -4
      include/app.hpp
  2. +1
    -0
      include/audio.hpp
  3. +0
    -16
      include/componentlibrary.hpp
  4. +27
    -2
      include/ui.hpp
  5. +463
    -0
      res/Core/AudioInterface.svg
  6. +3
    -0
      res/Core/LICENSE.txt
  7. +505
    -0
      res/Core/MIDIToCVInterface.svg
  8. +132
    -0
      res/Core/Notes.svg
  9. +90
    -2
      res/fonts/DejaVuSans-LICENSE.txt
  10. BIN
      res/fonts/DejaVuSans.ttf
  11. +93
    -0
      res/fonts/ShareTechMono-Regular-LICENSE.txt
  12. BIN
      res/fonts/ShareTechMono-Regular.ttf
  13. +7
    -7
      src/app/AddModuleWindow.cpp
  14. +155
    -62
      src/app/AudioWidget.cpp
  15. +102
    -0
      src/app/LedDisplay.cpp
  16. +119
    -4
      src/app/MidiWidget.cpp
  17. +2
    -0
      src/app/ModuleWidget.cpp
  18. +37
    -15
      src/audio.cpp
  19. +81
    -117
      src/core/AudioInterface.cpp
  20. +46
    -68
      src/core/MidiToCV.cpp
  21. +9
    -16
      src/core/Notes.cpp
  22. +4
    -4
      src/engine.cpp
  23. +17
    -1
      src/ui/TextField.cpp
  24. +1
    -1
      src/window.cpp

+ 44
- 4
include/app.hpp View File

@@ -87,7 +87,12 @@ struct ModuleWidget : OpaqueWidget {
Called when the user clicks Randomize in the context menu.
*/
virtual void randomize();
/** Do not subclass this to add context menu entries. Use appendContextMenu() instead */
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 drawShadow(NVGcontext *vg);
@@ -320,19 +325,54 @@ struct MomentarySwitch : virtual Switch {
// 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 MidiIO;

struct AudioWidget : OpaqueWidget {
struct AudioWidget : LedDisplay {
/** Not owned */
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 */
MidiIO *midiIO = NULL;
void onMouseDown(EventMouseDown &e) override;
struct Internal;
Internal *internal;
MidiWidget();
~MidiWidget();
void step() override;
};

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


+ 1
- 0
include/audio.hpp View File

@@ -23,6 +23,7 @@ struct AudioIO {
int numOutputs = 0;
int numInputs = 0;
RtAudio *rtAudio = NULL;
RtAudio::DeviceInfo deviceInfo;

AudioIO();
virtual ~AudioIO();


+ 0
- 16
include/componentlibrary.hpp View File

@@ -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
////////////////////


+ 27
- 2
include/ui.hpp View File

@@ -44,24 +44,46 @@ struct Menu : OpaqueWidget {
};

struct MenuEntry : OpaqueWidget {
std::string text;
MenuEntry() {
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 {
std::string text;
void draw(NVGcontext *vg) 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 {
std::string text;
std::string rightText;
void draw(NVGcontext *vg) override;
void step() override;
virtual Menu *createChildMenu() {return NULL;}
void onMouseEnter(EventMouseEnter &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 {
@@ -153,16 +175,19 @@ struct TextField : OpaqueWidget {
bool multiline = false;
int begin = 0;
int end = 0;
int dragPos = 0;

TextField() {
box.size.y = BND_WIDGET_HEIGHT;
}
void draw(NVGcontext *vg) override;
void onMouseDown(EventMouseDown &e) override;
void onMouseMove(EventMouseMove &e) override;
void onFocus(EventFocus &e) override;
void onText(EventText &e) override;
void onKey(EventKey &e) override;
void insertText(std::string newText);
virtual int getTextPosition(Vec mousePos);
virtual void onTextChange() {}
};

@@ -170,7 +195,7 @@ struct PasswordField : TextField {
void draw(NVGcontext *vg) override;
};

struct ProgressBar : TransparentWidget, QuantityWidget {
struct ProgressBar : QuantityWidget {
ProgressBar() {
box.size.y = BND_WIDGET_HEIGHT;
}


+ 463
- 0
res/Core/AudioInterface.svg View File

@@ -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>

+ 3
- 0
res/Core/LICENSE.txt View File

@@ -0,0 +1,3 @@
Core panel and VCV logo design © 2018 by Grayscale

Derivative works may not use Core panel and VCV logo design.

+ 505
- 0
res/Core/MIDIToCVInterface.svg View File

@@ -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>

+ 132
- 0
res/Core/Notes.svg View File

@@ -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>

res/LICENSE-DejaVuSans.txt → res/fonts/DejaVuSans-LICENSE.txt View File

@@ -1,6 +1,7 @@
Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)


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
without prior written authorization from the Gnome Foundation or Bitstream
Inc., respectively. For further information, contact: fonts at gnome dot
org.
org.

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
. 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$

BIN
res/DejaVuSans.ttf → res/fonts/DejaVuSans.ttf View File


+ 93
- 0
res/fonts/ShareTechMono-Regular-LICENSE.txt View File

@@ -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.

BIN
res/fonts/ShareTechMono-Regular.ttf View File


+ 7
- 7
src/app/AddModuleWindow.cpp View File

@@ -55,7 +55,7 @@ struct MetadataMenu : ListMenu {
// Tag list
if (!model->tags.empty()) {
for (ModelTag tag : model->tags) {
addChild(construct<MenuLabel>(&MenuEntry::text, gTagNames[tag]));
addChild(construct<MenuLabel>(&MenuLabel::text, gTagNames[tag]));
}
addChild(construct<MenuEntry>());
}
@@ -66,17 +66,17 @@ struct MetadataMenu : ListMenu {
pluginName += " v";
pluginName += model->plugin->version;
}
addChild(construct<MenuLabel>(&MenuEntry::text, pluginName));
addChild(construct<MenuLabel>(&MenuLabel::text, pluginName));

// Plugin metadata
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()) {
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()) {
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 (Model *model : plugin->models) {
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
for (std::string manufacturer : manufacturers) {
addChild(construct<ManufacturerItem>(&MenuEntry::text, manufacturer));
addChild(construct<ManufacturerItem>(&MenuItem::text, manufacturer));
}
}



+ 155
- 62
src/app/AudioWidget.cpp View File

@@ -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 {
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 {
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 {
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();
}




+ 102
- 0
src/app/LedDisplay.cpp View File

@@ -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

+ 119
- 4
src/app/MidiWidget.cpp View File

@@ -5,27 +5,141 @@
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 {
MidiIO *midiIO;
int device;
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 {
MidiIO *midiIO;
int channel;
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)
return;

@@ -69,6 +183,7 @@ void MidiWidget::onMouseDown(EventMouseDown &e) {
menu->addChild(item);
}
}
*/


} // namespace rack

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

@@ -346,6 +346,8 @@ Menu *ModuleWidget::createContextMenu() {
deleteItem->moduleWidget = this;
menu->addChild(deleteItem);

appendContextMenu(menu);

return menu;
}



+ 37
- 15
src/audio.cpp View File

@@ -2,7 +2,8 @@
#include "audio.hpp"


#define DRIVER_BRIDGE -1
#define BRIDGE_DRIVER -1
#define BRIDGE_CHANNELS 16


namespace rack {
@@ -23,7 +24,7 @@ std::vector<int> AudioIO::listDrivers() {
for (RtAudio::Api api : apis)
drivers.push_back((int) api);
// Add Bridge fake driver
// drivers.push_back(DRIVER_BRIDGE);
drivers.push_back(BRIDGE_DRIVER);
return drivers;
}

@@ -39,7 +40,7 @@ std::string AudioIO::getDriverName(int driver) {
case RtAudio::WINDOWS_ASIO: return "ASIO";
case RtAudio::WINDOWS_DS: return "DirectSound";
case RtAudio::RTAUDIO_DUMMY: return "Dummy";
case DRIVER_BRIDGE: return "VCV Bridge";
case BRIDGE_DRIVER: return "Bridge";
default: return "Unknown";
}
}
@@ -58,9 +59,9 @@ void AudioIO::setDriver(int driver) {
rtAudio = new RtAudio((RtAudio::Api) driver);
this->driver = (int) rtAudio->getCurrentApi();
}
else if (driver == DRIVER_BRIDGE) {
else if (driver == BRIDGE_DRIVER) {
// TODO Connect to Bridge
this->driver = DRIVER_BRIDGE;
this->driver = BRIDGE_DRIVER;
}
}

@@ -68,40 +69,56 @@ int AudioIO::getDeviceCount() {
if (rtAudio) {
return rtAudio->getDeviceCount();
}
if (driver == DRIVER_BRIDGE) {
return 16;
if (driver == BRIDGE_DRIVER) {
return BRIDGE_CHANNELS;
}
return 0;
}

std::string AudioIO::getDeviceName(int device) {
if (device < 0)
return "";

if (rtAudio) {
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;
}
catch (RtAudioError &e) {
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 "";
}

std::string AudioIO::getDeviceDetail(int device) {
if (device < 0)
return "";

if (rtAudio) {
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);
}
catch (RtAudioError &e) {
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 "";
}
@@ -123,7 +140,6 @@ void AudioIO::openStream() {

if (rtAudio) {
// Open new device
RtAudio::DeviceInfo deviceInfo;
try {
deviceInfo = rtAudio->getDeviceInfo(device);
}
@@ -184,6 +200,11 @@ void AudioIO::openStream() {
this->device = device;
onOpenStream();
}
if (driver == BRIDGE_DRIVER) {
if (device < BRIDGE_CHANNELS) {
this->device = device;
}
}
}

void AudioIO::closeStream() {
@@ -206,6 +227,7 @@ void AudioIO::closeStream() {
warn("Failed to close RtAudio stream %s", e.what());
}
}
deviceInfo = RtAudio::DeviceInfo();
}

// Reset rtAudio settings
@@ -234,7 +256,7 @@ std::vector<int> AudioIO::listSampleRates() {
warn("Failed to query RtAudio device: %s", e.what());
}
}
if (driver == DRIVER_BRIDGE) {
if (driver == BRIDGE_DRIVER) {
return {44100, 48000, 88200, 96000, 176400, 192000};
}



+ 81
- 117
src/core/AudioInterface.cpp View File

@@ -15,8 +15,8 @@
#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);

@@ -30,13 +30,13 @@ struct AudioInterfaceIO : AudioIO {
std::mutex audioMutex;
std::condition_variable audioCv;
// 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
DoubleRingBuffer<Frame<MAX_OUTPUTS>, (1<<15)> outputBuffer;
DoubleRingBuffer<Frame<OUTPUTS>, (1<<15)> outputBuffer;

AudioInterfaceIO() {
maxOutputs = MAX_OUTPUTS;
maxInputs = MAX_INPUTS;
maxOutputs = OUTPUTS;
maxInputs = INPUTS;
}

~AudioInterfaceIO() {
@@ -49,7 +49,7 @@ struct AudioInterfaceIO : AudioIO {
for (int i = 0; i < length; i++) {
if (inputBuffer.full())
break;
Frame<MAX_INPUTS> f;
Frame<INPUTS> f;
memset(&f, 0, sizeof(f));
memcpy(&f, &input[numInputs * i], numInputs * sizeof(float));
inputBuffer.push(f);
@@ -64,7 +64,7 @@ struct AudioInterfaceIO : AudioIO {
if (audioCv.wait_for(lock, audioTimeout, cond)) {
// Consume audio block
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));
}
}
@@ -90,27 +90,28 @@ struct AudioInterface : Module {
NUM_PARAMS
};
enum InputIds {
ENUMS(AUDIO_INPUT, MAX_INPUTS),
ENUMS(AUDIO_INPUT, INPUTS),
NUM_INPUTS
};
enum OutputIds {
ENUMS(AUDIO_OUTPUT, MAX_OUTPUTS),
ENUMS(AUDIO_OUTPUT, OUTPUTS),
NUM_OUTPUTS
};
enum LightIds {
ACTIVE_LIGHT,
ENUMS(INPUT_LIGHT, INPUTS),
ENUMS(OUTPUT_LIGHT, OUTPUTS),
NUM_LIGHTS
};

AudioInterfaceIO audioIO;
int lastSampleRate = 0;

SampleRateConverter<MAX_INPUTS> inputSrc;
SampleRateConverter<MAX_OUTPUTS> outputSrc;
SampleRateConverter<INPUTS> inputSrc;
SampleRateConverter<OUTPUTS> outputSrc;

// 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) {
onSampleRateChange();
@@ -130,10 +131,10 @@ struct AudioInterface : Module {
}

void onSampleRateChange() override {
// for (int i = 0; i < MAX_INPUTS; i++) {
// for (int i = 0; i < INPUTS; i++) {
// 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);
// }
inputSrc.setRates(audioIO.sampleRate, engineGetSampleRate());
@@ -147,7 +148,7 @@ struct AudioInterface : Module {


void AudioInterface::step() {
Frame<MAX_INPUTS> inputFrame;
Frame<INPUTS> inputFrame;
memset(&inputFrame, 0, sizeof(inputFrame));

// Update sample rate if changed by audio driver
@@ -169,14 +170,14 @@ void AudioInterface::step() {
if (!inputBuffer.empty()) {
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];
}

if (audioIO.numOutputs > 0) {
// Get and push output SRC frame
if (!outputBuffer.full()) {
Frame<MAX_OUTPUTS> f;
Frame<OUTPUTS> f;
for (int i = 0; i < audioIO.numOutputs; i++) {
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 {
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);

+ 46
- 68
src/core/MidiToCV.cpp View File

@@ -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
*/
struct MidiValue {
@@ -16,29 +16,34 @@ struct MidiValue {
};


struct MidiToCvInterface : Module {
struct MIDIToCVInterface : Module {
enum ParamIds {
RESET_PARAM,
NUM_PARAMS
};
enum InputIds {
NUM_INPUTS
};
enum OutputIds {
PITCH_OUTPUT = 0,
CV_OUTPUT,
GATE_OUTPUT,
VELOCITY_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
};
enum LightIds {
ACTIVE_LIGHT,
RESET_LIGHT,
NUM_LIGHTS
};

MidiInput midiIO;

MidiInputQueue midiInput;
std::list<int> notes;
bool pedal = false;
@@ -51,12 +56,12 @@ struct MidiToCvInterface : Module {

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.tSmooth.set(0, 0);
}

~MidiToCvInterface() {
~MIDIToCVInterface() {
};

void step() override;
@@ -85,7 +90,7 @@ struct MidiToCvInterface : Module {
};

/*
void MidiToCvInterface::resetMidi() {
void MIDIToCVInterface::resetMidi() {
mod.val = 0;
mod.tSmooth.set(0, 0);
pitchWheel.val = 64;
@@ -98,7 +103,7 @@ void MidiToCvInterface::resetMidi() {
}
*/

void MidiToCvInterface::step() {
void MIDIToCVInterface::step() {
/*
if (isPortOpen()) {
std::vector<unsigned char> message;
@@ -138,12 +143,9 @@ void MidiToCvInterface::step() {

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
auto it = std::find(notes.begin(), notes.end(), note);
if (it != notes.end())
@@ -154,7 +156,7 @@ void MidiToCvInterface::pressNote(int note) {
gate = true;
}

void MidiToCvInterface::releaseNote(int note) {
void MIDIToCVInterface::releaseNote(int note) {
// Remove the note
auto it = std::find(notes.begin(), notes.end(), note);
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 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);

// 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);

+ 9
- 16
src/core/Notes.cpp View File

@@ -8,22 +8,15 @@ struct NotesWidget : ModuleWidget {
TextField *textField;

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;
addChild(textField);
}


+ 4
- 4
src/engine.cpp View File

@@ -72,15 +72,15 @@ static void engineStep() {
if (smoothModule) {
float value = smoothModule->params[smoothParamId].value;
const float lambda = 60.0; // decay rate is 1 graphics frame
const float snap = 0.0001;
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 = NULL;
}
else {
value += delta * lambda * sampleTime;
smoothModule->params[smoothParamId].value = value;
smoothModule->params[smoothParamId].value = newValue;
}
}



+ 17
- 1
src/ui/TextField.cpp View File

@@ -25,10 +25,22 @@ void TextField::draw(NVGcontext *vg) {
}

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);
}

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) {
begin = 0;
end = text.size();
@@ -131,5 +143,9 @@ void TextField::insertText(std::string newText) {
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

+ 1
- 1
src/window.cpp View File

@@ -382,7 +382,7 @@ void windowInit() {
assert(gFramebufferVg);

// Set up Blendish
gGuiFont = Font::load(assetGlobal("res/DejaVuSans.ttf"));
gGuiFont = Font::load(assetGlobal("res/fonts/DejaVuSans.ttf"));
bndSetFont(gGuiFont->handle);
// bndSetIconImage(loadImage(assetGlobal("res/icons.png")));



Loading…
Cancel
Save