Module: Prawn::Graphics
- Includes:
- CapStyle, Color, Dash, JoinStyle, Transparency
- Included in:
- Document
- Defined in:
- lib/prawn/graphics.rb,
lib/prawn/graphics/dash.rb,
lib/prawn/graphics/color.rb,
lib/prawn/graphics/cap_style.rb,
lib/prawn/graphics/join_style.rb,
lib/prawn/graphics/transparency.rb
Overview
Implements the drawing facilities for Prawn::Document. Use this to draw the most beautiful imaginable things.
This file lifts and modifies several of PDF::Writer’s graphics functions ruby-pdf.rubyforge.org
Defined Under Namespace
Modules: CapStyle, Color, Dash, JoinStyle, Transparency
Constant Summary collapse
- KAPPA =
This constant is used to approximate a symmetrical arc using a cubic Bezier curve.
4.0 * ((Math.sqrt(2) - 1.0) / 3.0)
Constants included from JoinStyle
Constants included from CapStyle
Instance Method Summary collapse
-
#circle_at(point, options) ⇒ Object
Draws a circle of radius
:radius
with the centre-point atpoint
as a complete subpath. -
#curve(origin, dest, options = {}) ⇒ Object
Draws a Bezier curve between two points, bounded by two additional points.
-
#curve_to(dest, options = {}) ⇒ Object
Draws a Bezier curve from the current drawing position to the specified point, bounded by two additional points.
-
#ellipse_at(point, r1, r2 = r1) ⇒ Object
Draws an ellipse of
x
radiusr1
andy
radiusr2
with the centre-point atpoint
as a complete subpath. -
#fill ⇒ Object
Fills and closes the current path.
-
#fill_and_stroke ⇒ Object
Fills, strokes, and closes the current path.
-
#horizontal_line(x1, x2, options = {}) ⇒ Object
Draws a horizontal line from
x1
tox2
at the currenty
position, or the position specified by the :at option. -
#horizontal_rule ⇒ Object
Draws a horizontal line from the left border to the right border of the bounding box at the current
y
position. -
#line(*points) ⇒ Object
Draws a line from one point to another.
-
#line_to(*point) ⇒ Object
Draws a line from the current drawing position to the specified point.
-
#line_width(width = nil) ⇒ Object
When called without an argument, returns the current line thickness.
-
#line_width=(width) ⇒ Object
Sets line thickness to the
width
specified. -
#move_to(*point) ⇒ Object
Moves the drawing position to a given point.
-
#polygon(*points) ⇒ Object
Draws a polygon from the specified points.
-
#rectangle(point, width, height) ⇒ Object
Draws a rectangle given
point
,width
andheight
. -
#stroke ⇒ Object
Strokes and closes the current path.
-
#stroke_bounds ⇒ Object
Draws and strokes a rectangle represented by the current bounding box.
-
#vertical_line(y1, y2, params) ⇒ Object
Draws a vertical line at the x cooordinate given by :at from y1 to y2.
Methods included from Transparency
Methods included from JoinStyle
Methods included from CapStyle
Methods included from Dash
Methods included from Color
#fill_color, hex2rgb, #method_missing, rgb2hex, #stroke_color
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Prawn::Graphics::Color
Instance Method Details
#circle_at(point, options) ⇒ Object
Draws a circle of radius :radius
with the centre-point at point
as a complete subpath. The drawing point will be moved to the centre-point upon completion of the drawing the circle.
pdf.circle_at [100,100], :radius => 25
174 175 176 177 |
# File 'lib/prawn/graphics.rb', line 174 def circle_at(point, ) x,y = point ellipse_at [x, y], [:radius] end |
#curve(origin, dest, options = {}) ⇒ Object
Draws a Bezier curve between two points, bounded by two additional points
pdf.curve [50,100], [100,100], :bounds => [[90,90],[75,75]]
158 159 160 161 |
# File 'lib/prawn/graphics.rb', line 158 def curve(origin,dest, ={}) move_to(*origin) curve_to(dest,) end |
#curve_to(dest, options = {}) ⇒ Object
Draws a Bezier curve from the current drawing position to the specified point, bounded by two additional points.
pdf.curve_to [100,100], :bounds => [[90,90],[75,75]]
62 63 64 65 66 67 68 69 70 |
# File 'lib/prawn/graphics.rb', line 62 def curve_to(dest,={}) [:bounds] or raise Prawn::Errors::InvalidGraphicsPath, "Bounding points for bezier curve must be specified "+ "as :bounds => [[x1,y1],[x2,y2]]" curve_points = ([:bounds] << dest).map { |e| translate(e) } add_content("%.3f %.3f %.3f %.3f %.3f %.3f c" % curve_points.flatten ) end |
#ellipse_at(point, r1, r2 = r1) ⇒ Object
Draws an ellipse of x
radius r1
and y
radius r2
with the centre-point at point
as a complete subpath. The drawing point will be moved to the centre-point upon completion of the drawing the ellipse.
# draws an ellipse with x-radius 25 and y-radius 50
pdf.ellipse_at [100,100], 25, 50
187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 |
# File 'lib/prawn/graphics.rb', line 187 def ellipse_at(point, r1, r2 = r1) x, y = point l1 = r1 * KAPPA l2 = r2 * KAPPA move_to(x + r1, y) # Upper right hand corner curve_to [x, y + r2], :bounds => [[x + r1, y + l1], [x + l2, y + r2]] # Upper left hand corner curve_to [x - r1, y], :bounds => [[x - l2, y + r2], [x - r1, y + l1]] # Lower left hand corner curve_to [x, y - r2], :bounds => [[x - r1, y - l1], [x - l2, y - r2]] # Lower right hand corner curve_to [x + r1, y], :bounds => [[x + l2, y - r2], [x + r1, y - l1]] move_to(x, y) end |
#fill ⇒ Object
Fills and closes the current path. See Graphic::Color for color details
240 241 242 243 |
# File 'lib/prawn/graphics.rb', line 240 def fill yield if block_given? add_content "f" end |
#fill_and_stroke ⇒ Object
Fills, strokes, and closes the current path. See Graphic::Color for color details
247 248 249 250 |
# File 'lib/prawn/graphics.rb', line 247 def fill_and_stroke yield if block_given? add_content "b" end |
#horizontal_line(x1, x2, options = {}) ⇒ Object
Draws a horizontal line from x1
to x2
at the current y
position, or the position specified by the :at option.
# draw a line from [25, 75] to [100, 75]
horizontal_line 25, 100, :at => 75
127 128 129 130 131 132 133 134 135 |
# File 'lib/prawn/graphics.rb', line 127 def horizontal_line(x1,x2,={}) if [:at] y1 = [:at] else y1 = y - bounds.absolute_bottom end line(x1,y1,x2,y1) end |
#horizontal_rule ⇒ Object
Draws a horizontal line from the left border to the right border of the bounding box at the current y
position.
140 141 142 |
# File 'lib/prawn/graphics.rb', line 140 def horizontal_rule horizontal_line(bounds.left, bounds.right) end |
#line(*points) ⇒ Object
Draws a line from one point to another. Points may be specified as tuples or flattened argument list:
pdf.line [100,100], [200,250]
pdf.line(100,100,200,250)
115 116 117 118 119 |
# File 'lib/prawn/graphics.rb', line 115 def line(*points) x0,y0,x1,y1 = points.flatten move_to(x0, y0) line_to(x1, y1) end |
#line_to(*point) ⇒ Object
Draws a line from the current drawing position to the specified point. The destination may be described as a tuple or a flattened list:
pdf.line_to [50,50]
pdf.line_to(50,50)
52 53 54 55 |
# File 'lib/prawn/graphics.rb', line 52 def line_to(*point) x,y = translate(point) add_content("%.3f %.3f l" % [ x, y ]) end |
#line_width(width = nil) ⇒ Object
When called without an argument, returns the current line thickness. When called with an argument, sets the line thickness to the specified value (in PDF points)
pdf.line_width #=> 1
pdf.line_width(5)
pdf.line_width #=> 5
101 102 103 104 105 106 107 |
# File 'lib/prawn/graphics.rb', line 101 def line_width(width=nil) if width self.line_width = width else (defined?(@line_width) && @line_width) || 1 end end |
#line_width=(width) ⇒ Object
Sets line thickness to the width
specified.
88 89 90 91 |
# File 'lib/prawn/graphics.rb', line 88 def line_width=(width) @line_width = width add_content("#{width} w") end |
#move_to(*point) ⇒ Object
Moves the drawing position to a given point. The point can be specified as a tuple or a flattened argument list
pdf.move_to [100,50]
pdf.move_to(100,50)
41 42 43 44 |
# File 'lib/prawn/graphics.rb', line 41 def move_to(*point) x,y = translate(point) add_content("%.3f %.3f m" % [ x, y ]) end |
#polygon(*points) ⇒ Object
Draws a polygon from the specified points.
# draws a snazzy triangle
pdf.polygon [100,100], [100,200], [200,200]
218 219 220 221 222 223 |
# File 'lib/prawn/graphics.rb', line 218 def polygon(*points) move_to points[0] (points[1..-1] << points[0]).each do |point| line_to(*point) end end |
#rectangle(point, width, height) ⇒ Object
Draws a rectangle given point
, width
and height
. The rectangle is bounded by its upper-left corner.
pdf.rectangle [300,300], 100, 200
77 78 79 80 |
# File 'lib/prawn/graphics.rb', line 77 def rectangle(point,width,height) x,y = translate(point) add_content("%.3f %.3f %.3f %.3f re" % [ x, y - height, width, height ]) end |
#stroke ⇒ Object
Strokes and closes the current path. See Graphic::Color for color details
227 228 229 230 |
# File 'lib/prawn/graphics.rb', line 227 def stroke yield if block_given? add_content "S" end |
#stroke_bounds ⇒ Object
Draws and strokes a rectangle represented by the current bounding box
234 235 236 |
# File 'lib/prawn/graphics.rb', line 234 def stroke_bounds stroke_rectangle bounds.top_left, bounds.width, bounds.height end |
#vertical_line(y1, y2, params) ⇒ Object
Draws a vertical line at the x cooordinate given by :at from y1 to y2.
# draw a line from [25, 100] to [25, 300]
vertical_line 100, 300, :at => 25
149 150 151 |
# File 'lib/prawn/graphics.rb', line 149 def vertical_line(y1,y2,params) line(params[:at],y1,params[:at],y2) end |