lib/prawn/graphics.rb in prawn-1.0.0.rc1 vs lib/prawn/graphics.rb in prawn-1.0.0.rc2

- old
+ new

@@ -10,11 +10,11 @@ require "prawn/graphics/dash" require "prawn/graphics/cap_style" require "prawn/graphics/join_style" require "prawn/graphics/transparency" require "prawn/graphics/transformation" -require "prawn/graphics/gradient" +require "prawn/graphics/patterns" module Prawn # Implements the drawing facilities for Prawn::Document. # Use this to draw the most beautiful imaginable things. @@ -28,11 +28,11 @@ include Dash include CapStyle include JoinStyle include Transparency include Transformation - include Gradient + include Patterns ####################################################################### # Low level drawing operations must map the point to absolute coords! # ####################################################################### @@ -220,23 +220,23 @@ move_to(x + r1, y) # Upper right hand corner curve_to [x, y + r2], - :bounds => [[x + r1, y + l1], [x + l2, y + r2]] + :bounds => [[x + r1, y + l2], [x + l1, y + r2]] # Upper left hand corner curve_to [x - r1, y], - :bounds => [[x - l2, y + r2], [x - r1, y + l1]] + :bounds => [[x - l1, y + r2], [x - r1, y + l2]] # Lower left hand corner curve_to [x, y - r2], - :bounds => [[x - r1, y - l1], [x - l2, y - r2]] + :bounds => [[x - r1, y - l2], [x - l1, y - r2]] # Lower right hand corner curve_to [x + r1, y], - :bounds => [[x + l2, y - r2], [x + r1, y - l1]] + :bounds => [[x + l1, y - r2], [x + r1, y - l2]] move_to(x, y) end # Draws a polygon from the specified points. @@ -335,26 +335,151 @@ # def close_path add_content "h" end - # Provides the following shortcuts: - # - # stroke_some_method(*args) #=> some_method(*args); stroke - # fill_some_method(*args) #=> some_method(*args); fill - # fill_and_stroke_some_method(*args) #=> some_method(*args); fill_and_stroke - # - def method_missing(id,*args,&block) - case(id.to_s) - when /^fill_and_stroke_(.*)/ - send($1,*args,&block); fill_and_stroke - when /^stroke_(.*)/ - send($1,*args,&block); stroke - when /^fill_(.*)/ - send($1,*args,&block); fill - else - super - end + ## + # :method: stroke_rectangle + # Draws and strokes a rectangle given +point+, +width+ and +height+. The rectangle is bounded by its upper-left corner. + # :call-seq: + # stroke_rectangle(point,width,height) + + ## + # :method: fill_rectangle + # Draws and fills ills a rectangle given +point+, +width+ and +height+. The rectangle is bounded by its upper-left corner. + # :call-seq: + # fill_rectangle(point,width,height) + + ## + # :method: fill_and_stroke_rectangle + # Draws, fills, and strokes a rectangle given +point+, +width+ and +height+. The rectangle is bounded by its upper-left corner. + # :call-seq: + # fill_and_stroke_rectangle(point,width,height) + + ## + # :method: stroke_rounded_rectangle + # Draws and strokes a rounded rectangle given +point+, +width+ and +height+ and +radius+ for the rounded corner. The rectangle is bounded by its upper-left corner. + # :call-seq: + # stroke_rounded_rectangle(point,width,height,radius) + + ## + # :method: fill_rounded_rectangle + # Draws and fills a rounded rectangle given +point+, +width+ and +height+ and +radius+ for the rounded corner. The rectangle is bounded by its upper-left corner. + # :call-seq: + # fill_rounded_rectangle(point,width,height,radius) + + ## + # :method: stroke_and_fill_rounded_rectangle + # Draws, fills, and strokes a rounded rectangle given +point+, +width+ and +height+ and +radius+ for the rounded corner. The rectangle is bounded by its upper-left corner. + # :call-seq: + # stroke_and_fill_rounded_rectangle(point,width,height,radius) + + ## + # :method: stroke_line + # Strokes a line from one point to another. Points may be specified as tuples or flattened argument list. + # :call-seq: + # stroke_line(*points) + + ## + # :method: stroke_horizontal_line + # Strokes a horizontal line from +x1+ to +x2+ at the current y position, or the position specified by the :at option. + # :call-seq: + # stroke_horizontal_line(x1,x2,options={}) + + ## + # :method: stroke_horizontal_rule + # Strokes a horizontal line from the left border to the right border of the bounding box at the current y position. + + ## + # :method: stroke_vertical_line + # Strokes a vertical line at the x coordinate given by :at from y1 to y2. + # :call-seq: + # stroke_vertical_line(y1,y2,params) + + ## + # :method: stroke_curve + # Strokes a Bezier curve between two points, bounded by two additional points. + # :call-seq: + # stroke_curve(origin,dest,options={}) + + ## + # :method: stroke_circle + # Draws and strokes a circle of radius +radius+ with the centre-point at +point+. + # :call-seq: + # stroke_circle(center,radius) + + ## + # :method: fill_circle + # Draws and fills a circle of radius +radius+ with the centre-point at +point+. + # :call-seq: + # fill_circle(center,radius) + + ## + # :method: fill_and_stroke_circle + # Draws, strokes, and fills a circle of radius +radius+ with the centre-point at +point+. + # :call-seq: + # fill_and_stroke_circle(center,radius) + + ## + # :method: stroke_ellipse + # Draws and strokes an ellipse of x radius +r1+ and y radius +r2+ with the centre-point at +point+. + # :call-seq: + # stroke_ellipse(point, r1, r2 = r1) + + ## + # :method: fill_ellipse + # Draws and fills an ellipse of x radius +r1+ and y radius +r2+ with the centre-point at +point+. + # :call-seq: + # fill_ellipse(point, r1, r2 = r1) + + ## + # :method: fill_and_stroke_ellipse + # Draws, strokes, and fills an ellipse of x radius +r1+ and y radius +r2+ with the centre-point at +point+. + # :call-seq: + # fill_and_stroke_ellipse(point, r1, r2 = r1) + + ## + # :method: stroke_polygon + # Draws and strokes a polygon from the specified points. + # :call-seq: + # stroke_polygon(*points) + + ## + # :method: fill_polygon + # Draws and fills a polygon from the specified points. + # :call-seq: + # fill_polygon(*points) + + ## + # :method: fill_and_stroke_polygon + # Draws, strokes, and fills a polygon from the specified points. + # :call-seq: + # fill_and_stroke_polygon(*points) + + ## + # :method: stroke_rounded_polygon + # Draws and strokes a rounded polygon from specified points, using +radius+ to define Bezier curves. + # :call-seq: + # stroke_rounded_polygon(radius, *points) + + ## + # :method: fill_rounded_polygon + # Draws and fills a rounded polygon from specified points, using +radius+ to define Bezier curves. + # :call-seq: + # fill_rounded_polygon(radius, *points) + + ## + # :method: fill_and_stroke_rounded_polygon + # Draws, strokes, and fills a rounded polygon from specified points, using +radius+ to define Bezier curves. + # :call-seq: + # fill_and_stroke_rounded_polygon(radius, *points) + + ops = %w{fill stroke fill_and_stroke} + shapes = %w{line_to curve_to rectangle rounded_rectangle line horizontal_line horizontal_rule vertical_line + curve circle_at circle ellipse_at ellipse polygon rounded_polygon rounded_vertex} + + ops.product(shapes).each do |operation,shape| + class_eval "def #{operation}_#{shape}(*args); #{shape}(*args); #{operation}; end" end private def current_line_width