squib 0.9.0 → 0.10.0

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 (230) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.gitmodules +22 -0
  4. data/.travis.yml +4 -5
  5. data/CHANGELOG.md +23 -0
  6. data/CONTRIBUTING.md +40 -0
  7. data/README.md +25 -553
  8. data/RELEASE TODO.md +2 -2
  9. data/Rakefile +6 -64
  10. data/appveyor.yml +0 -4
  11. data/benchmarks/antialias_best.rb +2 -2
  12. data/benchmarks/antialias_fast.rb +2 -2
  13. data/benchmarks/{backend-memory.rb → backend_memory.rb} +2 -2
  14. data/benchmarks/{backend-svg.rb → backend_svg.rb} +2 -2
  15. data/benchmarks/tons_of_png.rb +1 -1
  16. data/benchmarks/tons_of_svg.rb +1 -1
  17. data/benchmarks/tons_of_text.rb +1 -1
  18. data/docs/Makefile +216 -0
  19. data/docs/_static/css/squibdocs.css +18 -0
  20. data/docs/args/draw.rst +36 -0
  21. data/docs/args/expansion.rst +3 -0
  22. data/docs/args/layout.rst +6 -0
  23. data/docs/args/output_dir.rst +6 -0
  24. data/docs/args/range.rst +6 -0
  25. data/docs/args/transform.rst +51 -0
  26. data/docs/args/trim.rst +11 -0
  27. data/docs/args/wh.rst +12 -0
  28. data/docs/args/xy.rst +12 -0
  29. data/docs/arrays.rst +77 -0
  30. data/docs/backends.rst +20 -0
  31. data/docs/bleed.rst +13 -0
  32. data/docs/build_groups.rst +47 -0
  33. data/docs/colors.rst +64 -0
  34. data/docs/conf.py +287 -0
  35. data/docs/config.rst +117 -0
  36. data/docs/data.rst +22 -0
  37. data/docs/dsl/background.rst +20 -0
  38. data/docs/dsl/build.rst +32 -0
  39. data/docs/dsl/build_groups.rst +23 -0
  40. data/docs/dsl/circle.rst +27 -0
  41. data/docs/dsl/cm.rst +19 -0
  42. data/docs/dsl/csv.rst +62 -0
  43. data/docs/dsl/curve.rst +63 -0
  44. data/docs/dsl/deck.rst +45 -0
  45. data/docs/dsl/disable_build.rst +28 -0
  46. data/docs/dsl/ellipse.rst +17 -0
  47. data/docs/dsl/enable_build.rst +25 -0
  48. data/docs/dsl/grid.rst +31 -0
  49. data/docs/dsl/hand.rst +40 -0
  50. data/docs/dsl/hint.rst +15 -0
  51. data/docs/dsl/inches.rst +19 -0
  52. data/docs/dsl/index.rst +9 -0
  53. data/docs/dsl/line.rst +52 -0
  54. data/docs/dsl/png.rst +49 -0
  55. data/docs/dsl/polygon.rst +28 -0
  56. data/docs/dsl/rect.rst +18 -0
  57. data/docs/dsl/save.rst +23 -0
  58. data/docs/dsl/save_pdf.rst +48 -0
  59. data/docs/dsl/save_png.rst +46 -0
  60. data/docs/dsl/save_sheet.rst +55 -0
  61. data/docs/dsl/showcase.rst +65 -0
  62. data/docs/dsl/star.rst +35 -0
  63. data/docs/dsl/svg.rst +119 -0
  64. data/docs/dsl/text.rst +294 -0
  65. data/docs/dsl/triangle.rst +38 -0
  66. data/docs/dsl/use_layout.rst +16 -0
  67. data/docs/dsl/xlsx.rst +50 -0
  68. data/docs/guides/game_icons.rst +2 -0
  69. data/docs/guides/getting-started/index.rst +5 -0
  70. data/docs/guides/getting-started/part_0_learning_ruby.rst +145 -0
  71. data/docs/guides/getting-started/part_1_zero_to_game.rst +216 -0
  72. data/docs/guides/getting-started/part_2_iconography.rst +152 -0
  73. data/docs/guides/getting-started/part_3_workflows.rst +4 -0
  74. data/docs/guides/git.rst +13 -0
  75. data/docs/guides/hello_world.rst +6 -0
  76. data/docs/help.rst +157 -0
  77. data/docs/index.rst +35 -0
  78. data/docs/install.rst +66 -0
  79. data/docs/layouts.rst +235 -0
  80. data/docs/learning.rst +10 -0
  81. data/docs/make.bat +263 -0
  82. data/docs/parameters.rst +26 -0
  83. data/docs/server.bat +1 -0
  84. data/docs/text_feature.rst +86 -0
  85. data/docs/units.rst +6 -0
  86. data/lib/squib.rb +4 -4
  87. data/lib/squib/api/background.rb +5 -10
  88. data/lib/squib/api/data.rb +30 -54
  89. data/lib/squib/api/groups.rb +47 -0
  90. data/lib/squib/api/image.rb +8 -67
  91. data/lib/squib/api/save.rb +15 -105
  92. data/lib/squib/api/settings.rb +8 -22
  93. data/lib/squib/api/shapes.rb +15 -185
  94. data/lib/squib/api/text.rb +9 -49
  95. data/lib/squib/api/text_embed.rb +12 -12
  96. data/lib/squib/api/units.rb +3 -17
  97. data/lib/squib/args/arg_loader.rb +6 -6
  98. data/lib/squib/args/box.rb +2 -2
  99. data/lib/squib/args/card_range.rb +1 -1
  100. data/lib/squib/args/color_validator.rb +2 -2
  101. data/lib/squib/args/coords.rb +2 -2
  102. data/lib/squib/args/csv_opts.rb +25 -0
  103. data/lib/squib/args/dir_validator.rb +1 -1
  104. data/lib/squib/args/draw.rb +2 -2
  105. data/lib/squib/args/embed_adjust.rb +1 -1
  106. data/lib/squib/args/embed_key.rb +1 -1
  107. data/lib/squib/args/hand_special.rb +37 -37
  108. data/lib/squib/args/import.rb +2 -2
  109. data/lib/squib/args/input_file.rb +1 -1
  110. data/lib/squib/args/paint.rb +3 -3
  111. data/lib/squib/args/paragraph.rb +2 -2
  112. data/lib/squib/args/save_batch.rb +2 -2
  113. data/lib/squib/args/scale_box.rb +1 -1
  114. data/lib/squib/args/sheet.rb +3 -3
  115. data/lib/squib/args/showcase_special.rb +2 -2
  116. data/lib/squib/args/svg_special.rb +1 -1
  117. data/lib/squib/args/transform.rb +2 -2
  118. data/lib/squib/args/typographer.rb +5 -4
  119. data/lib/squib/args/unit_conversion.rb +4 -4
  120. data/lib/squib/card.rb +8 -8
  121. data/lib/squib/conf.rb +5 -5
  122. data/lib/squib/deck.rb +20 -18
  123. data/lib/squib/graphics/cairo_context_wrapper.rb +3 -3
  124. data/lib/squib/graphics/gradient_regex.rb +1 -1
  125. data/lib/squib/graphics/hand.rb +2 -2
  126. data/lib/squib/graphics/save_doc.rb +9 -8
  127. data/lib/squib/graphics/save_images.rb +24 -11
  128. data/lib/squib/graphics/shapes.rb +16 -17
  129. data/lib/squib/graphics/showcase.rb +9 -9
  130. data/lib/squib/graphics/text.rb +21 -21
  131. data/lib/squib/layout_parser.rb +9 -9
  132. data/lib/squib/layouts/economy.yml +85 -85
  133. data/lib/squib/layouts/fantasy.yml +101 -101
  134. data/lib/squib/layouts/hand.yml +62 -62
  135. data/lib/squib/layouts/playing-card.yml +35 -35
  136. data/lib/squib/layouts/tuck_box.yml +45 -45
  137. data/lib/squib/sample_helpers.rb +1 -1
  138. data/lib/squib/version.rb +1 -1
  139. data/samples/{backend.rb → backend/_backend.rb} +2 -2
  140. data/samples/basic.rb +3 -3
  141. data/samples/bug134.rb +14 -0
  142. data/samples/build_groups/build_groups.rb +36 -0
  143. data/samples/cairo_access.rb +12 -1
  144. data/samples/{colors.rb → colors/_colors.rb} +12 -12
  145. data/samples/{gradients.rb → colors/_gradients.rb} +1 -1
  146. data/samples/config_text_markup.rb +2 -2
  147. data/samples/custom-config.yml +5 -5
  148. data/samples/custom_config.rb +18 -18
  149. data/samples/{csv_import.rb → data/_csv.rb} +8 -1
  150. data/samples/{excel.rb → data/_excel.rb} +3 -3
  151. data/samples/embed_text.rb +21 -0
  152. data/samples/hello_world.rb +1 -1
  153. data/samples/{load_images.rb → images/_more_load_images.rb} +2 -2
  154. data/samples/layouts.rb +11 -1
  155. data/samples/layouts_builtin.rb +51 -51
  156. data/samples/offset.svg +71 -71
  157. data/samples/ranges.rb +7 -7
  158. data/samples/{hand.rb → saves/_hand.rb} +1 -2
  159. data/samples/{portrait-landscape.rb → saves/_portrait_landscape.rb} +4 -4
  160. data/samples/{saves.rb → saves/_saves.rb} +0 -0
  161. data/samples/{showcase.rb → saves/_showcase.rb} +2 -2
  162. data/samples/{draw_shapes.rb → shapes/_draw_shapes.rb} +1 -1
  163. data/samples/text/_text.rb +4 -3
  164. data/samples/text_options.rb +6 -6
  165. data/samples/unicode.rb +1 -1
  166. data/spec/api/api_data_spec.rb +59 -4
  167. data/spec/api/api_settings_spec.rb +1 -1
  168. data/spec/args/box_spec.rb +7 -7
  169. data/spec/args/draw_spec.rb +19 -19
  170. data/spec/args/embed_key_spec.rb +13 -13
  171. data/spec/args/input_file_spec.rb +2 -2
  172. data/spec/args/paint_spec.rb +5 -5
  173. data/spec/args/paragraph_spec.rb +28 -28
  174. data/spec/args/range_spec.rb +1 -1
  175. data/spec/args/save_batch_spec.rb +10 -10
  176. data/spec/args/scale_box_spec.rb +9 -9
  177. data/spec/args/sheet_spec.rb +8 -8
  178. data/spec/args/showcase_special_spec.rb +15 -15
  179. data/spec/args/transform_spec.rb +4 -4
  180. data/spec/args/typographer_spec.rb +11 -11
  181. data/spec/args/unit_conversion_spec.rb +2 -2
  182. data/spec/card_spec.rb +1 -1
  183. data/spec/commands/new_spec.rb +1 -1
  184. data/spec/data/csv/custom_opts.csv +2 -0
  185. data/spec/data/csv/newline.csv +3 -0
  186. data/spec/data/csv/qty.csv +2 -2
  187. data/spec/data/csv/qty_named.csv +2 -2
  188. data/spec/data/csv/with_spaces.csv +2 -2
  189. data/spec/data/csv/yield.csv +3 -0
  190. data/spec/data/samples/{autoscale_font.rb.txt → autoscale_font/_autoscale_font.rb.txt} +55 -18
  191. data/spec/data/samples/cairo_access.rb.txt +24 -0
  192. data/spec/data/samples/{gradients.rb.txt → colors/_gradients.rb.txt} +0 -0
  193. data/spec/data/samples/config_text_markup.rb.txt +72 -72
  194. data/spec/data/samples/custom_config.rb.txt +1 -0
  195. data/spec/data/samples/{csv_import.rb.txt → data/_csv.rb.txt} +0 -0
  196. data/spec/data/samples/{excel.rb.txt → data/_excel.rb.txt} +0 -0
  197. data/spec/data/samples/embed_text.rb.txt +79 -0
  198. data/spec/data/samples/hello_world.rb.txt +36 -36
  199. data/spec/data/samples/{load_images.rb.txt → images/_more_load_images.rb.txt} +4 -4
  200. data/spec/data/samples/{hand.rb.txt → saves/_hand.rb.txt} +0 -0
  201. data/spec/data/samples/{portrait-landscape.rb.txt → saves/_portrait_landscape.rb.txt} +11 -7
  202. data/spec/data/samples/{save_pdf.rb.txt → saves/_save_pdf.rb.txt} +0 -0
  203. data/spec/data/samples/{saves.rb.txt → saves/_saves.rb.txt} +3 -4
  204. data/spec/data/samples/{showcase.rb.txt → saves/_showcase.rb.txt} +0 -0
  205. data/spec/data/samples/{draw_shapes.rb.txt → shapes/_draw_shapes.rb.txt} +0 -0
  206. data/spec/data/samples/text_options.rb.txt +1125 -1125
  207. data/spec/graphics/cairo_context_wrapper_spec.rb +10 -10
  208. data/spec/graphics/graphics_save_doc_spec.rb +11 -5
  209. data/spec/layout_parser_spec.rb +21 -9
  210. data/spec/logger_spec.rb +2 -2
  211. data/spec/samples/run_samples_spec.rb +1 -1
  212. data/spec/samples/samples_regression_spec.rb +16 -18
  213. data/spec/samples/sanity.rb +9 -9
  214. data/spec/sanity/.gitignore +1 -0
  215. data/spec/sanity/sanity.html.erb +42 -0
  216. data/spec/sanity/sanity_test.rb +42 -0
  217. data/spec/sanity/tests.yml +12 -0
  218. data/spec/spec_helper.rb +22 -20
  219. data/squib.gemspec +3 -4
  220. metadata +143 -81
  221. data/.rspec +0 -1
  222. data/.yardopts +0 -10
  223. data/samples/autoscale_font.rb +0 -27
  224. data/samples/backend-config.yml +0 -5
  225. data/samples/color_shortcuts.rb +0 -6
  226. data/samples/explode_quantities.xlsx +0 -0
  227. data/samples/quantity_explosion.csv +0 -3
  228. data/samples/sample.csv +0 -3
  229. data/samples/sample.xlsx +0 -0
  230. data/squib.sublime-project +0 -42
@@ -1,4 +1,4 @@
1
- require 'squib/args/arg_loader'
1
+ require_relative 'arg_loader'
2
2
 
3
3
  module Squib
4
4
  # @api private
@@ -1,4 +1,4 @@
1
- require 'squib/args/arg_loader'
1
+ require_relative 'arg_loader'
2
2
 
3
3
  module Squib
4
4
  # @api private
@@ -58,4 +58,4 @@ module Squib
58
58
  end
59
59
 
60
60
  end
61
- end
61
+ end
@@ -1,9 +1,10 @@
1
- require 'squib/constants'
1
+ require_relative '../constants'
2
+
2
3
  module Squib
3
- #@api private
4
+ # @api private
4
5
  module Args
5
6
  # Internal class for handling arguments
6
- #@api private
7
+ # @api private
7
8
  class Typographer
8
9
 
9
10
  def initialize(config = Conf::DEFAULTS)
@@ -115,4 +116,4 @@ module Squib
115
116
 
116
117
  end
117
118
  end
118
- end
119
+ end
@@ -1,4 +1,4 @@
1
- require 'squib/constants'
1
+ require_relative '../constants'
2
2
 
3
3
  module Squib
4
4
  module Args
@@ -11,9 +11,9 @@ module Squib
11
11
  module_function
12
12
  def parse(arg, dpi=300)
13
13
  case arg.to_s.rstrip
14
- when /in$/ #ends with "in"
14
+ when /in$/ # ends with "in"
15
15
  arg.rstrip[0..-2].to_f * dpi
16
- when /cm$/ #ends with "cm"
16
+ when /cm$/ # ends with "cm"
17
17
  arg.rstrip[0..-2].to_f * dpi * INCHES_IN_CM
18
18
  else
19
19
  arg
@@ -22,4 +22,4 @@ module Squib
22
22
 
23
23
  end
24
24
  end
25
- end
25
+ end
data/lib/squib/card.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'cairo'
2
- require 'squib/graphics/cairo_context_wrapper'
2
+ require_relative 'graphics/cairo_context_wrapper'
3
3
 
4
4
  module Squib
5
5
  # Back end graphics. Private.
@@ -54,13 +54,13 @@ module Squib
54
54
  ########################
55
55
  ### BACKEND GRAPHICS ###
56
56
  ########################
57
- require 'squib/graphics/background'
58
- require 'squib/graphics/image'
59
- require 'squib/graphics/save_doc'
60
- require 'squib/graphics/save_images'
61
- require 'squib/graphics/shapes'
62
- require 'squib/graphics/showcase'
63
- require 'squib/graphics/text'
57
+ require_relative 'graphics/background'
58
+ require_relative 'graphics/image'
59
+ require_relative 'graphics/save_doc'
60
+ require_relative 'graphics/save_images'
61
+ require_relative 'graphics/shapes'
62
+ require_relative 'graphics/showcase'
63
+ require_relative 'graphics/text'
64
64
 
65
65
  end
66
66
  end
data/lib/squib/conf.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'forwardable'
2
- require 'squib'
3
- require 'squib/args/typographer'
4
2
  require 'yaml'
3
+ require_relative 'args/typographer'
5
4
 
6
5
  module Squib
7
6
  # @api private
@@ -16,6 +15,7 @@ module Squib
16
15
  'hint' => :none,
17
16
  'img_dir' => '.',
18
17
  'progress_bars' => false,
18
+ 'prefix' => 'card_',
19
19
  'ldquote' => "\u201C", # UTF8 chars
20
20
  'rdquote' => "\u201D",
21
21
  'lsquote' => "\u2018",
@@ -25,11 +25,11 @@ module Squib
25
25
  'ellipsis' => "\u2026",
26
26
  'smart_quotes' => true,
27
27
  'text_hint' => 'off',
28
- 'warn_ellipsize'=> true,
29
- 'warn_png_scale'=> true,
28
+ 'warn_ellipsize' => true,
29
+ 'warn_png_scale' => true,
30
30
  }
31
31
 
32
- #Translate the hints to the methods.
32
+ # Translate the hints to the methods.
33
33
  ANTIALIAS_OPTS = {
34
34
  nil => 'subpixel',
35
35
  'best' => 'subpixel',
data/lib/squib/deck.rb CHANGED
@@ -1,14 +1,14 @@
1
1
  require 'forwardable'
2
2
  require 'pp'
3
- require 'squib'
4
- require 'squib/args/unit_conversion'
5
- require 'squib/card'
6
- require 'squib/conf'
7
- require 'squib/constants'
8
- require 'squib/graphics/hand'
9
- require 'squib/graphics/showcase'
10
- require 'squib/layout_parser'
11
- require 'squib/progress'
3
+ require_relative '../squib'
4
+ require_relative 'args/unit_conversion'
5
+ require_relative 'card'
6
+ require_relative 'conf'
7
+ require_relative 'constants'
8
+ require_relative 'graphics/hand'
9
+ require_relative 'graphics/showcase'
10
+ require_relative 'layout_parser'
11
+ require_relative 'progress'
12
12
 
13
13
 
14
14
  # The project module
@@ -68,7 +68,8 @@ module Squib
68
68
  @width = Args::UnitConversion.parse width, dpi
69
69
  @height = Args::UnitConversion.parse height, dpi
70
70
  cards.times{ |i| @cards << Squib::Card.new(self, @width, @height, i) }
71
- @layout = LayoutParser.load_layout(layout)
71
+ @layout = LayoutParser.load_layout(layout)
72
+ enable_groups_from_env!
72
73
  if block_given?
73
74
  instance_eval(&block) # here we go. wheeeee!
74
75
  end
@@ -100,14 +101,15 @@ module Squib
100
101
  ##################
101
102
  ### PUBLIC API ###
102
103
  ##################
103
- require 'squib/api/background'
104
- require 'squib/api/data'
105
- require 'squib/api/image'
106
- require 'squib/api/save'
107
- require 'squib/api/settings'
108
- require 'squib/api/shapes'
109
- require 'squib/api/text'
110
- require 'squib/api/units'
104
+ require_relative 'api/background'
105
+ require_relative 'api/data'
106
+ require_relative 'api/groups'
107
+ require_relative 'api/image'
108
+ require_relative 'api/save'
109
+ require_relative 'api/settings'
110
+ require_relative 'api/shapes'
111
+ require_relative 'api/text'
112
+ require_relative 'api/units'
111
113
 
112
114
  end
113
115
  end
@@ -1,5 +1,5 @@
1
1
  require 'forwardable'
2
- require 'squib/graphics/gradient_regex'
2
+ require_relative 'gradient_regex'
3
3
 
4
4
  module Squib
5
5
  module Graphics
@@ -40,7 +40,7 @@ module Squib
40
40
  linear.matrix = matrix # match the coordinate systems - see bug 127
41
41
  @cairo_cxt.set_source(linear)
42
42
  elsif match = arg.match(RADIAL_GRADIENT)
43
- x1, y1, r1, x2, y2, r2 = match.captures
43
+ x1, y1, r1, x2, y2, r2 = match.captures
44
44
  radial = Cairo::RadialPattern.new(x1.to_f, y1.to_f, r1.to_f,
45
45
  x2.to_f, y2.to_f, r2.to_f)
46
46
  radial.matrix = matrix # match the coordinate systems - see bug 127
@@ -105,7 +105,7 @@ module Squib
105
105
  v = vertical ? -1.0 : 1.0
106
106
  h = horizontal ? -1.0 : 1.0
107
107
  transform Cairo::Matrix.new(v, 0.0, 0.0,
108
- h, x*(1-v), y*(1-h))
108
+ h, x * (1 - v), y * (1 - h))
109
109
  end
110
110
 
111
111
  end
@@ -44,4 +44,4 @@ module Squib
44
44
  \s* # trailing whitespace is ok
45
45
  /x
46
46
  end
47
- end
47
+ end
@@ -1,4 +1,4 @@
1
- require 'squib/graphics/cairo_context_wrapper'
1
+ require_relative 'cairo_context_wrapper'
2
2
 
3
3
  module Squib
4
4
  class Deck
@@ -30,7 +30,7 @@ module Squib
30
30
  end
31
31
  end
32
32
  x, y, w, h = cxt.target.ink_extents # I love Ruby assignment ;)
33
- png_cxt = Squib::Graphics::CairoContextWrapper.new(Cairo::Context.new(Cairo::ImageSurface.new(w + 2*sheet.margin, h + 2*sheet.margin)))
33
+ png_cxt = Squib::Graphics::CairoContextWrapper.new(Cairo::Context.new(Cairo::ImageSurface.new(w + 2 * sheet.margin, h + 2 * sheet.margin)))
34
34
  png_cxt.set_source_squibcolor(sheet.fill_color)
35
35
  png_cxt.paint
36
36
  png_cxt.translate(-x + sheet.margin, -y + sheet.margin)
@@ -13,7 +13,7 @@ module Squib
13
13
  @progress_bar.start("Saving PDF to #{file}", range.size) do |bar|
14
14
  range.each do |i|
15
15
  card = @cards[i]
16
- cc.translate(x,y)
16
+ cc.translate(x, y)
17
17
  cc.rectangle(sheet.trim, sheet.trim, card_width, card_height)
18
18
  cc.clip
19
19
  case card.backend.downcase.to_sym
@@ -23,7 +23,7 @@ module Squib
23
23
  when :svg
24
24
  card.cairo_surface.finish
25
25
  cc.save
26
- cc.scale(0.8,0.8) # I really don't know why I needed to do this at all. But 0.8 is the magic number to get this to scale right
26
+ cc.scale(0.8, 0.8) # I really don't know why I needed to do this at all. But 0.8 is the magic number to get this to scale right
27
27
  cc.render_rsvg_handle(RSVG::Handle.new_from_file(card.svgfile), nil)
28
28
  cc.restore
29
29
  else
@@ -31,18 +31,19 @@ module Squib
31
31
  end
32
32
  bar.increment
33
33
  cc.reset_clip
34
- cc.translate(-x,-y)
35
- x += card.width + sheet.gap - 2*sheet.trim
34
+ cc.translate(-x, -y)
35
+ x += card.width + sheet.gap - 2 * sheet.trim
36
36
  if x > (sheet.width - card_width - sheet.margin)
37
37
  x = sheet.margin
38
- y += card.height + sheet.gap - 2*sheet.trim
38
+ y += card.height + sheet.gap - 2 * sheet.trim
39
39
  if y > (sheet.height - card_height - sheet.margin)
40
40
  cc.show_page # next page
41
- x,y = sheet.margin,sheet.margin
41
+ x, y = sheet.margin, sheet.margin
42
42
  end
43
43
  end
44
44
  end
45
45
  end
46
+ cc.target.finish
46
47
  end
47
48
 
48
49
  # :nodoc:
@@ -90,9 +91,9 @@ module Squib
90
91
  # @api private
91
92
  def trim(surface, trim, width, height)
92
93
  if trim > 0
93
- tmp = Cairo::ImageSurface.new(width-2*trim, height-2*trim)
94
+ tmp = Cairo::ImageSurface.new(width - 2 * trim, height - 2 * trim)
94
95
  cc = Cairo::Context.new(tmp)
95
- cc.set_source(surface,-1*trim, -1*trim)
96
+ cc.set_source(surface, -1 * trim, -1 * trim)
96
97
  cc.paint
97
98
  surface = tmp
98
99
  end
@@ -5,7 +5,8 @@ module Squib
5
5
  # @api private
6
6
  def save_png(batch)
7
7
  surface = if preprocess_save?(batch)
8
- preprocessed_save(batch.angle, batch.trim, batch.trim_radius)
8
+ w, h = compute_dimensions(batch.rotate, batch.trim)
9
+ preprocessed_save(w, h, batch)
9
10
  else
10
11
  @cairo_surface
11
12
  end
@@ -15,20 +16,32 @@ module Squib
15
16
  # :nodoc:
16
17
  # @api private
17
18
  def preprocess_save?(batch)
18
- batch.rotate || batch.trim > 0
19
+ batch.rotate != false || batch.trim > 0
19
20
  end
20
21
 
21
- def preprocessed_save(angle, trim, trim_radius)
22
- new_width, new_height = @width - 2*trim, @height - 2*trim
23
- new_cc = Cairo::Context.new(Cairo::ImageSurface.new(new_width, new_height))
24
- new_cc.translate(new_width * 0.5, new_height * 0.5)
25
- new_cc.rotate(angle)
26
- new_cc.translate(new_width * -0.5, new_height * -0.5)
27
- new_cc.set_source(@cairo_surface, -trim, -trim)
28
- new_cc.rounded_rectangle(0, 0, new_width, new_height, trim_radius, trim_radius)
22
+ def compute_dimensions(rotate, trim)
23
+ if rotate
24
+ [ @height - 2 * trim, @width - 2 * trim ]
25
+ else
26
+ [ @width - 2 * trim, @height - 2 * trim ]
27
+ end
28
+ end
29
+
30
+ def preprocessed_save(width, height, batch)
31
+ new_cc = Cairo::Context.new(Cairo::ImageSurface.new(width, height))
32
+ trim_radius = batch.trim_radius
33
+ 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)
38
+ else
39
+ new_cc.rounded_rectangle(0, 0, width, height, trim_radius, trim_radius)
40
+ end
29
41
  new_cc.clip
42
+ new_cc.set_source(@cairo_surface, -batch.trim, -batch.trim)
30
43
  new_cc.paint
31
- new_cc.target
44
+ return new_cc.target
32
45
  end
33
46
 
34
47
  def write_png(surface, i, dir, prefix, count_format)
@@ -30,19 +30,19 @@ module Squib
30
30
  def ellipse(box, draw)
31
31
  x, y, w, h = box.x, box.y, box.width, box.height
32
32
  use_cairo do |cc|
33
- cc.move_to(x, y + 0.5*h) # start west
34
- cc.curve_to(x, y + 0.25*h, # west to north
35
- x + 0.25*w, y,
36
- x + 0.5*w, y)
37
- cc.curve_to(x + 0.75*w, y, # north to east
38
- x + w, y + 0.25*h,
39
- x + w, y + 0.5*h)
40
- cc.curve_to(x + w, y + 0.75*h, # east to south
41
- x + 0.75*w, y + h,
42
- x + 0.5*w, y + h)
43
- cc.curve_to(x + 0.25*w, y + h, # south to west
44
- x, y + 0.75*h,
45
- x, y + 0.5*h)
33
+ cc.move_to(x, y + 0.5 * h) # start west
34
+ cc.curve_to(x, y + 0.25 * h, # west to north
35
+ x + 0.25 * w, y,
36
+ x + 0.5 * w, y)
37
+ cc.curve_to(x + 0.75 * w, y, # north to east
38
+ x + w, y + 0.25 * h,
39
+ x + w, y + 0.5 * h)
40
+ cc.curve_to(x + w, y + 0.75 * h, # east to south
41
+ x + 0.75 * w, y + h,
42
+ x + 0.5 * w, y + h)
43
+ cc.curve_to(x + 0.25 * w, y + h, # south to west
44
+ x, y + 0.75 * h,
45
+ x, y + 0.5 * h)
46
46
  cc.fill_n_stroke(draw)
47
47
  end
48
48
  end
@@ -52,8 +52,8 @@ module Squib
52
52
  def grid(box, draw)
53
53
  x, y, w, h = box.x, box.y, box.width, box.height
54
54
  use_cairo do |cc|
55
- (x..@width + w).step(w) { |ix| line_xy( ix, y - @height, ix, @height + y, draw) }
56
- (y..@height + h).step(h) { |iy| line_xy( x - @width, iy, @width + x, iy, draw) }
55
+ (x..@width + w).step(w) { |ix| line_xy(ix, y - @height, ix, @height + y, draw) }
56
+ (y..@height + h).step(h) { |iy| line_xy(x - @width, iy, @width + x, iy, draw) }
57
57
  end
58
58
  end
59
59
 
@@ -101,7 +101,7 @@ module Squib
101
101
  inner_radius, outer_radius = poly.inner_radius, poly.outer_radius
102
102
  use_cairo do |cc|
103
103
  cc.rotate_about(x, y, trans.angle)
104
- cc.move_to(x + outer_radius, y) #i = 0, so cos(0)=1 and sin(0)=0
104
+ cc.move_to(x + outer_radius, y) # i = 0, so cos(0)=1 and sin(0)=0
105
105
  theta = Math::PI / n.to_f # i.e. (2*pi) / (2*n)
106
106
  0.upto(2 * n) do |i|
107
107
  radius = i.even? ? outer_radius : inner_radius
@@ -132,4 +132,3 @@ module Squib
132
132
 
133
133
  end
134
134
  end
135
-
@@ -1,4 +1,4 @@
1
- require 'squib/graphics/cairo_context_wrapper'
1
+ require_relative 'cairo_context_wrapper'
2
2
 
3
3
  module Squib
4
4
  class Deck
@@ -12,8 +12,8 @@ module Squib
12
12
  # :nodoc:
13
13
  # @api private
14
14
  def render_showcase(range, sheet, showcase)
15
- out_width = range.size * ((@width - 2*sheet.trim) * showcase.scale * showcase.offset) + 2*sheet.margin
16
- out_height = showcase.reflect_offset + (1.0 + showcase.reflect_percent) * (@height - 2*sheet.trim) + 2*sheet.margin
15
+ out_width = range.size * ((@width - 2 * sheet.trim) * showcase.scale * showcase.offset) + 2 * sheet.margin
16
+ out_height = showcase.reflect_offset + (1.0 + showcase.reflect_percent) * (@height - 2 * sheet.trim) + 2 * sheet.margin
17
17
  out_cc = Cairo::Context.new(Cairo::ImageSurface.new(out_width, out_height))
18
18
  wrapper = Squib::Graphics::CairoContextWrapper.new(out_cc)
19
19
  wrapper.set_source_squibcolor(sheet.fill_color)
@@ -33,7 +33,7 @@ module Squib
33
33
  # :nodoc:
34
34
  # @api private
35
35
  def trim_rounded(src, trim, radius)
36
- trim_cc = Cairo::Context.new(Cairo::ImageSurface.new(src.width-2.0*trim, src.height-2.0*trim))
36
+ trim_cc = Cairo::Context.new(Cairo::ImageSurface.new(src.width - 2.0 * trim, src.height - 2.0 * trim))
37
37
  trim_cc.rounded_rectangle(0, 0, trim_cc.target.width, trim_cc.target.height, radius, radius)
38
38
  trim_cc.set_source(src, -1 * trim, -1 * trim)
39
39
  trim_cc.clip
@@ -52,9 +52,9 @@ module Squib
52
52
  tmp_cc.transform(matrix) # flips the coordinate system
53
53
  top_y = src.height # top of the reflection
54
54
  bottom_y = src.height * (1.0 - rpercent) + roffset # bottom of the reflection
55
- gradient = Cairo::LinearPattern.new(0,top_y, 0,bottom_y)
56
- gradient.add_color_stop_rgba(0.0, 0,0,0, rstrength) # start a little reflected
57
- gradient.add_color_stop_rgba(1.0, 0,0,0, 0.0) # fade to nothing
55
+ gradient = Cairo::LinearPattern.new(0, top_y, 0, bottom_y)
56
+ gradient.add_color_stop_rgba(0.0, 0, 0, 0, rstrength) # start a little reflected
57
+ gradient.add_color_stop_rgba(1.0, 0, 0, 0, 0.0) # fade to nothing
58
58
  tmp_cc.set_source(src, 0, 0)
59
59
  tmp_cc.mask(gradient)
60
60
  return tmp_cc.target
@@ -69,12 +69,12 @@ module Squib
69
69
  (0..src.width).step(in_thickness) do |i|
70
70
  percentage = i / src.width.to_f
71
71
  i = src.width - i if face_right
72
- factor = scale + (percentage * (1.0 - scale)) #linear interpolation
72
+ factor = scale + (percentage * (1.0 - scale)) # linear interpolation
73
73
  dest_cxt.save
74
74
  dest_cxt.translate 0, src.height / 2.0 * (1.0 - factor)
75
75
  dest_cxt.scale factor * scale, factor
76
76
  dest_cxt.set_source src, 0, 0
77
- dest_cxt.rounded_rectangle i, 0, out_thickness, src.height, 0,0
77
+ dest_cxt.rounded_rectangle i, 0, out_thickness, src.height, 0, 0
78
78
  dest_cxt.fill
79
79
  dest_cxt.restore
80
80
  end