squib 0.14.beta1 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +2 -1
- data/lib/squib/api/save.rb +1 -1
- data/lib/squib/args/sheet.rb +8 -2
- data/lib/squib/graphics/save_sprue.rb +30 -53
- data/lib/squib/version.rb +1 -1
- data/samples/data/_excel.rb +1 -1
- data/samples/sprues/_advanced_sprues.rb +24 -0
- data/squib.gemspec +5 -5
- metadata +18 -18
- data/samples/images/_unicode.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d12b1f10b21ed987702d0440f995d7e088b9eeee
|
4
|
+
data.tar.gz: 135fb921bda10d91f08d5ad2be0f0dd9dbfbb718
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba54e4c7ea4359d98dae54ceaa986f94c97f0acffb965be4f695e653cc775a424ffb86bca55ee3b19b49b5d12be1671f0671095cc17e648ccaf84ff59dac025b
|
7
|
+
data.tar.gz: ab7316a04968bb5e4863144f2eb2937f63e03f5c1896eae349657669e9d7d30108e00edd91006b1e96b885befea322d6f817d150716c8d653f72fa065fca28f8
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Squib CHANGELOG
|
2
2
|
Squib follows [semantic versioning](http://semver.org).
|
3
3
|
|
4
|
-
## v0.14.0 /
|
4
|
+
## v0.14.0 / 2017-11-06
|
5
5
|
|
6
6
|
Features:
|
7
7
|
* `save_pdf/save_sheet` method now supports `sprue`, which allows you to define templated layouts and position your cards freely (#217) by @felixleong. See docs for how to use this _very_ powerful feature!
|
@@ -26,6 +26,7 @@ Bugs:
|
|
26
26
|
|
27
27
|
Chores:
|
28
28
|
* Going back to our policy of locking in our dependencies so that we don't have new gems breaking things.
|
29
|
+
* Bumped deps, Cairo to 1.15.10 and Pango et al. to 3.1.9
|
29
30
|
|
30
31
|
Special thanks to @sparr, @felixleong, @blinks, @vador for all of their work!!
|
31
32
|
|
data/lib/squib/api/save.rb
CHANGED
data/lib/squib/args/sheet.rb
CHANGED
@@ -21,6 +21,7 @@ module Squib
|
|
21
21
|
|
22
22
|
def self.parameters
|
23
23
|
{
|
24
|
+
count_format: '%02d',
|
24
25
|
crop_margin_bottom: 0,
|
25
26
|
crop_margin_left: 0,
|
26
27
|
crop_margin_right: 0,
|
@@ -35,6 +36,7 @@ module Squib
|
|
35
36
|
gap: 0,
|
36
37
|
height: 2550,
|
37
38
|
margin: 75,
|
39
|
+
prefix: 'sheet_',
|
38
40
|
rows: :infinite,
|
39
41
|
columns: 5,
|
40
42
|
trim_radius: 38,
|
@@ -91,8 +93,12 @@ module Squib
|
|
91
93
|
(count.to_f / columns.to_f).ceil
|
92
94
|
end
|
93
95
|
|
94
|
-
def full_filename
|
95
|
-
|
96
|
+
def full_filename(i=nil)
|
97
|
+
if i.nil?
|
98
|
+
"#{dir}/#{file}"
|
99
|
+
else
|
100
|
+
"#{dir}/#{prefix}#{count_format % i}.png"
|
101
|
+
end
|
96
102
|
end
|
97
103
|
|
98
104
|
def crop_coords(x, y, deck_w, deck_h)
|
@@ -2,12 +2,11 @@ module Squib
|
|
2
2
|
module Graphics
|
3
3
|
# Helper class to generate templated sheet.
|
4
4
|
class SaveSprue
|
5
|
-
def initialize(deck, tmpl,
|
5
|
+
def initialize(deck, tmpl, sheet_args)
|
6
6
|
@deck = deck
|
7
7
|
@tmpl = tmpl
|
8
8
|
@page_number = 1
|
9
|
-
@
|
10
|
-
@rotated_delta = (@tmpl.card_width - @deck.width).abs / 2
|
9
|
+
@sheet_args = sheet_args # might be Args::Sheet or Args::SaveBatch
|
11
10
|
@overlay_lines = @tmpl.crop_lines.select do |line|
|
12
11
|
line['overlay_on_cards']
|
13
12
|
end
|
@@ -17,12 +16,9 @@ module Squib
|
|
17
16
|
cc = init_cc
|
18
17
|
cc.set_source_color(:white) # white backdrop TODO make option
|
19
18
|
cc.paint
|
20
|
-
|
21
|
-
per_sheet =
|
22
|
-
|
23
|
-
if default_angle.zero?
|
24
|
-
default_angle = check_card_orientation
|
25
|
-
end
|
19
|
+
slots = @tmpl.cards
|
20
|
+
per_sheet = slots.size
|
21
|
+
check_oversized_card
|
26
22
|
|
27
23
|
draw_overlay_below_cards cc if range.size
|
28
24
|
|
@@ -31,17 +27,12 @@ module Squib
|
|
31
27
|
cc = next_page_if_needed(cc, i, per_sheet)
|
32
28
|
|
33
29
|
card = @deck.cards[i]
|
34
|
-
slot =
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
draw_rotated_card cc, card, x, y, angle
|
41
|
-
else
|
42
|
-
cc.set_source card.cairo_surface, x, y
|
43
|
-
end
|
44
|
-
cc.paint
|
30
|
+
slot = slots[i % per_sheet]
|
31
|
+
|
32
|
+
draw_card cc, card,
|
33
|
+
slot['x'], slot['y'],
|
34
|
+
slot['rotate'],
|
35
|
+
@sheet_args.trim, @sheet_args.trim_radius
|
45
36
|
|
46
37
|
bar.increment
|
47
38
|
end
|
@@ -130,50 +121,36 @@ module Squib
|
|
130
121
|
end
|
131
122
|
end
|
132
123
|
|
133
|
-
def
|
134
|
-
clockwise = 1.5 * Math::PI
|
135
|
-
if @deck.width <= @tmpl.card_width &&
|
136
|
-
@deck.height <= @tmpl.card_height
|
137
|
-
return 0
|
138
|
-
elsif (
|
139
|
-
@deck.width == @tmpl.card_height &&
|
140
|
-
@deck.height == @tmpl.card_width)
|
141
|
-
Squib.logger.warn {
|
142
|
-
'Rotating cards to match card orientation in template.'
|
143
|
-
}
|
144
|
-
return clockwise
|
145
|
-
end
|
146
|
-
|
124
|
+
def check_oversized_card
|
147
125
|
Squib.logger.warn {
|
148
|
-
|
149
|
-
|
150
|
-
}
|
151
|
-
|
126
|
+
"Card size is larger than sprue's expected card size "\
|
127
|
+
"of #{@tmpl.card_width}x#{@tmpl.card_height}. Cards may overlap."
|
128
|
+
} if (@deck.width - 2.0 * @sheet_args.trim) > @tmpl.card_width ||
|
129
|
+
(@deck.height - 2.0 * @sheet_args.trim) > @tmpl.card_height
|
152
130
|
end
|
153
131
|
|
154
|
-
def
|
132
|
+
def draw_card(cc, card, x, y, angle, trim, trim_radius)
|
133
|
+
# Compute the true size of the card after trimming
|
134
|
+
w = @deck.width - 2.0 * trim
|
135
|
+
h = @deck.height - 2.0 * trim
|
136
|
+
|
155
137
|
# Normalize the angles first
|
138
|
+
# TODO do this in the args class
|
156
139
|
angle = angle % (2 * Math::PI)
|
157
140
|
angle = 2 * Math::PI - angle if angle < 0
|
158
141
|
|
159
|
-
# Determine what's the delta we need to translate our cards
|
160
|
-
delta_shift = @deck.width < @deck.height ? 1 : -1
|
161
|
-
if angle.zero? || angle == Math::PI
|
162
|
-
delta = 0
|
163
|
-
elsif angle < Math::PI
|
164
|
-
delta = -delta_shift * @rotated_delta
|
165
|
-
else
|
166
|
-
delta = delta_shift * @rotated_delta
|
167
|
-
end
|
168
|
-
|
169
142
|
# Perform the actual rotation and drawing
|
170
143
|
mat = cc.matrix # Save the transformation matrix to revert later
|
171
144
|
cc.translate x, y
|
172
|
-
cc.translate @deck.width / 2, @deck.height / 2
|
145
|
+
cc.translate @deck.width / 2.0, @deck.height / 2.0
|
173
146
|
cc.rotate angle
|
174
|
-
cc.translate
|
147
|
+
cc.translate -@deck.width / 2.0, -@deck.height / 2.0
|
148
|
+
cc.rounded_rectangle(trim, trim, w, h, trim_radius, trim_radius) # clip
|
149
|
+
cc.clip
|
175
150
|
cc.set_source card.cairo_surface, 0, 0
|
176
151
|
cc.matrix = mat
|
152
|
+
cc.paint
|
153
|
+
cc.reset_clip
|
177
154
|
end
|
178
155
|
end
|
179
156
|
|
@@ -201,7 +178,7 @@ module Squib
|
|
201
178
|
end
|
202
179
|
|
203
180
|
def full_filename
|
204
|
-
@
|
181
|
+
@sheet_args.full_filename
|
205
182
|
end
|
206
183
|
end
|
207
184
|
|
@@ -221,7 +198,7 @@ module Squib
|
|
221
198
|
end
|
222
199
|
|
223
200
|
def full_filename
|
224
|
-
@
|
201
|
+
@sheet_args.full_filename @page_number
|
225
202
|
end
|
226
203
|
end
|
227
204
|
end
|
data/lib/squib/version.rb
CHANGED
data/samples/data/_excel.rb
CHANGED
@@ -51,5 +51,5 @@ Squib::Deck.new(cards: resource_data['Name'].size) do
|
|
51
51
|
rect width: :deck, height: :deck
|
52
52
|
text str: resource_data['Name'], align: :center, width: :deck, hint: 'red'
|
53
53
|
text str: resource_data['Cost'], align: :right, width: :deck, hint: 'red'
|
54
|
-
save_sheet prefix: 'sample_excel_resources_'
|
54
|
+
save_sheet prefix: 'sample_excel_resources_', columns: 3
|
55
55
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'squib'
|
2
|
+
|
3
|
+
# This is a more advanced example of Sprues
|
4
|
+
# (mostly so we can have a torturous regression test)
|
5
|
+
# - Uses a custom sprue
|
6
|
+
# - Weird rotations
|
7
|
+
# - Center-positioned
|
8
|
+
# - Multiple pages
|
9
|
+
Squib::Deck.new(cards: 6, width: '2.2in', height: '2.1in') do
|
10
|
+
background color: :blue #blue never shows up! Yay clipping...
|
11
|
+
rect stroke_width: 5, stroke_color: :red, fill_color: :salmon
|
12
|
+
cut_zone margin: '0.125in',
|
13
|
+
stroke_width: 2, stroke_color: :purple
|
14
|
+
|
15
|
+
circle x: width/2, y: height/2, radius: 20 # midpoint
|
16
|
+
|
17
|
+
text str: (0..9).map{ |i| "Card #{i}\n\n" },
|
18
|
+
font: 'Sans 32', align: :center, valign: :middle,
|
19
|
+
height: :deck, width: :deck
|
20
|
+
|
21
|
+
save_sheet sprue: 'my_sprues/weird_sprue.yml',
|
22
|
+
trim: '0.2in', trim_radius: '10pt',
|
23
|
+
prefix: "advanced_sprues_"
|
24
|
+
end
|
data/squib.gemspec
CHANGED
@@ -29,16 +29,16 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.test_files = spec.files.grep(/^(spec|samples|docs|benchmarks)\//)
|
30
30
|
spec.require_paths = ['lib']
|
31
31
|
|
32
|
-
spec.add_runtime_dependency 'cairo', '1.15.
|
32
|
+
spec.add_runtime_dependency 'cairo', '1.15.10'
|
33
33
|
spec.add_runtime_dependency 'classy_hash', '0.2.1'
|
34
|
-
spec.add_runtime_dependency 'gio2', '3.1.
|
35
|
-
spec.add_runtime_dependency 'gobject-introspection', '3.1.
|
34
|
+
spec.add_runtime_dependency 'gio2', '3.1.9'
|
35
|
+
spec.add_runtime_dependency 'gobject-introspection', '3.1.9'
|
36
36
|
spec.add_runtime_dependency 'highline', '1.7.8'
|
37
37
|
spec.add_runtime_dependency 'mercenary', '0.3.6'
|
38
38
|
spec.add_runtime_dependency 'nokogiri', '1.8.1'
|
39
|
-
spec.add_runtime_dependency 'pango', '3.1.
|
39
|
+
spec.add_runtime_dependency 'pango', '3.1.9'
|
40
40
|
spec.add_runtime_dependency 'roo', '2.7.1'
|
41
|
-
spec.add_runtime_dependency 'rsvg2', '3.1.
|
41
|
+
spec.add_runtime_dependency 'rsvg2', '3.1.9'
|
42
42
|
spec.add_runtime_dependency 'ruby-progressbar', '1.9.0'
|
43
43
|
|
44
44
|
spec.add_development_dependency 'bundler'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: squib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.14.
|
4
|
+
version: 0.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Meneely
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-11-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cairo
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.15.
|
19
|
+
version: 1.15.10
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.15.
|
26
|
+
version: 1.15.10
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: classy_hash
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,28 +44,28 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 3.1.
|
47
|
+
version: 3.1.9
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 3.1.
|
54
|
+
version: 3.1.9
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: gobject-introspection
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 3.1.
|
61
|
+
version: 3.1.9
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - '='
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 3.1.
|
68
|
+
version: 3.1.9
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: highline
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,14 +114,14 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - '='
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: 3.1.
|
117
|
+
version: 3.1.9
|
118
118
|
type: :runtime
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - '='
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: 3.1.
|
124
|
+
version: 3.1.9
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: roo
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,14 +142,14 @@ dependencies:
|
|
142
142
|
requirements:
|
143
143
|
- - '='
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version: 3.1.
|
145
|
+
version: 3.1.9
|
146
146
|
type: :runtime
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - '='
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version: 3.1.
|
152
|
+
version: 3.1.9
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: ruby-progressbar
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -270,7 +270,6 @@ extra_rdoc_files:
|
|
270
270
|
- samples/images/_cairo_access.rb
|
271
271
|
- samples/images/_images.rb
|
272
272
|
- samples/images/_more_load_images.rb
|
273
|
-
- samples/images/_unicode.rb
|
274
273
|
- samples/intro/01_hello.rb
|
275
274
|
- samples/intro/02_options.rb
|
276
275
|
- samples/intro/03_layout.rb
|
@@ -289,6 +288,7 @@ extra_rdoc_files:
|
|
289
288
|
- samples/saves/_showcase.rb
|
290
289
|
- samples/shapes/_draw_shapes.rb
|
291
290
|
- samples/shapes/_proofs.rb
|
291
|
+
- samples/sprues/_advanced_sprues.rb
|
292
292
|
- samples/sprues/_builtin_sprues.rb
|
293
293
|
- samples/sprues/_fold_sheet.rb
|
294
294
|
- samples/sprues/_hex_tiles.rb
|
@@ -432,7 +432,6 @@ files:
|
|
432
432
|
- samples/images/_cairo_access.rb
|
433
433
|
- samples/images/_images.rb
|
434
434
|
- samples/images/_more_load_images.rb
|
435
|
-
- samples/images/_unicode.rb
|
436
435
|
- samples/intro/01_hello.rb
|
437
436
|
- samples/intro/02_options.rb
|
438
437
|
- samples/intro/03_layout.rb
|
@@ -451,6 +450,7 @@ files:
|
|
451
450
|
- samples/saves/_showcase.rb
|
452
451
|
- samples/shapes/_draw_shapes.rb
|
453
452
|
- samples/shapes/_proofs.rb
|
453
|
+
- samples/sprues/_advanced_sprues.rb
|
454
454
|
- samples/sprues/_builtin_sprues.rb
|
455
455
|
- samples/sprues/_fold_sheet.rb
|
456
456
|
- samples/sprues/_hex_tiles.rb
|
@@ -478,12 +478,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
478
478
|
version: 2.2.0
|
479
479
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
480
480
|
requirements:
|
481
|
-
- - "
|
481
|
+
- - ">="
|
482
482
|
- !ruby/object:Gem::Version
|
483
|
-
version:
|
483
|
+
version: '0'
|
484
484
|
requirements: []
|
485
485
|
rubyforge_project:
|
486
|
-
rubygems_version: 2.6.
|
486
|
+
rubygems_version: 2.6.13
|
487
487
|
signing_key:
|
488
488
|
specification_version: 2
|
489
489
|
summary: A Ruby DSL for prototyping card games
|
@@ -503,7 +503,6 @@ test_files:
|
|
503
503
|
- samples/images/_cairo_access.rb
|
504
504
|
- samples/images/_images.rb
|
505
505
|
- samples/images/_more_load_images.rb
|
506
|
-
- samples/images/_unicode.rb
|
507
506
|
- samples/intro/01_hello.rb
|
508
507
|
- samples/intro/02_options.rb
|
509
508
|
- samples/intro/03_layout.rb
|
@@ -522,6 +521,7 @@ test_files:
|
|
522
521
|
- samples/saves/_showcase.rb
|
523
522
|
- samples/shapes/_draw_shapes.rb
|
524
523
|
- samples/shapes/_proofs.rb
|
524
|
+
- samples/sprues/_advanced_sprues.rb
|
525
525
|
- samples/sprues/_builtin_sprues.rb
|
526
526
|
- samples/sprues/_fold_sheet.rb
|
527
527
|
- samples/sprues/_hex_tiles.rb
|
data/samples/images/_unicode.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'squib'
|
2
|
-
|
3
|
-
# Here's a handy list of game-related UTF-8 characters
|
4
|
-
# for those early pre-graphics prototypes
|
5
|
-
game_chars = %W(\u2620 \u2622 \u2623 \u00AB \u00BB \u2039 \u203A \u2022 \u20D8 \u20D9 \u20DA \u2023 \u20E1 \u20D4 \u20D5 \u20D6 \u20D7 \u2190 \u2191 \u2192 \u2193 \u2194 \u2196 \u2197 \u2198 \u2199 \u219A \u219B \u219C \u219D \u219E \u219F \u21A0 \u21A1 \u21A2 \u21A3 \u21A4 \u21A5 \u21A6 \u21A7 \u21A8 \u21A9 \u21AA \u21AB \u21AC \u21AD \u21AE \u21AF \u21B0 \u21B1 \u21B2 \u21B3 \u21B4 \u21B5 \u21B6 \u21B7 \u21B8 \u21B9 \u21BA \u21BB \u21C4 \u21C5 \u21C6 \u21C7 \u21C8 \u21C9 \u21CA \u21CD \u21CE \u21CF \u21D0 \u21D1 \u21D2 \u21D3 \u21D4 \u21D5 \u21D6 \u21D7 \u21D8 \u21D9 \u21DA \u21DB \u21DC \u21DD \u21DC \u21E0 \u21E1 \u21E2 \u21E3 \u21E4 \u21E5 \u21E6 \u21E7 \u21E8 \u21E9 \u21EA \u20DE \u20DD \u20DF \u20E0 \u2205 \u220E \u2234 \u2295 \u2296 \u2297 \u2298 \u2349 \u2299 \u229A \u229E \u22B9 \u2302 \u2316 \u231A \u231B \u2326 \u232B \u2327 \u2331 \u2460 \u2461 \u2462 \u2463 \u2464 \u2465 \u2466 \u2467 \u2468 \u2469 \u246A \u246B \u246C \u246D \u246E \u246F \u2470 \u2471 \u2472 \u2473 \u2600 \u2601 \u2602 \u2603 \u2604 \u2605 \u2606 \u2607 \u260E \u2611 \u261A \u261B \u261C \u261D \u261E \u261F \u2624 \u262E \u262F \u2639 \u263A \u2654 \u2655 \u2656 \u2657 \u2658 \u2659 \u265A \u265B \u265C \u265D \u265E \u265F \u2660 \u2661 \u2662 \u2663 \u2664 \u2665 \u2666 \u2667 \u2668 \u2690 \u2691 \u2692 \u2693 \u2694 \u2696 \u2699 \u269B \u26A0 \u26A1 \u26BD \u26BE \u26C4 \u26C5 \u26D4 \u26EA \u26F2 \u26F3 \u26F5 \u26FA \u26FD \u2707 \u270A \u270B \u270C \u2713 \u2714 \u271C \u27F2 \u27F3 \u27F4 \u2B1B \u2B1C \u1F601 \u00BD \u00BE \u00BC \u2153 \u2154 \u2155 \u2156 \u2157 )
|
6
|
-
|
7
|
-
cell_height = 80
|
8
|
-
cell_width = 400
|
9
|
-
cols = 7
|
10
|
-
x, y = 1, 80
|
11
|
-
Squib::Deck.new(height: (game_chars.size / cols + 1) * cell_height,
|
12
|
-
width: cell_width * cols) do
|
13
|
-
background color: :white
|
14
|
-
text str: 'Game-related UTF8 icons. Generated by Squib, https://github.com/andymeneely/squib'
|
15
|
-
game_chars.each_with_index do |c, i|
|
16
|
-
rect fill_color: %w(#eeee #ffff)[i % 2],
|
17
|
-
width: cell_width, height: cell_height, x: x, y: y
|
18
|
-
text str: c.inspect, font: 'Sans 14', x: x, y: y
|
19
|
-
text str: c, font: 'Sans,Segoe UI Symbol 14', x: x + 300, y: y
|
20
|
-
x += cell_width
|
21
|
-
if i % cols == cols - 1
|
22
|
-
x = 1
|
23
|
-
y += cell_height if i % cols == cols - 1
|
24
|
-
end
|
25
|
-
end
|
26
|
-
save_png prefix: 'unicode_'
|
27
|
-
end
|