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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 101d4863fdad657cfe813322ce495cc3f0e10a26
4
- data.tar.gz: 82d6ae835f5ad51d56829919653e9b0b50bea912
3
+ metadata.gz: d12b1f10b21ed987702d0440f995d7e088b9eeee
4
+ data.tar.gz: 135fb921bda10d91f08d5ad2be0f0dd9dbfbb718
5
5
  SHA512:
6
- metadata.gz: 9265cd7e35588ba4471e87773d909e03dd612accaa421353672db396ec3f3818fc5ef6858f6de419100258e5bcc30ddb3b994e7830c27edc0425ca2c85e91827
7
- data.tar.gz: 4600e52c633a965d33f44b8754bb9e319fd247602e6d4c94515dd5844b2f18a9368f0563af9b5583693fe38f887e76e043691ec75a4720021e98a24ae0c34829
6
+ metadata.gz: ba54e4c7ea4359d98dae54ceaa986f94c97f0acffb965be4f695e653cc775a424ffb86bca55ee3b19b49b5d12be1671f0671095cc17e648ccaf84ff59dac025b
7
+ data.tar.gz: ab7316a04968bb5e4863144f2eb2937f63e03f5c1896eae349657669e9d7d30108e00edd91006b1e96b885befea322d6f817d150716c8d653f72fa065fca28f8
@@ -1,7 +1,7 @@
1
1
  # Squib CHANGELOG
2
2
  Squib follows [semantic versioning](http://semver.org).
3
3
 
4
- ## v0.14.0 / Unreleased
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
 
@@ -58,7 +58,7 @@ module Squib
58
58
  else
59
59
  tmpl = Sprue.load sprue_file.sprue, dpi
60
60
  Graphics::SaveSpruePNG.
61
- new(self, tmpl, batch).
61
+ new(self, tmpl, sheet).
62
62
  render_sheet(range)
63
63
  end
64
64
  end
@@ -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
- "#{dir}/#{file}"
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, outfile)
5
+ def initialize(deck, tmpl, sheet_args)
6
6
  @deck = deck
7
7
  @tmpl = tmpl
8
8
  @page_number = 1
9
- @outfile = outfile
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
- card_set = @tmpl.cards
21
- per_sheet = card_set.size
22
- default_angle = @tmpl.card_default_rotation
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 = card_set[i % per_sheet]
35
- x = slot['x']
36
- y = slot['y']
37
- angle = slot['rotate'] != 0 ? slot['rotate'] : default_angle
38
-
39
- if angle != 0
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 check_card_orientation
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
- 'Card size is larger than sprue\'s expected card size. '\
149
- 'Cards may overlap.'
150
- }
151
- return 0
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 draw_rotated_card(cc, card, x, y, angle)
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(-@deck.width / 2 + delta, -@deck.height / 2 + delta)
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
- @outfile.full_filename
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
- @outfile.full_filename @page_number
201
+ @sheet_args.full_filename @page_number
225
202
  end
226
203
  end
227
204
  end
@@ -6,5 +6,5 @@ module Squib
6
6
  # Most of the time this is in the alpha of the next release.
7
7
  # e.g. v0.0.5a is on its way to becoming v0.0.5
8
8
  #
9
- VERSION = '0.14.beta1'
9
+ VERSION = '0.14.0'
10
10
  end
@@ -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_' # save to a whole sheet
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
@@ -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.9'
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.8'
35
- spec.add_runtime_dependency 'gobject-introspection', '3.1.8'
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.8'
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.8'
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.beta1
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-10-16 00:00:00.000000000 Z
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.9
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.9
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.8
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.8
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.8
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.8
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.8
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.8
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.8
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.8
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: 1.3.1
483
+ version: '0'
484
484
  requirements: []
485
485
  rubyforge_project:
486
- rubygems_version: 2.6.7
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
@@ -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