Browse Source

Implemented sheet command

dev
Andy Meneely 11 years ago
parent
commit
fd217294c5
  1. 3
      CHANGELOG.md
  2. 2
      lib/squib/api/shapes.rb
  3. 4
      lib/squib/constants.rb
  4. 57
      lib/squib/graphics/save_doc.rb
  5. 18
      lib/squib/input_helpers.rb
  6. 14
      samples/save_pdf.rb
  7. 32
      samples/saves.rb
  8. 702
      spec/data/samples/saves.rb.txt
  9. 16
      spec/input_helpers_spec.rb
  10. 2
      spec/samples/samples_regression_spec.rb
  11. 1
      spec/spec_helper.rb

3
CHANGELOG.md

@ -1,8 +1,11 @@
# Squib CHANGELOG
## v0.1.0.txt
* Added `save_sheet` command that saves a range into PNG sheets, complete with trim, gap, margin, columns, and sometimes automagically computed rows. See samples/saves.rb.
* Unit conversion! Now you can write "2in" and it will convert based on the current dpi. `save_pdf` not supported (yet).
* `png` now supports resizing, but warns you about it since it's non-ideal. Documented in yard, tested.
* Added sample `unicode.rb` to show lots of game-related unicode characters
* More obsessive automated testing and continuous integration work.
## v0.0.6
* Added a `csv` command that works just like `xslx`. Uses Ruby's CSV inside, with some extra checking and warnings.

2
lib/squib/api/shapes.rb

@ -50,7 +50,7 @@ module Squib
# @return [nil] intended to be void
# @api public
def circle(opts = {})
opts = {radius: 100}.merge(opts)
opts = {radius: 100}.merge(opts) # overriding the non-system default
opts = needs(opts, [:range, :x, :y, :circle_radius, :layout,
:fill_color, :stroke_color, :stroke_width])
opts[:range].each do |i|

4
lib/squib/constants.rb

@ -8,6 +8,7 @@ module Squib
:angle => 0,
:blend => :none,
:color => :black,
:columns => 1,
:default_font => 'Arial 36',
:dir => '_output',
:ellipsize => :end,
@ -27,6 +28,7 @@ module Squib
:progress_bar => false,
:range => :all,
:rotate => false,
:rows => :infinite,
:sheet => 0,
:spacing => 0,
:str => '',
@ -62,7 +64,7 @@ module Squib
# These are parameters that are intended to be "expanded" across
# range if they are singletons.
#
# For example, using a different font for each card, using one `text`
# For example: using a different font for each card, using one `text` command
#
# key: the internal name of the param (e.g. :files)
# value: the user-facing API key (e.g. file: 'abc.png')

57
lib/squib/graphics/save_doc.rb

@ -40,6 +40,63 @@ module Squib
end
end
# Lays out the cards in range and renders a stitched PNG sheet
#
# @example
# save_png_sheet prefix: 'sheet_', margin: 75, gap: 5, trim: 37
#
# @option opts [Enumerable] range (:all) the range of cards over which this will be rendered. See {file:README.md#Specifying_Ranges Specifying Ranges}
# @option opts colulmns [Integer] (1) the number of columns in the grid
# @option opts rows [Integer] (:infinite) the number of rows in the grid. When set to :infinite, the sheet scales to the rows needed. If there are more cards than rows*columns, new sheets are started.
# @option opts [String] prefix (card_) the prefix of the file name(s)
# @option opts dir [String] (_output) the directory to save to. Created if it doesn't exist.
# @option opts margin [Integer] (0) the margin around the outside of the page
# @option opts gap [Integer] (0) the space in pixels between the cards
# @option opts trim [Integer] (0) the space around the edge of each card to trim (e.g. to cut off the bleed margin for print-and-play)
# @return [nil]
# @api public
def save_sheet(opts = {})
opts = {margin: 0}.merge(opts) # overriding the non-system default
p = needs(opts, [:range, :prefix, :creatable_dir, :margin, :gap, :trim, :rows, :columns])
# EXTRACT METHOD HERE
sheet_width = (p[:columns] * (@width + 2 * p[:gap] - 2 * p[:trim])) + (2 * p[:margin])
sheet_height = (p[:rows] * (@height + 2 * p[:gap] - 2 * p[:trim])) + (2 * p[:margin])
cc = Cairo::Context.new(Cairo::ImageSurface.new(sheet_width, sheet_height))
num_this_sheet = 0
sheet_num = 0
x, y = p[:margin], p[:margin]
@progress_bar.start("Saving PNG sheet to #{p[:dir]}/#{p[:prefix]}_*", @cards.size + 1) do |bar|
p[:range].each do |i|
if num_this_sheet >= (p[:columns] * p[:rows]) # new sheet
cc.target.write_to_png("#{p[:dir]}/#{p[:prefix]}#{sheet_num}.png")
new_sheet = false
num_this_sheet = 0
sheet_num += 1
x, y = p[:margin], p[:margin]
cc = Cairo::Context.new(Cairo::ImageSurface.new(sheet_width, sheet_height))
end
surface = trim(@cards[i].cairo_surface, p[:trim], @width, @height)
cc.set_source(surface, x, y)
cc.paint
bar.increment
num_this_sheet += 1
x += surface.width + p[:gap]
if num_this_sheet % p[:columns] == 0 # new row
x = p[:margin]
y += surface.height + p[:gap]
end
bar.increment
end
cc.target.write_to_png("#{p[:dir]}/#{p[:prefix]}#{sheet_num}.png")
end
end
# Return a new Cairo::ImageSurface that is trimmed from the original
#
# @param surface The surface to trim
# @param trim The number of pixels around the edge to trim
# @width width The width of the surface prior to the trim
# @height height The height of the surface prior to the trim
# :nodoc:
# @api private
def trim(surface, trim, width, height)

18
lib/squib/input_helpers.rb

@ -1,5 +1,4 @@
require 'squib/constants'
require 'squib/api/units'
module Squib
# :nodoc:
@ -28,6 +27,7 @@ module Squib
opts = svgidify(opts) if params.include? :svgid
opts = formatify(opts) if params.include? :formats
opts = rotateify(opts) if params.include? :rotate
opts = rowify(opts) if params.include? :rows
opts = convert_units(opts, params)
opts
end
@ -192,7 +192,7 @@ module Squib
end
module_function :rotateify
@@INCHES_IN_CM = 0.393700787
@@INCHES_IN_CM = 0.393700787
# Convert units
# :nodoc:
# @api private
@ -214,5 +214,19 @@ module Squib
end
module_function :convert_units
# Handles expanding rows. If the "rows" does not respond to to_i (e.g. :infinite),
# then compute what we need based on number of cards and number of columns.
# :nodoc:
# @api private
def rowify(opts)
unless opts[:rows].respond_to? :to_i
raise "Columns must be an integer" unless opts[:columns].respond_to? :to_i
opts[:rows] = (@cards.size / opts[:columns].to_i).ceil
end
opts
end
end
end

14
samples/save_pdf.rb

@ -1,14 +0,0 @@
#!/usr/bin/env ruby
require 'squib'
Squib::Deck.new(width: 825, height: 1125, cards: 16) do
background color: :gray
rect x: 38, y: 38, width: 750, height: 1050, x_radius: 38, y_radius: 38
text str: (1..16).to_a, x: 220, y: 78, font: 'Arial 54'
save_pdf file: 'sample-save-pdf.pdf', margin: 75, gap: 5, trim: 37
#Note that our PNGs still are not trimmed even though the pdf ones are
save_png range: 1, prefix: 'save_pdf_'
end

32
samples/saves.rb

@ -0,0 +1,32 @@
require 'squib'
# This sample demonstrates how to use the various save methods
Squib::Deck.new(width: 825, height: 1125, cards: 16) do
background color: :gray
rect x: 38, y: 38, width: 750, height: 1050, x_radius: 38, y_radius: 38
text str: (1..16).to_a, x: 220, y: 78, font: 'Arial 54'
# Place on multiple pages over the PDF, with bleed beeing trimmed off
save_pdf file: 'save-pdf.pdf', margin: 75, gap: 5, trim: 37
# Note that our PNGs still are not trimmed even though the pdf ones were
save_png range: 1, prefix: 'saves_notrim_'
# We can also save our PNGs into a single sheet,
# rows are calculated based on cols and number of cards
save_sheet prefix: 'save_single_sheet_',
columns: 2, margin: 75, gap: 5, trim: 37
# Or multiple sheets if rows are also specified
save_sheet prefix: 'save_sheet_',
columns: 4, rows: 2,
margin: 75, gap: 5, trim: 37
# Sheets support ranges too
save_sheet prefix: 'save_sheet_range_',
range: 0..5,
columns: 2, rows: 2,
margin: 75, gap: 5, trim: 37
end

702
spec/data/samples/saves.rb.txt

@ -0,0 +1,702 @@
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.501960784313725, @green=0.501960784313725, @blue=0.501960784313725>])
cairo: paint([])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.501960784313725, @green=0.501960784313725, @blue=0.501960784313725>])
cairo: paint([])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.501960784313725, @green=0.501960784313725, @blue=0.501960784313725>])
cairo: paint([])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.501960784313725, @green=0.501960784313725, @blue=0.501960784313725>])
cairo: paint([])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.501960784313725, @green=0.501960784313725, @blue=0.501960784313725>])
cairo: paint([])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.501960784313725, @green=0.501960784313725, @blue=0.501960784313725>])
cairo: paint([])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.501960784313725, @green=0.501960784313725, @blue=0.501960784313725>])
cairo: paint([])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.501960784313725, @green=0.501960784313725, @blue=0.501960784313725>])
cairo: paint([])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.501960784313725, @green=0.501960784313725, @blue=0.501960784313725>])
cairo: paint([])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.501960784313725, @green=0.501960784313725, @blue=0.501960784313725>])
cairo: paint([])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.501960784313725, @green=0.501960784313725, @blue=0.501960784313725>])
cairo: paint([])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.501960784313725, @green=0.501960784313725, @blue=0.501960784313725>])
cairo: paint([])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.501960784313725, @green=0.501960784313725, @blue=0.501960784313725>])
cairo: paint([])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.501960784313725, @green=0.501960784313725, @blue=0.501960784313725>])
cairo: paint([])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.501960784313725, @green=0.501960784313725, @blue=0.501960784313725>])
cairo: paint([])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.501960784313725, @green=0.501960784313725, @blue=0.501960784313725>])
cairo: paint([])
cairo: restore([])
cairo: save([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: set_line_width([2.0])
cairo: stroke([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: fill([])
cairo: restore([])
cairo: save([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: set_line_width([2.0])
cairo: stroke([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: fill([])
cairo: restore([])
cairo: save([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: set_line_width([2.0])
cairo: stroke([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: fill([])
cairo: restore([])
cairo: save([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: set_line_width([2.0])
cairo: stroke([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: fill([])
cairo: restore([])
cairo: save([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: set_line_width([2.0])
cairo: stroke([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: fill([])
cairo: restore([])
cairo: save([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: set_line_width([2.0])
cairo: stroke([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: fill([])
cairo: restore([])
cairo: save([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: set_line_width([2.0])
cairo: stroke([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: fill([])
cairo: restore([])
cairo: save([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: set_line_width([2.0])
cairo: stroke([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: fill([])
cairo: restore([])
cairo: save([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: set_line_width([2.0])
cairo: stroke([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: fill([])
cairo: restore([])
cairo: save([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: set_line_width([2.0])
cairo: stroke([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: fill([])
cairo: restore([])
cairo: save([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: set_line_width([2.0])
cairo: stroke([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: fill([])
cairo: restore([])
cairo: save([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: set_line_width([2.0])
cairo: stroke([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: fill([])
cairo: restore([])
cairo: save([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: set_line_width([2.0])
cairo: stroke([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: fill([])
cairo: restore([])
cairo: save([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: set_line_width([2.0])
cairo: stroke([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: fill([])
cairo: restore([])
cairo: save([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: set_line_width([2.0])
cairo: stroke([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: fill([])
cairo: restore([])
cairo: save([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: set_line_width([2.0])
cairo: stroke([])
cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: fill([])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: translate([220, 78])
cairo: rotate([0])
cairo: translate([-220, -78])
cairo: move_to([220, 78])
pango: font_description=([])
pango: text=(["1"])
pango: wrap=([#<Pango::Layout::WrapMode word-char>])
pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
pango: alignment=([#<Pango::Layout::Alignment left>])
pango: justify=([false])
pango: spacing=([0])
cairo: update_pango_layout([MockDouble])
cairo: update_pango_layout([MockDouble])
cairo: show_pango_layout([MockDouble])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: translate([220, 78])
cairo: rotate([0])
cairo: translate([-220, -78])
cairo: move_to([220, 78])
pango: font_description=([])
pango: text=(["2"])
pango: wrap=([#<Pango::Layout::WrapMode word-char>])
pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
pango: alignment=([#<Pango::Layout::Alignment left>])
pango: justify=([false])
pango: spacing=([0])
cairo: update_pango_layout([MockDouble])
cairo: update_pango_layout([MockDouble])
cairo: show_pango_layout([MockDouble])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: translate([220, 78])
cairo: rotate([0])
cairo: translate([-220, -78])
cairo: move_to([220, 78])
pango: font_description=([])
pango: text=(["3"])
pango: wrap=([#<Pango::Layout::WrapMode word-char>])
pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
pango: alignment=([#<Pango::Layout::Alignment left>])
pango: justify=([false])
pango: spacing=([0])
cairo: update_pango_layout([MockDouble])
cairo: update_pango_layout([MockDouble])
cairo: show_pango_layout([MockDouble])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: translate([220, 78])
cairo: rotate([0])
cairo: translate([-220, -78])
cairo: move_to([220, 78])
pango: font_description=([])
pango: text=(["4"])
pango: wrap=([#<Pango::Layout::WrapMode word-char>])
pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
pango: alignment=([#<Pango::Layout::Alignment left>])
pango: justify=([false])
pango: spacing=([0])
cairo: update_pango_layout([MockDouble])
cairo: update_pango_layout([MockDouble])
cairo: show_pango_layout([MockDouble])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: translate([220, 78])
cairo: rotate([0])
cairo: translate([-220, -78])
cairo: move_to([220, 78])
pango: font_description=([])
pango: text=(["5"])
pango: wrap=([#<Pango::Layout::WrapMode word-char>])
pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
pango: alignment=([#<Pango::Layout::Alignment left>])
pango: justify=([false])
pango: spacing=([0])
cairo: update_pango_layout([MockDouble])
cairo: update_pango_layout([MockDouble])
cairo: show_pango_layout([MockDouble])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: translate([220, 78])
cairo: rotate([0])
cairo: translate([-220, -78])
cairo: move_to([220, 78])
pango: font_description=([])
pango: text=(["6"])
pango: wrap=([#<Pango::Layout::WrapMode word-char>])
pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
pango: alignment=([#<Pango::Layout::Alignment left>])
pango: justify=([false])
pango: spacing=([0])
cairo: update_pango_layout([MockDouble])
cairo: update_pango_layout([MockDouble])
cairo: show_pango_layout([MockDouble])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: translate([220, 78])
cairo: rotate([0])
cairo: translate([-220, -78])
cairo: move_to([220, 78])
pango: font_description=([])
pango: text=(["7"])
pango: wrap=([#<Pango::Layout::WrapMode word-char>])
pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
pango: alignment=([#<Pango::Layout::Alignment left>])
pango: justify=([false])
pango: spacing=([0])
cairo: update_pango_layout([MockDouble])
cairo: update_pango_layout([MockDouble])
cairo: show_pango_layout([MockDouble])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: translate([220, 78])
cairo: rotate([0])
cairo: translate([-220, -78])
cairo: move_to([220, 78])
pango: font_description=([])
pango: text=(["8"])
pango: wrap=([#<Pango::Layout::WrapMode word-char>])
pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
pango: alignment=([#<Pango::Layout::Alignment left>])
pango: justify=([false])
pango: spacing=([0])
cairo: update_pango_layout([MockDouble])
cairo: update_pango_layout([MockDouble])
cairo: show_pango_layout([MockDouble])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: translate([220, 78])
cairo: rotate([0])
cairo: translate([-220, -78])
cairo: move_to([220, 78])
pango: font_description=([])
pango: text=(["9"])
pango: wrap=([#<Pango::Layout::WrapMode word-char>])
pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
pango: alignment=([#<Pango::Layout::Alignment left>])
pango: justify=([false])
pango: spacing=([0])
cairo: update_pango_layout([MockDouble])
cairo: update_pango_layout([MockDouble])
cairo: show_pango_layout([MockDouble])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: translate([220, 78])
cairo: rotate([0])
cairo: translate([-220, -78])
cairo: move_to([220, 78])
pango: font_description=([])
pango: text=(["10"])
pango: wrap=([#<Pango::Layout::WrapMode word-char>])
pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
pango: alignment=([#<Pango::Layout::Alignment left>])
pango: justify=([false])
pango: spacing=([0])
cairo: update_pango_layout([MockDouble])
cairo: update_pango_layout([MockDouble])
cairo: show_pango_layout([MockDouble])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: translate([220, 78])
cairo: rotate([0])
cairo: translate([-220, -78])
cairo: move_to([220, 78])
pango: font_description=([])
pango: text=(["11"])
pango: wrap=([#<Pango::Layout::WrapMode word-char>])
pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
pango: alignment=([#<Pango::Layout::Alignment left>])
pango: justify=([false])
pango: spacing=([0])
cairo: update_pango_layout([MockDouble])
cairo: update_pango_layout([MockDouble])
cairo: show_pango_layout([MockDouble])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: translate([220, 78])
cairo: rotate([0])
cairo: translate([-220, -78])
cairo: move_to([220, 78])
pango: font_description=([])
pango: text=(["12"])
pango: wrap=([#<Pango::Layout::WrapMode word-char>])
pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
pango: alignment=([#<Pango::Layout::Alignment left>])
pango: justify=([false])
pango: spacing=([0])
cairo: update_pango_layout([MockDouble])
cairo: update_pango_layout([MockDouble])
cairo: show_pango_layout([MockDouble])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: translate([220, 78])
cairo: rotate([0])
cairo: translate([-220, -78])
cairo: move_to([220, 78])
pango: font_description=([])
pango: text=(["13"])
pango: wrap=([#<Pango::Layout::WrapMode word-char>])
pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
pango: alignment=([#<Pango::Layout::Alignment left>])
pango: justify=([false])
pango: spacing=([0])
cairo: update_pango_layout([MockDouble])
cairo: update_pango_layout([MockDouble])
cairo: show_pango_layout([MockDouble])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: translate([220, 78])
cairo: rotate([0])
cairo: translate([-220, -78])
cairo: move_to([220, 78])
pango: font_description=([])
pango: text=(["14"])
pango: wrap=([#<Pango::Layout::WrapMode word-char>])
pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
pango: alignment=([#<Pango::Layout::Alignment left>])
pango: justify=([false])
pango: spacing=([0])
cairo: update_pango_layout([MockDouble])
cairo: update_pango_layout([MockDouble])
cairo: show_pango_layout([MockDouble])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: translate([220, 78])
cairo: rotate([0])
cairo: translate([-220, -78])
cairo: move_to([220, 78])
pango: font_description=([])
pango: text=(["15"])
pango: wrap=([#<Pango::Layout::WrapMode word-char>])
pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
pango: alignment=([#<Pango::Layout::Alignment left>])
pango: justify=([false])
pango: spacing=([0])
cairo: update_pango_layout([MockDouble])
cairo: update_pango_layout([MockDouble])
cairo: show_pango_layout([MockDouble])
cairo: restore([])
cairo: save([])
cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
cairo: translate([220, 78])
cairo: rotate([0])
cairo: translate([-220, -78])
cairo: move_to([220, 78])
pango: font_description=([])
pango: text=(["16"])
pango: wrap=([#<Pango::Layout::WrapMode word-char>])
pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
pango: alignment=([#<Pango::Layout::Alignment left>])
pango: justify=([false])
pango: spacing=([0])
cairo: update_pango_layout([MockDouble])
cairo: update_pango_layout([MockDouble])
cairo: show_pango_layout([MockDouble])
cairo: restore([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 75, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 180, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 285, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 390, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 495, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 600, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 705, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 810, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 915, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 1020, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 1125, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 1230, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 1335, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 1440, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 1545, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 1650, 75])
cairo: paint([])
surface: write_to_png(["_output/saves_notrim_1.png"])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 75, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 180, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 75, 181])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 180, 181])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 75, 287])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 180, 287])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 75, 393])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 180, 393])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 75, 499])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 180, 499])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 75, 605])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 180, 605])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 75, 711])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 180, 711])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 75, 817])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 180, 817])
cairo: paint([])
surface: write_to_png(["_output/save_single_sheet_0.png"])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 75, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 180, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 285, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 390, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 75, 181])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 180, 181])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 285, 181])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 390, 181])
cairo: paint([])
surface: write_to_png(["_output/save_sheet_0.png"])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 75, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 180, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 285, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 390, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 75, 181])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 180, 181])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 285, 181])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 390, 181])
cairo: paint([])
surface: write_to_png(["_output/save_sheet_1.png"])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 75, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 180, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 75, 181])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 180, 181])
cairo: paint([])
surface: write_to_png(["_output/save_sheet_range_0.png"])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 75, 75])
cairo: paint([])
cairo: set_source([MockDouble, -37, -37])
cairo: paint([])
cairo: set_source([MockDouble, 180, 75])
cairo: paint([])
surface: write_to_png(["_output/save_sheet_range_1.png"])

16
spec/input_helpers_spec.rb

@ -176,4 +176,20 @@ describe Squib::InputHelpers do
end
context '#rowify' do
# it 'does nothing on an integer' do
# opts = @deck.send(:rowify, {columns: 2, rows: 2})
# expect(opts).to eq({ columns: 2,
# rows: 2
# })
# end
it 'computes properly on non-integer' do
opts = @deck.send(:rowify, {columns: 1, rows: :infinite})
expect(opts).to eq({ columns: 1,
rows: 2
})
end
end
end

2
spec/samples/samples_regression_spec.rb

@ -57,7 +57,7 @@ describe "Squib samples" do
load_images.rb
portrait-landscape.rb
ranges.rb
save_pdf.rb
saves.rb
text_options.rb
tgc_proofs.rb
units.rb

1
spec/spec_helper.rb

@ -58,6 +58,7 @@ def mock_cairo(strio)
allow(ProgressBar).to receive(:create).and_return(Squib::DoNothing.new)
allow(Cairo::ImageSurface).to receive(:new).and_return(surface)
allow(surface).to receive(:width).and_return(100)
allow(surface).to receive(:height).and_return(101)
allow(Cairo::Context).to receive(:new).and_return(cxt)
allow(cxt).to receive(:create_pango_layout).and_return(pango)
allow(cxt).to receive(:target).and_return(surface)

Loading…
Cancel
Save