squib 0.18.0 → 0.19.0a

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.
Files changed (202) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +39 -39
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +22 -22
  4. data/.github/ISSUE_TEMPLATE/help-wanted.md +13 -13
  5. data/.github/ISSUE_TEMPLATE/release-todo.md +45 -33
  6. data/.github/PULL_REQUEST_TEMPLATE.md +13 -13
  7. data/.github/workflows/tests.yml +22 -22
  8. data/.gitignore +41 -41
  9. data/.vscode/settings.json +4 -3
  10. data/CHANGELOG.md +460 -460
  11. data/CONTRIBUTING.md +40 -40
  12. data/Dockerfile +27 -27
  13. data/Gemfile +2 -2
  14. data/Guardfile +8 -8
  15. data/LICENSE.txt +22 -22
  16. data/README.md +139 -139
  17. data/Rakefile +51 -51
  18. data/bin/squib +5 -5
  19. data/lib/squib/api/settings.rb +21 -21
  20. data/lib/squib/args/arg_loader.rb +138 -138
  21. data/lib/squib/args/box.rb +59 -59
  22. data/lib/squib/args/card_range.rb +34 -34
  23. data/lib/squib/args/color_validator.rb +7 -7
  24. data/lib/squib/args/coords.rb +49 -49
  25. data/lib/squib/args/csv_opts.rb +22 -22
  26. data/lib/squib/args/dir_validator.rb +11 -11
  27. data/lib/squib/args/draw.rb +93 -93
  28. data/lib/squib/args/drop_shadow.rb +39 -39
  29. data/lib/squib/args/embed_adjust.rb +22 -22
  30. data/lib/squib/args/embed_key.rb +12 -12
  31. data/lib/squib/args/hand_special.rb +37 -37
  32. data/lib/squib/args/import.rb +67 -67
  33. data/lib/squib/args/input_file.rb +55 -55
  34. data/lib/squib/args/paint.rb +43 -43
  35. data/lib/squib/args/paragraph.rb +118 -118
  36. data/lib/squib/args/save_batch.rb +65 -65
  37. data/lib/squib/args/scale_box.rb +57 -57
  38. data/lib/squib/args/sheet.rb +165 -165
  39. data/lib/squib/args/showcase_special.rb +41 -41
  40. data/lib/squib/args/sprue_file.rb +44 -44
  41. data/lib/squib/args/svg_special.rb +37 -37
  42. data/lib/squib/args/transform.rb +55 -55
  43. data/lib/squib/args/typographer.rb +115 -115
  44. data/lib/squib/args/unit_conversion.rb +27 -27
  45. data/lib/squib/args/xywh_shorthands.rb +50 -50
  46. data/lib/squib/builtin/layouts/economy.yml +85 -85
  47. data/lib/squib/builtin/layouts/fantasy.yml +101 -101
  48. data/lib/squib/builtin/layouts/hand.yml +62 -62
  49. data/lib/squib/builtin/layouts/party.yml +94 -94
  50. data/lib/squib/builtin/layouts/playing-card.yml +35 -35
  51. data/lib/squib/builtin/layouts/tuck_box.yml +46 -46
  52. data/lib/squib/builtin/projects/advanced/.gitignore +4 -4
  53. data/lib/squib/builtin/projects/advanced/ABOUT.md +19 -19
  54. data/lib/squib/builtin/projects/advanced/Gemfile +11 -11
  55. data/lib/squib/builtin/projects/advanced/Guardfile +21 -21
  56. data/lib/squib/builtin/projects/advanced/IDEAS.md +22 -22
  57. data/lib/squib/builtin/projects/advanced/PLAYTESTING.md +26 -26
  58. data/lib/squib/builtin/projects/advanced/Rakefile +27 -27
  59. data/lib/squib/builtin/projects/advanced/config.yml +49 -49
  60. data/lib/squib/builtin/projects/advanced/docs/PNP NOTES.md +3 -3
  61. data/lib/squib/builtin/projects/advanced/docs/RULES.md +21 -21
  62. data/lib/squib/builtin/projects/advanced/img/example.svg +60 -60
  63. data/lib/squib/builtin/projects/advanced/layouts/deck.yml +27 -27
  64. data/lib/squib/builtin/projects/advanced/src/deck.rb +34 -34
  65. data/lib/squib/builtin/projects/advanced/src/version.rb +3 -3
  66. data/lib/squib/builtin/projects/basic/.gitignore +4 -4
  67. data/lib/squib/builtin/projects/basic/ABOUT.md +19 -19
  68. data/lib/squib/builtin/projects/basic/Gemfile +3 -3
  69. data/lib/squib/builtin/projects/basic/IDEAS.md +22 -22
  70. data/lib/squib/builtin/projects/basic/PLAYTESTING.md +26 -26
  71. data/lib/squib/builtin/projects/basic/PNP NOTES.md +3 -3
  72. data/lib/squib/builtin/projects/basic/RULES.md +21 -21
  73. data/lib/squib/builtin/projects/basic/Rakefile +7 -7
  74. data/lib/squib/builtin/projects/basic/config.yml +50 -50
  75. data/lib/squib/builtin/projects/basic/deck.rb +6 -6
  76. data/lib/squib/builtin/sprues/a4_euro_card.yml +42 -42
  77. data/lib/squib/builtin/sprues/a4_poker_card_8up.yml +40 -40
  78. data/lib/squib/builtin/sprues/a4_poker_card_9up.yml +42 -42
  79. data/lib/squib/builtin/sprues/a4_usa_card.yml +42 -42
  80. data/lib/squib/builtin/sprues/drivethrucards_1up.yml +10 -10
  81. data/lib/squib/builtin/sprues/letter_poker_card_9up.yml +25 -25
  82. data/lib/squib/builtin/sprues/letter_poker_foldable_8up.yml +52 -52
  83. data/lib/squib/builtin/sprues/printplaygames_18up.yml +68 -68
  84. data/lib/squib/card.rb +75 -75
  85. data/lib/squib/commands/cli.rb +39 -39
  86. data/lib/squib/commands/data/template_option.rb +109 -109
  87. data/lib/squib/commands/make_sprue.rb +277 -277
  88. data/lib/squib/commands/new.rb +77 -77
  89. data/lib/squib/conf.rb +149 -149
  90. data/lib/squib/constants.rb +17 -17
  91. data/lib/squib/deck.rb +138 -138
  92. data/lib/squib/dsl/background.rb +35 -35
  93. data/lib/squib/dsl/circle.rb +39 -39
  94. data/lib/squib/dsl/csv.rb +42 -42
  95. data/lib/squib/dsl/curve.rb +35 -35
  96. data/lib/squib/dsl/cut_zone.rb +47 -47
  97. data/lib/squib/dsl/ellipse.rb +37 -37
  98. data/lib/squib/dsl/grid.rb +35 -35
  99. data/lib/squib/dsl/groups.rb +54 -54
  100. data/lib/squib/dsl/hand.rb +42 -42
  101. data/lib/squib/dsl/line.rb +35 -35
  102. data/lib/squib/dsl/png.rb +57 -57
  103. data/lib/squib/dsl/polygon.rb +36 -36
  104. data/lib/squib/dsl/rect.rb +37 -37
  105. data/lib/squib/dsl/safe_zone.rb +48 -48
  106. data/lib/squib/dsl/save.rb +21 -21
  107. data/lib/squib/dsl/save_pdf.rb +50 -50
  108. data/lib/squib/dsl/save_png.rb +48 -48
  109. data/lib/squib/dsl/save_sheet.rb +53 -53
  110. data/lib/squib/dsl/showcase.rb +43 -43
  111. data/lib/squib/dsl/star.rb +37 -37
  112. data/lib/squib/dsl/svg.rb +63 -63
  113. data/lib/squib/dsl/text.rb +54 -54
  114. data/lib/squib/dsl/text_embed.rb +79 -79
  115. data/lib/squib/dsl/triangle.rb +35 -35
  116. data/lib/squib/dsl/units.rb +37 -37
  117. data/lib/squib/dsl/xlsx.rb +40 -40
  118. data/lib/squib/dsl/yaml.rb +40 -40
  119. data/lib/squib/errors_warnings/warn_unexpected_params.rb +14 -14
  120. data/lib/squib/graphics/background.rb +14 -14
  121. data/lib/squib/graphics/cairo_context_wrapper.rb +115 -115
  122. data/lib/squib/graphics/embedding_utils.rb +28 -28
  123. data/lib/squib/graphics/gradient_regex.rb +47 -47
  124. data/lib/squib/graphics/hand.rb +42 -42
  125. data/lib/squib/graphics/image.rb +123 -123
  126. data/lib/squib/graphics/save_doc.rb +77 -77
  127. data/lib/squib/graphics/save_images.rb +91 -91
  128. data/lib/squib/graphics/save_pdf.rb +90 -90
  129. data/lib/squib/graphics/save_sprue.rb +231 -231
  130. data/lib/squib/graphics/shapes.rb +143 -143
  131. data/lib/squib/graphics/showcase.rb +85 -85
  132. data/lib/squib/graphics/text.rb +202 -202
  133. data/lib/squib/import/csv_importer.rb +45 -45
  134. data/lib/squib/import/data_frame.rb +108 -108
  135. data/lib/squib/import/quantity_exploder.rb +17 -17
  136. data/lib/squib/import/xlsx_importer.rb +28 -28
  137. data/lib/squib/import/yaml_importer.rb +30 -30
  138. data/lib/squib/layout_parser.rb +155 -155
  139. data/lib/squib/progress.rb +38 -38
  140. data/lib/squib/sample_helpers.rb +34 -34
  141. data/lib/squib/sprues/crop_line.rb +28 -28
  142. data/lib/squib/sprues/crop_line_dash.rb +35 -35
  143. data/lib/squib/sprues/invalid_sprue_definition.rb +9 -9
  144. data/lib/squib/sprues/sprue.rb +208 -208
  145. data/lib/squib/sprues/sprue_schema.rb +51 -51
  146. data/lib/squib/system_fonts.rb +16 -16
  147. data/lib/squib/version.rb +11 -11
  148. data/lib/squib.rb +35 -35
  149. data/samples/autoscale_font/_autoscale_font.rb +98 -98
  150. data/samples/backend/_backend.rb +26 -26
  151. data/samples/basic.rb +19 -19
  152. data/samples/build_groups/build_groups.rb +36 -36
  153. data/samples/colors/_colors.rb +44 -44
  154. data/samples/colors/_gradients.rb +34 -34
  155. data/samples/colors/_switch_color.rb +33 -33
  156. data/samples/config/config_text_markup.rb +20 -20
  157. data/samples/config/custom_config.rb +18 -18
  158. data/samples/data/_csv.rb +33 -33
  159. data/samples/data/_excel.rb +55 -55
  160. data/samples/data/_yaml.rb +12 -12
  161. data/samples/hello_world.rb +6 -6
  162. data/samples/images/_cairo_access.rb +39 -39
  163. data/samples/images/_images.rb +104 -104
  164. data/samples/images/_more_load_images.rb +102 -102
  165. data/samples/images/_placeholders.rb +48 -48
  166. data/samples/intro/01_hello.rb +8 -8
  167. data/samples/intro/02_options.rb +14 -14
  168. data/samples/intro/03_layout.rb +11 -11
  169. data/samples/intro/04_arrays.rb +15 -15
  170. data/samples/intro/05_excel.rb +14 -14
  171. data/samples/layouts/builtin_layouts.rb +97 -97
  172. data/samples/layouts/layouts.rb +71 -71
  173. data/samples/project/src/characters.rb +8 -8
  174. data/samples/project/src/skills.rb +7 -7
  175. data/samples/proofs/_tgc_proofs.rb +16 -16
  176. data/samples/ranges/_ranges.rb +64 -64
  177. data/samples/saves/_hand.rb +23 -23
  178. data/samples/saves/_portrait_landscape.rb +23 -23
  179. data/samples/saves/_save_filenames.rb +28 -28
  180. data/samples/saves/_save_pdf.rb +29 -29
  181. data/samples/saves/_saves.rb +75 -75
  182. data/samples/saves/_showcase.rb +25 -25
  183. data/samples/shadows/_shadow.rb +71 -71
  184. data/samples/shapes/_draw_shapes.rb +60 -60
  185. data/samples/shapes/_proofs.rb +22 -22
  186. data/samples/sprues/_advanced_sprues.rb +25 -25
  187. data/samples/sprues/_builtin_sprues.rb +22 -22
  188. data/samples/sprues/_fold_sheet.rb +30 -30
  189. data/samples/sprues/_hex_tiles.rb +15 -15
  190. data/samples/sprues/_mints.rb +11 -11
  191. data/samples/sprues/_negative_coords.rb +6 -6
  192. data/samples/sprues/_sprue_example.rb +11 -11
  193. data/samples/system_font_debug/_list_fonts.rb +14 -14
  194. data/samples/text/_embed_text.rb +128 -128
  195. data/samples/text/_text.rb +52 -52
  196. data/samples/text/_text_options.rb +103 -103
  197. data/samples/text/bug134.rb +14 -14
  198. data/samples/units/_cells.rb +50 -50
  199. data/samples/units/_shorthands.rb +48 -48
  200. data/samples/units/_units.rb +39 -39
  201. data/squib.gemspec +58 -58
  202. metadata +21 -21
@@ -1,10 +1,10 @@
1
- --- # Cards laid out for https://www.drivethrucards.com/
2
- # Make sure the cards being saved alternate back/front, back/front.
3
- # save_pdf sprue: 'drivethrucards_1up.yml', file: 'dtc_output.pdf'
4
- sheet_width: 2.75in
5
- sheet_height: 3.75in
6
- card_width: 2.75in
7
- card_height: 3.75in
8
- cards:
9
- - x: 0.0in
10
- y: 0.0in
1
+ --- # Cards laid out for https://www.drivethrucards.com/
2
+ # Make sure the cards being saved alternate back/front, back/front.
3
+ # save_pdf sprue: 'drivethrucards_1up.yml', file: 'dtc_output.pdf'
4
+ sheet_width: 2.75in
5
+ sheet_height: 3.75in
6
+ card_width: 2.75in
7
+ card_height: 3.75in
8
+ cards:
9
+ - x: 0.0in
10
+ y: 0.0in
@@ -1,25 +1,25 @@
1
- ---
2
- sheet_width: 8.5in
3
- sheet_height: 11in
4
- card_width: 2.5in
5
- card_height: 3.5in
6
- position_reference: :center
7
- cards:
8
- - x: 1.75in
9
- y: 2.000in
10
- - x: 4.250in
11
- y: 2.000in
12
- - x: 6.750in
13
- y: 2.000in
14
- - x: 1.75in
15
- y: 5.500in
16
- - x: 4.250in
17
- y: 5.500in
18
- - x: 6.750in
19
- y: 5.500in
20
- - x: 1.75in
21
- y: 9.000in
22
- - x: 4.250in
23
- y: 9.000in
24
- - x: 6.750in
25
- y: 9.000in
1
+ ---
2
+ sheet_width: 8.5in
3
+ sheet_height: 11in
4
+ card_width: 2.5in
5
+ card_height: 3.5in
6
+ position_reference: :center
7
+ cards:
8
+ - x: 1.75in
9
+ y: 2.000in
10
+ - x: 4.250in
11
+ y: 2.000in
12
+ - x: 6.750in
13
+ y: 2.000in
14
+ - x: 1.75in
15
+ y: 5.500in
16
+ - x: 4.250in
17
+ y: 5.500in
18
+ - x: 6.750in
19
+ y: 5.500in
20
+ - x: 1.75in
21
+ y: 9.000in
22
+ - x: 4.250in
23
+ y: 9.000in
24
+ - x: 6.750in
25
+ y: 9.000in
@@ -1,52 +1,52 @@
1
- ---
2
- sheet_width: 11in
3
- sheet_height: 8.5in
4
- card_width: 2.5in
5
- card_height: 3.5in
6
- cards:
7
- - x: 0.35in
8
- y: 0.225in
9
- - x: 0.35in
10
- y: 4.800in
11
- rotate: :turnaround
12
- - x: 2.95in
13
- y: 0.225in
14
- - x: 2.95in
15
- y: 4.800in
16
- rotate: :turnaround
17
- - x: 5.55in
18
- y: 0.225in
19
- - x: 5.55in
20
- y: 4.800in
21
- rotate: :turnaround
22
- - x: 8.15in
23
- y: 0.225in
24
- - x: 8.15in
25
- y: 4.800in
26
- rotate: :turnaround
27
- crop_line:
28
- lines:
29
- - type: :vertical
30
- position: 0.35in
31
- - type: :vertical
32
- position: 2.85in
33
- - type: :vertical
34
- position: 2.95in
35
- - type: :vertical
36
- position: 5.45in
37
- - type: :vertical
38
- position: 5.55in
39
- - type: :vertical
40
- position: 8.05in
41
- - type: :vertical
42
- position: 8.15in
43
- - type: :vertical
44
- position: 10.65in
45
- - type: :horizontal
46
- position: 0.225in
47
- - type: :horizontal
48
- position: 3.725in
49
- - type: :horizontal
50
- position: 3.825in
51
- - type: :horizontal
52
- position: 7.325in
1
+ ---
2
+ sheet_width: 11in
3
+ sheet_height: 8.5in
4
+ card_width: 2.5in
5
+ card_height: 3.5in
6
+ cards:
7
+ - x: 0.35in
8
+ y: 0.225in
9
+ - x: 0.35in
10
+ y: 4.800in
11
+ rotate: :turnaround
12
+ - x: 2.95in
13
+ y: 0.225in
14
+ - x: 2.95in
15
+ y: 4.800in
16
+ rotate: :turnaround
17
+ - x: 5.55in
18
+ y: 0.225in
19
+ - x: 5.55in
20
+ y: 4.800in
21
+ rotate: :turnaround
22
+ - x: 8.15in
23
+ y: 0.225in
24
+ - x: 8.15in
25
+ y: 4.800in
26
+ rotate: :turnaround
27
+ crop_line:
28
+ lines:
29
+ - type: :vertical
30
+ position: 0.35in
31
+ - type: :vertical
32
+ position: 2.85in
33
+ - type: :vertical
34
+ position: 2.95in
35
+ - type: :vertical
36
+ position: 5.45in
37
+ - type: :vertical
38
+ position: 5.55in
39
+ - type: :vertical
40
+ position: 8.05in
41
+ - type: :vertical
42
+ position: 8.15in
43
+ - type: :vertical
44
+ position: 10.65in
45
+ - type: :horizontal
46
+ position: 0.225in
47
+ - type: :horizontal
48
+ position: 3.725in
49
+ - type: :horizontal
50
+ position: 3.825in
51
+ - type: :horizontal
52
+ position: 7.325in
@@ -1,68 +1,68 @@
1
- # Cards laid out for https://www.printplaygames.com/product/poker-cards
2
- # Make sure the range is alternating 18 fronts / 18 backs.
3
- # save_pdf sprue: 'printplaygames_18up.yml', file: 'pnp_output.pdf'
4
- sheet_width: 12.0in
5
- sheet_height: 18.0in
6
- card_width: 2.75in
7
- card_height: 3.75in
8
- position_reference: :center
9
- cards:
10
- # Column 1
11
- - x: 2.3in
12
- y: 2.165in
13
- rotate: :counterclockwise
14
- - x: 2.3in
15
- y: 4.915in
16
- rotate: :counterclockwise
17
- - x: 2.3in
18
- y: 7.665in
19
- rotate: :counterclockwise
20
- - x: 2.3in
21
- y: 10.415in
22
- rotate: :counterclockwise
23
- - x: 2.3in
24
- y: 13.165in
25
- rotate: :counterclockwise
26
- - x: 2.3in
27
- y: 15.915in
28
- rotate: :counterclockwise
29
-
30
- # Column 2
31
- - x: 6in
32
- y: 2.165in
33
- rotate: :counterclockwise
34
- - x: 6in
35
- y: 4.915in
36
- rotate: :counterclockwise
37
- - x: 6in
38
- y: 7.665in
39
- rotate: :counterclockwise
40
- - x: 6in
41
- y: 10.415in
42
- rotate: :counterclockwise
43
- - x: 6in
44
- y: 13.165in
45
- rotate: :counterclockwise
46
- - x: 6in
47
- y: 15.915in
48
- rotate: :counterclockwise
49
-
50
- # Column 3
51
- - x: 9.7in
52
- y: 2.165in
53
- rotate: :counterclockwise
54
- - x: 9.7in
55
- y: 4.915in
56
- rotate: :counterclockwise
57
- - x: 9.7in
58
- y: 7.665in
59
- rotate: :counterclockwise
60
- - x: 9.7in
61
- y: 10.415in
62
- rotate: :counterclockwise
63
- - x: 9.7in
64
- y: 13.165in
65
- rotate: :counterclockwise
66
- - x: 9.7in
67
- y: 15.915in
68
- rotate: :counterclockwise
1
+ # Cards laid out for https://www.printplaygames.com/product/poker-cards
2
+ # Make sure the range is alternating 18 fronts / 18 backs.
3
+ # save_pdf sprue: 'printplaygames_18up.yml', file: 'pnp_output.pdf'
4
+ sheet_width: 12.0in
5
+ sheet_height: 18.0in
6
+ card_width: 2.75in
7
+ card_height: 3.75in
8
+ position_reference: :center
9
+ cards:
10
+ # Column 1
11
+ - x: 2.3in
12
+ y: 2.165in
13
+ rotate: :counterclockwise
14
+ - x: 2.3in
15
+ y: 4.915in
16
+ rotate: :counterclockwise
17
+ - x: 2.3in
18
+ y: 7.665in
19
+ rotate: :counterclockwise
20
+ - x: 2.3in
21
+ y: 10.415in
22
+ rotate: :counterclockwise
23
+ - x: 2.3in
24
+ y: 13.165in
25
+ rotate: :counterclockwise
26
+ - x: 2.3in
27
+ y: 15.915in
28
+ rotate: :counterclockwise
29
+
30
+ # Column 2
31
+ - x: 6in
32
+ y: 2.165in
33
+ rotate: :counterclockwise
34
+ - x: 6in
35
+ y: 4.915in
36
+ rotate: :counterclockwise
37
+ - x: 6in
38
+ y: 7.665in
39
+ rotate: :counterclockwise
40
+ - x: 6in
41
+ y: 10.415in
42
+ rotate: :counterclockwise
43
+ - x: 6in
44
+ y: 13.165in
45
+ rotate: :counterclockwise
46
+ - x: 6in
47
+ y: 15.915in
48
+ rotate: :counterclockwise
49
+
50
+ # Column 3
51
+ - x: 9.7in
52
+ y: 2.165in
53
+ rotate: :counterclockwise
54
+ - x: 9.7in
55
+ y: 4.915in
56
+ rotate: :counterclockwise
57
+ - x: 9.7in
58
+ y: 7.665in
59
+ rotate: :counterclockwise
60
+ - x: 9.7in
61
+ y: 10.415in
62
+ rotate: :counterclockwise
63
+ - x: 9.7in
64
+ y: 13.165in
65
+ rotate: :counterclockwise
66
+ - x: 9.7in
67
+ y: 15.915in
68
+ rotate: :counterclockwise
data/lib/squib/card.rb CHANGED
@@ -1,75 +1,75 @@
1
- require 'cairo'
2
- require_relative 'graphics/cairo_context_wrapper'
3
-
4
- module Squib
5
- # Back end graphics. Private.
6
- class Card
7
-
8
- # :nodoc:
9
- # @api private
10
- attr_reader :width, :height, :backend, :svgfile, :index
11
-
12
- # :nodoc:
13
- # @api private
14
- attr_accessor :cairo_surface, :cairo_context
15
-
16
- # :nodoc:
17
- # @api private
18
- def initialize(deck, width, height, index=-1)
19
- @deck = deck
20
- @width = width
21
- @height = height
22
- @backend = deck.backend
23
- @index = index
24
- @svgfile = "#{deck.dir}/#{deck.prefix}#{deck.count_format % index}.svg"
25
- @cairo_surface = make_surface(@svgfile, @backend)
26
- @cairo_context = Squib::Graphics::CairoContextWrapper.new(Cairo::Context.new(@cairo_surface))
27
- @cairo_context.antialias = deck.antialias
28
- end
29
-
30
- # :nodoc:
31
- # @api private
32
- def make_surface(svgfile, backend)
33
- case backend.downcase.to_sym
34
- when :memory
35
- Cairo::ImageSurface.new(@width, @height)
36
- when :svg
37
- FileUtils.mkdir_p @deck.dir unless Dir.exists?(@deck.dir)
38
- Cairo::SVGSurface.new(svgfile, @width, @height)
39
- else
40
- Squib.logger.fatal "Back end not recognized: '#{backend}'"
41
- abort
42
- end
43
- end
44
-
45
- # A save/restore wrapper for using Cairo
46
- # :nodoc:
47
- # @api private
48
- def use_cairo(&block)
49
- @cairo_context.save
50
- @cairo_context.new_path # see bug 248
51
- block.yield(@cairo_context)
52
- @cairo_context.restore
53
- end
54
-
55
- def finish!
56
- begin
57
- @cairo_surface.finish
58
- rescue Cairo::SurfaceFinishedError
59
- # do nothin - if it's already finished that's fine
60
- end
61
- end
62
-
63
- ########################
64
- ### BACKEND GRAPHICS ###
65
- ########################
66
- require_relative 'graphics/background'
67
- require_relative 'graphics/image'
68
- require_relative 'graphics/save_doc'
69
- require_relative 'graphics/save_images'
70
- require_relative 'graphics/shapes'
71
- require_relative 'graphics/showcase'
72
- require_relative 'graphics/text'
73
-
74
- end
75
- end
1
+ require 'cairo'
2
+ require_relative 'graphics/cairo_context_wrapper'
3
+
4
+ module Squib
5
+ # Back end graphics. Private.
6
+ class Card
7
+
8
+ # :nodoc:
9
+ # @api private
10
+ attr_reader :width, :height, :backend, :svgfile, :index
11
+
12
+ # :nodoc:
13
+ # @api private
14
+ attr_accessor :cairo_surface, :cairo_context
15
+
16
+ # :nodoc:
17
+ # @api private
18
+ def initialize(deck, width, height, index=-1)
19
+ @deck = deck
20
+ @width = width
21
+ @height = height
22
+ @backend = deck.backend
23
+ @index = index
24
+ @svgfile = "#{deck.dir}/#{deck.prefix}#{deck.count_format % index}.svg"
25
+ @cairo_surface = make_surface(@svgfile, @backend)
26
+ @cairo_context = Squib::Graphics::CairoContextWrapper.new(Cairo::Context.new(@cairo_surface))
27
+ @cairo_context.antialias = deck.antialias
28
+ end
29
+
30
+ # :nodoc:
31
+ # @api private
32
+ def make_surface(svgfile, backend)
33
+ case backend.downcase.to_sym
34
+ when :memory
35
+ Cairo::ImageSurface.new(@width, @height)
36
+ when :svg
37
+ FileUtils.mkdir_p @deck.dir unless Dir.exist?(@deck.dir)
38
+ Cairo::SVGSurface.new(svgfile, @width, @height)
39
+ else
40
+ Squib.logger.fatal "Back end not recognized: '#{backend}'"
41
+ abort
42
+ end
43
+ end
44
+
45
+ # A save/restore wrapper for using Cairo
46
+ # :nodoc:
47
+ # @api private
48
+ def use_cairo(&block)
49
+ @cairo_context.save
50
+ @cairo_context.new_path # see bug 248
51
+ block.yield(@cairo_context)
52
+ @cairo_context.restore
53
+ end
54
+
55
+ def finish!
56
+ begin
57
+ @cairo_surface.finish unless @backend.to_sym == :svg
58
+ rescue Cairo::SurfaceFinishedError
59
+ # do nothin - if it's already finished that's fine
60
+ end
61
+ end
62
+
63
+ ########################
64
+ ### BACKEND GRAPHICS ###
65
+ ########################
66
+ require_relative 'graphics/background'
67
+ require_relative 'graphics/image'
68
+ require_relative 'graphics/save_doc'
69
+ require_relative 'graphics/save_images'
70
+ require_relative 'graphics/shapes'
71
+ require_relative 'graphics/showcase'
72
+ require_relative 'graphics/text'
73
+
74
+ end
75
+ end
@@ -1,39 +1,39 @@
1
- require 'mercenary'
2
- require_relative 'make_sprue'
3
- require_relative 'new'
4
-
5
- module Squib
6
- class CLI
7
-
8
- def run
9
- Mercenary.program(:squib) do |p|
10
- p.version Squib::VERSION
11
- p.description 'A Ruby DSL for prototyping card games'
12
- p.syntax 'squib <subcommand> [options]'
13
-
14
- p.command(:new) do |c|
15
- c.syntax 'new PATH'
16
- c.description 'Creates a new basic Squib project scaffolding in PATH. Must be a new directory or already empty.'
17
-
18
- c.option 'advanced', '--advanced', 'Create the advanced layout'
19
-
20
- c.action do |args, options|
21
- advanced = options.key? 'advanced'
22
- Squib::Commands::New.new.process(args, advanced)
23
- end
24
- end
25
-
26
- p.command(:make_sprue) do |c|
27
- c.syntax 'make_sprue'
28
- c.description 'Creates a sprue definition file.'
29
-
30
- c.action do |args, options|
31
- Squib::Commands::MakeSprue.new.process(args)
32
- end
33
- end
34
-
35
- end
36
- end
37
-
38
- end
39
- end
1
+ require 'mercenary'
2
+ require_relative 'make_sprue'
3
+ require_relative 'new'
4
+
5
+ module Squib
6
+ class CLI
7
+
8
+ def run
9
+ Mercenary.program(:squib) do |p|
10
+ p.version Squib::VERSION
11
+ p.description 'A Ruby DSL for prototyping card games'
12
+ p.syntax 'squib <subcommand> [options]'
13
+
14
+ p.command(:new) do |c|
15
+ c.syntax 'new PATH'
16
+ c.description 'Creates a new basic Squib project scaffolding in PATH. Must be a new directory or already empty.'
17
+
18
+ c.option 'advanced', '--advanced', 'Create the advanced layout'
19
+
20
+ c.action do |args, options|
21
+ advanced = options.key? 'advanced'
22
+ Squib::Commands::New.new.process(args, advanced)
23
+ end
24
+ end
25
+
26
+ p.command(:make_sprue) do |c|
27
+ c.syntax 'make_sprue'
28
+ c.description 'Creates a sprue definition file.'
29
+
30
+ c.action do |args, options|
31
+ Squib::Commands::MakeSprue.new.process(args)
32
+ end
33
+ end
34
+
35
+ end
36
+ end
37
+
38
+ end
39
+ end