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.
- checksums.yaml +4 -4
- data/.yardopts +3 -1
- data/CHANGELOG.md +10 -0
- data/README.md +65 -4
- data/lib/squib/api/data.rb +48 -1
- data/lib/squib/api/text.rb +4 -2
- data/lib/squib/deck.rb +22 -5
- data/lib/squib/graphics/text.rb +4 -0
- data/lib/squib/layouts/hand.yml +46 -0
- data/lib/squib/layouts/playing-card.yml +18 -0
- data/lib/squib/version.rb +1 -1
- data/samples/cairo_access.rb +4 -3
- data/samples/csv_import.rb +20 -0
- data/samples/custom-layout.yml +5 -4
- data/samples/custom-layout2.yml +15 -0
- data/samples/custom_config.rb +0 -1
- data/samples/excel.rb +1 -2
- data/samples/layouts.rb +61 -0
- data/samples/ranges.rb +0 -1
- data/samples/sample.csv +3 -0
- data/samples/text_options.rb +14 -3
- data/samples/tgc_proofs.rb +0 -1
- data/samples/units.rb +1 -1
- data/spec/api/api_data_spec.rb +31 -0
- data/spec/api/api_image_spec.rb +38 -0
- data/spec/data/csv/basic.csv +3 -0
- data/spec/data/csv/dup_cols.csv +3 -0
- data/spec/data/csv/with_spaces.csv +3 -0
- data/spec/data/{easy-circular-extends.yml → layouts/easy-circular-extends.yml} +0 -0
- data/spec/data/{hard-circular-extends.yml → layouts/hard-circular-extends.yml} +0 -0
- data/spec/data/{multi-extends-single-entry.yml → layouts/multi-extends-single-entry.yml} +0 -0
- data/spec/data/{multi-level-extends.yml → layouts/multi-level-extends.yml} +0 -0
- data/spec/data/layouts/multifile-a.yml +4 -0
- data/spec/data/layouts/multifile-b.yml +4 -0
- data/spec/data/layouts/multifile-extends-a.yml +8 -0
- data/spec/data/layouts/multifile-extends-b.yml +9 -0
- data/spec/data/{no-extends.yml → layouts/no-extends.yml} +0 -0
- data/spec/data/{pre-extends.yml → layouts/pre-extends.yml} +0 -0
- data/spec/data/{self-circular-extends.yml → layouts/self-circular-extends.yml} +0 -0
- data/spec/data/{single-extends.yml → layouts/single-extends.yml} +0 -0
- data/spec/data/{single-level-multi-extends.yml → layouts/single-level-multi-extends.yml} +0 -0
- data/spec/data/samples/autoscale_font.rb.txt +81 -0
- data/spec/data/samples/basic.rb.txt +206 -0
- data/spec/data/samples/cairo_access.rb.txt +25 -0
- data/spec/data/samples/colors.rb.txt +124 -0
- data/spec/data/samples/csv_import.rb.txt +112 -0
- data/spec/data/samples/custom_config.rb.txt +45 -0
- data/spec/data/samples/draw_shapes.rb.txt +35 -0
- data/spec/data/samples/excel.rb.txt +168 -0
- data/spec/data/samples/hello_world.rb.txt +36 -0
- data/spec/data/samples/layouts.rb.txt +489 -0
- data/spec/data/samples/load_images.rb.txt +104 -0
- data/spec/data/samples/portrait-landscape.rb.txt +49 -0
- data/spec/data/samples/ranges.rb.txt +426 -0
- data/spec/data/samples/save_pdf.rb.txt +545 -0
- data/spec/data/samples/text_options.rb.txt +819 -0
- data/spec/data/samples/tgc_proofs.rb.txt +81 -0
- data/spec/data/samples/units.rb.txt +14 -0
- data/spec/deck_spec.rb +33 -9
- data/spec/graphics/graphics_text_spec.rb +7 -5
- data/spec/samples/samples_regression_spec.rb +73 -0
- data/spec/spec_helper.rb +64 -2
- data/squib.gemspec +2 -2
- metadata +100 -27
- data/samples/use_layout.rb +0 -34
- 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
|
data/samples/custom_config.rb
CHANGED
data/samples/excel.rb
CHANGED
data/samples/layouts.rb
ADDED
@@ -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
data/samples/sample.csv
ADDED
data/samples/text_options.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
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:
|
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: '
|
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,
|
data/samples/tgc_proofs.rb
CHANGED
data/samples/units.rb
CHANGED
@@ -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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -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"])
|