commit 38df4e71a96f3c04388ea2af33fb19b764933689
parent a0058d71a71a72972779848691d6ec07f4195833
Author: Matt Demanett <matt@demanett.net>
Date: Sun, 2 Aug 2020 22:52:54 -0400
Script to copy widget position variables from svg into the relevant cpp.
Diffstat:
15 files changed, 133 insertions(+), 63 deletions(-)
diff --git a/res-pp/DADSRH-pp.svg b/res-pp/DADSRH-pp.svg
@@ -140,8 +140,8 @@ text.brand {
<circle cx="0" cy="0" r="10.5" stroke-width="3" stroke="#f00" fill="none"/>
</g>
</symbol>
- <symbol id="light-small" viewBox="0 0 6.4px 6.4px">
- <rect width="6.4" height="6.4" fill="#0f0"/>
+ <symbol id="light-tiny" viewBox="0 0 1.1px 1.1px">
+ <rect width="3.2" height="3.2" fill="#0f0"/>
</symbol>
</defs>
diff --git a/res-src/DADSRH-src.svg b/res-src/DADSRH-src.svg
@@ -11,7 +11,7 @@
<def id="switch"/>
<def id="input"/>
<def id="output"/>
- <def id="light-small"/>
+ <def id="light-tiny"/>
</defs>
<rect width="100%" height="100%" fill="#ddd"/>
diff --git a/scripts/svg_variables_to_cpp.rb b/scripts/svg_variables_to_cpp.rb
@@ -0,0 +1,70 @@
+#!/usr/bin/env ruby
+
+require 'optparse'
+require 'pathname'
+
+options = {}
+option_parser = OptionParser.new do |opts|
+ opts.banner = "Usage: #{$0} [options] [res-pp/MODULE-pp.svg] [...more files...]"
+ opts.on_tail('-h', '--help', 'Show this message') do
+ puts opts
+ exit
+ end
+end
+begin
+ option_parser.parse!
+rescue => e
+ STDERR.puts e.to_s
+ STDERR.puts "\n"
+ STDERR.puts option_parser.help
+ exit 1
+end
+if ARGV.empty?
+ STDERR.puts option_parser.help
+ exit 1
+end
+
+ARGV.each do |svg_file|
+ unless File.readable?(svg_file)
+ STDERR.puts "No such file: #{svg_file}"
+ exit 1
+ end
+ slug = nil
+ if File.basename(svg_file) =~ /^(.*)-pp.svg$/
+ slug = $1
+ else
+ STDERR.puts "Input file #{file} must be named *-pp.svg"
+ exit 1
+ end
+
+ cpp_file = Pathname.new(File.join(File.dirname(svg_file), '..', 'src', "#{slug}.cpp")).cleanpath
+ if File.readable?(cpp_file)
+ cpp = File.read(cpp_file)
+ if cpp =~ /\n([ \t]+)\/\/ generated by svg_widgets\.rb.*\/\/ end generated by svg_widgets\.rb/m
+ spaces = $1
+
+ cmd = "#{File.join(File.dirname($0), 'svg_widgets.rb')} --variables #{svg_file}"
+ out = `#{cmd}`
+ unless $?.success?
+ STDERR.puts "Calling '#{cmd}' failed:\n#{out}"
+ exit 1
+ end
+ if out =~ /auto/
+ out.gsub!(/auto/, "#{spaces}auto")
+ new_cpp = cpp.sub(/(\/\/ generated by svg_widgets\.rb).*(\/\/ end generated by svg_widgets\.rb)/m, "\\1\n#{out}#{spaces}\\2")
+ if new_cpp != cpp
+ File.write(cpp_file, new_cpp)
+ puts "Wrote: #{cpp_file}"
+ else
+ puts "Unchanged: #{cpp_file}"
+ end
+ else
+ STDERR.puts "#{cmd} didn't produce any variables"
+ end
+ else
+ STDERR.puts "Module source file doesn't seem to have replaceable variables: #{cpp_file}"
+ end
+ else
+ STDERR.puts "Module source file doesn't exist: #{cpp_file}"
+ end
+end
diff --git a/src/Analyzer.cpp b/src/Analyzer.cpp
@@ -107,10 +107,10 @@ struct AnalyzerWidget : ModuleWidget {
addChild(createWidget<ScrewSilver>(Vec(box.size.x - 30, 365)));
// generated by svg_widgets.rb
- auto range2ParamPosition = Vec(30.08, 271.08);
- auto smoothParamPosition = Vec(103.08, 271.08);
- auto qualityParamPosition = Vec(179.02, 306.02);
- auto windowParamPosition = Vec(250.02, 306.02);
+ auto range2ParamPosition = Vec(30.0, 271.0);
+ auto smoothParamPosition = Vec(103.0, 271.0);
+ auto qualityParamPosition = Vec(179.0, 306.0);
+ auto windowParamPosition = Vec(250.0, 306.0);
auto signalaInputPosition = Vec(13.5, 323.0);
auto signalbInputPosition = Vec(86.0, 323.0);
diff --git a/src/DADSRH.cpp b/src/DADSRH.cpp
@@ -123,20 +123,20 @@ struct DADSRHWidget : TriggerOnLoadModuleWidget {
addChild(createWidget<ScrewSilver>(Vec(box.size.x - 15, 365)));
// generated by svg_widgets.rb
- auto delayParamPosition = Vec(27.08, 33.08);
- auto attackParamPosition = Vec(27.08, 89.08);
- auto decayParamPosition = Vec(27.08, 145.08);
- auto sustainParamPosition = Vec(27.08, 201.08);
- auto releaseParamPosition = Vec(27.08, 257.08);
- auto holdParamPosition = Vec(82.38, 313.08);
- auto attackShapeParamPosition = Vec(77.02, 124.02);
- auto decayShapeParamPosition = Vec(77.02, 180.52);
- auto releaseShapeParamPosition = Vec(77.02, 292.52);
- auto triggerParamPosition = Vec(90.04, 43.04);
- auto modeParamPosition = Vec(120.0, 95.0);
- auto loopParamPosition = Vec(120.0, 145.0);
- auto speedParamPosition = Vec(20.0, 321.0);
- auto retriggerParamPosition = Vec(55.0, 321.0);
+ auto delayParamPosition = Vec(27.0, 33.0);
+ auto attackParamPosition = Vec(27.0, 89.0);
+ auto decayParamPosition = Vec(27.0, 145.0);
+ auto sustainParamPosition = Vec(27.0, 201.0);
+ auto releaseParamPosition = Vec(27.0, 257.0);
+ auto holdParamPosition = Vec(82.3, 313.0);
+ auto attackShapeParamPosition = Vec(77.0, 124.0);
+ auto decayShapeParamPosition = Vec(77.0, 180.5);
+ auto releaseShapeParamPosition = Vec(77.0, 292.5);
+ auto triggerParamPosition = Vec(90.0, 43.0);
+ auto modeParamPosition = Vec(119.5, 94.5);
+ auto loopParamPosition = Vec(119.5, 144.5);
+ auto speedParamPosition = Vec(19.5, 320.5);
+ auto retriggerParamPosition = Vec(54.5, 320.5);
auto triggerInputPosition = Vec(115.0, 40.0);
diff --git a/src/DADSRHPlus.cpp b/src/DADSRHPlus.cpp
@@ -123,20 +123,20 @@ struct DADSRHPlusWidget : TriggerOnLoadModuleWidget {
addChild(createWidget<ScrewSilver>(Vec(box.size.x - 30, 365)));
// generated by svg_widgets.rb
- auto delayParamPosition = Vec(27.08, 33.08);
- auto attackParamPosition = Vec(27.08, 89.08);
- auto decayParamPosition = Vec(27.08, 145.08);
- auto sustainParamPosition = Vec(27.08, 201.08);
- auto releaseParamPosition = Vec(27.08, 257.08);
- auto holdParamPosition = Vec(82.38, 313.08);
- auto attackShapeParamPosition = Vec(77.02, 124.02);
- auto decayShapeParamPosition = Vec(77.02, 180.52);
- auto releaseShapeParamPosition = Vec(77.02, 292.52);
- auto triggerParamPosition = Vec(90.04, 43.04);
- auto modeParamPosition = Vec(120.0, 95.0);
- auto loopParamPosition = Vec(120.0, 145.0);
- auto speedParamPosition = Vec(20.0, 321.0);
- auto retriggerParamPosition = Vec(55.0, 321.0);
+ auto delayParamPosition = Vec(27.0, 33.0);
+ auto attackParamPosition = Vec(27.0, 89.0);
+ auto decayParamPosition = Vec(27.0, 145.0);
+ auto sustainParamPosition = Vec(27.0, 201.0);
+ auto releaseParamPosition = Vec(27.0, 257.0);
+ auto holdParamPosition = Vec(82.3, 313.0);
+ auto attackShapeParamPosition = Vec(77.0, 124.0);
+ auto decayShapeParamPosition = Vec(77.0, 180.5);
+ auto releaseShapeParamPosition = Vec(77.0, 292.5);
+ auto triggerParamPosition = Vec(90.0, 43.0);
+ auto modeParamPosition = Vec(119.5, 94.5);
+ auto loopParamPosition = Vec(119.5, 144.5);
+ auto speedParamPosition = Vec(19.5, 320.5);
+ auto retriggerParamPosition = Vec(54.5, 320.5);
auto delayInputPosition = Vec(152.0, 40.0);
auto attackInputPosition = Vec(152.0, 96.0);
diff --git a/src/Inv.cpp b/src/Inv.cpp
@@ -120,9 +120,9 @@ struct InvWidget : ModuleWidget {
// generated by svg_widgets.rb
auto gate1ParamPosition = Vec(13.5, 22.0);
- auto latch1ParamPosition = Vec(29.4, 81.9);
+ auto latch1ParamPosition = Vec(29.5, 82.0);
auto gate2ParamPosition = Vec(13.5, 187.0);
- auto latch2ParamPosition = Vec(29.4, 246.9);
+ auto latch2ParamPosition = Vec(29.5, 247.0);
auto gate1InputPosition = Vec(10.5, 44.0);
auto in1InputPosition = Vec(10.5, 96.0);
diff --git a/src/Mono.cpp b/src/Mono.cpp
@@ -162,9 +162,9 @@ struct MonoWidget : ModuleWidget {
auto compressionParamPosition = Vec(9.5, 99.5);
auto levelParamPosition = Vec(9.5, 205.5);
- auto polyInputPosition = Vec(10.5, 253.0);
+ auto polyInputPosition = Vec(10.5, 254.0);
- auto monoOutputPosition = Vec(10.5, 291.0);
+ auto monoOutputPosition = Vec(10.5, 292.0);
// end generated by svg_widgets.rb
addParam(createParam<Knob26>(compressionParamPosition, module, Mono::COMPRESSION_PARAM));
diff --git a/src/Shaper.cpp b/src/Shaper.cpp
@@ -106,15 +106,15 @@ struct ShaperWidget : TriggerOnLoadModuleWidget {
addChild(createWidget<ScrewSilver>(Vec(box.size.x - 15, 365)));
// generated by svg_widgets.rb
- auto attackParamPosition = Vec(29.08, 33.08);
- auto triggerParamPosition = Vec(89.04, 43.04);
- auto onParamPosition = Vec(29.08, 89.08);
- auto speedParamPosition = Vec(119.0, 96.0);
- auto decayParamPosition = Vec(29.08, 145.08);
- auto loopParamPosition = Vec(119.0, 152.0);
- auto offParamPosition = Vec(29.08, 201.08);
- auto envParamPosition = Vec(82.38, 257.08);
- auto signalParamPosition = Vec(82.38, 313.08);
+ auto attackParamPosition = Vec(29.0, 33.0);
+ auto triggerParamPosition = Vec(89.0, 43.0);
+ auto onParamPosition = Vec(29.0, 89.0);
+ auto speedParamPosition = Vec(118.5, 95.5);
+ auto decayParamPosition = Vec(29.0, 145.0);
+ auto loopParamPosition = Vec(118.5, 151.5);
+ auto offParamPosition = Vec(29.0, 201.0);
+ auto envParamPosition = Vec(82.3, 257.0);
+ auto signalParamPosition = Vec(82.3, 313.0);
auto triggerInputPosition = Vec(114.0, 40.0);
auto signalInputPosition = Vec(11.5, 320.0);
diff --git a/src/ShaperPlus.cpp b/src/ShaperPlus.cpp
@@ -106,15 +106,15 @@ struct ShaperPlusWidget : TriggerOnLoadModuleWidget {
addChild(createWidget<ScrewSilver>(Vec(box.size.x - 30, 365)));
// generated by svg_widgets.rb
- auto attackParamPosition = Vec(29.08, 33.08);
- auto triggerParamPosition = Vec(89.04, 43.04);
- auto onParamPosition = Vec(29.08, 89.08);
- auto speedParamPosition = Vec(119.0, 96.0);
- auto decayParamPosition = Vec(29.08, 145.08);
- auto loopParamPosition = Vec(119.0, 152.0);
- auto offParamPosition = Vec(29.08, 201.08);
- auto envParamPosition = Vec(82.38, 257.08);
- auto signalParamPosition = Vec(82.38, 313.08);
+ auto attackParamPosition = Vec(29.0, 33.0);
+ auto triggerParamPosition = Vec(89.0, 43.0);
+ auto onParamPosition = Vec(29.0, 89.0);
+ auto speedParamPosition = Vec(118.5, 95.5);
+ auto decayParamPosition = Vec(29.0, 145.0);
+ auto loopParamPosition = Vec(118.5, 151.5);
+ auto offParamPosition = Vec(29.0, 201.0);
+ auto envParamPosition = Vec(82.3, 257.0);
+ auto signalParamPosition = Vec(82.3, 313.0);
auto triggerInputPosition = Vec(114.0, 40.0);
auto attackInputPosition = Vec(152.0, 40.0);
diff --git a/src/Switch.cpp b/src/Switch.cpp
@@ -138,7 +138,7 @@ struct SwitchWidget : ModuleWidget {
// generated by svg_widgets.rb
auto gateParamPosition = Vec(13.5, 22.0);
- auto latchParamPosition = Vec(31.4, 83.9);
+ auto latchParamPosition = Vec(31.5, 84.0);
auto gateInputPosition = Vec(10.5, 44.0);
auto high1InputPosition = Vec(10.5, 100.0);
diff --git a/src/VCAmp.cpp b/src/VCAmp.cpp
@@ -52,7 +52,7 @@ struct VCAmpWidget : ModuleWidget {
addChild(createWidget<ScrewSilver>(Vec(box.size.x - 15, 365)));
// generated by svg_widgets.rb
- auto levelParamPosition = Vec(13.5, 18.0);
+ auto levelParamPosition = Vec(13.5, 20.5);
auto cvInputPosition = Vec(10.5, 213.0);
auto inInputPosition = Vec(10.5, 248.0);
diff --git a/src/Walk.cpp b/src/Walk.cpp
@@ -144,7 +144,7 @@ struct WalkWidget : ModuleWidget {
addChild(createWidget<ScrewSilver>(Vec(box.size.x - 15, 365)));
// generated by svg_widgets.rb
- auto rateParamPosition = Vec(8.0, 36.0);
+ auto rateParamPosition = Vec(8.0, 36.5);
auto offsetParamPosition = Vec(14.5, 91.0);
auto scaleParamPosition = Vec(14.5, 130.0);
diff --git a/src/XCO.cpp b/src/XCO.cpp
@@ -319,7 +319,7 @@ struct XCOWidget : ModuleWidget {
auto frequencyParamPosition = Vec(40.0, 45.0);
auto fineParamPosition = Vec(47.0, 153.0);
auto slowParamPosition = Vec(112.0, 157.2);
- auto fmParamPosition = Vec(55.0, 194.0);
+ auto fmDepthParamPosition = Vec(55.0, 194.0);
auto fmTypeParamPosition = Vec(101.5, 256.5);
auto squarePwParamPosition = Vec(147.0, 60.0);
auto squarePhaseParamPosition = Vec(147.0, 148.0);
@@ -361,7 +361,7 @@ struct XCOWidget : ModuleWidget {
addParam(createParam<Knob68>(frequencyParamPosition, module, XCO::FREQUENCY_PARAM));
addParam(createParam<Knob16>(fineParamPosition, module, XCO::FINE_PARAM));
addParam(createParam<IndicatorButtonGreen9>(slowParamPosition, module, XCO::SLOW_PARAM));
- addParam(createParam<Knob38>(fmParamPosition, module, XCO::FM_DEPTH_PARAM));
+ addParam(createParam<Knob38>(fmDepthParamPosition, module, XCO::FM_DEPTH_PARAM));
addParam(createParam<SliderSwitch2State14>(fmTypeParamPosition, module, XCO::FM_TYPE_PARAM));
addParam(createParam<Knob16>(squarePwParamPosition, module, XCO::SQUARE_PW_PARAM));
addParam(createParam<Knob16>(squarePhaseParamPosition, module, XCO::SQUARE_PHASE_PARAM));
diff --git a/src/XFade.cpp b/src/XFade.cpp
@@ -63,7 +63,7 @@ struct XFadeWidget : ModuleWidget {
// generated by svg_widgets.rb
auto mixParamPosition = Vec(8.0, 36.0);
auto curveParamPosition = Vec(14.5, 152.5);
- auto linearParamPosition = Vec(25.4, 176.9);
+ auto linearParamPosition = Vec(25.5, 177.0);
auto mixInputPosition = Vec(10.5, 77.0);
auto aInputPosition = Vec(10.5, 213.0);