squib 0.16.0 → 0.17.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
  SHA256:
3
- metadata.gz: 3d121338a0d8d7967443268aaf0e85f9bfcdfa64da4b3f78beafd13c5b6d31de
4
- data.tar.gz: e7f94c3685bcad4537eb19065e31d2d277561562baf71485e3ce2ab041d316a7
3
+ metadata.gz: ace89c0cb3dcfd2f4bd564de101d4fa8a822cbfe6dd544af928b238d56aff542
4
+ data.tar.gz: 5bd3b988b94d0805f6ab8269623fa7fdb544fad9833031497e3e2d3e3066c93b
5
5
  SHA512:
6
- metadata.gz: '06290d3f269f0b19349c9c66306682b9323f21da674d8e37515bb97b98b7cd51ef9d95cfcf591d8fcf6192449d6b5aa39fa7efc11aaed9078e626747b8a06121'
7
- data.tar.gz: 86ffe77a0a120e18c0287a725e2ba4ef0e5dceb79359784e6ab0965559473e7c8533dd1dc9b99eb7d0e2d7d280d5c9b1ec3f8229b022ecc6dab18942f94f6544
6
+ metadata.gz: 8c002e188b150a545503416ea38ba6df553a595d6f9b79edbe91f5e503c7c1878f3c0681bdd836a735f19d848b3220128d00f70e5eb2fd82c12429067cbb4a65
7
+ data.tar.gz: aa9da71e042edeeae3f073e6287ce3d6648be8b92caf503b3e69d9cb119975f77cd8049a9a0a89e4321090ac59953ef4ef46464a24510b8bad471da2af3913e3
data/CHANGELOG.md CHANGED
@@ -1,6 +1,18 @@
1
1
  # Squib CHANGELOG
2
2
  Squib follows [semantic versioning](http://semver.org).
3
3
 
4
+ ## v0.17.0 / 2021-07-23
5
+ Features:
6
+ * Drop shadows! The `save_png` method now supports a bunch of `shadow_` arguments that will add a drop shadow just before rendering. This is intended for using in rulebooks or marketing. Try it out by adding `shadow_radius: 8` to your save_png (#306, #264)
7
+ * Added debug methods for checking font access. `Squib.system_fonts` and `Squib.print_system_fonts` (#334)
8
+
9
+ Bugs:
10
+ * The `rows` argument is always respected in `save_sheet` (#332).
11
+
12
+ Chores:
13
+ * Bump cairo to ~1.17
14
+ * Bump classy_hash to 1.0
15
+
4
16
  ## v0.16.0 / 2020-11-24
5
17
 
6
18
  Features:
data/RELEASE TODO.md CHANGED
@@ -9,14 +9,15 @@ Be sure to remember to do the following for releases. (Copy into a GitHub issue)
9
9
  - [ ] Bump docs/conf.py versions
10
10
  - [ ] Do a full rake locally
11
11
  - [ ] `rake sanity`, and check visually
12
- - [ ] Travis is passing on dev branch
12
+ - [ ] GitHub Actions is passing on dev branch
13
13
  - [ ] Merge master branch
14
14
  - [ ] Merge release branch
15
15
  - [ ] Push master and release branches
16
16
  - [ ] Create GitHub release tag
17
17
  - [ ] `gem push pkg/squib-x.y.z.gem`
18
- - [ ] `gem push --key github --host https://rubygems.pkg.github.com/andymeneely pkg/squib-x.y.z.gem`
19
18
  - [ ] Github milestone closed
20
- - [ ] Activate version on squib.readthedocs.org
19
+ - [ ] Activate version on squib.readthedocs.org (Versions)
20
+ - [ ] Set default version on squib.readthedocs.org (Advanced Settings)
21
21
  - [ ] Bump version.rb to the next alpha
22
+ - [ ] Check Docker build
22
23
  - [ ] Publish on BoardGameGeek thread
data/lib/squib.rb CHANGED
@@ -7,6 +7,8 @@ require_relative 'squib/version'
7
7
  require_relative 'squib/commands/cli'
8
8
  require_relative 'squib/deck'
9
9
  require_relative 'squib/card'
10
+ require_relative 'squib/system_fonts'
11
+
10
12
 
11
13
  module Squib
12
14
  using Rainbow # we can colorize strings now!
@@ -0,0 +1,39 @@
1
+ require_relative 'color_validator'
2
+
3
+ module Squib::Args
4
+ module_function def extract_drop_shadow(opts, deck)
5
+ DropShadow.new(deck.custom_colors).extract! opts, deck
6
+ end
7
+
8
+ class DropShadow
9
+ include ArgLoader
10
+ include ColorValidator
11
+
12
+ def initialize(custom_colors)
13
+ @custom_colors = custom_colors
14
+ end
15
+
16
+ def self.parameters
17
+ {
18
+ shadow_color: :black,
19
+ shadow_offset_x: 3,
20
+ shadow_offset_y: 3,
21
+ shadow_radius: nil,
22
+ shadow_trim: 0,
23
+ }
24
+ end
25
+
26
+ def self.expanding_parameters
27
+ self.parameters.keys # all of them
28
+ end
29
+
30
+ def self.params_with_units
31
+ [:shadow_offset_x, :shadow_offset_y, :shadow_radius, :shadow_trim]
32
+ end
33
+
34
+ def validate_shadow_color(arg, _i)
35
+ colorify(arg, @custom_colors)
36
+ end
37
+
38
+ end
39
+ end
@@ -82,14 +82,9 @@ module Squib::Args
82
82
 
83
83
  def validate_rows(arg)
84
84
  raise 'columns must be an integer' unless columns.respond_to? :to_i
85
- count = if range == :all
86
- @deck.size
87
- else
88
- count = range.to_a.length
89
- end
90
- return 1 if count <= columns
91
- return arg if arg.respond_to? :to_i
92
- (count.to_f / columns.to_f).ceil
85
+ count = (range == :all) ? @deck.size : count = range.to_a.length
86
+ return arg.to_i if arg.respond_to? :to_i
87
+ (count.to_f / columns.to_f).ceil # e.g. :infinite
93
88
  end
94
89
 
95
90
  def full_filename(i=nil)
@@ -1,5 +1,7 @@
1
1
  require_relative '../errors_warnings/warn_unexpected_params'
2
-
2
+ require_relative '../args/card_range'
3
+ require_relative '../args/save_batch'
4
+ require_relative '../args/drop_shadow'
3
5
 
4
6
  module Squib
5
7
  class Deck
@@ -24,6 +26,7 @@ module Squib
24
26
  range
25
27
  dir prefix suffix count_format
26
28
  rotate trim trim_radius
29
+ shadow_offset_x shadow_offset_y shadow_radius shadow_color shadow_trim
27
30
  )
28
31
  end
29
32
 
@@ -31,9 +34,10 @@ module Squib
31
34
  warn_if_unexpected opts
32
35
  range = Args.extract_range opts, deck
33
36
  batch = Args.extract_save_batch opts, deck
37
+ shadow = Args.extract_drop_shadow opts, deck
34
38
  @bar.start("Saving PNGs to #{batch.summary}", deck.size) do |bar|
35
39
  range.map do |i|
36
- deck.cards[i].save_png(batch[i])
40
+ deck.cards[i].save_png(batch[i], shadow[i])
37
41
  bar.increment
38
42
  end
39
43
  end
@@ -20,12 +20,14 @@ module Squib
20
20
 
21
21
  def_delegators :cairo_cxt, :save, :set_source_color, :paint, :restore,
22
22
  :translate, :rotate, :move_to, :update_pango_layout, :width, :height,
23
- :show_pango_layout, :rectangle, :rounded_rectangle, :set_line_width, :stroke, :fill,
24
- :set_source, :scale, :render_rsvg_handle, :circle, :triangle, :line_to,
25
- :operator=, :show_page, :clip, :transform, :mask, :create_pango_layout,
26
- :antialias=, :curve_to, :matrix, :matrix=, :identity_matrix, :pango_layout_path,
27
- :stroke_preserve, :target, :new_path, :new_sub_path, :reset_clip, :fill_preserve, :close_path,
28
- :set_line_join, :set_line_cap, :set_dash, :arc, :arc_negative
23
+ :show_pango_layout, :rectangle, :rounded_rectangle, :set_line_width,
24
+ :stroke, :fill, :set_source, :scale, :render_rsvg_handle, :circle,
25
+ :triangle, :line_to, :operator=, :show_page, :clip, :transform, :mask,
26
+ :create_pango_layout, :antialias=, :curve_to, :matrix, :matrix=,
27
+ :identity_matrix, :pango_layout_path, :stroke_preserve, :target,
28
+ :new_path, :new_sub_path, :reset_clip, :fill_preserve, :close_path,
29
+ :set_line_join, :set_line_cap, :set_dash, :arc, :arc_negative,
30
+ :pseudo_blur
29
31
 
30
32
  # :nodoc:
31
33
  # @api private
@@ -1,12 +1,14 @@
1
+ require_relative 'cairo_context_wrapper'
2
+
1
3
  module Squib
2
4
  class Card
3
5
 
4
6
  # :nodoc:
5
7
  # @api private
6
- def save_png(batch)
7
- surface = if preprocess_save?(batch)
8
+ def save_png(batch, shadow)
9
+ surface = if preprocess_save?(batch, shadow)
8
10
  w, h = compute_dimensions(batch.rotate, batch.trim)
9
- preprocessed_save(w, h, batch)
11
+ preprocessed_save(w, h, batch, shadow)
10
12
  else
11
13
  @cairo_surface
12
14
  end
@@ -15,8 +17,8 @@ module Squib
15
17
 
16
18
  # :nodoc:
17
19
  # @api private
18
- def preprocess_save?(batch)
19
- batch.rotate != false || batch.trim > 0
20
+ def preprocess_save?(batch, shadow)
21
+ batch.rotate != false || batch.trim > 0 || !(shadow.shadow_radius.nil?)
20
22
  end
21
23
 
22
24
  def compute_dimensions(rotate, trim)
@@ -27,25 +29,62 @@ module Squib
27
29
  end
28
30
  end
29
31
 
30
- def preprocessed_save(width, height, batch)
31
- new_cc = Cairo::Context.new(Cairo::ImageSurface.new(width, height))
32
+ def preprocessed_save(w, h, batch, shadow)
33
+ new_cc = Cairo::Context.new(Cairo::ImageSurface.new(w, h))
32
34
  trim_radius = batch.trim_radius
33
35
  if batch.rotate != false
34
- new_cc.translate(width * 0.5, height * 0.5)
35
- new_cc.rotate(batch.angle)
36
- new_cc.translate(height * -0.5, width * -0.5)
37
- new_cc.rounded_rectangle(0, 0, height, width, trim_radius, trim_radius)
36
+ new_cc.translate w * 0.5, h * 0.5
37
+ new_cc.rotate batch.angle
38
+ new_cc.translate h * -0.5, w * -0.5
39
+ new_cc.rounded_rectangle(0, 0, h, w, trim_radius, trim_radius)
38
40
  else
39
- new_cc.rounded_rectangle(0, 0, width, height, trim_radius, trim_radius)
41
+ new_cc.rounded_rectangle(0, 0, w, h, trim_radius, trim_radius)
40
42
  end
41
43
  new_cc.clip
42
44
  new_cc.set_source(@cairo_surface, -batch.trim, -batch.trim)
43
45
  new_cc.paint
46
+ new_cc.reset_clip
47
+ new_cc = drop_shadow(new_cc, shadow, batch) unless shadow.shadow_radius.nil?
44
48
  return new_cc.target
45
49
  end
46
50
 
51
+ # pseudo-blur behave weirdly with a radius of 0 - wrapping
52
+ def blur(cc, r, &block)
53
+ if r == 0
54
+ yield(block)
55
+ else
56
+ cc.pseudo_blur(r, &block)
57
+ end
58
+ end
59
+
60
+ def drop_shadow(cc, s, batch)
61
+ off_x = s.shadow_offset_x
62
+ off_y = s.shadow_offset_y
63
+ s_trim = s.shadow_trim
64
+ s_rad = s.shadow_radius
65
+ new_w = cc.target.width + off_x + 3 * s_rad - (2 * s_trim)
66
+ new_h = cc.target.height + off_y + 3 * s_rad - (2 * s_trim)
67
+ new_cc = Squib::Graphics::CairoContextWrapper.new(
68
+ Cairo::Context.new(Cairo::ImageSurface.new(new_w, new_h)))
69
+ blur(new_cc, s_rad) do
70
+ # fill in with shadow color
71
+ new_cc.set_source_squibcolor s.shadow_color
72
+ new_cc.rectangle 0, 0, new_cc.target.width, new_cc.target.height
73
+ new_cc.fill
74
+ # then, paint but blend with :dest_in to get a shadow-shaped drawing
75
+ new_cc.set_source cc.target, s_rad + off_x, s_rad + off_y
76
+ new_cc.operator = :dest_in # see https://www.cairographics.org/operators/
77
+ new_cc.paint
78
+ end
79
+ new_cc.set_source cc.target, s_rad, s_rad
80
+ new_cc.operator = :over
81
+ new_cc.paint
82
+ return new_cc
83
+ end
84
+
47
85
  def write_png(surface, i, b)
48
- surface.write_to_png("#{b.dir}/#{b.prefix}#{b.count_format % i}#{b.suffix}.png")
86
+ filename = "#{b.dir}/#{b.prefix}#{b.count_format % i}#{b.suffix}.png"
87
+ surface.write_to_png filename
49
88
  end
50
89
 
51
90
  end
@@ -0,0 +1,17 @@
1
+ require 'pango'
2
+ module Squib
3
+
4
+ # List all system fonts that Cairo/Pango can see
5
+ # Wow this call was convoluted...
6
+ # Returns array of strings with the names of fonts
7
+ module_function def system_fonts
8
+ cc = Cairo::Context.new(Cairo::ImageSurface.new(0,0)) # empty image
9
+ cc.create_pango_layout.context.families.map {|f| f.name }
10
+ end
11
+
12
+ # Prints out the system fonts in sorted order
13
+ module_function def print_system_fonts
14
+ puts "== DEBUG: Squib knows about these fonts =="
15
+ puts system_fonts.sort
16
+ end
17
+ end
data/lib/squib/version.rb CHANGED
@@ -6,6 +6,6 @@ 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.16.0'
9
+ VERSION = '0.17.0'
10
10
  end
11
11
 
@@ -50,3 +50,13 @@ Squib::Deck.new(width: 825, height: 1125, cards: 16) do
50
50
  columns: 2, rows: 1,
51
51
  margin: 75, gap: 5, trim: 37
52
52
  end
53
+
54
+ Squib::Deck.new(width: 100, height: 100, cards: 3) do
55
+ background color: :grey
56
+ text str: 'Hi', font: 'Arial 18'
57
+
58
+ # Test bug 332.
59
+ # When we only have 3 cards but want a 2x4 grid with lots of empty spaces.
60
+ # Buggy behavior was to revert to 1 row and not respect the rows arg.
61
+ save_sheet prefix: 'save_sheet_bug332_', rows: 2, columns: 4
62
+ end
@@ -0,0 +1,72 @@
1
+ require 'squib'
2
+ # The save_png method supports drop shadows on the final save
3
+ # This is useful for when you want to generate images for your rulebook
4
+
5
+ Squib::Deck.new(width: 100, height: 150) do
6
+ background color: '#abc'
7
+ svg file: '../spanner.svg',
8
+ x: 'middle - 25', y: 'middle - 25',
9
+ width: 50, height: 50
10
+
11
+ # Shadows off by default, i.e. shadow_radius is nil
12
+ # So our final dimensions are 100 - 2*15 and 150-2*15
13
+ save_png prefix: 'no_shadow_', trim: 15, trim_radius: 15
14
+
15
+ # Here's a nice-looking drop shadow
16
+ # Defaults are designed to be generally good, so I recommend just
17
+ # trying out a shadow_radius of 3 to 10 and see how it looks first
18
+ save_png prefix: 'with_shadow_', trim: 15, trim_radius: 15,
19
+ shadow_radius: 8,
20
+ shadow_offset_x: 3, shadow_offset_y: 3, # about r / 2.5 looks good
21
+ shadow_trim: 2.5, # about r/ 3 looks good
22
+ shadow_color: '#101010aa' #tip: start the shadow color kinda transparent
23
+
24
+ # Don't want a blur? Use a radius of 0
25
+ save_png prefix: 'no_blur_', trim: 15, trim_radius: 15,
26
+ shadow_radius: 0
27
+
28
+ # Ok this next stop is crazytown, but it does give you ultimate control
29
+ # Remember that all Squib colors can also be gradients.
30
+ # They can be clunky but they do work here.
31
+ # - x,y's are centered in the card itself
32
+ # - stops go from fully empty to fully black
33
+ # - we need to still turn on radius to get the effect
34
+ # - but, this makes the upper-left corner not have a glowing effect and
35
+ # have a harder edge, which (to my eye at least) feels more realistic
36
+ # since the card would obscure the upper-left shadow at that angle
37
+ # - this also allows you have a larger, softer blur without making it look
38
+ # like it's glowing
39
+ #
40
+ # Oh just because it's easier to write we can use a ruby heredoc
41
+ save_png prefix: 'gradient_blur_', trim: 15, trim_radius: 15,
42
+ shadow_radius: 10,
43
+ shadow_color: <<~EOS
44
+ (25,25)
45
+ (175,175)
46
+ #0000@0.0
47
+ #000f@1.0
48
+ EOS
49
+
50
+ # This one looks weird I know but it's for regression testing
51
+ save_png prefix: 'with_shadow_test_',
52
+ trim: 15, trim_radius: 15, rotate: :clockwise,
53
+ shadow_offset_x: 5, shadow_offset_y: 25, shadow_radius: 10,
54
+ shadow_trim: 10,
55
+ shadow_color: '#123'
56
+ end
57
+
58
+ Squib::Deck.new(width:50, height: 50) do
59
+
60
+ # What if we had a transparent card but just some shapes?
61
+ # Like chits or something
62
+
63
+ # background defaults to fully transparent here
64
+
65
+ png file: 'doodle.png'
66
+
67
+ save_png prefix: 'transparent_bg_shadow_',
68
+ shadow_radius: 2,
69
+ shadow_offset_x: 2, shadow_offset_y: 2,
70
+ shadow_color: :black
71
+
72
+ end
@@ -0,0 +1,14 @@
1
+ # require 'squib'
2
+ require_relative '../../lib/squib'
3
+
4
+ # Per issue #334, sometimes Pango doesn't find the font file you want
5
+ # Pango requires fonts to be installed on the system, but sometimes the
6
+ # font name is not obvious. e.g. "Foo Regular" might be actually named "Foo"
7
+ # Use these methods to debug this problem
8
+
9
+ # Usually you would just run this method to see what fonts are installed
10
+ # This is commented out to make our test cases
11
+ # Squib.print_system_fonts
12
+
13
+ Squib.system_fonts.include? 'Open Sans' # checks if we have Open Sans installed
14
+ # Note: does nothing since it's just a check
@@ -19,7 +19,7 @@ Squib::Deck.new(width: '1.5in', height: '1.5in') do
19
19
  # Technically, the "cell" is actually a "unit", so you can even combine
20
20
  # with xywh shorhands!!
21
21
  rect fill_color: :red,
22
- x: 'middle + 0.5c', y: 'height - 1.5c',
22
+ x: 'middle + 0.5c', y: 'deck - 1.5c',
23
23
  width: '1c', height: '1c'
24
24
 
25
25
  # And, unlike xywh shorthands, this applies basically everywhere we support
data/squib.gemspec CHANGED
@@ -31,18 +31,18 @@ Gem::Specification.new do |spec|
31
31
  spec.test_files = spec.files.grep(/^(spec|samples|docs|benchmarks)\//)
32
32
  spec.require_paths = ['lib']
33
33
 
34
- spec.add_runtime_dependency 'cairo', '~> 1.16'
35
- spec.add_runtime_dependency 'classy_hash', '0.2.1'
34
+ spec.add_runtime_dependency 'cairo', '~> 1.17'
35
+ spec.add_runtime_dependency 'classy_hash', '1.0.0'
36
36
  spec.add_runtime_dependency 'gio2', '~> 3.4'
37
37
  spec.add_runtime_dependency 'gobject-introspection', '~> 3.4'
38
38
  spec.add_runtime_dependency 'highline', '2.0.3'
39
39
  spec.add_runtime_dependency 'mercenary', '0.4.0'
40
- spec.add_runtime_dependency 'nokogiri', '~> 1.10'
40
+ spec.add_runtime_dependency 'nokogiri', '~> 1.11'
41
41
  spec.add_runtime_dependency 'pango', '~> 3.4'
42
42
  spec.add_runtime_dependency 'rainbow', '~> 3.0'
43
43
  spec.add_runtime_dependency 'roo', '~> 2.8'
44
44
  spec.add_runtime_dependency 'rsvg2', '~> 3.4'
45
- spec.add_runtime_dependency 'ruby-progressbar', '~> 1.10'
45
+ spec.add_runtime_dependency 'ruby-progressbar', '~> 1.11'
46
46
 
47
47
  spec.add_development_dependency 'activesupport'
48
48
  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.16.0
4
+ version: 0.17.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: 2020-11-25 00:00:00.000000000 Z
11
+ date: 2021-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cairo
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.16'
19
+ version: '1.17'
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.16'
26
+ version: '1.17'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: classy_hash
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.2.1
33
+ version: 1.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.2.1
40
+ version: 1.0.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: gio2
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '1.10'
103
+ version: '1.11'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '1.10'
110
+ version: '1.11'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: pango
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -170,14 +170,14 @@ dependencies:
170
170
  requirements:
171
171
  - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: '1.10'
173
+ version: '1.11'
174
174
  type: :runtime
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
- version: '1.10'
180
+ version: '1.11'
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: activesupport
183
183
  requirement: !ruby/object:Gem::Requirement
@@ -354,10 +354,11 @@ extra_rdoc_files:
354
354
  - samples/ranges/_ranges.rb
355
355
  - samples/saves/_hand.rb
356
356
  - samples/saves/_portrait_landscape.rb
357
- - samples/saves/_saves.rb
358
357
  - samples/saves/_save_filenames.rb
359
358
  - samples/saves/_save_pdf.rb
359
+ - samples/saves/_saves.rb
360
360
  - samples/saves/_showcase.rb
361
+ - samples/shadows/_shadow.rb
361
362
  - samples/shapes/_draw_shapes.rb
362
363
  - samples/shapes/_proofs.rb
363
364
  - samples/sprues/_advanced_sprues.rb
@@ -366,10 +367,11 @@ extra_rdoc_files:
366
367
  - samples/sprues/_hex_tiles.rb
367
368
  - samples/sprues/_mints.rb
368
369
  - samples/sprues/_sprue_example.rb
369
- - samples/text/bug134.rb
370
+ - samples/system_font_debug/_list_fonts.rb
370
371
  - samples/text/_embed_text.rb
371
372
  - samples/text/_text.rb
372
373
  - samples/text/_text_options.rb
374
+ - samples/text/bug134.rb
373
375
  - samples/units/_cells.rb
374
376
  - samples/units/_shorthands.rb
375
377
  - samples/units/_units.rb
@@ -396,6 +398,7 @@ files:
396
398
  - lib/squib/args/csv_opts.rb
397
399
  - lib/squib/args/dir_validator.rb
398
400
  - lib/squib/args/draw.rb
401
+ - lib/squib/args/drop_shadow.rb
399
402
  - lib/squib/args/embed_adjust.rb
400
403
  - lib/squib/args/embed_key.rb
401
404
  - lib/squib/args/hand_special.rb
@@ -517,6 +520,7 @@ files:
517
520
  - lib/squib/sprues/invalid_sprue_definition.rb
518
521
  - lib/squib/sprues/sprue.rb
519
522
  - lib/squib/sprues/sprue_schema.rb
523
+ - lib/squib/system_fonts.rb
520
524
  - lib/squib/version.rb
521
525
  - samples/autoscale_font/_autoscale_font.rb
522
526
  - samples/backend/_backend.rb
@@ -551,6 +555,7 @@ files:
551
555
  - samples/saves/_save_pdf.rb
552
556
  - samples/saves/_saves.rb
553
557
  - samples/saves/_showcase.rb
558
+ - samples/shadows/_shadow.rb
554
559
  - samples/shapes/_draw_shapes.rb
555
560
  - samples/shapes/_proofs.rb
556
561
  - samples/sprues/_advanced_sprues.rb
@@ -559,6 +564,7 @@ files:
559
564
  - samples/sprues/_hex_tiles.rb
560
565
  - samples/sprues/_mints.rb
561
566
  - samples/sprues/_sprue_example.rb
567
+ - samples/system_font_debug/_list_fonts.rb
562
568
  - samples/text/_embed_text.rb
563
569
  - samples/text/_text.rb
564
570
  - samples/text/_text_options.rb
@@ -588,7 +594,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
588
594
  version: '0'
589
595
  requirements:
590
596
  - On Windows, you need the Ruby+DevKit. See https://rubyinstaller.org/downloads
591
- rubygems_version: 3.1.4
597
+ rubygems_version: 3.2.15
592
598
  signing_key:
593
599
  specification_version: 2
594
600
  summary: A Ruby DSL for prototyping card games
@@ -626,6 +632,7 @@ test_files:
626
632
  - samples/saves/_save_pdf.rb
627
633
  - samples/saves/_saves.rb
628
634
  - samples/saves/_showcase.rb
635
+ - samples/shadows/_shadow.rb
629
636
  - samples/shapes/_draw_shapes.rb
630
637
  - samples/shapes/_proofs.rb
631
638
  - samples/sprues/_advanced_sprues.rb
@@ -634,6 +641,7 @@ test_files:
634
641
  - samples/sprues/_hex_tiles.rb
635
642
  - samples/sprues/_mints.rb
636
643
  - samples/sprues/_sprue_example.rb
644
+ - samples/system_font_debug/_list_fonts.rb
637
645
  - samples/text/_embed_text.rb
638
646
  - samples/text/_text.rb
639
647
  - samples/text/_text_options.rb