squib 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +3 -1
  3. data/CHANGELOG.md +10 -0
  4. data/README.md +65 -4
  5. data/lib/squib/api/data.rb +48 -1
  6. data/lib/squib/api/text.rb +4 -2
  7. data/lib/squib/deck.rb +22 -5
  8. data/lib/squib/graphics/text.rb +4 -0
  9. data/lib/squib/layouts/hand.yml +46 -0
  10. data/lib/squib/layouts/playing-card.yml +18 -0
  11. data/lib/squib/version.rb +1 -1
  12. data/samples/cairo_access.rb +4 -3
  13. data/samples/csv_import.rb +20 -0
  14. data/samples/custom-layout.yml +5 -4
  15. data/samples/custom-layout2.yml +15 -0
  16. data/samples/custom_config.rb +0 -1
  17. data/samples/excel.rb +1 -2
  18. data/samples/layouts.rb +61 -0
  19. data/samples/ranges.rb +0 -1
  20. data/samples/sample.csv +3 -0
  21. data/samples/text_options.rb +14 -3
  22. data/samples/tgc_proofs.rb +0 -1
  23. data/samples/units.rb +1 -1
  24. data/spec/api/api_data_spec.rb +31 -0
  25. data/spec/api/api_image_spec.rb +38 -0
  26. data/spec/data/csv/basic.csv +3 -0
  27. data/spec/data/csv/dup_cols.csv +3 -0
  28. data/spec/data/csv/with_spaces.csv +3 -0
  29. data/spec/data/{easy-circular-extends.yml → layouts/easy-circular-extends.yml} +0 -0
  30. data/spec/data/{hard-circular-extends.yml → layouts/hard-circular-extends.yml} +0 -0
  31. data/spec/data/{multi-extends-single-entry.yml → layouts/multi-extends-single-entry.yml} +0 -0
  32. data/spec/data/{multi-level-extends.yml → layouts/multi-level-extends.yml} +0 -0
  33. data/spec/data/layouts/multifile-a.yml +4 -0
  34. data/spec/data/layouts/multifile-b.yml +4 -0
  35. data/spec/data/layouts/multifile-extends-a.yml +8 -0
  36. data/spec/data/layouts/multifile-extends-b.yml +9 -0
  37. data/spec/data/{no-extends.yml → layouts/no-extends.yml} +0 -0
  38. data/spec/data/{pre-extends.yml → layouts/pre-extends.yml} +0 -0
  39. data/spec/data/{self-circular-extends.yml → layouts/self-circular-extends.yml} +0 -0
  40. data/spec/data/{single-extends.yml → layouts/single-extends.yml} +0 -0
  41. data/spec/data/{single-level-multi-extends.yml → layouts/single-level-multi-extends.yml} +0 -0
  42. data/spec/data/samples/autoscale_font.rb.txt +81 -0
  43. data/spec/data/samples/basic.rb.txt +206 -0
  44. data/spec/data/samples/cairo_access.rb.txt +25 -0
  45. data/spec/data/samples/colors.rb.txt +124 -0
  46. data/spec/data/samples/csv_import.rb.txt +112 -0
  47. data/spec/data/samples/custom_config.rb.txt +45 -0
  48. data/spec/data/samples/draw_shapes.rb.txt +35 -0
  49. data/spec/data/samples/excel.rb.txt +168 -0
  50. data/spec/data/samples/hello_world.rb.txt +36 -0
  51. data/spec/data/samples/layouts.rb.txt +489 -0
  52. data/spec/data/samples/load_images.rb.txt +104 -0
  53. data/spec/data/samples/portrait-landscape.rb.txt +49 -0
  54. data/spec/data/samples/ranges.rb.txt +426 -0
  55. data/spec/data/samples/save_pdf.rb.txt +545 -0
  56. data/spec/data/samples/text_options.rb.txt +819 -0
  57. data/spec/data/samples/tgc_proofs.rb.txt +81 -0
  58. data/spec/data/samples/units.rb.txt +14 -0
  59. data/spec/deck_spec.rb +33 -9
  60. data/spec/graphics/graphics_text_spec.rb +7 -5
  61. data/spec/samples/samples_regression_spec.rb +73 -0
  62. data/spec/spec_helper.rb +64 -2
  63. data/squib.gemspec +2 -2
  64. metadata +100 -27
  65. data/samples/use_layout.rb +0 -34
  66. data/spec/samples_run_spec.rb +0 -20
@@ -0,0 +1,15 @@
1
+ # Used in the layouts.rb sample in conjunction with custom-layout.yml
2
+ #
3
+ # When used with custom-layout.yml loaded first, this layout overrides subtitle
4
+ subtitle:
5
+ x: 150
6
+ y: 150
7
+ width: 575
8
+ height: 60
9
+ align: left
10
+ valign: middle
11
+ font_size: 25
12
+ # This one is completely new
13
+ description:
14
+ extends: subtitle
15
+ y: += 350
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env ruby
2
1
  require 'squib'
3
2
 
4
3
  Squib::Deck.new(config: 'custom-config.yml') do
data/samples/excel.rb CHANGED
@@ -1,7 +1,6 @@
1
- #!/usr/bin/env ruby
2
1
  require 'squib'
3
2
 
4
- Squib::Deck.new(width: 825, height: 1125, cards: 3) do
3
+ Squib::Deck.new(cards: 3) do
5
4
  background color: :white
6
5
 
7
6
  # Takes the first sheet by default
@@ -0,0 +1,61 @@
1
+ # encoding: utf-8
2
+ require 'squib'
3
+
4
+ Squib::Deck.new(layout: 'custom-layout.yml') do
5
+ background color: :white
6
+ hint text: :cyan
7
+
8
+ # Layouts are YAML files that specify any option as a default
9
+ rect layout: :frame
10
+
11
+ # You can also override a given layout entry in the command
12
+ circle layout: :frame, x: 50, y: 50, radius: 25
13
+
14
+ # Lots of commands have the :layout option
15
+ text str: 'The Title', layout: :title
16
+
17
+ # Layouts also support YAML merge keys toreuse settings
18
+ svg file: 'spanner.svg', layout: :icon_left
19
+ png file: 'shiny-purse.png', layout: :icon_middle
20
+ svg file: 'spanner.svg', layout: :icon_right
21
+
22
+ # Squib has its own, richer merge key: "extends"
23
+ rect fill_color: :black, layout: :bonus
24
+ rect fill_color: :white, layout: :bonus_inner
25
+ text str: 'Extends!', layout: :bonus_text
26
+
27
+ # Strings can also be used to specify a layout (e.g. from a data file)
28
+ text str: 'subtitle', layout: 'subtitle'
29
+
30
+ # For debugging purposes, you can always print out the loaded layout
31
+ #require 'pp'
32
+ #pp @layout
33
+
34
+ save_png prefix: 'layout_'
35
+ end
36
+
37
+ Squib::Deck.new(layout: ['custom-layout.yml', 'custom-layout2.yml']) do
38
+ text str: 'The Title', layout: :title # from custom-layout.yml
39
+ text str: 'The Subtitle', layout: :subtitle # redefined in custom-layout2.yml
40
+ text str: 'The Description', layout: :description # from custom-layout2.yml
41
+ save_png prefix: 'layout2_'
42
+ end
43
+
44
+ # Built-in layouts are easy to use and extend
45
+ Squib::Deck.new(layout: 'playing-card.yml') do
46
+ text str: "A\u2660", layout: :bonus_ul, font: 'Sans bold 100', hint: :red
47
+ text str: "A\u2660", layout: :bonus_lr, font: 'Sans bold 100', hint: :red
48
+ text str: "artwork here", layout: :art, hint: :red
49
+ save_png prefix: 'layout_builtin_playing_card_'
50
+ end
51
+
52
+ # Built-in layouts are easy to use and extend
53
+ Squib::Deck.new(layout: 'hand.yml') do
54
+ %w(title bonus1 bonus2 bonus3 bonus4 bonus5
55
+ description snark art).each do |icon|
56
+ text str: icon.capitalize, layout: icon,
57
+ hint: :red, valign: 'middle', align: 'center'
58
+ end
59
+ png file: 'pokercard.png', alpha: 0.5
60
+ save_png prefix: 'layout_builtin_hand_'
61
+ end
data/samples/ranges.rb CHANGED
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env ruby
2
1
  require 'squib'
3
2
 
4
3
  data = {'name' => ['Thief', 'Grifter', 'Mastermind'],
@@ -0,0 +1,3 @@
1
+ Type,"Quantity"
2
+ Thief,2
3
+ Mastermind,1
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby
1
+ # encoding: UTF-8
2
2
  require 'squib'
3
3
 
4
4
  data = {'name' => ['Thief', 'Grifter', 'Mastermind'],
@@ -28,11 +28,22 @@ Squib::Deck.new(width: 825, height: 1125, cards: 3) do
28
28
  text str: 'This text has fixed width, fixed height, center-aligned, middle-valigned, and has a red hint',
29
29
  hint: :red,
30
30
  x: 65, y: 400,
31
- width: 300, height: 200,
31
+ width: 300, height: 125,
32
32
  align: :center, valign: 'MIDDLE', #case-insenstive strings allowed too.
33
33
  font: 'Arial 18'
34
34
 
35
- text str: 'Ellipsization!\nThe ultimate question of life, the universe, and everything to life and everything is 42',
35
+ extents = text str: 'Ink extent return value',
36
+ x: 65, y: 550,
37
+ font: 'Sans Bold', font_size: [16, 20, 24]
38
+ margin = 10
39
+ # Extents come back as an array of hashes, which can get split out like this
40
+ ws = extents.inject([]) { |arr, ext| arr << ext[:width] + 10; arr }
41
+ hs = extents.inject([]) { |arr, ext| arr << ext[:height] + 10; arr }
42
+ rect x: 65 - margin/2, y: 550 - margin/2,
43
+ width: ws, height: hs,
44
+ radius: 10, stroke_color: :black
45
+
46
+ text str: "Ellipsization!\nThe ultimate question of life, the universe, and everything to life and everything is 42",
36
47
  hint: :green, font: 'Arial 22',
37
48
  x: 450, y: 400,
38
49
  width: 280, height: 180,
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env ruby
2
1
  require 'squib'
3
2
 
4
3
  # This sample uses a proof overlay from TheGameCrafter.com to check bleed
data/samples/units.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'squib'
2
2
 
3
- Squib::Deck.new(width: 825, height: 1125, cards: 3) do
3
+ Squib::Deck.new(width: 825, height: 1125) do
4
4
  background color: :white
5
5
 
6
6
  bleed = inches(0.125)
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe Squib::Deck do
4
+ context '#csv' do
5
+ it 'loads basic csv data' do
6
+ expect(Squib.csv(file: csv_file('basic.csv'))).to eq({
7
+ 'h1' => [1, 3],
8
+ 'h2' => [2, 4]
9
+ })
10
+ end
11
+
12
+ it 'collapses duplicate columns and warns' do
13
+ expect(Squib.logger).to receive(:warn)
14
+ .with('CSV duplicated the following column keys: h1,h1')
15
+ expect(Squib.csv(file: csv_file('dup_cols.csv'))).to eq({
16
+ 'h1' => [1, 3],
17
+ 'h2' => [5, 7],
18
+ 'H2' => [6, 8],
19
+ 'h3' => [9, 10],
20
+ })
21
+ end
22
+
23
+ it 'handles spaces properly' do
24
+ expect(Squib.csv(file: csv_file('with_spaces.csv'))).to eq({
25
+ 'With Spaces' => ['a b c ', 3],
26
+ 'h2' => [2, 4],
27
+ 'h3' => [3, nil]
28
+ })
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+ require 'squib'
3
+
4
+ describe Squib::Deck, 'images' do
5
+
6
+ context '#png' do
7
+ it 'calls Card#png, Dir, and progress bar' do
8
+ card = instance_double(Squib::Card)
9
+ progress = double(Squib::Progress)
10
+ expect(card).to receive(:png).with('foo', 0, 1, 0.5, :overlay, 0.75).once
11
+ expect(Dir).to receive(:chdir).with('.').and_yield.once
12
+ expect(progress).to receive(:start).and_yield(progress).once
13
+ expect(progress).to receive(:increment).once
14
+ Squib::Deck.new do
15
+ @progress_bar = progress
16
+ @cards = [card]
17
+ png file: 'foo', x: 0, y: 1, alpha: 0.5, blend: :overlay, angle: 0.75
18
+ end
19
+ end
20
+ end
21
+
22
+ context '#svg' do
23
+ it 'calls Card#svg, Dir, and progress bar' do
24
+ card = instance_double(Squib::Card)
25
+ progress = double(Squib::Progress)
26
+ expect(card).to receive(:svg).with('foo', '#bar', 0, 1, 20, 30, 0.5, :overlay, 0.75).once
27
+ expect(Dir).to receive(:chdir).with('.').and_yield.once
28
+ expect(progress).to receive(:start).and_yield(progress).once
29
+ expect(progress).to receive(:increment).once
30
+ Squib::Deck.new do
31
+ @progress_bar = progress
32
+ @cards = [card]
33
+ svg file: 'foo', id: 'bar', x: 0, y: 1, width: 20, height: 30, alpha: 0.5, blend: :overlay, angle: 0.75
34
+ end
35
+ end
36
+ end
37
+
38
+ end
@@ -0,0 +1,3 @@
1
+ h1,h2
2
+ 1,2
3
+ 3,4
@@ -0,0 +1,3 @@
1
+ h1,h1,h2,H2,h3
2
+ 1,2,5,6,9
3
+ 3,4,7,8,10
@@ -0,0 +1,3 @@
1
+ With Spaces,h2,h3
2
+ a b c , 2,3
3
+ 3 ,4
@@ -0,0 +1,4 @@
1
+ title:
2
+ x: 100
3
+ subtitle:
4
+ x: 200
@@ -0,0 +1,4 @@
1
+ title: # redefined
2
+ x: 300
3
+ desc:
4
+ x: 400
@@ -0,0 +1,8 @@
1
+ grandparent:
2
+ x: 100
3
+ parent_a:
4
+ extends: grandparent
5
+ x: += 10 # evaluates to 110
6
+ parent_b:
7
+ extends: grandparent
8
+ x: += 20 # evaluates to 120, for now...
@@ -0,0 +1,9 @@
1
+ child_a:
2
+ extends: parent_a
3
+ x: += 3 # evaluates to 113
4
+ parent_b: # redefined
5
+ extends: grandparent
6
+ x: += 30 # evaluates to 130
7
+ child_b:
8
+ extends: parent_b
9
+ x: += 3 # evaluates to 133
@@ -0,0 +1,81 @@
1
+ cairo: save([])
2
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=1.0, @green=1.0, @blue=1.0>])
3
+ cairo: paint([])
4
+ cairo: restore([])
5
+ cairo: save([])
6
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=1.0, @green=1.0, @blue=1.0>])
7
+ cairo: paint([])
8
+ cairo: restore([])
9
+ cairo: save([])
10
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=1.0, @green=1.0, @blue=1.0>])
11
+ cairo: paint([])
12
+ cairo: restore([])
13
+ cairo: save([])
14
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
15
+ cairo: translate([65, 400])
16
+ cairo: rotate([0])
17
+ cairo: translate([-65, -400])
18
+ cairo: move_to([65, 400])
19
+ pango: font_description=([])
20
+ pango: text=(["ShortBig"])
21
+ pango: width=([716800])
22
+ pango: wrap=([#<Pango::Layout::WrapMode word-char>])
23
+ pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
24
+ pango: alignment=([#<Pango::Layout::Alignment center>])
25
+ pango: justify=([false])
26
+ pango: spacing=([0])
27
+ cairo: update_pango_layout([MockDouble])
28
+ cairo: update_pango_layout([MockDouble])
29
+ cairo: show_pango_layout([MockDouble])
30
+ cairo: rounded_rectangle([65, 400, 0, 0, 0, 0])
31
+ cairo: set_source_color([:red])
32
+ cairo: set_line_width([2.0])
33
+ cairo: stroke([])
34
+ cairo: restore([])
35
+ cairo: save([])
36
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
37
+ cairo: translate([65, 400])
38
+ cairo: rotate([0])
39
+ cairo: translate([-65, -400])
40
+ cairo: move_to([65, 400])
41
+ pango: font_description=([])
42
+ pango: text=(["Medium_Length_Name"])
43
+ pango: width=([716800])
44
+ pango: wrap=([#<Pango::Layout::WrapMode word-char>])
45
+ pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
46
+ pango: alignment=([#<Pango::Layout::Alignment center>])
47
+ pango: justify=([false])
48
+ pango: spacing=([0])
49
+ cairo: update_pango_layout([MockDouble])
50
+ cairo: update_pango_layout([MockDouble])
51
+ cairo: show_pango_layout([MockDouble])
52
+ cairo: rounded_rectangle([65, 400, 0, 0, 0, 0])
53
+ cairo: set_source_color([:red])
54
+ cairo: set_line_width([2.0])
55
+ cairo: stroke([])
56
+ cairo: restore([])
57
+ cairo: save([])
58
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
59
+ cairo: translate([65, 400])
60
+ cairo: rotate([0])
61
+ cairo: translate([-65, -400])
62
+ cairo: move_to([65, 400])
63
+ pango: font_description=([])
64
+ pango: text=(["Super_Duper_Long_Name"])
65
+ pango: width=([716800])
66
+ pango: wrap=([#<Pango::Layout::WrapMode word-char>])
67
+ pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
68
+ pango: alignment=([#<Pango::Layout::Alignment center>])
69
+ pango: justify=([false])
70
+ pango: spacing=([0])
71
+ cairo: update_pango_layout([MockDouble])
72
+ cairo: update_pango_layout([MockDouble])
73
+ cairo: show_pango_layout([MockDouble])
74
+ cairo: rounded_rectangle([65, 400, 0, 0, 0, 0])
75
+ cairo: set_source_color([:red])
76
+ cairo: set_line_width([2.0])
77
+ cairo: stroke([])
78
+ cairo: restore([])
79
+ surface: write_to_png(["_output/autoscale_0.png"])
80
+ surface: write_to_png(["_output/autoscale_1.png"])
81
+ surface: write_to_png(["_output/autoscale_2.png"])
@@ -0,0 +1,206 @@
1
+ cairo: save([])
2
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=1.0, @green=1.0, @blue=1.0>])
3
+ cairo: paint([])
4
+ cairo: restore([])
5
+ cairo: save([])
6
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=1.0, @green=1.0, @blue=1.0>])
7
+ cairo: paint([])
8
+ cairo: restore([])
9
+ cairo: save([])
10
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=1.0, @green=1.0, @blue=1.0>])
11
+ cairo: paint([])
12
+ cairo: restore([])
13
+ cairo: save([])
14
+ cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
15
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
16
+ cairo: set_line_width([2.0])
17
+ cairo: stroke([])
18
+ cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
19
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
20
+ cairo: fill([])
21
+ cairo: restore([])
22
+ cairo: save([])
23
+ cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
24
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
25
+ cairo: set_line_width([2.0])
26
+ cairo: stroke([])
27
+ cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
28
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
29
+ cairo: fill([])
30
+ cairo: restore([])
31
+ cairo: save([])
32
+ cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
33
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
34
+ cairo: set_line_width([2.0])
35
+ cairo: stroke([])
36
+ cairo: rounded_rectangle([38, 38, 750, 1050, 38, 38])
37
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
38
+ cairo: fill([])
39
+ cairo: restore([])
40
+ cairo: save([])
41
+ cairo: rounded_rectangle([75, 75, 128, 128, 25, 25])
42
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
43
+ cairo: set_line_width([2.0])
44
+ cairo: stroke([])
45
+ cairo: rounded_rectangle([75, 75, 128, 128, 25, 25])
46
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
47
+ cairo: fill([])
48
+ cairo: restore([])
49
+ cairo: save([])
50
+ cairo: rounded_rectangle([75, 75, 128, 128, 25, 25])
51
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
52
+ cairo: set_line_width([2.0])
53
+ cairo: stroke([])
54
+ cairo: rounded_rectangle([75, 75, 128, 128, 25, 25])
55
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
56
+ cairo: fill([])
57
+ cairo: restore([])
58
+ cairo: save([])
59
+ cairo: rounded_rectangle([75, 75, 128, 128, 25, 25])
60
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
61
+ cairo: set_line_width([2.0])
62
+ cairo: stroke([])
63
+ cairo: rounded_rectangle([75, 75, 128, 128, 25, 25])
64
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=0.0, @red=0.0, @green=0.0, @blue=0.0>])
65
+ cairo: fill([])
66
+ cairo: restore([])
67
+ cairo: save([])
68
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
69
+ cairo: translate([220, 78])
70
+ cairo: rotate([0])
71
+ cairo: translate([-220, -78])
72
+ cairo: move_to([220, 78])
73
+ pango: font_description=([])
74
+ pango: text=(["Thief"])
75
+ pango: wrap=([#<Pango::Layout::WrapMode word-char>])
76
+ pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
77
+ pango: alignment=([#<Pango::Layout::Alignment left>])
78
+ pango: justify=([false])
79
+ pango: spacing=([0])
80
+ cairo: update_pango_layout([MockDouble])
81
+ cairo: update_pango_layout([MockDouble])
82
+ cairo: show_pango_layout([MockDouble])
83
+ cairo: restore([])
84
+ cairo: save([])
85
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
86
+ cairo: translate([220, 78])
87
+ cairo: rotate([0])
88
+ cairo: translate([-220, -78])
89
+ cairo: move_to([220, 78])
90
+ pango: font_description=([])
91
+ pango: text=(["Grifter"])
92
+ pango: wrap=([#<Pango::Layout::WrapMode word-char>])
93
+ pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
94
+ pango: alignment=([#<Pango::Layout::Alignment left>])
95
+ pango: justify=([false])
96
+ pango: spacing=([0])
97
+ cairo: update_pango_layout([MockDouble])
98
+ cairo: update_pango_layout([MockDouble])
99
+ cairo: show_pango_layout([MockDouble])
100
+ cairo: restore([])
101
+ cairo: save([])
102
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
103
+ cairo: translate([220, 78])
104
+ cairo: rotate([0])
105
+ cairo: translate([-220, -78])
106
+ cairo: move_to([220, 78])
107
+ pango: font_description=([])
108
+ pango: text=(["Mastermind"])
109
+ pango: wrap=([#<Pango::Layout::WrapMode word-char>])
110
+ pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
111
+ pango: alignment=([#<Pango::Layout::Alignment left>])
112
+ pango: justify=([false])
113
+ pango: spacing=([0])
114
+ cairo: update_pango_layout([MockDouble])
115
+ cairo: update_pango_layout([MockDouble])
116
+ cairo: show_pango_layout([MockDouble])
117
+ cairo: restore([])
118
+ cairo: save([])
119
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
120
+ cairo: translate([75, 85])
121
+ cairo: rotate([0])
122
+ cairo: translate([-75, -85])
123
+ cairo: move_to([75, 85])
124
+ pango: font_description=([])
125
+ pango: text=(["1"])
126
+ pango: width=([131072])
127
+ pango: wrap=([#<Pango::Layout::WrapMode word-char>])
128
+ pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
129
+ pango: alignment=([#<Pango::Layout::Alignment center>])
130
+ pango: justify=([false])
131
+ pango: spacing=([0])
132
+ cairo: update_pango_layout([MockDouble])
133
+ cairo: update_pango_layout([MockDouble])
134
+ cairo: show_pango_layout([MockDouble])
135
+ cairo: restore([])
136
+ cairo: save([])
137
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
138
+ cairo: translate([75, 85])
139
+ cairo: rotate([0])
140
+ cairo: translate([-75, -85])
141
+ cairo: move_to([75, 85])
142
+ pango: font_description=([])
143
+ pango: text=(["2"])
144
+ pango: width=([131072])
145
+ pango: wrap=([#<Pango::Layout::WrapMode word-char>])
146
+ pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
147
+ pango: alignment=([#<Pango::Layout::Alignment center>])
148
+ pango: justify=([false])
149
+ pango: spacing=([0])
150
+ cairo: update_pango_layout([MockDouble])
151
+ cairo: update_pango_layout([MockDouble])
152
+ cairo: show_pango_layout([MockDouble])
153
+ cairo: restore([])
154
+ cairo: save([])
155
+ cairo: set_source_color([#<Cairo::Color::RGB: @alpha=1.0, @red=0.0, @green=0.0, @blue=0.0>])
156
+ cairo: translate([75, 85])
157
+ cairo: rotate([0])
158
+ cairo: translate([-75, -85])
159
+ cairo: move_to([75, 85])
160
+ pango: font_description=([])
161
+ pango: text=(["3"])
162
+ pango: width=([131072])
163
+ pango: wrap=([#<Pango::Layout::WrapMode word-char>])
164
+ pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
165
+ pango: alignment=([#<Pango::Layout::Alignment center>])
166
+ pango: justify=([false])
167
+ pango: spacing=([0])
168
+ cairo: update_pango_layout([MockDouble])
169
+ cairo: update_pango_layout([MockDouble])
170
+ cairo: show_pango_layout([MockDouble])
171
+ cairo: restore([])
172
+ cairo: save([])
173
+ cairo: translate([620, 75])
174
+ cairo: rotate([0])
175
+ cairo: translate([-620, -75])
176
+ cairo: set_source([ImageSurface, 620, 75])
177
+ cairo: paint([1.0])
178
+ cairo: restore([])
179
+ cairo: save([])
180
+ cairo: translate([620, 75])
181
+ cairo: rotate([0])
182
+ cairo: translate([-620, -75])
183
+ cairo: set_source([ImageSurface, 620, 75])
184
+ cairo: paint([1.0])
185
+ cairo: restore([])
186
+ cairo: scale([1.0, 1.0])
187
+ cairo: render_rsvg_handle([RSVG::Handle, nil])
188
+ cairo: save([])
189
+ cairo: translate([620, 218])
190
+ cairo: rotate([0])
191
+ cairo: translate([-620, -218])
192
+ cairo: set_source([MockDouble, 620, 218])
193
+ cairo: paint([1.0])
194
+ cairo: restore([])
195
+ cairo: scale([1.0, 1.0])
196
+ cairo: render_rsvg_handle([RSVG::Handle, nil])
197
+ cairo: save([])
198
+ cairo: translate([620, 218])
199
+ cairo: rotate([0])
200
+ cairo: translate([-620, -218])
201
+ cairo: set_source([MockDouble, 620, 218])
202
+ cairo: paint([1.0])
203
+ cairo: restore([])
204
+ surface: write_to_png(["_output/basic_0.png"])
205
+ surface: write_to_png(["_output/basic_1.png"])
206
+ surface: write_to_png(["_output/basic_2.png"])