squib 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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"])