squib 0.6.0 → 0.7.0

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 (136) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +162 -133
  3. data/Gemfile +4 -4
  4. data/README.md +630 -550
  5. data/RELEASE TODO.md +18 -18
  6. data/Rakefile +99 -99
  7. data/lib/squib.rb +32 -32
  8. data/lib/squib/api/background.rb +20 -19
  9. data/lib/squib/api/data.rb +100 -99
  10. data/lib/squib/api/image.rb +90 -76
  11. data/lib/squib/api/save.rb +149 -103
  12. data/lib/squib/api/settings.rb +35 -37
  13. data/lib/squib/api/shapes.rb +230 -228
  14. data/lib/squib/api/text.rb +65 -66
  15. data/lib/squib/api/text_embed.rb +96 -66
  16. data/lib/squib/args/arg_loader.rb +138 -0
  17. data/lib/squib/args/box.rb +55 -0
  18. data/lib/squib/args/card_range.rb +32 -0
  19. data/lib/squib/args/color_validator.rb +12 -0
  20. data/lib/squib/args/coords.rb +33 -0
  21. data/lib/squib/args/dir_validator.rb +16 -0
  22. data/lib/squib/args/draw.rb +92 -0
  23. data/lib/squib/args/embed_adjust.rb +25 -0
  24. data/lib/squib/args/embed_key.rb +17 -0
  25. data/lib/squib/args/hand_special.rb +37 -0
  26. data/lib/squib/args/input_file.rb +37 -0
  27. data/lib/squib/args/paint.rb +44 -0
  28. data/lib/squib/args/paragraph.rb +115 -0
  29. data/lib/squib/args/save_batch.rb +60 -0
  30. data/lib/squib/args/scale_box.rb +53 -0
  31. data/lib/squib/args/sheet.rb +72 -0
  32. data/lib/squib/args/showcase_special.rb +38 -0
  33. data/lib/squib/args/svg_special.rb +37 -0
  34. data/lib/squib/args/transform.rb +25 -0
  35. data/lib/squib/args/typographer.rb +117 -117
  36. data/lib/squib/card.rb +67 -67
  37. data/lib/squib/conf.rb +117 -111
  38. data/lib/squib/constants.rb +178 -178
  39. data/lib/squib/deck.rb +113 -111
  40. data/lib/squib/graphics/cairo_context_wrapper.rb +99 -53
  41. data/lib/squib/graphics/gradient_regex.rb +46 -46
  42. data/lib/squib/graphics/hand.rb +42 -43
  43. data/lib/squib/graphics/image.rb +76 -73
  44. data/lib/squib/graphics/save_doc.rb +103 -137
  45. data/lib/squib/graphics/save_images.rb +33 -33
  46. data/lib/squib/graphics/shapes.rb +119 -152
  47. data/lib/squib/graphics/showcase.rb +85 -88
  48. data/lib/squib/graphics/text.rb +176 -216
  49. data/lib/squib/layout_parser.rb +91 -89
  50. data/lib/squib/layouts/economy.yml +85 -0
  51. data/lib/squib/layouts/fantasy.yml +101 -0
  52. data/lib/squib/layouts/hand.yml +62 -46
  53. data/lib/squib/layouts/playing-card.yml +35 -18
  54. data/lib/squib/project_template/config.yml +45 -40
  55. data/lib/squib/version.rb +10 -10
  56. data/samples/color_shortcuts.rb +6 -0
  57. data/samples/csv_import.rb +18 -18
  58. data/samples/custom-config.yml +5 -5
  59. data/samples/custom_config.rb +18 -18
  60. data/samples/draw_shapes.rb +45 -35
  61. data/samples/embed_text.rb +88 -90
  62. data/samples/hand.rb +24 -24
  63. data/samples/layouts.rb +62 -61
  64. data/samples/layouts_builtin.rb +51 -0
  65. data/samples/load_images.rb +78 -64
  66. data/samples/ranges.rb +64 -53
  67. data/samples/sample.csv +2 -2
  68. data/samples/text_options.rb +102 -94
  69. data/spec/api/api_data_spec.rb +57 -50
  70. data/spec/api/api_settings_spec.rb +37 -17
  71. data/spec/args/box_spec.rb +127 -0
  72. data/spec/args/draw_spec.rb +95 -0
  73. data/spec/args/embed_key_spec.rb +13 -0
  74. data/spec/args/input_file_spec.rb +21 -0
  75. data/spec/args/paint_spec.rb +22 -0
  76. data/spec/args/paragraph_spec.rb +153 -0
  77. data/spec/args/range_spec.rb +36 -0
  78. data/spec/args/save_batch_spec.rb +51 -0
  79. data/spec/args/scale_box_spec.rb +71 -0
  80. data/spec/args/sheet_spec.rb +58 -0
  81. data/spec/args/showcase_special_spec.rb +15 -0
  82. data/spec/data/samples/autoscale_font.rb.txt +84 -87
  83. data/spec/data/samples/basic.rb.txt +209 -203
  84. data/spec/data/samples/cairo_access.rb.txt +2 -2
  85. data/spec/data/samples/config_text_markup.rb.txt +72 -75
  86. data/spec/data/samples/csv_import.rb.txt +76 -80
  87. data/spec/data/samples/custom_config.rb.txt +48 -49
  88. data/spec/data/samples/draw_shapes.rb.txt +100 -42
  89. data/spec/data/samples/embed_text.rb.txt +283 -295
  90. data/spec/data/samples/excel.rb.txt +162 -171
  91. data/spec/data/samples/gradients.rb.txt +79 -67
  92. data/spec/data/samples/hand.rb.txt +538 -514
  93. data/spec/data/samples/hello_world.rb.txt +36 -38
  94. data/spec/data/samples/load_images.rb.txt +41 -5
  95. data/spec/data/samples/portrait-landscape.rb.txt +49 -51
  96. data/spec/data/samples/ranges.rb.txt +460 -429
  97. data/spec/data/samples/saves.rb.txt +801 -785
  98. data/spec/data/samples/showcase.rb.txt +5910 -5906
  99. data/spec/data/samples/text_options.rb.txt +1125 -981
  100. data/spec/data/samples/tgc_proofs.rb.txt +81 -79
  101. data/spec/data/samples/units.rb.txt +18 -12
  102. data/spec/data/xlsx/with_macros.xlsm +0 -0
  103. data/spec/graphics/cairo_context_wrapper_spec.rb +84 -75
  104. data/spec/graphics/graphics_images_spec.rb +94 -85
  105. data/spec/graphics/graphics_save_doc_spec.rb +67 -65
  106. data/spec/samples/expected/hand.png +0 -0
  107. data/spec/samples/expected/hand_pretty.png +0 -0
  108. data/spec/samples/expected/layout_00.png +0 -0
  109. data/spec/samples/expected/load_images_00.png +0 -0
  110. data/spec/samples/expected/ranges_00.png +0 -0
  111. data/spec/samples/expected/shape_00.png +0 -0
  112. data/spec/samples/expected/showcase.png +0 -0
  113. data/spec/samples/expected/showcase2.png +0 -0
  114. data/spec/samples/expected/showcase_individual_00.png +0 -0
  115. data/spec/samples/expected/showcase_individual_01.png +0 -0
  116. data/spec/samples/expected/showcase_individual_02.png +0 -0
  117. data/spec/samples/expected/showcase_individual_03.png +0 -0
  118. data/spec/samples/expected/text_00.png +0 -0
  119. data/spec/samples/expected/text_01.png +0 -0
  120. data/spec/samples/expected/text_02.png +0 -0
  121. data/spec/samples/samples_regression_spec.rb +82 -82
  122. data/spec/spec_helper.rb +3 -2
  123. data/squib.gemspec +48 -48
  124. data/squib.sublime-project +42 -36
  125. metadata +61 -33
  126. data/lib/squib/input_helpers.rb +0 -238
  127. data/spec/api/api_image_spec.rb +0 -38
  128. data/spec/api/api_text_spec.rb +0 -37
  129. data/spec/graphics/graphics_shapes_spec.rb +0 -85
  130. data/spec/graphics/graphics_text_spec.rb +0 -164
  131. data/spec/input_helpers_spec.rb +0 -238
  132. data/spec/samples/expected/embed_multi_00.png +0 -0
  133. data/spec/samples/expected/embed_multi_01.png +0 -0
  134. data/spec/samples/expected/embed_multi_02.png +0 -0
  135. data/spec/samples/expected/ranges_01.png +0 -0
  136. data/spec/samples/expected/ranges_02.png +0 -0
@@ -0,0 +1,153 @@
1
+ require 'spec_helper'
2
+ require 'squib/args/paragraph'
3
+ require 'squib/constants'
4
+
5
+ describe Squib::Args::Paragraph do
6
+ subject(:para) { Squib::Args::Paragraph.new('FooFont 32') }
7
+
8
+ context 'str validator' do
9
+ it 'converts everything to string' do
10
+ para.load!( {str: 5} )
11
+ expect(para.str).to eq ['5']
12
+ end
13
+ end
14
+
15
+ context 'font validator' do
16
+ it 'uses deck font by default' do
17
+ para.load!( {} )
18
+ expect(para.font).to eq ['FooFont 32']
19
+ end
20
+
21
+ it 'uses system default font when deck font is :default' do
22
+ para = Squib::Args::Paragraph.new(:default)
23
+ para.load!( {} )
24
+ expect(para.font).to eq [Squib::SYSTEM_DEFAULTS[:default_font]]
25
+ end
26
+
27
+ it 'uses specified font when given' do
28
+ para.load!( {font: 'MyFont 8'})
29
+ expect(para.font).to eq ['MyFont 8']
30
+ end
31
+ end
32
+
33
+ context 'align validator' do
34
+ it 'converts to pango left' do
35
+ para.load!( { align: :left } )
36
+ expect(para.align).to eq [Pango::ALIGN_LEFT]
37
+ end
38
+
39
+ it 'converts to pango right' do
40
+ para.load!( { align: :RIGHT } )
41
+ expect(para.align).to eq [Pango::ALIGN_RIGHT]
42
+ end
43
+
44
+ it 'converts to pango center' do
45
+ para.load!( { align: 'center' } )
46
+ expect(para.align).to eq [Pango::ALIGN_CENTER]
47
+ end
48
+
49
+ it 'raises an exception on anything else' do
50
+ expect { para.load!( { align: 'foo' } ) }.to raise_error(ArgumentError, 'align must be one of: center, left, right')
51
+ end
52
+ end
53
+
54
+ context 'wrap validator' do
55
+ it 'converts to pango wrap word' do
56
+ para.load!( { wrap: 'word'} )
57
+ expect(para.wrap).to eq [Pango::WRAP_WORD]
58
+ end
59
+
60
+ it 'converts to pango wrap char' do
61
+ para.load!( { wrap: 'WORD_ChAr'} )
62
+ expect(para.wrap).to eq [Pango::WRAP_WORD_CHAR]
63
+ end
64
+
65
+ it 'converts to pango wrap char on true' do
66
+ para.load!( { wrap: true} )
67
+ expect(para.wrap).to eq [Pango::WRAP_WORD_CHAR]
68
+ end
69
+
70
+ it 'converts to pango wrap char with false' do
71
+ para.load!( { wrap: false} )
72
+ expect(para.wrap).to eq [Pango::WRAP_CHAR]
73
+ end
74
+
75
+ it 'raises an exception on anything else' do
76
+ expect { para.load!( {wrap: 'foo' }) }.to raise_error(ArgumentError, 'wrap must be one of: word, char, word_char, true, or false')
77
+ end
78
+ end
79
+
80
+ context 'ellipsize validator' do
81
+ it 'converts to pango on none and false' do
82
+ para.load!( { ellipsize: 'none'} )
83
+ expect(para.ellipsize).to eq [Pango::Layout::ELLIPSIZE_NONE]
84
+ end
85
+
86
+ it 'converts to pango with start' do
87
+ para.load!( { ellipsize: :StArt} )
88
+ expect(para.ellipsize).to eq [Pango::Layout::ELLIPSIZE_START]
89
+ end
90
+
91
+ it 'converts to pango middle' do
92
+ para.load!( { ellipsize: 'middle'} )
93
+ expect(para.ellipsize).to eq [Pango::Layout::ELLIPSIZE_MIDDLE]
94
+ end
95
+
96
+ it 'converts to pango end' do
97
+ para.load!( { ellipsize: 'END'} )
98
+ expect(para.ellipsize).to eq [Pango::Layout::ELLIPSIZE_END]
99
+ end
100
+
101
+ it 'raises an exception on anything else' do
102
+ expect { para.load!( {ellipsize: 'foo' }) }.to raise_error(ArgumentError, 'ellipsize must be one of: none, start, middle, end, true, or false')
103
+ end
104
+ end
105
+
106
+ context 'justify validator' do
107
+ it 'allows nil' do
108
+ para.load!( { justify: nil} )
109
+ expect(para.justify).to eq [nil]
110
+ end
111
+
112
+ it 'can be true' do
113
+ para.load!( { justify: true} )
114
+ expect(para.justify).to eq [true]
115
+ end
116
+
117
+ it 'can be false' do
118
+ para.load!( { justify: false} )
119
+ expect(para.justify).to eq [false]
120
+ end
121
+
122
+ it 'raises an exception on anything else' do
123
+ expect { para.load!( {justify: 'false' }) }.to raise_error(ArgumentError, 'justify must be one of: nil, true, or false')
124
+ end
125
+ end
126
+
127
+ context 'spacing validator' do
128
+ it 'allows nil' do
129
+ para.load!( { spacing: nil} )
130
+ expect(para.spacing).to eq [nil]
131
+ end
132
+ it 'is converted to Pango space' do
133
+ para.load!( { spacing: 519} )
134
+ expect(para.spacing).to eq [Pango::SCALE * 519.0]
135
+ end
136
+
137
+ it 'raises an exception if not a float' do
138
+ expect { para.load!( {spacing: /foo/ }) }.to raise_error(ArgumentError, 'spacing must be a number or nil')
139
+ end
140
+ end
141
+
142
+ context 'valign validator' do
143
+ it 'converts top' do
144
+ para.load!( { valign: :top} )
145
+ expect(para.valign).to eq ['top']
146
+ end
147
+
148
+ it 'raises an exception if not one of the three' do
149
+ expect { para.load!( {valign: 'foo' }) }.to raise_error(ArgumentError, 'valign must be one of: top, middle, bottom')
150
+ end
151
+ end
152
+
153
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+ require 'squib/args/card_range'
3
+
4
+ describe Squib::Args::CardRange do
5
+
6
+ it 'must be within the card size range' do
7
+ expect {Squib::Args::CardRange.new(2..3, deck_size: 2)}
8
+ .to raise_error(ArgumentError, '2..3 is outside of deck range of 0..1')
9
+ end
10
+
11
+ it 'defaults to range of all cards if :all' do
12
+ range = Squib::Args::CardRange.new(:all, deck_size: 5)
13
+ expect(range.to_a).to eq([0, 1, 2, 3, 4])
14
+ end
15
+
16
+ it 'creates a range of cards for singleton' do
17
+ range = Squib::Args::CardRange.new(3, deck_size: 5)
18
+ expect(range.to_a).to eq([3])
19
+ end
20
+
21
+ it 'lets arrays pass through unchanged' do
22
+ range = Squib::Args::CardRange.new([0, 2], deck_size: 5)
23
+ expect(range.to_a).to eq([0, 2])
24
+ end
25
+
26
+ it 'raises an error on everything else' do
27
+ expect { Squib::Args::CardRange.new(:foo, deck_size: 5) }
28
+ .to raise_error(ArgumentError, 'foo must be Enumerable (i.e. respond_to :each).')
29
+ end
30
+
31
+ it 'allows anything with :to_i' do
32
+ range = Squib::Args::CardRange.new(0.9, deck_size: 5)
33
+ expect(range.to_a).to eq([0])
34
+ end
35
+
36
+ end
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+ require 'squib/args/save_batch'
3
+
4
+ describe Squib::Args::SaveBatch do
5
+ subject(:save_batch) {Squib::Args::SaveBatch.new}
6
+
7
+ context 'dir' do
8
+ it 'is created if not exists (and warns)' do
9
+ opts = {dir: 'tocreate'}
10
+ Dir.chdir(output_dir) do
11
+ FileUtils.rm_rf('tocreate', secure: true)
12
+ expect(Squib.logger).to receive(:warn).with("Dir 'tocreate' does not exist, creating it.").once
13
+ save_batch.load! opts
14
+ expect(save_batch).to have_attributes({dir: ['tocreate']})
15
+ expect(Dir.exists? 'tocreate').to be true
16
+ end
17
+ end
18
+ end
19
+
20
+ context 'rotate' do
21
+ it 'does nothing by default' do
22
+ opts = {}
23
+ save_batch.load! opts
24
+ expect(save_batch[0]).to have_attributes({rotate: false, angle: 0})
25
+ end
26
+
27
+ it 'rotates by pi/2 with true' do
28
+ opts = {rotate: true}
29
+ save_batch.load! opts
30
+ expect(save_batch[0]).to have_attributes({rotate: true, angle: Math::PI / 2})
31
+ end
32
+
33
+ it 'rotates by pi/2' do
34
+ opts = {rotate: :clockwise}
35
+ save_batch.load! opts
36
+ expect(save_batch[0]).to have_attributes({rotate: true, angle: Math::PI / 2})
37
+ end
38
+
39
+ it 'rotates by pi/2 with counterclockwise' do
40
+ opts = {rotate: :counterclockwise}
41
+ save_batch.load! opts
42
+ expect(save_batch[0]).to have_attributes({rotate: true, angle: 3 * Math::PI / 2})
43
+ end
44
+
45
+ it 'raises error on a number' do
46
+ opts = {rotate: 5.0}
47
+ expect { save_batch.load!(opts) }.to raise_error('invalid option to rotate: only [true, false, :clockwise, :counterclockwise]')
48
+ end
49
+ end
50
+
51
+ end
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+ require 'squib/args/scale_box'
3
+
4
+ describe Squib::Args::ScaleBox do
5
+ subject(:box) { Squib::Args::ScaleBox.new({}) }
6
+
7
+ context 'unit conversion' do
8
+ it 'converts units on all args' do
9
+ args = {x: ['1in', '2in'], y: 300, width: '1in', height: '1in'}
10
+ box.load!(args, expand_by: 2)
11
+ expect(box).to have_attributes(
12
+ x: [300, 600],
13
+ y: [300, 300],
14
+ width: [300, 300],
15
+ height: [300, 300],
16
+ )
17
+ end
18
+ end
19
+
20
+ context 'validation' do
21
+ it 'replaces with deck width and height' do
22
+ args = {width: :deck, height: :deck}
23
+ deck = OpenStruct.new(width: 123, height: 456)
24
+ box = Squib::Args::Box.new(deck)
25
+ box.load!(args, expand_by: 1)
26
+ expect(box).to have_attributes(width: [123], height: [456])
27
+ end
28
+
29
+ it 'allows :native' do
30
+ args = {width: :native, height: :native}
31
+ box.load!(args, expand_by: 1)
32
+ expect(box).to have_attributes(width: [:native], height: [:native])
33
+ end
34
+
35
+ it 'allows native to be a string' do
36
+ args = {width: 'native'}
37
+ box.load!(args, expand_by: 1)
38
+ expect(box).to have_attributes(width: [:native], height: [:native])
39
+ end
40
+
41
+ it 'allows :scale on width if height has to_f' do
42
+ args = {width: :scale, height: 75}
43
+ box.load!(args, expand_by: 1)
44
+ expect(box).to have_attributes(width: [:scale], height: [75])
45
+ end
46
+
47
+ it 'allows :scale on width if height has to_f' do
48
+ args = {width: 75, height: :scale}
49
+ box.load!(args, expand_by: 1)
50
+ expect(box).to have_attributes(width: [75], height: [:scale])
51
+ end
52
+
53
+ it 'disallows both :scale' do
54
+ args = {width: :scale, height: :scale}
55
+ expect { box.load!(args, expand_by: 1) }.to raise_error('if width is :scale, height must be a number')
56
+ end
57
+
58
+ it 'disallows non-to_f on width' do
59
+ args = {width: :foo}
60
+ expect { box.load!(args, expand_by: 1) }.to raise_error('width must be a number, :scale, :native, or :deck')
61
+ end
62
+
63
+ it 'disallows non-to_f on height' do
64
+ args = {height: :foo}
65
+ expect { box.load!(args, expand_by: 1) }.to raise_error('height must be a number, :scale, :native, or :deck')
66
+ end
67
+
68
+ end
69
+
70
+
71
+ end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+ require 'squib/args/sheet'
3
+
4
+ describe Squib::Args::Sheet do
5
+
6
+ context 'dsl overrides' do
7
+ subject(:sheet) { Squib::Args::Sheet.new({}, {file: 'foo'}) }
8
+
9
+ it 'works when specified' do
10
+ sheet.load!({}) # go right to defaults
11
+ expect(sheet.file).to eq( 'foo' ) # dsl method default override
12
+ end
13
+
14
+ end
15
+
16
+ context 'rows and colums' do
17
+ subject(:sheet) { Squib::Args::Sheet.new({}, {}, 4) }
18
+
19
+ it 'does nothing on a perfect fit' do
20
+ opts = { columns: 2, rows: 2 }
21
+ sheet.load! opts
22
+ expect(sheet).to have_attributes(columns: 2, rows: 2)
23
+ end
24
+
25
+ it 'keeps both if specified' do
26
+ opts = { columns: 1, rows: 1 }
27
+ sheet.load! opts
28
+ expect(sheet).to have_attributes(columns: 1, rows: 1)
29
+ end
30
+
31
+ it 'computes properly on non-integer' do
32
+ opts = {columns: 1, rows: :infinite}
33
+ sheet.load! opts
34
+ expect(sheet).to have_attributes( columns: 1, rows: 4 )
35
+ end
36
+
37
+ it 'computes properly on unspecified rows' do
38
+ opts = {columns: 1}
39
+ sheet.load! opts
40
+ expect(sheet).to have_attributes( columns: 1, rows: 4 )
41
+ end
42
+
43
+ it 'computes properly on unspecified, too-big column' do
44
+ opts = {}
45
+ sheet.load! opts
46
+ expect(sheet).to have_attributes( columns: 5, rows: 1 )
47
+ end
48
+
49
+ it 'fails on a non-integer column' do
50
+ opts = {columns: :infinite}
51
+ expect { sheet.load!(opts) }.to raise_error('columns must be an integer')
52
+ end
53
+
54
+
55
+
56
+ end
57
+
58
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+ require 'squib/args/showcase_special'
3
+
4
+ describe Squib::Args::ShowcaseSpecial do
5
+ subject(:showcase_special) { Squib::Args::ShowcaseSpecial.new }
6
+
7
+ context '#face_right?' do
8
+ it 'compares face to right' do
9
+ opts = { face: 'LEFT ' }
10
+ showcase_special.load! opts
11
+ expect(showcase_special.face_right?).to be false
12
+ end
13
+ end
14
+
15
+ end
@@ -1,87 +1,84 @@
1
- cairo: antialias=(["subpixel"])
2
- cairo: antialias=(["subpixel"])
3
- cairo: antialias=(["subpixel"])
4
- cairo: save([])
5
- cairo: set_source_color([:white])
6
- cairo: paint([])
7
- cairo: restore([])
8
- cairo: save([])
9
- cairo: set_source_color([:white])
10
- cairo: paint([])
11
- cairo: restore([])
12
- cairo: save([])
13
- cairo: set_source_color([:white])
14
- cairo: paint([])
15
- cairo: restore([])
16
- cairo: save([])
17
- cairo: set_source_color([:black])
18
- cairo: translate([65, 400])
19
- cairo: rotate([0])
20
- cairo: move_to([0, 0])
21
- pango font: size=([128000])
22
- pango: font_description=([MockDouble])
23
- pango: text=(["ShortBig"])
24
- pango: width=([716800])
25
- pango: wrap=([#<Pango::Layout::WrapMode word-char>])
26
- pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
27
- pango: alignment=([#<Pango::Layout::Alignment center>])
28
- pango: justify=([false])
29
- pango: spacing=([0])
30
- cairo: update_pango_layout([MockDouble])
31
- cairo: move_to([0, 0])
32
- cairo: update_pango_layout([MockDouble])
33
- cairo: show_pango_layout([MockDouble])
34
- cairo: rounded_rectangle([0, 0, 0, 0, 0, 0])
35
- cairo: set_source_color([:red])
36
- cairo: set_line_width([2.0])
37
- cairo: stroke([])
38
- cairo: restore([])
39
- cairo: save([])
40
- cairo: set_source_color([:black])
41
- cairo: translate([65, 400])
42
- cairo: rotate([0])
43
- cairo: move_to([0, 0])
44
- pango font: size=([46080])
45
- pango: font_description=([MockDouble])
46
- pango: text=(["Medium_Length_Name"])
47
- pango: width=([716800])
48
- pango: wrap=([#<Pango::Layout::WrapMode word-char>])
49
- pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
50
- pango: alignment=([#<Pango::Layout::Alignment center>])
51
- pango: justify=([false])
52
- pango: spacing=([0])
53
- cairo: update_pango_layout([MockDouble])
54
- cairo: move_to([0, 0])
55
- cairo: update_pango_layout([MockDouble])
56
- cairo: show_pango_layout([MockDouble])
57
- cairo: rounded_rectangle([0, 0, 0, 0, 0, 0])
58
- cairo: set_source_color([:red])
59
- cairo: set_line_width([2.0])
60
- cairo: stroke([])
61
- cairo: restore([])
62
- cairo: save([])
63
- cairo: set_source_color([:black])
64
- cairo: translate([65, 400])
65
- cairo: rotate([0])
66
- cairo: move_to([0, 0])
67
- pango font: size=([36864])
68
- pango: font_description=([MockDouble])
69
- pango: text=(["Super_Duper_Long_Name"])
70
- pango: width=([716800])
71
- pango: wrap=([#<Pango::Layout::WrapMode word-char>])
72
- pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
73
- pango: alignment=([#<Pango::Layout::Alignment center>])
74
- pango: justify=([false])
75
- pango: spacing=([0])
76
- cairo: update_pango_layout([MockDouble])
77
- cairo: move_to([0, 0])
78
- cairo: update_pango_layout([MockDouble])
79
- cairo: show_pango_layout([MockDouble])
80
- cairo: rounded_rectangle([0, 0, 0, 0, 0, 0])
81
- cairo: set_source_color([:red])
82
- cairo: set_line_width([2.0])
83
- cairo: stroke([])
84
- cairo: restore([])
85
- surface: write_to_png(["_output/autoscale_00.png"])
86
- surface: write_to_png(["_output/autoscale_01.png"])
87
- surface: write_to_png(["_output/autoscale_02.png"])
1
+ cairo: antialias=(["subpixel"])
2
+ cairo: antialias=(["subpixel"])
3
+ cairo: antialias=(["subpixel"])
4
+ cairo: save([])
5
+ cairo: set_source_color(["white"])
6
+ cairo: paint([])
7
+ cairo: restore([])
8
+ cairo: save([])
9
+ cairo: set_source_color(["white"])
10
+ cairo: paint([])
11
+ cairo: restore([])
12
+ cairo: save([])
13
+ cairo: set_source_color(["white"])
14
+ cairo: paint([])
15
+ cairo: restore([])
16
+ cairo: save([])
17
+ cairo: set_source_color(["black"])
18
+ cairo: translate([65, 400])
19
+ cairo: rotate([0])
20
+ cairo: move_to([0, 0])
21
+ pango font: size=([128000])
22
+ pango: font_description=([MockDouble])
23
+ pango: text=(["ShortBig"])
24
+ pango: width=([716800])
25
+ pango: wrap=([#<Pango::Layout::WrapMode word-char>])
26
+ pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
27
+ pango: alignment=([#<Pango::Layout::Alignment center>])
28
+ pango: justify=([false])
29
+ cairo: move_to([0, 0])
30
+ cairo: move_to([0, 0])
31
+ cairo: show_pango_layout([MockDouble])
32
+ cairo: rounded_rectangle([0, 0, 0, 0, 0, 0])
33
+ cairo: set_source_color([:red])
34
+ cairo: set_line_width([2.0])
35
+ cairo: stroke([])
36
+ pango: ellipsized?([])
37
+ cairo: restore([])
38
+ cairo: save([])
39
+ cairo: set_source_color(["black"])
40
+ cairo: translate([65, 400])
41
+ cairo: rotate([0])
42
+ cairo: move_to([0, 0])
43
+ pango font: size=([46080])
44
+ pango: font_description=([MockDouble])
45
+ pango: text=(["Medium_Length_Name"])
46
+ pango: width=([716800])
47
+ pango: wrap=([#<Pango::Layout::WrapMode word-char>])
48
+ pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
49
+ pango: alignment=([#<Pango::Layout::Alignment center>])
50
+ pango: justify=([false])
51
+ cairo: move_to([0, 0])
52
+ cairo: move_to([0, 0])
53
+ cairo: show_pango_layout([MockDouble])
54
+ cairo: rounded_rectangle([0, 0, 0, 0, 0, 0])
55
+ cairo: set_source_color([:red])
56
+ cairo: set_line_width([2.0])
57
+ cairo: stroke([])
58
+ pango: ellipsized?([])
59
+ cairo: restore([])
60
+ cairo: save([])
61
+ cairo: set_source_color(["black"])
62
+ cairo: translate([65, 400])
63
+ cairo: rotate([0])
64
+ cairo: move_to([0, 0])
65
+ pango font: size=([36864])
66
+ pango: font_description=([MockDouble])
67
+ pango: text=(["Super_Duper_Long_Name"])
68
+ pango: width=([716800])
69
+ pango: wrap=([#<Pango::Layout::WrapMode word-char>])
70
+ pango: ellipsize=([#<Pango::Layout::EllipsizeMode end>])
71
+ pango: alignment=([#<Pango::Layout::Alignment center>])
72
+ pango: justify=([false])
73
+ cairo: move_to([0, 0])
74
+ cairo: move_to([0, 0])
75
+ cairo: show_pango_layout([MockDouble])
76
+ cairo: rounded_rectangle([0, 0, 0, 0, 0, 0])
77
+ cairo: set_source_color([:red])
78
+ cairo: set_line_width([2.0])
79
+ cairo: stroke([])
80
+ pango: ellipsized?([])
81
+ cairo: restore([])
82
+ surface: write_to_png(["_output/autoscale_00.png"])
83
+ surface: write_to_png(["_output/autoscale_01.png"])
84
+ surface: write_to_png(["_output/autoscale_02.png"])