prawn 2.4.0 → 2.5.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 (203) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/prawn/document/bounding_box.rb +213 -141
  4. data/lib/prawn/document/column_box.rb +61 -26
  5. data/lib/prawn/document/internals.rb +25 -16
  6. data/lib/prawn/document/span.rb +20 -18
  7. data/lib/prawn/document.rb +257 -171
  8. data/lib/prawn/encoding.rb +2 -5
  9. data/lib/prawn/errors.rb +23 -34
  10. data/lib/prawn/font.rb +248 -135
  11. data/lib/prawn/font_metric_cache.rb +11 -10
  12. data/lib/prawn/fonts/afm.rb +85 -45
  13. data/lib/prawn/fonts/dfont.rb +7 -1
  14. data/lib/prawn/fonts/otf.rb +4 -1
  15. data/lib/prawn/fonts/to_unicode_cmap.rb +151 -0
  16. data/lib/prawn/fonts/ttc.rb +7 -2
  17. data/lib/prawn/fonts/ttf.rb +305 -93
  18. data/lib/prawn/fonts.rb +14 -0
  19. data/lib/prawn/graphics/blend_mode.rb +25 -28
  20. data/lib/prawn/graphics/cap_style.rb +9 -12
  21. data/lib/prawn/graphics/color.rb +57 -34
  22. data/lib/prawn/graphics/dash.rb +45 -42
  23. data/lib/prawn/graphics/join_style.rb +17 -11
  24. data/lib/prawn/graphics/patterns.rb +190 -69
  25. data/lib/prawn/graphics/transformation.rb +48 -41
  26. data/lib/prawn/graphics/transparency.rb +16 -40
  27. data/lib/prawn/graphics.rb +363 -253
  28. data/lib/prawn/grid.rb +184 -57
  29. data/lib/prawn/image_handler.rb +27 -10
  30. data/lib/prawn/images/image.rb +8 -10
  31. data/lib/prawn/images/jpg.rb +42 -19
  32. data/lib/prawn/images/png.rb +92 -41
  33. data/lib/prawn/images.rb +44 -57
  34. data/lib/prawn/measurement_extensions.rb +39 -8
  35. data/lib/prawn/measurements.rb +60 -5
  36. data/lib/prawn/outline.rb +114 -108
  37. data/lib/prawn/repeater.rb +51 -35
  38. data/lib/prawn/security/arcfour.rb +4 -4
  39. data/lib/prawn/security.rb +75 -70
  40. data/lib/prawn/soft_mask.rb +42 -30
  41. data/lib/prawn/stamp.rb +38 -42
  42. data/lib/prawn/text/box.rb +146 -96
  43. data/lib/prawn/text/formatted/arranger.rb +87 -26
  44. data/lib/prawn/text/formatted/box.rb +221 -150
  45. data/lib/prawn/text/formatted/fragment.rb +130 -14
  46. data/lib/prawn/text/formatted/line_wrap.rb +33 -24
  47. data/lib/prawn/text/formatted/parser.rb +112 -72
  48. data/lib/prawn/text/formatted/wrap.rb +12 -17
  49. data/lib/prawn/text/formatted.rb +75 -0
  50. data/lib/prawn/text.rb +441 -196
  51. data/lib/prawn/transformation_stack.rb +29 -10
  52. data/lib/prawn/utilities.rb +13 -13
  53. data/lib/prawn/version.rb +2 -1
  54. data/lib/prawn/view.rb +68 -53
  55. data/lib/prawn.rb +23 -18
  56. data.tar.gz.sig +0 -0
  57. metadata +54 -177
  58. metadata.gz.sig +0 -0
  59. data/.yardopts +0 -10
  60. data/Gemfile +0 -5
  61. data/Rakefile +0 -25
  62. data/manual/absolute_position.pdf +0 -0
  63. data/manual/basic_concepts/adding_pages.rb +0 -26
  64. data/manual/basic_concepts/basic_concepts.rb +0 -43
  65. data/manual/basic_concepts/creation.rb +0 -38
  66. data/manual/basic_concepts/cursor.rb +0 -32
  67. data/manual/basic_concepts/measurement.rb +0 -24
  68. data/manual/basic_concepts/origin.rb +0 -37
  69. data/manual/basic_concepts/other_cursor_helpers.rb +0 -39
  70. data/manual/basic_concepts/view.rb +0 -48
  71. data/manual/bounding_box/bounding_box.rb +0 -41
  72. data/manual/bounding_box/bounds.rb +0 -48
  73. data/manual/bounding_box/canvas.rb +0 -23
  74. data/manual/bounding_box/creation.rb +0 -22
  75. data/manual/bounding_box/indentation.rb +0 -45
  76. data/manual/bounding_box/nesting.rb +0 -52
  77. data/manual/bounding_box/russian_boxes.rb +0 -40
  78. data/manual/bounding_box/stretchy.rb +0 -29
  79. data/manual/contents.rb +0 -35
  80. data/manual/cover.rb +0 -43
  81. data/manual/document_and_page_options/background.rb +0 -29
  82. data/manual/document_and_page_options/document_and_page_options.rb +0 -34
  83. data/manual/document_and_page_options/metadata.rb +0 -25
  84. data/manual/document_and_page_options/page_margins.rb +0 -36
  85. data/manual/document_and_page_options/page_size.rb +0 -34
  86. data/manual/document_and_page_options/print_scaling.rb +0 -23
  87. data/manual/example_helper.rb +0 -8
  88. data/manual/graphics/blend_mode.rb +0 -52
  89. data/manual/graphics/circle_and_ellipse.rb +0 -21
  90. data/manual/graphics/color.rb +0 -22
  91. data/manual/graphics/common_lines.rb +0 -29
  92. data/manual/graphics/fill_and_stroke.rb +0 -41
  93. data/manual/graphics/fill_rules.rb +0 -38
  94. data/manual/graphics/gradients.rb +0 -43
  95. data/manual/graphics/graphics.rb +0 -64
  96. data/manual/graphics/helper.rb +0 -34
  97. data/manual/graphics/line_width.rb +0 -36
  98. data/manual/graphics/lines_and_curves.rb +0 -40
  99. data/manual/graphics/polygon.rb +0 -27
  100. data/manual/graphics/rectangle.rb +0 -20
  101. data/manual/graphics/rotate.rb +0 -25
  102. data/manual/graphics/scale.rb +0 -42
  103. data/manual/graphics/soft_masks.rb +0 -44
  104. data/manual/graphics/stroke_cap.rb +0 -30
  105. data/manual/graphics/stroke_dash.rb +0 -47
  106. data/manual/graphics/stroke_join.rb +0 -29
  107. data/manual/graphics/translate.rb +0 -29
  108. data/manual/graphics/transparency.rb +0 -33
  109. data/manual/how_to_read_this_manual.rb +0 -39
  110. data/manual/images/absolute_position.rb +0 -22
  111. data/manual/images/fit.rb +0 -20
  112. data/manual/images/horizontal.rb +0 -24
  113. data/manual/images/images.rb +0 -41
  114. data/manual/images/plain_image.rb +0 -17
  115. data/manual/images/scale.rb +0 -21
  116. data/manual/images/vertical.rb +0 -30
  117. data/manual/images/width_and_height.rb +0 -24
  118. data/manual/layout/boxes.rb +0 -26
  119. data/manual/layout/content.rb +0 -24
  120. data/manual/layout/layout.rb +0 -27
  121. data/manual/layout/simple_grid.rb +0 -22
  122. data/manual/outline/add_subsection_to.rb +0 -60
  123. data/manual/outline/insert_section_after.rb +0 -46
  124. data/manual/outline/outline.rb +0 -33
  125. data/manual/outline/sections_and_pages.rb +0 -66
  126. data/manual/repeatable_content/alternate_page_numbering.rb +0 -36
  127. data/manual/repeatable_content/page_numbering.rb +0 -55
  128. data/manual/repeatable_content/repeatable_content.rb +0 -35
  129. data/manual/repeatable_content/repeater.rb +0 -54
  130. data/manual/repeatable_content/stamp.rb +0 -40
  131. data/manual/security/encryption.rb +0 -28
  132. data/manual/security/permissions.rb +0 -43
  133. data/manual/security/security.rb +0 -28
  134. data/manual/table.rb +0 -16
  135. data/manual/text/alignment.rb +0 -43
  136. data/manual/text/color.rb +0 -24
  137. data/manual/text/column_box.rb +0 -30
  138. data/manual/text/fallback_fonts.rb +0 -41
  139. data/manual/text/font.rb +0 -40
  140. data/manual/text/font_size.rb +0 -44
  141. data/manual/text/font_style.rb +0 -25
  142. data/manual/text/formatted_callbacks.rb +0 -70
  143. data/manual/text/formatted_text.rb +0 -61
  144. data/manual/text/free_flowing_text.rb +0 -50
  145. data/manual/text/inline.rb +0 -40
  146. data/manual/text/kerning_and_character_spacing.rb +0 -38
  147. data/manual/text/leading.rb +0 -24
  148. data/manual/text/line_wrapping.rb +0 -60
  149. data/manual/text/paragraph_indentation.rb +0 -31
  150. data/manual/text/positioned_text.rb +0 -37
  151. data/manual/text/registering_families.rb +0 -51
  152. data/manual/text/rendering_and_color.rb +0 -36
  153. data/manual/text/right_to_left_text.rb +0 -54
  154. data/manual/text/rotation.rb +0 -52
  155. data/manual/text/single_usage.rb +0 -36
  156. data/manual/text/text.rb +0 -75
  157. data/manual/text/text_box_excess.rb +0 -35
  158. data/manual/text/text_box_extensions.rb +0 -48
  159. data/manual/text/text_box_overflow.rb +0 -51
  160. data/manual/text/utf8.rb +0 -27
  161. data/manual/text/win_ansi_charset.rb +0 -62
  162. data/prawn.gemspec +0 -51
  163. data/spec/data/curves.pdf +0 -66
  164. data/spec/extensions/encoding_helpers.rb +0 -11
  165. data/spec/prawn/document/bounding_box_spec.rb +0 -550
  166. data/spec/prawn/document/column_box_spec.rb +0 -75
  167. data/spec/prawn/document/security_spec.rb +0 -176
  168. data/spec/prawn/document_annotations_spec.rb +0 -76
  169. data/spec/prawn/document_destinations_spec.rb +0 -15
  170. data/spec/prawn/document_grid_spec.rb +0 -99
  171. data/spec/prawn/document_reference_spec.rb +0 -27
  172. data/spec/prawn/document_span_spec.rb +0 -44
  173. data/spec/prawn/document_spec.rb +0 -805
  174. data/spec/prawn/font_metric_cache_spec.rb +0 -54
  175. data/spec/prawn/font_spec.rb +0 -544
  176. data/spec/prawn/graphics/blend_mode_spec.rb +0 -63
  177. data/spec/prawn/graphics/transparency_spec.rb +0 -81
  178. data/spec/prawn/graphics_spec.rb +0 -872
  179. data/spec/prawn/graphics_stroke_styles_spec.rb +0 -229
  180. data/spec/prawn/image_handler_spec.rb +0 -53
  181. data/spec/prawn/images/jpg_spec.rb +0 -20
  182. data/spec/prawn/images/png_spec.rb +0 -283
  183. data/spec/prawn/images_spec.rb +0 -229
  184. data/spec/prawn/measurements_extensions_spec.rb +0 -24
  185. data/spec/prawn/outline_spec.rb +0 -512
  186. data/spec/prawn/repeater_spec.rb +0 -166
  187. data/spec/prawn/soft_mask_spec.rb +0 -74
  188. data/spec/prawn/stamp_spec.rb +0 -173
  189. data/spec/prawn/text/box_spec.rb +0 -1110
  190. data/spec/prawn/text/formatted/arranger_spec.rb +0 -466
  191. data/spec/prawn/text/formatted/box_spec.rb +0 -849
  192. data/spec/prawn/text/formatted/fragment_spec.rb +0 -343
  193. data/spec/prawn/text/formatted/line_wrap_spec.rb +0 -495
  194. data/spec/prawn/text/formatted/parser_spec.rb +0 -697
  195. data/spec/prawn/text_draw_text_spec.rb +0 -150
  196. data/spec/prawn/text_rendering_mode_spec.rb +0 -48
  197. data/spec/prawn/text_spacing_spec.rb +0 -95
  198. data/spec/prawn/text_spec.rb +0 -603
  199. data/spec/prawn/text_with_inline_formatting_spec.rb +0 -35
  200. data/spec/prawn/transformation_stack_spec.rb +0 -66
  201. data/spec/prawn/view_spec.rb +0 -63
  202. data/spec/prawn_manual_spec.rb +0 -35
  203. data/spec/spec_helper.rb +0 -48
@@ -16,12 +16,8 @@ require_relative 'graphics/transformation'
16
16
  require_relative 'graphics/patterns'
17
17
 
18
18
  module Prawn
19
- # Implements the drawing facilities for Prawn::Document.
19
+ # Implements the drawing facilities for {Prawn::Document}.
20
20
  # Use this to draw the most beautiful imaginable things.
21
- #
22
- # This file lifts and modifies several of PDF::Writer's graphics functions
23
- # ruby-pdf.rubyforge.org
24
- #
25
21
  module Graphics
26
22
  include BlendMode
27
23
  include Color
@@ -38,12 +34,20 @@ module Prawn
38
34
  # Low level drawing operations must map the point to absolute coords! #
39
35
  #######################################################################
40
36
 
41
- # Moves the drawing position to a given point. The point can be
42
- # specified as a tuple or a flattened argument list
37
+ # Moves the drawing position to a given point. The point can be specified as
38
+ # a tuple or a flattened argument list.
43
39
  #
44
- # pdf.move_to [100,50]
45
- # pdf.move_to(100,50)
40
+ # @example
41
+ # pdf.move_to [100, 50]
42
+ # pdf.move_to(100, 50)
46
43
  #
44
+ # @overload move_to(point)
45
+ # @param point [Array(Number, Number)]
46
+ # @return [void]
47
+ # @overload move_to(x, y)
48
+ # @param x [Number]
49
+ # @param y [Number]
50
+ # @return [void]
47
51
  def move_to(*point)
48
52
  xy = PDF::Core.real_params(map_to_absolute(point))
49
53
  renderer.add_content("#{xy} m")
@@ -52,9 +56,17 @@ module Prawn
52
56
  # Draws a line from the current drawing position to the specified point.
53
57
  # The destination may be described as a tuple or a flattened list:
54
58
  #
55
- # pdf.line_to [50,50]
56
- # pdf.line_to(50,50)
57
- #
59
+ # @example
60
+ # pdf.line_to [50, 50]
61
+ # pdf.line_to(50, 50)
62
+ #
63
+ # @overload line_to(point)
64
+ # @param point [Array(Number, Number)]
65
+ # @return [void]
66
+ # @overload line_to(x, y)
67
+ # @param x [Number]
68
+ # @param y [Number]
69
+ # @return [void]
58
70
  def line_to(*point)
59
71
  xy = PDF::Core.real_params(map_to_absolute(point))
60
72
  renderer.add_content("#{xy} l")
@@ -63,27 +75,36 @@ module Prawn
63
75
  # Draws a Bezier curve from the current drawing position to the
64
76
  # specified point, bounded by two additional points.
65
77
  #
66
- # pdf.curve_to [100,100], :bounds => [[90,90],[75,75]]
78
+ # @example
79
+ # pdf.curve_to [100, 100], bounds: [[90, 90], [75, 75]]
67
80
  #
81
+ # @param dest [Array(Number, Number)]
82
+ # @param options [Hash]
83
+ # @option options :bounds [Array(Array(Number, Number), Array(Number, Number))]
84
+ # @return [void]
68
85
  def curve_to(dest, options = {})
69
86
  options[:bounds] || raise(
70
87
  Prawn::Errors::InvalidGraphicsPath,
71
- 'Bounding points for bezier curve must be specified ' \
72
- 'as :bounds => [[x1,y1],[x2,y2]]'
88
+ 'Bounding points for bezier curve must be specified as :bounds => [[x1,y1],[x2,y2]]',
73
89
  )
74
90
 
75
91
  curve_points = PDF::Core.real_params(
76
- (options[:bounds] << dest).flat_map { |e| map_to_absolute(e) }
92
+ (options[:bounds] << dest).flat_map { |e| map_to_absolute(e) },
77
93
  )
78
94
 
79
95
  renderer.add_content("#{curve_points} c")
80
96
  end
81
97
 
82
- # Draws a rectangle given <tt>point</tt>, <tt>width</tt> and
83
- # <tt>height</tt>. The rectangle is bounded by its upper-left corner.
98
+ # Draws a rectangle given `point`, `width and `height`. The rectangle is
99
+ # bounded by its upper-left corner.
84
100
  #
85
- # pdf.rectangle [300,300], 100, 200
101
+ # @example
102
+ # pdf.rectangle [300, 300], 100, 200
86
103
  #
104
+ # @param point [Array(Number, Number)]
105
+ # @param width [Number]
106
+ # @param height [Number]
107
+ # @return [void]
87
108
  def rectangle(point, width, height)
88
109
  x, y = map_to_absolute(point)
89
110
  box = PDF::Core.real_params([x, y - height, width, height])
@@ -91,16 +112,21 @@ module Prawn
91
112
  renderer.add_content("#{box} re")
92
113
  end
93
114
 
94
- # Draws a rounded rectangle given <tt>point</tt>, <tt>width</tt> and
95
- # <tt>height</tt> and <tt>radius</tt> for the rounded corner. The rectangle
96
- # is bounded by its upper-left corner.
115
+ # Draws a rounded rectangle given `point`, `width`, `height`, and `radius`
116
+ # for the rounded corner. The rectangle is bounded by its upper-left corner.
97
117
  #
98
- # pdf.rounded_rectangle [300,300], 100, 200, 10
118
+ # @example
119
+ # pdf.rounded_rectangle [300, 300], 100, 200, 10
99
120
  #
121
+ # @param point [Array(Number, Number)]
122
+ # @param width [Number]
123
+ # @param height [Number]
124
+ # @param radius [Number]
125
+ # @return [void]
100
126
  def rounded_rectangle(point, width, height, radius)
101
127
  x, y = point
102
128
  rounded_polygon(
103
- radius, point, [x + width, y], [x + width, y - height], [x, y - height]
129
+ radius, point, [x + width, y], [x + width, y - height], [x, y - height],
104
130
  )
105
131
  end
106
132
 
@@ -108,8 +134,10 @@ module Prawn
108
134
  # Higher level functions: May use relative coords #
109
135
  ###########################################################
110
136
 
111
- # Sets line thickness to the <tt>width</tt> specified.
137
+ # Sets line thickness to the `width` specified.
112
138
  #
139
+ # @param width [Number]
140
+ # @return [void]
113
141
  def line_width=(width)
114
142
  self.current_line_width = width
115
143
  write_line_width
@@ -117,12 +145,18 @@ module Prawn
117
145
 
118
146
  # When called without an argument, returns the current line thickness.
119
147
  # When called with an argument, sets the line thickness to the specified
120
- # value (in PDF points)
148
+ # value (in PDF points).
121
149
  #
150
+ # @example
122
151
  # pdf.line_width #=> 1
123
152
  # pdf.line_width(5)
124
153
  # pdf.line_width #=> 5
125
154
  #
155
+ # @overload line_width()
156
+ # @return [Number]
157
+ # @overload line_width(width)
158
+ # @param width [Number]
159
+ # @return [void]
126
160
  def line_width(width = nil)
127
161
  if width
128
162
  self.line_width = width
@@ -132,41 +166,64 @@ module Prawn
132
166
  end
133
167
 
134
168
  # Draws a line from one point to another. Points may be specified as
135
- # tuples or flattened argument list:
136
- #
137
- # pdf.line [100,100], [200,250]
138
- # pdf.line(100,100,200,250)
169
+ # tuples or flattened argument list.
139
170
  #
171
+ # @example
172
+ # pdf.line [100, 100], [200, 250]
173
+ # pdf.line(100, 100, 200, 250)
174
+ #
175
+ # @overload line(point1, point2)
176
+ # @param point1 [Array(Number, Number)]
177
+ # @param point2 [Array(Number, Number)]
178
+ # @return [void]
179
+ # @overload line(x1, y1, x2, y2)
180
+ # @param x1 [Number]
181
+ # @param y1 [Number]
182
+ # @param x2 [Number]
183
+ # @param y2 [Number]
184
+ # @return [void]
140
185
  def line(*points)
141
186
  x0, y0, x1, y1 = points.flatten
142
187
  move_to(x0, y0)
143
188
  line_to(x1, y1)
144
189
  end
145
190
 
146
- # Draws a horizontal line from <tt>x1</tt> to <tt>x2</tt> at the
147
- # current <tt>y</tt> position, or the position specified by the :at option.
191
+ # Draws a horizontal line from `x1` to `x2` at the current {Document#y}
192
+ # position, or the position specified by the `:at` option.
148
193
  #
149
- # # draw a line from [25, 75] to [100, 75]
150
- # horizontal_line 25, 100, :at => 75
194
+ # @example Draw a line from `[25, 75]` to `[100, 75]`
195
+ # horizontal_line 25, 100, at: 75
151
196
  #
197
+ # @param x1 [Number]
198
+ # @param x2 [Number]
199
+ # @param options [Hash]
200
+ # @option options :at [Number]
201
+ # @return [void]
152
202
  def horizontal_line(x1, x2, options = {})
153
- y1 = options[:at] || y - bounds.absolute_bottom
203
+ y1 = options[:at] || (y - bounds.absolute_bottom)
154
204
 
155
205
  line(x1, y1, x2, y1)
156
206
  end
157
207
 
158
208
  # Draws a horizontal line from the left border to the right border of the
159
- # bounding box at the current <tt>y</tt> position.
209
+ # bounding box at the current {Document#y} position.
160
210
  #
211
+ # @return [void]
161
212
  def horizontal_rule
162
213
  horizontal_line(bounds.left, bounds.right)
163
214
  end
164
215
 
165
- # Draws a vertical line at the x cooordinate given by :at from y1 to y2.
216
+ # Draws a vertical line at the x coordinate given by `:at` from `y1` to
217
+ # `y2`.
166
218
  #
167
- # # draw a line from [25, 100] to [25, 300]
168
- # vertical_line 100, 300, :at => 25
219
+ # @example Draw a line from `[25, 100]` to `[25, 300]`
220
+ # vertical_line 100, 300, at: 25
169
221
  #
222
+ # @param y1 [Number]
223
+ # @param y2 [Number]
224
+ # @param params [Hash]
225
+ # @option params :at [Number]
226
+ # @return [void]
170
227
  def vertical_line(y1, y2, params)
171
228
  line(params[:at], y1, params[:at], y2)
172
229
  end
@@ -174,8 +231,14 @@ module Prawn
174
231
  # Draws a Bezier curve between two points, bounded by two additional
175
232
  # points
176
233
  #
177
- # pdf.curve [50,100], [100,100], :bounds => [[90,90],[75,75]]
234
+ # @example
235
+ # pdf.curve [50, 100], [100, 100], bounds: [[90, 90], [75, 75]]
178
236
  #
237
+ # @param origin [Array(Number, Number)]
238
+ # @param dest [Array(Number, Number)]
239
+ # @param options [Hash]
240
+ # @option options :bounds [Array(Array(Number, Number), Array(Number, Number))]
241
+ # @return [void]
179
242
  def curve(origin, dest, options = {})
180
243
  move_to(*origin)
181
244
  curve_to(dest, options)
@@ -183,27 +246,33 @@ module Prawn
183
246
 
184
247
  # This constant is used to approximate a symmetrical arc using a cubic
185
248
  # Bezier curve.
186
- #
187
249
  KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0)
188
250
 
189
- # Draws a circle of radius <tt>radius</tt> with the centre-point at
190
- # <tt>point</tt> as a complete subpath. The drawing point will be moved to
251
+ # Draws a circle of radius `radius` with the centre-point at
252
+ # `point` as a complete subpath. The drawing point will be moved to
191
253
  # the centre-point upon completion of the drawing the circle.
192
254
  #
193
- # pdf.circle [100,100], 25
255
+ # @example
256
+ # pdf.circle [100, 100], 25
194
257
  #
258
+ # @param center [Array(Number, Number)]
259
+ # @param radius [Number]
260
+ # @return [void]
195
261
  def circle(center, radius)
196
262
  ellipse(center, radius, radius)
197
263
  end
198
264
 
199
- # Draws an ellipse of +x+ radius <tt>radius1</tt> and +y+ radius
200
- # <tt>radius2</tt> with the centre-point at <tt>point</tt> as a complete
201
- # subpath. The drawing point will be moved to the centre-point upon
202
- # completion of the drawing the ellipse.
265
+ # Draws an ellipse of `x` radius `radius1` and `y` radius `radius2` with the
266
+ # centre-point at `point` as a complete subpath. The drawing point will be
267
+ # moved to the centre-point upon completion of the drawing the ellipse.
203
268
  #
204
- # # draws an ellipse with x-radius 25 and y-radius 50
205
- # pdf.ellipse [100,100], 25, 50
269
+ # @example Draws an ellipse with x-radius 25 and y-radius 50
270
+ # pdf.ellipse [100, 100], 25, 50
206
271
  #
272
+ # @param point [Array(Number, Number)]
273
+ # @param radius1 [Number]
274
+ # @param radius2 [Number]
275
+ # @return [void]
207
276
  def ellipse(point, radius1, radius2 = radius1)
208
277
  x, y = point
209
278
  l1 = radius1 * KAPPA
@@ -212,137 +281,153 @@ module Prawn
212
281
  move_to(x + radius1, y)
213
282
 
214
283
  # Upper right hand corner
215
- curve_to [x, y + radius2],
216
- bounds: [[x + radius1, y + l2], [x + l1, y + radius2]]
284
+ curve_to(
285
+ [x, y + radius2],
286
+ bounds: [[x + radius1, y + l2], [x + l1, y + radius2]],
287
+ )
217
288
 
218
289
  # Upper left hand corner
219
- curve_to [x - radius1, y],
220
- bounds: [[x - l1, y + radius2], [x - radius1, y + l2]]
290
+ curve_to(
291
+ [x - radius1, y],
292
+ bounds: [[x - l1, y + radius2], [x - radius1, y + l2]],
293
+ )
221
294
 
222
295
  # Lower left hand corner
223
- curve_to [x, y - radius2],
224
- bounds: [[x - radius1, y - l2], [x - l1, y - radius2]]
296
+ curve_to(
297
+ [x, y - radius2],
298
+ bounds: [[x - radius1, y - l2], [x - l1, y - radius2]],
299
+ )
225
300
 
226
301
  # Lower right hand corner
227
- curve_to [x + radius1, y],
228
- bounds: [[x + l1, y - radius2], [x + radius1, y - l2]]
302
+ curve_to(
303
+ [x + radius1, y],
304
+ bounds: [[x + l1, y - radius2], [x + radius1, y - l2]],
305
+ )
229
306
 
230
307
  move_to(x, y)
231
308
  end
232
309
 
233
310
  # Draws a polygon from the specified points.
234
311
  #
235
- # # draws a snazzy triangle
312
+ # @example Draws a snazzy triangle
236
313
  # pdf.polygon [100,100], [100,200], [200,200]
237
314
  #
315
+ # @param points [Array<Array(Number, Number)>]
316
+ # @return [void]
238
317
  def polygon(*points)
239
- move_to points[0]
240
- (points[1..-1] << points[0]).each do |point|
318
+ move_to(points[0])
319
+ (points[1..] << points[0]).each do |point|
241
320
  line_to(*point)
242
321
  end
243
322
  # close the path
244
- renderer.add_content 'h'
323
+ renderer.add_content('h')
245
324
  end
246
325
 
247
326
  # Draws a rounded polygon from specified points using the radius to define
248
- # bezier curves
327
+ # bezier curves.
249
328
  #
250
- # # draws a rounded filled in polygon
329
+ # @example Draws a rounded filled in polygon
251
330
  # pdf.fill_and_stroke_rounded_polygon(
252
331
  # 10, [100, 250], [200, 300], [300, 250], [300, 150], [200, 100],
253
332
  # [100, 150]
254
333
  # )
334
+ #
335
+ # @param radius [Number]
336
+ # @param points [Array<Array(Number, Number)>]
337
+ # @return [void]
255
338
  def rounded_polygon(radius, *points)
256
- move_to point_on_line(radius, points[1], points[0])
339
+ move_to(point_on_line(radius, points[1], points[0]))
257
340
  sides = points.size
258
341
  points << points[0] << points[1]
259
342
  sides.times do |i|
260
343
  rounded_vertex(radius, points[i], points[i + 1], points[i + 2])
261
344
  end
262
345
  # close the path
263
- renderer.add_content 'h'
346
+ renderer.add_content('h')
264
347
  end
265
348
 
266
349
  # Creates a rounded vertex for a line segment used for building a rounded
267
350
  # polygon requires a radius to define bezier curve and three points. The
268
351
  # first two points define the line segment and the third point helps define
269
352
  # the curve for the vertex.
353
+ #
354
+ # @param radius [Number]
355
+ # @param points [Array(Array(Number, Number), Array(Number, Number), Array(Number, Number))]
356
+ # @return [void]
270
357
  def rounded_vertex(radius, *points)
271
358
  radial_point1 = point_on_line(radius, points[0], points[1])
272
359
  bezier_point1 = point_on_line(
273
- (radius - radius * KAPPA),
360
+ (radius - (radius * KAPPA)),
274
361
  points[0],
275
- points[1]
362
+ points[1],
276
363
  )
277
364
  radial_point2 = point_on_line(radius, points[2], points[1])
278
365
  bezier_point2 = point_on_line(
279
- (radius - radius * KAPPA),
366
+ (radius - (radius * KAPPA)),
280
367
  points[2],
281
- points[1]
368
+ points[1],
282
369
  )
283
370
  line_to(radial_point1)
284
371
  curve_to(radial_point2, bounds: [bezier_point1, bezier_point2])
285
372
  end
286
373
 
287
374
  # Strokes the current path. If a block is provided, yields to the block
288
- # before closing the path. See Graphics::Color for color details.
375
+ # before closing the path. See {Graphics::Color} for color details.
289
376
  #
377
+ # @yield
378
+ # @return [void]
290
379
  def stroke
291
380
  yield if block_given?
292
- renderer.add_content 'S'
381
+ renderer.add_content('S')
293
382
  end
294
383
 
295
- # Closes and strokes the current path. If a block is provided, yields to
296
- # the block before closing the path. See Graphics::Color for color details.
384
+ # Closes and strokes the current path. If a block is provided, yields to the
385
+ # block before closing the path. See {Graphics::Color} for color details.
297
386
  #
387
+ # @yield
388
+ # @return [void]
298
389
  def close_and_stroke
299
390
  yield if block_given?
300
- renderer.add_content 's'
391
+ renderer.add_content('s')
301
392
  end
302
393
 
303
- # Draws and strokes a rectangle represented by the current bounding box
394
+ # Draws and strokes a rectangle represented by the current bounding box.
304
395
  #
396
+ # @return [void]
305
397
  def stroke_bounds
306
- stroke_rectangle bounds.top_left, bounds.width, bounds.height
398
+ stroke_rectangle(bounds.top_left, bounds.width, bounds.height)
307
399
  end
308
400
 
309
401
  # Draws and strokes X and Y axes rulers beginning at the current bounding
310
402
  # box origin (or at a custom location).
311
403
  #
312
- # == Options
313
- #
314
- # +:at+::
315
- # Origin of the X and Y axes (default: [0, 0] = origin of the bounding
316
- # box)
317
- #
318
- # +:width+::
319
- # Length of the X axis (default: width of the bounding box)
320
- #
321
- # +:height+::
322
- # Length of the Y axis (default: height of the bounding box)
323
- #
324
- # +:step_length+::
325
- # Length of the step between markers (default: 100)
326
- #
327
- # +:negative_axes_length+::
328
- # Length of the negative parts of the axes (default: 20)
329
- #
330
- # +:color+:
404
+ # @param options [Hash]
405
+ # @option options :at [Array(Number, Number)] ([0, 0], origin of the bounding box)
406
+ # Origin of the X and Y axes.
407
+ # @option options :width [Number] (width of the bounding box)
408
+ # Length of the X axis.
409
+ # @option options :height [Number] (height of the bounding box)
410
+ # Length of the Y axis.
411
+ # @option options :step_length [Number] (100)
412
+ # Length of the step between markers.
413
+ # @option options :negative_axes_length [Number] (20)
414
+ # Length of the negative parts of the axes.
415
+ # @option options :color [String, Array<Number>]
331
416
  # The color of the axes and the text.
332
- #
417
+ # @return [void]
333
418
  def stroke_axis(options = {})
334
419
  options = {
335
420
  at: [0, 0],
336
- height: bounds.height.to_i - (options[:at] || [0, 0])[1],
337
- width: bounds.width.to_i - (options[:at] || [0, 0])[0],
421
+ height: bounds.height - (options[:at] || [0, 0])[1],
422
+ width: bounds.width - (options[:at] || [0, 0])[0],
338
423
  step_length: 100,
339
424
  negative_axes_length: 20,
340
- color: '000000'
425
+ color: '000000',
341
426
  }.merge(options)
342
427
 
343
428
  Prawn.verify_options(
344
429
  %i[at width height step_length negative_axes_length color],
345
- options
430
+ options,
346
431
  )
347
432
 
348
433
  save_graphics_state do
@@ -353,12 +438,12 @@ module Prawn
353
438
  stroke_horizontal_line(
354
439
  options[:at][0] - options[:negative_axes_length],
355
440
  options[:at][0] + options[:width],
356
- at: options[:at][1]
441
+ at: options[:at][1],
357
442
  )
358
443
  stroke_vertical_line(
359
444
  options[:at][1] - options[:negative_axes_length],
360
445
  options[:at][1] + options[:height],
361
- at: options[:at][0]
446
+ at: options[:at][0],
362
447
  )
363
448
  undash
364
449
 
@@ -370,7 +455,7 @@ module Prawn
370
455
  draw_text(
371
456
  point,
372
457
  at: [options[:at][0] + point - 5, options[:at][1] - 10],
373
- size: 7
458
+ size: 7,
374
459
  )
375
460
  end
376
461
 
@@ -380,33 +465,41 @@ module Prawn
380
465
  draw_text(
381
466
  point,
382
467
  at: [options[:at][0] - 17, options[:at][1] + point - 2],
383
- size: 7
468
+ size: 7,
384
469
  )
385
470
  end
386
471
  end
387
472
  end
388
473
 
389
- # Closes and fills the current path. See Graphics::Color for color details.
474
+ # Closes and fills the current path. See {Graphics::Color} for color details.
390
475
  #
391
- # If the option :fill_rule => :even_odd is specified, Prawn will use the
476
+ # If the option `fill_rule: :even_odd` is specified, Prawn will use the
392
477
  # even-odd rule to fill the path. Otherwise, the nonzero winding number rule
393
478
  # will be used. See the PDF reference, "Graphics -> Path Construction and
394
479
  # Painting -> Clipping Path Operators" for details on the difference.
395
480
  #
481
+ # @param options [Hash]
482
+ # @option options :fill_rule [Symbol]
483
+ # @yield
484
+ # @return [void]
396
485
  def fill(options = {})
397
486
  yield if block_given?
398
487
  renderer.add_content(options[:fill_rule] == :even_odd ? 'f*' : 'f')
399
488
  end
400
489
 
401
490
  # Closes, fills, and strokes the current path. If a block is provided,
402
- # yields to the block before closing the path. See Graphics::Color for
491
+ # yields to the block before closing the path. See {Graphics::Color} for
403
492
  # color details.
404
493
  #
405
- # If the option :fill_rule => :even_odd is specified, Prawn will use the
494
+ # If the option `fill_rule: :even_odd` is specified, Prawn will use the
406
495
  # even-odd rule to fill the path. Otherwise, the nonzero winding number rule
407
496
  # will be used. See the PDF reference, "Graphics -> Path Construction and
408
497
  # Painting -> Clipping Path Operators" for details on the difference.
409
498
  #
499
+ # @param options [Hash]
500
+ # @option options :fill_rule [Symbol]
501
+ # @yield
502
+ # @return [void]
410
503
  def fill_and_stroke(options = {})
411
504
  yield if block_given?
412
505
  renderer.add_content(options[:fill_rule] == :even_odd ? 'b*' : 'b')
@@ -415,214 +508,231 @@ module Prawn
415
508
  # Closes the current path.
416
509
  #
417
510
  def close_path
418
- renderer.add_content 'h'
511
+ renderer.add_content('h')
419
512
  end
420
513
 
421
- ##
422
- # :method: stroke_rectangle
514
+ # @!method fill_rectangle(point, width, height)
515
+ # Draws and fills a rectangle given `point`, `width`, and `height`. The
516
+ # rectangle is bounded by its upper-left corner.
423
517
  #
424
- # Draws and strokes a rectangle given +point+, +width+ and +height+. The
425
- # rectangle is bounded by its upper-left corner.
426
- #
427
- # :call-seq:
428
- # stroke_rectangle(point,width,height)
518
+ # @param point [Array(Number, Number)]
519
+ # @param width [Number]
520
+ # @param height [Number]
521
+ # @return [void]
429
522
 
430
- ##
431
- # :method: fill_rectangle
432
- #
433
- # Draws and fills ills a rectangle given +point+, +width+ and +height+. The
434
- # rectangle is bounded by its upper-left corner.
523
+ # @!method stroke_rectangle(point, width, height)
524
+ # Draws and strokes a rectangle given `point`, `width`, and `height`. The
525
+ # rectangle is bounded by its upper-left corner.
435
526
  #
436
- # :call-seq:
437
- # fill_rectangle(point,width,height)
527
+ # @param point [Array(Number, Number)]
528
+ # @param width [Number]
529
+ # @param height [Number]
530
+ # @return [void]
438
531
 
439
- ##
440
- # :method: fill_and_stroke_rectangle
441
- #
442
- # Draws, fills, and strokes a rectangle given +point+, +width+ and +height+.
443
- # The rectangle is bounded by its upper-left corner.
532
+ # @!method fill_and_stroke_rectangle(point, width, height)
533
+ # Draws, fills, and strokes a rectangle given `point`, `width`, and
534
+ # `height`. The rectangle is bounded by its upper-left corner.
444
535
  #
445
- # :call-seq:
446
- # fill_and_stroke_rectangle(point,width,height)
536
+ # @param point [Array(Number, Number)]
537
+ # @param width [Number]
538
+ # @param height [Number]
539
+ # @return [void]
447
540
 
448
- ##
449
- # :method: stroke_rounded_rectangle
541
+ # @!method fill_rounded_rectangle(point, width, height, radius)
450
542
  #
451
- # Draws and strokes a rounded rectangle given +point+, +width+ and +height+
452
- # and +radius+ for the rounded corner. The rectangle is bounded by its
453
- # upper-left corner.
543
+ # Draws and fills a rounded rectangle given `point`, `width` and `height`,
544
+ # and `radius` for the rounded corner. The rectangle is bounded by its
545
+ # upper-left corner.
454
546
  #
455
- # :call-seq:
456
- # stroke_rounded_rectangle(point,width,height,radius)
547
+ # @param point [Array(Number, Number)]
548
+ # @param width [Number]
549
+ # @param height [Number]
550
+ # @param radius [Number]
551
+ # @return [void]
457
552
 
458
- ##
459
- # :method: fill_rounded_rectangle
553
+ # @!method stroke_rounded_rectangle(point, width, height, radius)
554
+ # Draws and strokes a rounded rectangle given `point`, `width` and
555
+ # `height`, and `radius` for the rounded corner. The rectangle is bounded
556
+ # by its upper-left corner.
460
557
  #
461
- # Draws and fills a rounded rectangle given +point+, +width+ and +height+
462
- # and +radius+ for the rounded corner. The rectangle is bounded by its
463
- # upper-left corner.
464
- #
465
- # :call-seq:
466
- # fill_rounded_rectangle(point,width,height,radius)
558
+ # @param point [Array(Number, Number)]
559
+ # @param width [Number]
560
+ # @param height [Number]
561
+ # @param radius [Number]
562
+ # @return [void]
467
563
 
468
- ##
469
- # :method: stroke_and_fill_rounded_rectangle
564
+ # @!method fill_and_stroke_rounded_rectangle(point, width, height, radius)
470
565
  #
471
- # Draws, fills, and strokes a rounded rectangle given +point+, +width+ and
472
- # +height+ and +radius+ for the rounded corner. The rectangle is bounded by
473
- # its upper-left corner.
566
+ # Draws, fills, and strokes a rounded rectangle given `point`, `width`,
567
+ # and `height` and `radius` for the rounded corner. The rectangle is
568
+ # bounded by its upper-left corner.
474
569
  #
475
- # :call-seq:
476
- # stroke_and_fill_rounded_rectangle(point,width,height,radius)
570
+ # @param point [Array(Number, Number)]
571
+ # @param width [Number]
572
+ # @param height [Number]
573
+ # @param radius [Number]
574
+ # @return [void]
477
575
 
478
- ##
479
- # :method: stroke_line
576
+ # @!method stroke_line(*points)
480
577
  #
481
- # Strokes a line from one point to another. Points may be specified as
482
- # tuples or flattened argument list.
578
+ # Strokes a line from one point to another. Points may be specified as
579
+ # tuples or flattened argument list.
483
580
  #
484
- # :call-seq:
485
- # stroke_line(*points)
581
+ # @overload line(point1, point2)
582
+ # @param point1 [Array(Number, Number)]
583
+ # @param point2 [Array(Number, Number)]
584
+ # @return [void]
585
+ # @overload line(x1, y1, x2, y2)
586
+ # @param x1 [Number]
587
+ # @param y1 [Number]
588
+ # @param x2 [Number]
589
+ # @param y2 [Number]
590
+ # @return [void]
486
591
 
487
- ##
488
- # :method: stroke_horizontal_line
592
+ # @!method stroke_horizontal_line(x1, x2, options = {})
489
593
  #
490
- # Strokes a horizontal line from +x1+ to +x2+ at the current y position, or
491
- # the position specified by the :at option.
594
+ # Strokes a horizontal line from `x1` to `x2` at the current y position,
595
+ # or the position specified by the :at option.
492
596
  #
493
- # :call-seq:
494
- # stroke_horizontal_line(x1,x2,options={})
597
+ # @param x1 [Number]
598
+ # @param x2 [Number]
599
+ # @param options [Hash]
600
+ # @option options :at [Number]
601
+ # @return [void]
495
602
 
496
- ##
497
- # :method: stroke_horizontal_rule
603
+ # @!method stroke_horizontal_rule
498
604
  #
499
- # Strokes a horizontal line from the left border to the right border of the
500
- # bounding box at the current y position.
605
+ # Strokes a horizontal line from the left border to the right border of
606
+ # the bounding box at the current y position.
501
607
  #
502
- # :call-seq:
503
- # stroke_horizontal_rule
608
+ # @return [void]
504
609
 
505
- ##
506
- # :method: stroke_vertical_line
610
+ # @!method stroke_vertical_line(y1, y2, params)
507
611
  #
508
- # Strokes a vertical line at the x coordinate given by :at from y1 to y2.
612
+ # Strokes a vertical line at the x coordinate given by `:at` from `y1` to
613
+ # `y2`.
509
614
  #
510
- # :call-seq:
511
- # stroke_vertical_line(y1,y2,params)
615
+ # @param y1 [Number]
616
+ # @param y2 [Number]
617
+ # @param params [Hash]
618
+ # @option params :at [Number]
619
+ # @return [void]
512
620
 
513
- ##
514
- # :method: stroke_curve
621
+ # @!method stroke_curve(origin, dest, options = {})
515
622
  #
516
- # Strokes a Bezier curve between two points, bounded by two additional
517
- # points.
623
+ # Strokes a Bezier curve between two points, bounded by two additional
624
+ # points.
518
625
  #
519
- # :call-seq:
520
- # stroke_curve(origin,dest,options={})
626
+ # @param origin [Array(Number, Number)]
627
+ # @param dest [Array(Number, Number)]
628
+ # @param options [Hash]
629
+ # @option options :bounds [Array(Array(Number, Number), Array(Number, Number))]
630
+ # @return [void]
521
631
 
522
- ##
523
- # :method: stroke_circle
632
+ # @!method: stroke_circle(center, radius)
524
633
  #
525
- # Draws and strokes a circle of radius +radius+ with the centre-point at
526
- # +point+.
634
+ # Draws and strokes a circle of radius `radius` with the centre-point at
635
+ # `point`.
527
636
  #
528
- # :call-seq:
529
- # stroke_circle(center,radius)
637
+ # @param center [Array(Number, Number)]
638
+ # @param radius [Number]
639
+ # @return [void]
530
640
 
531
- ##
532
- # :method: fill_circle
641
+ # @!method fill_circle(center, radius)
533
642
  #
534
- # Draws and fills a circle of radius +radius+ with the centre-point at
535
- # +point+.
643
+ # Draws and fills a circle of radius `radius` with the centre-point at
644
+ # `point`.
536
645
  #
537
- # :call-seq:
538
- # fill_circle(center,radius)
646
+ # @param center [Array(Number, Number)]
647
+ # @param radius [Number]
648
+ # @return [void]
539
649
 
540
- ##
541
- # :method: fill_and_stroke_circle
650
+ # @!method fill_and_stroke_circle(center, radius)
542
651
  #
543
- # Draws, strokes, and fills a circle of radius +radius+ with the
544
- # centre-point at +point+.
652
+ # Draws, strokes, and fills a circle of radius `radius` with the
653
+ # centre-point at `point`.
545
654
  #
546
- # :call-seq:
547
- # fill_and_stroke_circle(center,radius)
655
+ # @param center [Array(Number, Number)]
656
+ # @param radius [Number]
657
+ # @return [void]
548
658
 
549
- ##
550
- # :method: stroke_ellipse
659
+ # @!method stroke_ellipse(point, radius1, radius2 = radius1)
551
660
  #
552
- # Draws and strokes an ellipse of x radius +r1+ and y radius +r2+ with the
553
- # centre-point at +point+.
661
+ # Draws and strokes an ellipse of x radius `r1` and y radius `r2` with the
662
+ # centre-point at `point`.
554
663
  #
555
- # :call-seq:
556
- # stroke_ellipse(point, r1, r2 = r1)
664
+ # @param point [Array(Number, Number)]
665
+ # @param radius1 [Number]
666
+ # @param radius2 [Number]
667
+ # @return [void]
557
668
 
558
- ##
559
- # :method: fill_ellipse
669
+ # @!method fill_ellipse(point, radius1, radius2 = radius1)
560
670
  #
561
- # Draws and fills an ellipse of x radius +r1+ and y radius +r2+ with the
562
- # centre-point at +point+.
671
+ # Draws and fills an ellipse of x radius `r1` and y radius `r2` with the
672
+ # centre-point at `point`.
563
673
  #
564
- # :call-seq:
565
- # fill_ellipse(point, r1, r2 = r1)
674
+ # @param point [Array(Number, Number)]
675
+ # @param radius1 [Number]
676
+ # @param radius2 [Number]
677
+ # @return [void]
566
678
 
567
- ##
568
- # :method: fill_and_stroke_ellipse
679
+ # @!method fill_and_stroke_ellipse(point, radius1, radius2 = radius1)
569
680
  #
570
- # Draws, strokes, and fills an ellipse of x radius +r1+ and y radius +r2+
571
- # with the centre-point at +point+.
681
+ # Draws, strokes, and fills an ellipse of x radius `r1` and y radius `r2`
682
+ # with the centre-point at `point`.
572
683
  #
573
- # :call-seq:
574
- # fill_and_stroke_ellipse(point, r1, r2 = r1)
684
+ # @param point [Array(Number, Number)]
685
+ # @param radius1 [Number]
686
+ # @param radius2 [Number]
687
+ # @return [void]
575
688
 
576
- ##
577
- # :method: stroke_polygon
689
+ # @!method stroke_polygon(*points)
578
690
  #
579
691
  # Draws and strokes a polygon from the specified points.
580
692
  #
581
- # :call-seq:
582
- # stroke_polygon(*points)
693
+ # @param points [Array<Array(Number, Number)>]
694
+ # @return [void]
583
695
 
584
- ##
585
- # :method: fill_polygon
696
+ # @!method fill_polygon(*points)
586
697
  #
587
- # Draws and fills a polygon from the specified points.
698
+ # Draws and fills a polygon from the specified points.
588
699
  #
589
- # :call-seq:
590
- # fill_polygon(*points)
700
+ # @param points [Array<Array(Number, Number)>]
701
+ # @return [void]
591
702
 
592
- ##
593
- # :method: fill_and_stroke_polygon
703
+ # @!method fill_and_stroke_polygon(*points)
594
704
  #
595
- # Draws, strokes, and fills a polygon from the specified points.
705
+ # Draws, strokes, and fills a polygon from the specified points.
596
706
  #
597
- # :call-seq:
598
- # fill_and_stroke_polygon(*points)
707
+ # @param points [Array<Array(Number, Number)>]
708
+ # @return [void]
599
709
 
600
- ##
601
- # :method: stroke_rounded_polygon
710
+ # @!method stroke_rounded_polygon(radius, *points)
602
711
  #
603
- # Draws and strokes a rounded polygon from specified points, using +radius+
604
- # to define Bezier curves.
712
+ # Draws and strokes a rounded polygon from specified points, using
713
+ # `radius` to define Bezier curves.
605
714
  #
606
- # :call-seq:
607
- # stroke_rounded_polygon(radius, *points)
715
+ # @param radius [Number]
716
+ # @param points [Array<Array(Number, Number)>]
717
+ # @return [void]
608
718
 
609
- ##
610
- # :method: fill_rounded_polygon
719
+ # @!method fill_rounded_polygon(radius, *points)
611
720
  #
612
- # Draws and fills a rounded polygon from specified points, using +radius+ to
613
- # define Bezier curves.
721
+ # Draws and fills a rounded polygon from specified points, using `radius`
722
+ # to define Bezier curves.
614
723
  #
615
- # :call-seq:
616
- # fill_rounded_polygon(radius, *points)
724
+ # @param radius [Number]
725
+ # @param points [Array<Array(Number, Number)>]
726
+ # @return [void]
617
727
 
618
- ##
619
- # :method: fill_and_stroke_rounded_polygon
728
+ # @!method fill_and_stroke_rounded_polygon(radius, *points)
620
729
  #
621
- # Draws, strokes, and fills a rounded polygon from specified points, using
622
- # +radius+ to define Bezier curves.
730
+ # Draws, strokes, and fills a rounded polygon from specified points, using
731
+ # `radius` to define Bezier curves.
623
732
  #
624
- # :call-seq:
625
- # fill_and_stroke_rounded_polygon(radius, *points)
733
+ # @param radius [Number]
734
+ # @param points [Array<Array(Number, Number)>]
735
+ # @return [void]
626
736
 
627
737
  ops = %w[fill stroke fill_and_stroke]
628
738
  shapes = %w[
@@ -671,10 +781,10 @@ module Prawn
671
781
  # away from the second point defining the line segement
672
782
  def point_on_line(distance_from_end, *points)
673
783
  x0, y0, x1, y1 = points.flatten
674
- length = Math.sqrt((x1 - x0)**2 + (y1 - y0)**2)
784
+ length = Math.sqrt(((x1 - x0)**2) + ((y1 - y0)**2))
675
785
  p = (length - distance_from_end) / length
676
- xr = x0 + p * (x1 - x0)
677
- yr = y0 + p * (y1 - y0)
786
+ xr = x0 + (p * (x1 - x0))
787
+ yr = y0 + (p * (y1 - y0))
678
788
  [xr, yr]
679
789
  end
680
790
  end