You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

92 lines
2.0 KiB

require 'cairo'
require_relative 'arg_loader'
require_relative 'color_validator'
module Squib
# @api private
module Args
class Draw
include ArgLoader
include ColorValidator
def initialize(custom_colors, dsl_method_defaults = {})
@custom_colors = custom_colors
@dsl_method_defaults = dsl_method_defaults
end
def self.parameters
{ color: :black,
fill_color: '#0000',
stroke_color: :black,
stroke_width: 2.0,
stroke_strategy: :fill_first,
join: :miter,
cap: 'butt',
dash: ''
}
end
def self.expanding_parameters
parameters.keys # all of them are expandable
end
def self.params_with_units
[:stroke_width]
end
def validate_join(arg, _i)
case arg.to_s.strip.downcase
when 'miter'
Cairo::LINE_JOIN_MITER
when 'round'
Cairo::LINE_JOIN_ROUND
when 'bevel'
Cairo::LINE_JOIN_BEVEL
end
end
def validate_cap(arg, _i)
case arg.to_s.strip.downcase
when 'butt'
Cairo::LINE_CAP_BUTT
when 'round'
Cairo::LINE_CAP_ROUND
when 'square'
Cairo::LINE_CAP_SQUARE
end
end
def validate_dash(arg, _i)
arg.to_s.split.collect do |x|
UnitConversion.parse(x, @dpi).to_f
end
end
def validate_fill_color(arg, _i)
colorify(arg, @custom_colors)
end
def validate_stroke_color(arg, _i)
colorify(arg, @custom_colors)
end
def validate_color(arg, _i)
colorify(arg, @custom_colors)
end
def validate_stroke_strategy(arg, _i)
case arg.to_s.downcase.strip
when 'fill_first'
:fill_first
when 'stroke_first'
:stroke_first
else
raise "Only 'stroke_first' or 'fill_first' allowed"
end
end
end
end
end