squib 0.4.0 → 0.5.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +5 -4
- data/CHANGELOG.md +12 -2
- data/Gemfile +2 -0
- data/README.md +177 -31
- data/Rakefile +1 -0
- data/lib/squib/api/shapes.rb +25 -0
- data/lib/squib/api/text.rb +9 -3
- data/lib/squib/api/text_embed.rb +64 -0
- data/lib/squib/args/typographer.rb +112 -0
- data/lib/squib/args/unit_conversion.rb +4 -0
- data/lib/squib/card.rb +2 -1
- data/lib/squib/constants.rb +32 -1
- data/lib/squib/deck.rb +6 -1
- data/lib/squib/graphics/cairo_context_wrapper.rb +9 -1
- data/lib/squib/graphics/save_doc.rb +1 -1
- data/lib/squib/graphics/shapes.rb +16 -0
- data/lib/squib/graphics/showcase.rb +2 -0
- data/lib/squib/graphics/text.rb +105 -23
- data/lib/squib/project_template/config.yml +13 -0
- data/lib/squib/version.rb +1 -1
- data/samples/config_disable_quotes.yml +3 -0
- data/samples/config_text_markup.rb +20 -0
- data/samples/config_text_markup.yml +9 -0
- data/samples/draw_shapes.rb +5 -0
- data/samples/embed_text.rb +90 -0
- data/samples/text_options.rb +21 -7
- data/spec/api/api_text_spec.rb +3 -3
- data/spec/args/typographer_spec.rb +71 -0
- data/spec/data/samples/autoscale_font.rb.txt +9 -9
- data/spec/data/samples/basic.rb.txt +12 -12
- data/spec/data/samples/config_text_markup.rb.txt +75 -0
- data/spec/data/samples/csv_import.rb.txt +12 -12
- data/spec/data/samples/custom_config.rb.txt +2 -6
- data/spec/data/samples/draw_shapes.rb.txt +11 -0
- data/spec/data/samples/embed_text.rb.txt +295 -0
- data/spec/data/samples/excel.rb.txt +18 -18
- data/spec/data/samples/gradients.rb.txt +2 -2
- data/spec/data/samples/hello_world.rb.txt +2 -2
- data/spec/data/samples/portrait-landscape.rb.txt +2 -2
- data/spec/data/samples/ranges.rb.txt +48 -48
- data/spec/data/samples/saves.rb.txt +32 -32
- data/spec/data/samples/showcase.rb.txt +8 -8
- data/spec/data/samples/text_options.rb.txt +162 -120
- data/spec/data/samples/tgc_proofs.rb.txt +4 -4
- data/spec/graphics/graphics_text_spec.rb +13 -11
- data/spec/samples/samples_regression_spec.rb +2 -0
- data/spec/spec_helper.rb +22 -5
- data/squib.gemspec +1 -1
- data/squib.sublime-project +49 -0
- metadata +17 -16
@@ -25,3 +25,16 @@
|
|
25
25
|
# Use a SVG cairo back end, instead of an in-memory buffer
|
26
26
|
# backend: :memory # default
|
27
27
|
# backend: :svg # can create scalable pdfs, but rendering done at the printer level is not as good as Cairo.
|
28
|
+
|
29
|
+
# Configure what text markup uses replace characters
|
30
|
+
# Below are the defaults
|
31
|
+
# lsquote: "\u2018" #note that Yaml wants double quotes here to use escape chars
|
32
|
+
# rsquote: "\u2019"
|
33
|
+
# ldquote: "\u201C"
|
34
|
+
# rdquote: "\u201D"
|
35
|
+
# em_dash: "\u2014"
|
36
|
+
# en_dash: "\u2013"
|
37
|
+
# ellipsis: "\u2026"
|
38
|
+
|
39
|
+
# We can also disallow smart quotes and only allow explicit replacements with ``LaTeX-style'' quotes.
|
40
|
+
# smart_quotes: false
|
data/lib/squib/version.rb
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'squib'
|
2
|
+
|
3
|
+
Squib::Deck.new(config: 'config_text_markup.yml') do
|
4
|
+
background color: :white
|
5
|
+
text str: %{"'Yaml ain't markup', he says"},
|
6
|
+
x: 10, y: 10, width: 300, height: 200, font: 'Serif 20',
|
7
|
+
markup: true, hint: :cyan
|
8
|
+
|
9
|
+
text str: "Notice also the antialiasing method.",
|
10
|
+
x: 320, y: 10, width: 300, height: 200, font: 'Arial Bold 20'
|
11
|
+
|
12
|
+
save_png prefix: 'config_text_'
|
13
|
+
end
|
14
|
+
|
15
|
+
Squib::Deck.new(config: 'config_disable_quotes.yml') do
|
16
|
+
text str: %{This has typographic sugar --- and ``explicit'' quotes --- but the quotes are "dumb"},
|
17
|
+
x: 10, y: 10, width: 300, height: 200, font: 'Serif 20',
|
18
|
+
markup: true, hint: :cyan
|
19
|
+
save_png prefix: 'config_disable_text_'
|
20
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# We can configure what characters actually get replaced by quoting them with unicode code points.
|
2
|
+
lsquote: "\u2018" #note that Yaml wants double quotes here to use escape chars
|
3
|
+
rsquote: "\u2019"
|
4
|
+
ldquote: "\u201C"
|
5
|
+
rdquote: "\u201D"
|
6
|
+
em_dash: "\u2014"
|
7
|
+
en_dash: "\u2013"
|
8
|
+
ellipsis: "\u2026"
|
9
|
+
antialias: gray
|
data/samples/draw_shapes.rb
CHANGED
@@ -15,5 +15,10 @@ Squib::Deck.new do
|
|
15
15
|
x2: 150, y2: 650,
|
16
16
|
stroke_width: 25.0
|
17
17
|
|
18
|
+
curve x1: 50, y1: 850, cx1: 150, cy1: 700,
|
19
|
+
x2: 625, y2: 900, cx2: 150, cy2: 700,
|
20
|
+
stroke_width: 12.0, stroke_color: :cyan,
|
21
|
+
fill_color: :burgundy
|
22
|
+
|
18
23
|
save_png prefix: 'shape_'
|
19
24
|
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'squib'
|
2
|
+
|
3
|
+
Squib::Deck.new do
|
4
|
+
background color: :white
|
5
|
+
rect x: 0, y: 0, width: 825, height: 1125, stroke_width: 2.0
|
6
|
+
|
7
|
+
embed_text = 'Take 11 :tool: and gain 2 :health:. Take <b>2</b> :tool: <i>and gain 3 :purse: if level 2.</i>'
|
8
|
+
text(str: embed_text, font: 'Sans 21',
|
9
|
+
x: 0, y: 0, width: 180, hint: :red,
|
10
|
+
align: :left, ellipsize: false, justify: false) do |embed|
|
11
|
+
# Notice how we use dx and dy to adjust the icon to not rest directly on the baseline
|
12
|
+
embed.svg key: ':tool:', width: 28, height: 28, dx: 0, dy: 4, file: 'spanner.svg'
|
13
|
+
embed.svg key: ':health:', width: 28, height: 28, dx: -2, dy: 4, file: 'glass-heart.svg'
|
14
|
+
embed.png key: ':purse:', width: 28, height: 28, dx: 0, dy: 4, file: 'shiny-purse.png'
|
15
|
+
end
|
16
|
+
|
17
|
+
embed_text = 'Middle align: Take 1 :tool: and gain 2 :health:. Take 2 :tool: and gain 3 :purse:'
|
18
|
+
text(str: embed_text, font: 'Sans 21',
|
19
|
+
x: 200, y: 0, width: 180, height: 300, valign: :middle,
|
20
|
+
align: :left, ellipsize: false, justify: false, hint: :cyan) do |embed|
|
21
|
+
embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
|
22
|
+
embed.svg key: ':health:', width: 28, height: 28, file: 'glass-heart.svg'
|
23
|
+
embed.png key: ':purse:', width: 28, height: 28, file: 'shiny-purse.png'
|
24
|
+
end
|
25
|
+
|
26
|
+
embed_text = 'This :tool: aligns on the bottom properly. :purse:'
|
27
|
+
text(str: embed_text, font: 'Sans 21',
|
28
|
+
x: 400, y: 0, width: 180, height: 300, valign: :bottom,
|
29
|
+
align: :left, ellipsize: false, justify: false, hint: :green) do |embed|
|
30
|
+
embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
|
31
|
+
embed.svg key: ':health:', width: 28, height: 28, file: 'glass-heart.svg'
|
32
|
+
embed.png key: ':purse:', width: 28, height: 28, file: 'shiny-purse.png'
|
33
|
+
end
|
34
|
+
|
35
|
+
embed_text = 'Wrapping multiples: These are 1 :tool::tool::tool: and these are multiple :tool::tool: :tool::tool:'
|
36
|
+
text(str: embed_text, font: 'Sans 21',
|
37
|
+
x: 600, y: 0, width: 180, height: 300, valign: :middle,
|
38
|
+
align: :left, ellipsize: false, justify: false, hint: :cyan) do |embed|
|
39
|
+
embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
|
40
|
+
end
|
41
|
+
|
42
|
+
embed_text = ':tool:Justify will :tool: work too, and :purse: with more words just for fun'
|
43
|
+
text(str: embed_text, font: 'Sans 21',
|
44
|
+
x: 0, y: 320, width: 180, height: 300, valign: :bottom,
|
45
|
+
align: :left, ellipsize: false, justify: true, hint: :magenta) do |embed|
|
46
|
+
embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
|
47
|
+
embed.svg key: ':health:', width: 28, height: 28, file: 'glass-heart.svg'
|
48
|
+
embed.png key: ':purse:', width: 28, height: 28, file: 'shiny-purse.png'
|
49
|
+
end
|
50
|
+
|
51
|
+
embed_text = 'Right-aligned works :tool: with :health: and :purse:'
|
52
|
+
text(str: embed_text, font: 'Sans 21',
|
53
|
+
x: 200, y: 320, width: 180, height: 300, valign: :bottom,
|
54
|
+
align: :right, ellipsize: false, justify: false, hint: :magenta) do |embed|
|
55
|
+
embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
|
56
|
+
embed.svg key: ':health:', width: 28, height: 28, file: 'glass-heart.svg'
|
57
|
+
embed.png key: ':purse:', width: 28, height: 28, file: 'shiny-purse.png'
|
58
|
+
end
|
59
|
+
|
60
|
+
embed_text = ':tool:Center-aligned works :tool: with :health: and :purse:'
|
61
|
+
text(str: embed_text, font: 'Sans 21',
|
62
|
+
x: 400, y: 320, width: 180, height: 300,
|
63
|
+
align: :center, ellipsize: false, justify: false, hint: :magenta) do |embed|
|
64
|
+
embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
|
65
|
+
embed.svg key: ':health:', width: 28, height: 28, file: 'glass-heart.svg'
|
66
|
+
embed.png key: ':purse:', width: 28, height: 28, file: 'shiny-purse.png'
|
67
|
+
end
|
68
|
+
|
69
|
+
embed_text = 'Markup --- and typography replacements --- with ":tool:" icons <i>won\'t</i> fail'
|
70
|
+
text(str: embed_text, font: 'Serif 18', markup: true,
|
71
|
+
x: 600, y: 320, width: 180, height: 300,
|
72
|
+
align: :center, hint: :magenta) do |embed|
|
73
|
+
embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
|
74
|
+
end
|
75
|
+
|
76
|
+
save_png prefix: 'embed_'
|
77
|
+
end
|
78
|
+
|
79
|
+
Squib::Deck.new(cards: 3) do
|
80
|
+
|
81
|
+
embed_text = 'Take 1 :tool: and gain 2 :health:.'
|
82
|
+
text(str: embed_text, font: 'Sans', font_size: [18, 32, 45],
|
83
|
+
x: 0, y: 0, width: 180, height: 300, valign: :bottom,
|
84
|
+
align: :left, ellipsize: false, justify: false, hint: :cyan) do |embed|
|
85
|
+
embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
|
86
|
+
embed.svg key: ':health:', width: 28, height: 28, file: 'glass-heart.svg'
|
87
|
+
end
|
88
|
+
save_png prefix: 'embed_multi_'
|
89
|
+
save_sheet prefix: 'embed_multisheet_', columns: 3
|
90
|
+
end
|
data/samples/text_options.rb
CHANGED
@@ -3,7 +3,7 @@ require 'squib'
|
|
3
3
|
|
4
4
|
data = {'name' => ['Thief', 'Grifter', 'Mastermind'],
|
5
5
|
'level' => [1,2,3]}
|
6
|
-
longtext = "This is left-justified text.\nWhat do you know about tweetle beetles? well...
|
6
|
+
longtext = "This is left-justified text, with newlines.\nWhat do you know about tweetle beetles? well... When tweetle beetles fight, it's called a tweetle beetle battle. And when they battle in a puddle, it's a tweetle beetle puddle battle. AND when tweetle beetles battle with paddles in a puddle, they call it a tweetle beetle puddle paddle battle. AND... When beetles battle beetles in a puddle paddle battle and the beetle battle puddle is a puddle in a bottle... ..they call this a tweetle beetle bottle puddle paddle battle muddle."
|
7
7
|
|
8
8
|
Squib::Deck.new(width: 825, height: 1125, cards: 3) do
|
9
9
|
background color: :white
|
@@ -23,12 +23,12 @@ Squib::Deck.new(width: 825, height: 1125, cards: 3) do
|
|
23
23
|
text str: 'Font string sizes can be overridden per card.', x: 65, y: 350,
|
24
24
|
font: 'Impact 36', font_size: [16, 20, 24]
|
25
25
|
|
26
|
-
text str: 'This text has fixed width, fixed height, center-aligned, middle-valigned,
|
26
|
+
text str: 'This text has fixed width, fixed height, center-aligned, middle-valigned, has a red hint, and "smart quotes"',
|
27
27
|
hint: :red,
|
28
28
|
x: 65, y: 400,
|
29
29
|
width: 300, height: 125,
|
30
|
-
align: :center, valign: 'MIDDLE', #case-insenstive strings
|
31
|
-
font: '
|
30
|
+
align: :center, valign: 'MIDDLE', # these can be specified with case-insenstive strings too
|
31
|
+
font: 'Serif 16', quotes: [:smart,:smart, :dumb]
|
32
32
|
|
33
33
|
extents = text str: 'Ink extent return value',
|
34
34
|
x: 65, y: 550,
|
@@ -41,12 +41,14 @@ Squib::Deck.new(width: 825, height: 1125, cards: 3) do
|
|
41
41
|
width: ws, height: hs,
|
42
42
|
radius: 10, stroke_color: :black
|
43
43
|
|
44
|
+
# If width & height are defined and the text will overflow the box, we can ellipsize.
|
44
45
|
text str: "Ellipsization!\nThe ultimate question of life, the universe, and everything to life and everything is 42",
|
45
46
|
hint: :green, font: 'Arial 22',
|
46
47
|
x: 450, y: 400,
|
47
48
|
width: 280, height: 180,
|
48
49
|
ellipsize: true
|
49
50
|
|
51
|
+
# Text hints are guides for showing you how your text boxes are laid out exactly
|
50
52
|
hint text: :cyan
|
51
53
|
text str: 'Text hints are also globally togglable!',
|
52
54
|
x: 65, y: 625,
|
@@ -60,17 +62,29 @@ Squib::Deck.new(width: 825, height: 1125, cards: 3) do
|
|
60
62
|
x: 565, y: 675, angle: 0.2,
|
61
63
|
font: 'Arial 18', hint: :red
|
62
64
|
|
65
|
+
# Text can be justified, and have newlines
|
63
66
|
text str: longtext, font: 'Arial 16',
|
64
67
|
x: 65, y: 700,
|
65
|
-
width:
|
68
|
+
width: '1.5in', height: inches(1),
|
66
69
|
justify: true
|
67
70
|
|
68
|
-
|
71
|
+
# Here's how you embed images into text.
|
72
|
+
# Pass a block to the method call and use the given context
|
73
|
+
embed_text = 'Embedded icons! Take 1 :tool: and gain 2:health:. If Level 2, take 2 :tool:'
|
74
|
+
text(str: embed_text, font: 'Sans 18',
|
75
|
+
x: '1.8in', y: '2.5in', width: '0.85in',
|
76
|
+
align: :left, ellipsize: false) do |embed|
|
77
|
+
embed.svg key: ':tool:', width: 28, height: 28, file: 'spanner.svg'
|
78
|
+
embed.svg key: ':health:', width: 28, height: 28, file: 'glass-heart.svg'
|
79
|
+
end
|
80
|
+
|
81
|
+
text str: "<b>Markup</b> is <i>quite</i> <s>'easy'</s> <span fgcolor=\"\#ff0000\">awesome</span>. Can't beat those \"smart\" 'quotes', now with 10--20% more en-dashes --- and em-dashes --- with explicit ellipses too...",
|
69
82
|
markup: true,
|
70
83
|
x: 50, y: 1000,
|
71
84
|
width: 750, height: 100,
|
72
85
|
valign: :bottom,
|
73
|
-
font: '
|
86
|
+
font: 'Serif 18', hint: :cyan
|
87
|
+
|
74
88
|
|
75
89
|
save prefix: 'text_', format: :png
|
76
90
|
end
|
data/spec/api/api_text_spec.rb
CHANGED
@@ -6,7 +6,7 @@ describe Squib::Deck, '#text' do
|
|
6
6
|
context 'fonts' do
|
7
7
|
it "should use the default font when #text and #set_font don't specify" do
|
8
8
|
card = instance_double(Squib::Card)
|
9
|
-
expect(card).to receive(:text).with('a', 'Arial 36', *([anything] * 15)).once
|
9
|
+
expect(card).to receive(:text).with(anything, 'a', 'Arial 36', *([anything] * 15)).once
|
10
10
|
Squib::Deck.new do
|
11
11
|
@cards = [card]
|
12
12
|
text str: 'a'
|
@@ -15,7 +15,7 @@ describe Squib::Deck, '#text' do
|
|
15
15
|
|
16
16
|
it "should use the #set_font when #text doesn't specify" do
|
17
17
|
card = instance_double(Squib::Card)
|
18
|
-
expect(card).to receive(:text).with('a', 'Times New Roman 16', *([anything] * 15)).once
|
18
|
+
expect(card).to receive(:text).with(anything, 'a', 'Times New Roman 16', *([anything] * 15)).once
|
19
19
|
Squib::Deck.new do
|
20
20
|
@cards = [card]
|
21
21
|
set font: 'Times New Roman 16'
|
@@ -25,7 +25,7 @@ describe Squib::Deck, '#text' do
|
|
25
25
|
|
26
26
|
it 'should use the specified font no matter what' do
|
27
27
|
card = instance_double(Squib::Card)
|
28
|
-
expect(card).to receive(:text).with('a', 'Arial 18', *([anything] * 15)).once
|
28
|
+
expect(card).to receive(:text).with(anything, 'a', 'Arial 18', *([anything] * 15)).once
|
29
29
|
Squib::Deck.new do
|
30
30
|
@cards = [card]
|
31
31
|
set font: 'Times New Roman 16'
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'squib/args/typographer'
|
3
|
+
|
4
|
+
describe Squib::Args::Typographer do
|
5
|
+
subject(:t) { Squib::Args::Typographer.new }
|
6
|
+
|
7
|
+
it 'does nothing on a non-quoted string' do
|
8
|
+
expect(t.process(%{nothing})).to eq(%{nothing})
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'left quotes at the beginning' do
|
12
|
+
expect(t.process(%{"foo})).to eq(%{\u201Cfoo})
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'left quotes in the middle of the string' do
|
16
|
+
expect(t.process(%{hello "foo})).to eq(%{hello \u201Cfoo})
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'right quotes at the end' do
|
20
|
+
expect(t.process(%{foo"})).to eq(%{foo\u201D})
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'handles the entire string quoted' do
|
24
|
+
expect(t.process(%{"foo"})).to eq(%{\u201Cfoo\u201D})
|
25
|
+
end
|
26
|
+
|
27
|
+
it "quotes in the middle of the string" do
|
28
|
+
expect(t.process(%{hello "foo" world})).to eq(%{hello \u201Cfoo\u201D world})
|
29
|
+
end
|
30
|
+
|
31
|
+
it "single left quotes at the beginning" do
|
32
|
+
expect(t.process(%{'foo})).to eq(%{\u2018foo})
|
33
|
+
end
|
34
|
+
|
35
|
+
it "single right quotes at the end" do
|
36
|
+
expect(t.process(%{foo'})).to eq(%{foo\u2019})
|
37
|
+
end
|
38
|
+
|
39
|
+
it "single quotes in the middle" do
|
40
|
+
expect(t.process(%{a 'foo' bar})).to eq(%{a \u2018foo\u2019 bar})
|
41
|
+
end
|
42
|
+
|
43
|
+
it "handles apostraphes" do
|
44
|
+
expect(t.process(%{can't})).to eq(%{can\u2019t})
|
45
|
+
end
|
46
|
+
|
47
|
+
it "single quotes inside double quotes" do
|
48
|
+
expect(t.process(%{"'I can't do that', he said"})).to eq(%{\u201C\u2018I can\u2019t do that\u2019, he said\u201D})
|
49
|
+
end
|
50
|
+
|
51
|
+
it "replaces the straightforward ones" do
|
52
|
+
expect(t.process(%{``hi...'' -- ---})).to eq(%{\u201Chi\u2026\u201D \u2013 \u2014})
|
53
|
+
end
|
54
|
+
|
55
|
+
it "does nothing on lone quotes" do
|
56
|
+
expect(t.process(%{"})).to eq(%{"})
|
57
|
+
expect(t.process(%{'})).to eq(%{'})
|
58
|
+
end
|
59
|
+
|
60
|
+
it "ignores stuff in <tags>" do
|
61
|
+
expect(t.process(%{<span weight="bold">"can't"</span>})).to eq(%{<span weight="bold">\u201Ccan\u2019t\u201D</span>})
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
context 'configured' do
|
66
|
+
#TODO
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
end
|
@@ -17,8 +17,7 @@ cairo: save([])
|
|
17
17
|
cairo: set_source_color([:black])
|
18
18
|
cairo: translate([65, 400])
|
19
19
|
cairo: rotate([0])
|
20
|
-
cairo:
|
21
|
-
cairo: move_to([65, 400])
|
20
|
+
cairo: move_to([0, 0])
|
22
21
|
pango font: size=([128000])
|
23
22
|
pango: font_description=([MockDouble])
|
24
23
|
pango: text=(["ShortBig"])
|
@@ -29,9 +28,10 @@ pango: alignment=([#<Pango::Layout::Alignment center>])
|
|
29
28
|
pango: justify=([false])
|
30
29
|
pango: spacing=([0])
|
31
30
|
cairo: update_pango_layout([MockDouble])
|
31
|
+
cairo: move_to([0, 0])
|
32
32
|
cairo: update_pango_layout([MockDouble])
|
33
33
|
cairo: show_pango_layout([MockDouble])
|
34
|
-
cairo: rounded_rectangle([
|
34
|
+
cairo: rounded_rectangle([0, 0, 0, 0, 0, 0])
|
35
35
|
cairo: set_source_color([:red])
|
36
36
|
cairo: set_line_width([2.0])
|
37
37
|
cairo: stroke([])
|
@@ -40,8 +40,7 @@ cairo: save([])
|
|
40
40
|
cairo: set_source_color([:black])
|
41
41
|
cairo: translate([65, 400])
|
42
42
|
cairo: rotate([0])
|
43
|
-
cairo:
|
44
|
-
cairo: move_to([65, 400])
|
43
|
+
cairo: move_to([0, 0])
|
45
44
|
pango font: size=([46080])
|
46
45
|
pango: font_description=([MockDouble])
|
47
46
|
pango: text=(["Medium_Length_Name"])
|
@@ -52,9 +51,10 @@ pango: alignment=([#<Pango::Layout::Alignment center>])
|
|
52
51
|
pango: justify=([false])
|
53
52
|
pango: spacing=([0])
|
54
53
|
cairo: update_pango_layout([MockDouble])
|
54
|
+
cairo: move_to([0, 0])
|
55
55
|
cairo: update_pango_layout([MockDouble])
|
56
56
|
cairo: show_pango_layout([MockDouble])
|
57
|
-
cairo: rounded_rectangle([
|
57
|
+
cairo: rounded_rectangle([0, 0, 0, 0, 0, 0])
|
58
58
|
cairo: set_source_color([:red])
|
59
59
|
cairo: set_line_width([2.0])
|
60
60
|
cairo: stroke([])
|
@@ -63,8 +63,7 @@ cairo: save([])
|
|
63
63
|
cairo: set_source_color([:black])
|
64
64
|
cairo: translate([65, 400])
|
65
65
|
cairo: rotate([0])
|
66
|
-
cairo:
|
67
|
-
cairo: move_to([65, 400])
|
66
|
+
cairo: move_to([0, 0])
|
68
67
|
pango font: size=([36864])
|
69
68
|
pango: font_description=([MockDouble])
|
70
69
|
pango: text=(["Super_Duper_Long_Name"])
|
@@ -75,9 +74,10 @@ pango: alignment=([#<Pango::Layout::Alignment center>])
|
|
75
74
|
pango: justify=([false])
|
76
75
|
pango: spacing=([0])
|
77
76
|
cairo: update_pango_layout([MockDouble])
|
77
|
+
cairo: move_to([0, 0])
|
78
78
|
cairo: update_pango_layout([MockDouble])
|
79
79
|
cairo: show_pango_layout([MockDouble])
|
80
|
-
cairo: rounded_rectangle([
|
80
|
+
cairo: rounded_rectangle([0, 0, 0, 0, 0, 0])
|
81
81
|
cairo: set_source_color([:red])
|
82
82
|
cairo: set_line_width([2.0])
|
83
83
|
cairo: stroke([])
|
@@ -71,8 +71,7 @@ cairo: save([])
|
|
71
71
|
cairo: set_source_color([:black])
|
72
72
|
cairo: translate([220, 78])
|
73
73
|
cairo: rotate([0])
|
74
|
-
cairo:
|
75
|
-
cairo: move_to([220, 78])
|
74
|
+
cairo: move_to([0, 0])
|
76
75
|
pango: font_description=([MockDouble])
|
77
76
|
pango: text=(["Thief"])
|
78
77
|
pango: wrap=([#<Pango::Layout::WrapMode word-char>])
|
@@ -81,6 +80,7 @@ pango: alignment=([#<Pango::Layout::Alignment left>])
|
|
81
80
|
pango: justify=([false])
|
82
81
|
pango: spacing=([0])
|
83
82
|
cairo: update_pango_layout([MockDouble])
|
83
|
+
cairo: move_to([0, 0])
|
84
84
|
cairo: update_pango_layout([MockDouble])
|
85
85
|
cairo: show_pango_layout([MockDouble])
|
86
86
|
cairo: restore([])
|
@@ -88,8 +88,7 @@ cairo: save([])
|
|
88
88
|
cairo: set_source_color([:black])
|
89
89
|
cairo: translate([220, 78])
|
90
90
|
cairo: rotate([0])
|
91
|
-
cairo:
|
92
|
-
cairo: move_to([220, 78])
|
91
|
+
cairo: move_to([0, 0])
|
93
92
|
pango: font_description=([MockDouble])
|
94
93
|
pango: text=(["Grifter"])
|
95
94
|
pango: wrap=([#<Pango::Layout::WrapMode word-char>])
|
@@ -98,6 +97,7 @@ pango: alignment=([#<Pango::Layout::Alignment left>])
|
|
98
97
|
pango: justify=([false])
|
99
98
|
pango: spacing=([0])
|
100
99
|
cairo: update_pango_layout([MockDouble])
|
100
|
+
cairo: move_to([0, 0])
|
101
101
|
cairo: update_pango_layout([MockDouble])
|
102
102
|
cairo: show_pango_layout([MockDouble])
|
103
103
|
cairo: restore([])
|
@@ -105,8 +105,7 @@ cairo: save([])
|
|
105
105
|
cairo: set_source_color([:black])
|
106
106
|
cairo: translate([220, 78])
|
107
107
|
cairo: rotate([0])
|
108
|
-
cairo:
|
109
|
-
cairo: move_to([220, 78])
|
108
|
+
cairo: move_to([0, 0])
|
110
109
|
pango: font_description=([MockDouble])
|
111
110
|
pango: text=(["Mastermind"])
|
112
111
|
pango: wrap=([#<Pango::Layout::WrapMode word-char>])
|
@@ -115,6 +114,7 @@ pango: alignment=([#<Pango::Layout::Alignment left>])
|
|
115
114
|
pango: justify=([false])
|
116
115
|
pango: spacing=([0])
|
117
116
|
cairo: update_pango_layout([MockDouble])
|
117
|
+
cairo: move_to([0, 0])
|
118
118
|
cairo: update_pango_layout([MockDouble])
|
119
119
|
cairo: show_pango_layout([MockDouble])
|
120
120
|
cairo: restore([])
|
@@ -122,8 +122,7 @@ cairo: save([])
|
|
122
122
|
cairo: set_source_color([:black])
|
123
123
|
cairo: translate([75, 85])
|
124
124
|
cairo: rotate([0])
|
125
|
-
cairo:
|
126
|
-
cairo: move_to([75, 85])
|
125
|
+
cairo: move_to([0, 0])
|
127
126
|
pango: font_description=([MockDouble])
|
128
127
|
pango: text=(["1"])
|
129
128
|
pango: width=([131072])
|
@@ -133,6 +132,7 @@ pango: alignment=([#<Pango::Layout::Alignment center>])
|
|
133
132
|
pango: justify=([false])
|
134
133
|
pango: spacing=([0])
|
135
134
|
cairo: update_pango_layout([MockDouble])
|
135
|
+
cairo: move_to([0, 0])
|
136
136
|
cairo: update_pango_layout([MockDouble])
|
137
137
|
cairo: show_pango_layout([MockDouble])
|
138
138
|
cairo: restore([])
|
@@ -140,8 +140,7 @@ cairo: save([])
|
|
140
140
|
cairo: set_source_color([:black])
|
141
141
|
cairo: translate([75, 85])
|
142
142
|
cairo: rotate([0])
|
143
|
-
cairo:
|
144
|
-
cairo: move_to([75, 85])
|
143
|
+
cairo: move_to([0, 0])
|
145
144
|
pango: font_description=([MockDouble])
|
146
145
|
pango: text=(["2"])
|
147
146
|
pango: width=([131072])
|
@@ -151,6 +150,7 @@ pango: alignment=([#<Pango::Layout::Alignment center>])
|
|
151
150
|
pango: justify=([false])
|
152
151
|
pango: spacing=([0])
|
153
152
|
cairo: update_pango_layout([MockDouble])
|
153
|
+
cairo: move_to([0, 0])
|
154
154
|
cairo: update_pango_layout([MockDouble])
|
155
155
|
cairo: show_pango_layout([MockDouble])
|
156
156
|
cairo: restore([])
|
@@ -158,8 +158,7 @@ cairo: save([])
|
|
158
158
|
cairo: set_source_color([:black])
|
159
159
|
cairo: translate([75, 85])
|
160
160
|
cairo: rotate([0])
|
161
|
-
cairo:
|
162
|
-
cairo: move_to([75, 85])
|
161
|
+
cairo: move_to([0, 0])
|
163
162
|
pango: font_description=([MockDouble])
|
164
163
|
pango: text=(["3"])
|
165
164
|
pango: width=([131072])
|
@@ -169,6 +168,7 @@ pango: alignment=([#<Pango::Layout::Alignment center>])
|
|
169
168
|
pango: justify=([false])
|
170
169
|
pango: spacing=([0])
|
171
170
|
cairo: update_pango_layout([MockDouble])
|
171
|
+
cairo: move_to([0, 0])
|
172
172
|
cairo: update_pango_layout([MockDouble])
|
173
173
|
cairo: show_pango_layout([MockDouble])
|
174
174
|
cairo: restore([])
|