require_relative 'svg_file' module DHE class Control attr_reader :faceplate, :width, :height, :top, :right, :bottom, :left, :x, :y def initialize(faceplate:, top:, right:, bottom:, left:, x: (right + left) / 2.0, y: (bottom + top) / 2.0) @faceplate = faceplate @top = top @right = right @bottom = bottom @left = left @width = right - left @height = bottom - top @x = x @y = y end def self.centered(x:, y:, width:, height: width) {left: x - width / 2, right: x + width / 2, top: y - height / 2, bottom: y + height / 2, } end def draw_control(svg:, **options) draw(svg: svg, x: width / 2.0, y: height / 2.0, **options) end def draw_faceplate(svg:) draw(svg: svg, x: @x, y: @y) end def svg_file(path:, has_text: false) SvgFile.new(path: path, width: "#{width}mm", height: "#{height}mm", viewBox: "0 0 #{width} #{height}", has_text: has_text) do |svg| yield svg end end end class RoundControl < Control attr_reader :diameter def initialize(faceplate:, x:, y:, diameter:) super(faceplate: faceplate, **Control::centered(x: x, y: y, width: diameter, height: diameter)) @diameter = diameter end def radius diameter / 2 end end end