squib 0.15.3 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/tests.yml +22 -0
  3. data/CHANGELOG.md +35 -1
  4. data/Dockerfile +18 -16
  5. data/Guardfile +8 -0
  6. data/README.md +3 -9
  7. data/RELEASE TODO.md +4 -2
  8. data/Rakefile +3 -0
  9. data/lib/squib.rb +5 -1
  10. data/lib/squib/args/arg_loader.rb +109 -106
  11. data/lib/squib/args/box.rb +52 -48
  12. data/lib/squib/args/card_range.rb +26 -24
  13. data/lib/squib/args/color_validator.rb +4 -9
  14. data/lib/squib/args/coords.rb +39 -25
  15. data/lib/squib/args/csv_opts.rb +13 -16
  16. data/lib/squib/args/dir_validator.rb +7 -12
  17. data/lib/squib/args/draw.rb +69 -68
  18. data/lib/squib/args/drop_shadow.rb +39 -0
  19. data/lib/squib/args/embed_adjust.rb +12 -15
  20. data/lib/squib/args/embed_key.rb +6 -11
  21. data/lib/squib/args/hand_special.rb +25 -25
  22. data/lib/squib/args/import.rb +54 -27
  23. data/lib/squib/args/input_file.rb +22 -26
  24. data/lib/squib/args/paint.rb +30 -31
  25. data/lib/squib/args/paragraph.rb +95 -93
  26. data/lib/squib/args/save_batch.rb +50 -48
  27. data/lib/squib/args/scale_box.rb +43 -39
  28. data/lib/squib/args/sheet.rb +142 -149
  29. data/lib/squib/args/showcase_special.rb +32 -32
  30. data/lib/squib/args/sprue_file.rb +30 -30
  31. data/lib/squib/args/svg_special.rb +26 -26
  32. data/lib/squib/args/transform.rb +48 -54
  33. data/lib/squib/args/typographer.rb +88 -92
  34. data/lib/squib/args/unit_conversion.rb +6 -8
  35. data/lib/squib/args/xywh_shorthands.rb +51 -0
  36. data/lib/squib/builtin/projects/advanced/config.yml +4 -3
  37. data/lib/squib/builtin/projects/basic/config.yml +4 -3
  38. data/lib/squib/conf.rb +5 -0
  39. data/lib/squib/deck.rb +34 -12
  40. data/lib/squib/dsl/background.rb +35 -0
  41. data/lib/squib/dsl/circle.rb +39 -0
  42. data/lib/squib/dsl/csv.rb +42 -0
  43. data/lib/squib/dsl/curve.rb +35 -0
  44. data/lib/squib/dsl/cut_zone.rb +47 -0
  45. data/lib/squib/dsl/ellipse.rb +37 -0
  46. data/lib/squib/dsl/grid.rb +35 -0
  47. data/lib/squib/{api → dsl}/groups.rb +0 -0
  48. data/lib/squib/dsl/hand.rb +42 -0
  49. data/lib/squib/dsl/line.rb +35 -0
  50. data/lib/squib/dsl/png.rb +56 -0
  51. data/lib/squib/dsl/polygon.rb +36 -0
  52. data/lib/squib/dsl/rect.rb +37 -0
  53. data/lib/squib/dsl/safe_zone.rb +48 -0
  54. data/lib/squib/dsl/save.rb +21 -0
  55. data/lib/squib/dsl/save_pdf.rb +50 -0
  56. data/lib/squib/dsl/save_png.rb +48 -0
  57. data/lib/squib/dsl/save_sheet.rb +53 -0
  58. data/lib/squib/dsl/showcase.rb +43 -0
  59. data/lib/squib/dsl/star.rb +37 -0
  60. data/lib/squib/dsl/svg.rb +62 -0
  61. data/lib/squib/dsl/text.rb +54 -0
  62. data/lib/squib/dsl/text_embed.rb +78 -0
  63. data/lib/squib/dsl/triangle.rb +35 -0
  64. data/lib/squib/{api → dsl}/units.rb +10 -0
  65. data/lib/squib/dsl/xlsx.rb +40 -0
  66. data/lib/squib/dsl/yaml.rb +40 -0
  67. data/lib/squib/errors_warnings/warn_unexpected_params.rb +14 -0
  68. data/lib/squib/graphics/cairo_context_wrapper.rb +8 -6
  69. data/lib/squib/graphics/save_images.rb +54 -15
  70. data/lib/squib/graphics/save_sprue.rb +14 -2
  71. data/lib/squib/graphics/text.rb +37 -9
  72. data/lib/squib/import/csv_importer.rb +45 -0
  73. data/lib/squib/import/quantity_exploder.rb +18 -0
  74. data/lib/squib/import/xlsx_importer.rb +28 -0
  75. data/lib/squib/import/yaml_importer.rb +30 -0
  76. data/lib/squib/layout_parser.rb +24 -7
  77. data/lib/squib/sprues/crop_line.rb +6 -6
  78. data/lib/squib/sprues/crop_line_dash.rb +6 -6
  79. data/lib/squib/sprues/sprue.rb +16 -14
  80. data/lib/squib/system_fonts.rb +17 -0
  81. data/lib/squib/version.rb +2 -1
  82. data/samples/autoscale_font/_autoscale_font.rb +77 -8
  83. data/samples/colors/_switch_color.rb +2 -2
  84. data/samples/data/_excel.rb +1 -1
  85. data/samples/ranges/_ranges.rb +1 -1
  86. data/samples/saves/_save_filenames.rb +4 -0
  87. data/samples/saves/_save_pdf.rb +1 -1
  88. data/samples/saves/_saves.rb +12 -1
  89. data/samples/shadows/_shadow.rb +72 -0
  90. data/samples/shapes/_draw_shapes.rb +2 -2
  91. data/samples/sprues/_builtin_sprues.rb +1 -0
  92. data/samples/sprues/_fold_sheet.rb +4 -1
  93. data/samples/system_font_debug/_list_fonts.rb +14 -0
  94. data/samples/text/_text.rb +6 -1
  95. data/samples/text/_text_options.rb +2 -1
  96. data/samples/units/_cells.rb +51 -0
  97. data/samples/units/_shorthands.rb +48 -0
  98. data/samples/units/_units.rb +7 -0
  99. data/squib.gemspec +14 -8
  100. metadata +134 -39
  101. data/.travis.yml +0 -17
  102. data/appveyor.yml +0 -25
  103. data/lib/squib/api/background.rb +0 -15
  104. data/lib/squib/api/data.rb +0 -137
  105. data/lib/squib/api/image.rb +0 -49
  106. data/lib/squib/api/save.rb +0 -83
  107. data/lib/squib/api/shapes.rb +0 -124
  108. data/lib/squib/api/text.rb +0 -25
  109. data/lib/squib/api/text_embed.rb +0 -71
@@ -9,22 +9,22 @@ module Squib
9
9
 
10
10
  attr_reader :pattern
11
11
 
12
- def initialize(value, dpi)
12
+ def initialize(value, dpi, cell_px)
13
13
  if value == :solid
14
14
  @pattern = nil
15
15
  elsif value == :dotted
16
16
  @pattern = [
17
- Args::UnitConversion.parse('0.2mm', dpi),
18
- Args::UnitConversion.parse('0.5mm', dpi)
17
+ Args::UnitConversion.parse('0.2mm', dpi, cell_px),
18
+ Args::UnitConversion.parse('0.5mm', dpi, cell_px)
19
19
  ]
20
20
  elsif value == :dashed
21
21
  @pattern = [
22
- Args::UnitConversion.parse('2mm', dpi),
23
- Args::UnitConversion.parse('2mm', dpi)
22
+ Args::UnitConversion.parse('2mm', dpi, cell_px),
23
+ Args::UnitConversion.parse('2mm', dpi, cell_px)
24
24
  ]
25
25
  elsif value.is_a? String
26
26
  @pattern = value.split(' ').map do |val|
27
- Args::UnitConversion.parse val, dpi
27
+ Args::UnitConversion.parse val, dpi, cell_px
28
28
  end
29
29
  else
30
30
  raise ArgumentError, 'Unsupported dash style'
@@ -18,6 +18,7 @@ module Squib
18
18
  'card_width' => nil,
19
19
  'card_height' => nil,
20
20
  'dpi' => 300,
21
+ 'cell_px' => 37.5,
21
22
  'position_reference' => :topleft,
22
23
  'rotate' => 0.0,
23
24
  'crop_line' => {
@@ -32,16 +33,17 @@ module Squib
32
33
 
33
34
  attr_reader :dpi
34
35
 
35
- def initialize(template_hash, dpi)
36
+ def initialize(template_hash, dpi, cell_px)
36
37
  @template_hash = template_hash
37
38
  @dpi = dpi
39
+ @cell_px = cell_px
38
40
  @crop_line_default = @template_hash['crop_line'].select do |k, _|
39
41
  %w[style width color].include? k
40
42
  end
41
43
  end
42
44
 
43
45
  # Load the template definition file
44
- def self.load(file, dpi)
46
+ def self.load(file, dpi, cell_px)
45
47
  yaml = {}
46
48
  thefile = file if File.exist?(file) # use custom first
47
49
  thefile = builtin(file) if File.exist?(builtin(file)) # then builtin
@@ -62,23 +64,23 @@ module Squib
62
64
  rescue ClassyHash::SchemaViolationError => e
63
65
  raise Sprues::InvalidSprueDefinition.new(thefile, e)
64
66
  end
65
- Sprue.new new_hash, dpi
67
+ Sprue.new new_hash, dpi, cell_px
66
68
  end
67
69
 
68
70
  def sheet_width
69
- Args::UnitConversion.parse @template_hash['sheet_width'], @dpi
71
+ Args::UnitConversion.parse @template_hash['sheet_width'], @dpi, @cell_px
70
72
  end
71
73
 
72
74
  def sheet_height
73
- Args::UnitConversion.parse @template_hash['sheet_height'], @dpi
75
+ Args::UnitConversion.parse @template_hash['sheet_height'], @dpi, @cell_px
74
76
  end
75
77
 
76
78
  def card_width
77
- Args::UnitConversion.parse @template_hash['card_width'], @dpi
79
+ Args::UnitConversion.parse @template_hash['card_width'], @dpi, @cell_px
78
80
  end
79
81
 
80
82
  def card_height
81
- Args::UnitConversion.parse @template_hash['card_height'], @dpi
83
+ Args::UnitConversion.parse @template_hash['card_height'], @dpi, @cell_px
82
84
  end
83
85
 
84
86
  def card_default_rotation
@@ -113,8 +115,8 @@ module Squib
113
115
  # NOTE: There's a baseline of 0.25mm that we can 100% make sure that we
114
116
  # can overlap really thin lines on the PDF
115
117
  crop_line_width = [
116
- Args::UnitConversion.parse(@template_hash['crop_line']['width'], @dpi),
117
- Args::UnitConversion.parse('0.25mm', @dpi)
118
+ Args::UnitConversion.parse(@template_hash['crop_line']['width'], @dpi, @cell_px),
119
+ Args::UnitConversion.parse('0.25mm', @dpi, @cell_px)
118
120
  ].max
119
121
 
120
122
  parsed_cards = cards
@@ -149,12 +151,12 @@ module Squib
149
151
  # Parse crop line definitions from template.
150
152
  def parse_crop_line(line)
151
153
  new_line = @crop_line_default.merge line
152
- new_line['width'] = Args::UnitConversion.parse(new_line['width'], @dpi)
154
+ new_line['width'] = Args::UnitConversion.parse(new_line['width'], @dpi, @cell_px)
153
155
  new_line['color'] = colorify new_line['color']
154
156
  new_line['style_desc'] = new_line['style']
155
- new_line['style'] = Sprues::CropLineDash.new(new_line['style'], @dpi)
157
+ new_line['style'] = Sprues::CropLineDash.new(new_line['style'], @dpi, @cell_px)
156
158
  new_line['line'] = Sprues::CropLine.new(
157
- new_line['type'], new_line['position'], sheet_width, sheet_height, @dpi
159
+ new_line['type'], new_line['position'], sheet_width, sheet_height, @dpi, @cell_px
158
160
  )
159
161
  new_line
160
162
  end
@@ -163,8 +165,8 @@ module Squib
163
165
  def parse_card(card)
164
166
  new_card = card.clone
165
167
 
166
- x = Args::UnitConversion.parse(card['x'], @dpi)
167
- y = Args::UnitConversion.parse(card['y'], @dpi)
168
+ x = Args::UnitConversion.parse(card['x'], @dpi, @cell_px)
169
+ y = Args::UnitConversion.parse(card['y'], @dpi, @cell_px)
168
170
  if @template_hash['position_reference'] == :center
169
171
  # Normalize it to a top-left positional reference
170
172
  x -= card_width / 2
@@ -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,5 +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.15.3'
9
+ VERSION = '0.17.0'
10
10
  end
11
+
@@ -1,13 +1,79 @@
1
1
  require 'squib'
2
2
 
3
- # Here's an example of being able to scale a font
4
- # based on the length of individual string.
5
- # Handy for making minor font scales to fill text boxes.
3
+ # Autoscaling font is handy for a bunch of things:
4
+ # * Picture-perfect text fitting for one-off
5
+ # * Rapid prototyping where you don't have to think about sizes
6
+ #
7
+ # We've got three options...
8
+ # Option 1. Use your data <--- good for picture-perfect
9
+ # Option 2. Use ellipsize: :autoscale <--- good for rapid prototyping
10
+ # Option 3. Use map ranges in your code <--- good for picture-perfect
11
+ # or other weird cases
12
+
13
+ ###########################
14
+ # Option 1: Use your data #
15
+ ###########################
16
+ # If you want to tweak the font size per-card, you can always make font_size
17
+ # a column and map it from there. This is tedious but leads to perfectly
18
+ # customized results
19
+ my_data = Squib.csv data: <<~CSV
20
+ "Title","Font Size"
21
+ "Short & Big",10
22
+ "Medium Length & Size", 5
23
+ "Super duper long string here, therefore a smaller font.", 4
24
+ CSV
25
+
26
+ Squib::Deck.new(width: 300, height: 75, cards: 3) do
27
+ background color: :white
28
+ rect stroke_color: :black
29
+
30
+ text str: my_data.title, font: 'Arial',
31
+ font_size: my_data.font_size, # <-- key part
32
+ x: 10, y:10, align: :center,
33
+ width: 280, # <-- note how height does NOT need to be set
34
+ ellipsize: false,
35
+ hint: :red
36
+ save_sheet columns: 3, prefix: 'autoscale_w_data_'
37
+ end
38
+
39
+ #######################################
40
+ # Option 2: Use ellipsize: :autoscale #
41
+ #######################################
42
+ # If set the height, you can set "autoscale" and it will incrementally
43
+ # downgrade the font size until the text does not ellipsize
44
+ #
45
+ # Great for rapid prototyping, set-it-and-forget-it
46
+ #
47
+ # NOTE: You MUST set the height for this to work. Otherwise, the text will
48
+ # never ellipsize and Squib doesn't know when to start autoscaling
49
+ Squib::Deck.new(width: 300, height: 75, cards: 3) do
50
+ background color: :white
51
+ rect stroke_color: :black
52
+ title = ['Short & Big',
53
+ 'Medium Length & Size',
54
+ 'Super duper long string here, therefore a smaller font.']
55
+
56
+ # Automatically scale the text down from the specified font_size to the largest size that fits
57
+ text str: title, font: 'Arial',
58
+ font_size: 15, # <-- this is the MAX font size. Scale down from here
59
+ ellipsize: :autoscale, # <-- key part
60
+ height: 50, # <-- need this to be set to something
61
+ width: 280, x: 10, y: 10, align: :center, valign: :middle, hint: :red
62
+
63
+ save_sheet columns: 3, prefix: 'autoscale_w_ellipsize_'
64
+ end
65
+
66
+ ############################################
67
+ # Option 3: Mapping to ranges in your code #
68
+ ############################################
69
+ # Here's an in-between option that allows you to programmatically apply font
70
+ # sizes. This allows you a ton of flexibility.Probably more flexibility than
71
+ # you need, frankly. But one advantage is that you don't have to set the height
6
72
  def autoscale(str_array)
7
73
  str_array.map do | str |
8
74
  case str.length
9
75
  when 0..15
10
- 10.66
76
+ 9
11
77
  when 16..20
12
78
  6
13
79
  else
@@ -16,14 +82,17 @@ def autoscale(str_array)
16
82
  end
17
83
  end
18
84
 
19
- Squib::Deck.new(width: 300, height: 100, cards: 3) do
85
+ Squib::Deck.new(width: 300, height: 75, cards: 3) do
20
86
  background color: :white
21
- rect
87
+ rect stroke_color: :black
22
88
  title = ['Short & Big',
23
89
  'Medium Length & Size',
24
90
  'Super duper long string here, therefore a smaller font.']
25
- text str: title, font: 'Arial', font_size: autoscale(title),
91
+
92
+ # Scale text based on the string length
93
+ text str: title, font: 'Arial',
94
+ font_size: autoscale(title), # <-- key part
26
95
  x: 10, y:10, align: :center, width: 280, ellipsize: false, hint: :red
27
96
 
28
- save_sheet columns: 3
97
+ save_sheet columns: 3, prefix: 'autoscale_w_range_'
29
98
  end
@@ -1,11 +1,11 @@
1
- require 'squib'
1
+ require_relative '../../lib/squib'
2
2
 
3
3
  # Choose between black and white color theme for type snake
4
4
  # * Allow using white snake cards with black text or
5
5
  # black snake cards with white text
6
6
  color = 'white'
7
7
 
8
- cards = Squib.csv file: '_switch_color_data.csv', col_sep: "\t"
8
+ cards = Squib.csv file: '_switch_color_data.csv'
9
9
 
10
10
  Squib::Deck.new cards: cards['Type'].size do
11
11
 
@@ -37,7 +37,7 @@ end
37
37
  # from each value. This is the default behavior in Squib, but the options
38
38
  # are here just to make sure.
39
39
 
40
- resource_data = Squib.xlsx(file: 'sample.xlsx', sheet: 2, strip: true) do |header, value|
40
+ resource_data = Squib.xlsx(file: 'sample.xlsx', explode: 'Qty', sheet: 2, strip: true) do |header, value|
41
41
  case header
42
42
  when 'Cost'
43
43
  "$#{value}k" # e.g. "3" becomes "$3k"
@@ -59,6 +59,6 @@ Squib::Deck.new(width: 825, height: 1125, cards: 3) do
59
59
  end
60
60
  end
61
61
 
62
- rect color: 'black' # just a border
62
+ rect stroke_color: 'black' # just a border
63
63
  save_sheet prefix: 'ranges_', columns: 3
64
64
  end
@@ -16,6 +16,10 @@ Squib::Deck.new(width: 50, height: 50, cards: 2) do
16
16
  # bar.png
17
17
  save_png prefix: ['foo', 'bar'], count_format: ''
18
18
 
19
+ # foo_00_bar.png
20
+ # foo_01_bar.png
21
+ save_png prefix: 'foo_', suffix: '_bar'
22
+
19
23
  # thief.png
20
24
  # thug.png
21
25
  data = csv data: "filename\nthief\nthug"
@@ -3,7 +3,7 @@ require 'squib'
3
3
  Squib::Deck.new(cards: 8) do
4
4
  background color: :gray
5
5
  rect x: 37.5, y: 37.5, width: 750, height: 1050,
6
- x_radius: 37.5, y_radius: 37.5, stroke: 3.0, dash: '4 4'
6
+ x_radius: 37.5, y_radius: 37.5, stroke_width: 2.0, dash: '4 4'
7
7
 
8
8
  # Tests for crop marks
9
9
  save_pdf file: 'crops-default.pdf', crop_marks: true
@@ -5,7 +5,7 @@ require 'squib'
5
5
  Squib::Deck.new(width: 825, height: 1125, cards: 16) do
6
6
  background color: :gray
7
7
  rect x: 38, y: 38, width: 750, height: 1050,
8
- x_radius: 38, y_radius: 38, stroke: 3.0, dash: '4 4'
8
+ x_radius: 38, y_radius: 38, stroke_width: 2.0, dash: '4 4'
9
9
 
10
10
  text str: (1..16).to_a, x: 220, y: 78, font: 'Arial 18'
11
11
 
@@ -45,7 +45,18 @@ Squib::Deck.new(width: 825, height: 1125, cards: 16) do
45
45
 
46
46
  # Sheets can arrange left-to-right and right-to-left
47
47
  save_sheet prefix: 'save_sheet_rtl_',
48
+ suffix: '_with_suffix',
48
49
  range: 0..1, rtl: true,
49
50
  columns: 2, rows: 1,
50
51
  margin: 75, gap: 5, trim: 37
51
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
@@ -3,8 +3,8 @@ require 'squib'
3
3
  Squib::Deck.new do
4
4
  background color: :white
5
5
 
6
- grid x: 10, y: 10, width: 50, height: 50, stroke_color: '#0066FF', stroke_width: 1.5, angle: 0.1
7
- grid x: 10, y: 10, width: 200, height: 200, stroke_color: '#0066FF', stroke_width: 3, angle: 0.1
6
+ grid x: 10, y: 10, width: 50, height: 50, stroke_color: '#0066FF', stroke_width: 1.5
7
+ grid x: 10, y: 10, width: 200, height: 200, stroke_color: '#0066FF', stroke_width: 3
8
8
 
9
9
  rect x: 305, y: 105, width: 200, height: 50, dash: '4 2'
10
10
 
@@ -17,5 +17,6 @@ Squib::Deck.new(width: '50mm', height: '70mm', cards: 9) do
17
17
  drivethrucards_1up.yml
18
18
  ).each do |builtin|
19
19
  save_sheet sprue: builtin, prefix: "sprue_#{builtin}_"
20
+ save_pdf sprue: builtin, file: "sprue_#{builtin}_"
20
21
  end
21
22
  end
@@ -22,6 +22,9 @@ Squib::Deck.new(width: '2.5in', height: '3.5in', cards: 8) do
22
22
 
23
23
  text str: strings,font: 'Sans 32', align: :center, valign: :middle,
24
24
  height: :deck, width: :deck
25
+
25
26
  save_sheet prefix: 'foldable_',
26
- sprue: 'letter_poker_foldable_8up.yml'
27
+ sprue: 'letter_poker_foldable_8up.yml' # built-in sprue
28
+ save_pdf file: 'foldable.pdf',
29
+ sprue: 'letter_poker_foldable_8up.yml' # built-in sprue
27
30
  end