Browse Source

Starting paint args class - not integrated yet.

Draw args also now requires custom_colors from Deck. (Can't trust caller to override the default.)
dev
Andy Meneely 11 years ago
parent
commit
08d0ac2b60
  1. 11
      lib/squib/api/image.rb
  2. 16
      lib/squib/api/shapes.rb
  3. 2
      lib/squib/api/text.rb
  4. 2
      lib/squib/args/draw.rb
  5. 44
      lib/squib/args/paint.rb
  6. 22
      spec/args/paint_spec.rb

11
lib/squib/api/image.rb

@ -1,3 +1,5 @@
require 'squib/args/paint'
require 'squib/args/card_range'
module Squib
class Deck
@ -21,7 +23,14 @@ module Squib
# @return [nil] Returns nil
# @api public
def png(opts = {})
opts = needs(opts, [:range, :files, :x, :y, :width, :height, :alpha, :layout, :blend, :angle, :mask])
range = Args::CardRange.new(opts[:range], deck_size: size)
paint = Args::Paint.new(custom_colors).load!(opts, expand_by: size, layout: layout)
opts = needs(opts, [:range,
:files,
:x, :y, :width, :height,
:angle,
:alpha, :blend, :mask,
:layout])
Dir.chdir(img_dir) do
@progress_bar.start('Loading PNG(s)', opts[:range].size) do |bar|
opts[:range].each do |i|

16
lib/squib/api/shapes.rb

@ -33,7 +33,7 @@ module Squib
def rect(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size)
box = Args::Box.new(self).load!(opts, expand_by: size, layout: layout, dpi: dpi)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].rect(box[i], draw[i]) }
end
@ -58,7 +58,7 @@ module Squib
def circle(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size)
coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].circle(coords[i], draw[i]) }
end
@ -83,7 +83,7 @@ module Squib
# @api public
def ellipse(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
box = Args::Box.new(self).load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].ellipse(box[i], draw[i]) }
end
@ -111,7 +111,7 @@ module Squib
# @api public
def triangle(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].triangle(coords[i], draw[i]) }
end
@ -135,7 +135,7 @@ module Squib
# @api public
def line(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].line(coords[i], draw[i]) }
end
@ -161,7 +161,7 @@ module Squib
# @api public
def curve(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].curve(coords[i], draw[i]) }
end
@ -186,7 +186,7 @@ module Squib
# @api public
def star(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
trans = Args::Transform.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].star(coords[i], trans[i], draw[i]) }
@ -212,7 +212,7 @@ module Squib
# @api public
def polygon(opts = {})
range = Args::CardRange.new(opts[:range], deck_size: size)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
trans = Args::Transform.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
range.each { |i| @cards[i].polygon(coords[i], trans[i], draw[i]) }

2
lib/squib/api/text.rb

@ -53,7 +53,7 @@ module Squib
para = Args::Paragraph.new(font).load!(opts, expand_by: size, layout: layout)
box = Args::Box.new(self).load!(opts, expand_by: size, layout: layout, dpi: dpi)
trans = Args::Transform.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
draw = Args::Draw.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
embed = TextEmbed.new
yield(embed) if block_given? #store the opts for later use
extents = Array.new(@cards.size)

2
lib/squib/args/draw.rb

@ -10,7 +10,7 @@ module Squib
include ArgLoader
include ColorValidator
def initialize(custom_colors = {})
def initialize(custom_colors)
@custom_colors = custom_colors
end

44
lib/squib/args/paint.rb

@ -0,0 +1,44 @@
require 'cairo'
require 'squib/args/arg_loader'
require 'squib/args/color_validator'
module Squib
# @api private
module Args
class Paint
include ArgLoader
include ColorValidator
def self.parameters
{ alpha: 1.0,
blend: :none,
mask: nil,
}
end
def self.expanding_parameters
parameters.keys # all of them are expandable
end
def self.params_with_units
[]
end
def initialize(custom_colors)
@custom_colors = custom_colors
end
def validate_alpha(arg, _i)
raise 'alpha must respond to to_f' unless arg.respond_to? :to_f
arg.to_f
end
def validate_mask(arg, _i)
colorify(arg, @custom_colors)
end
end
end
end

22
spec/args/paint_spec.rb

@ -0,0 +1,22 @@
require 'spec_helper'
require 'squib/args/paint'
describe Squib::Args::Draw do
let(:custom_colors) { {'foo' => 'abc'} }
subject(:paint) {Squib::Args::Paint.new(custom_colors)}
context 'alpha' do
it 'can be a float' do
args = {alpha: 0.6}
paint.load!(args)
expect(paint.alpha).to eq [0.6]
end
it 'raises exception when not a float' do
args = {alpha: /6/}
expect { paint.load!(args) }.to raise_error('alpha must respond to to_f')
end
end
end
Loading…
Cancel
Save