Class: Prawn::Document::BoundingBox
- Inherits:
-
Object
- Object
- Prawn::Document::BoundingBox
- Defined in:
- lib/prawn/document/column_box.rb,
lib/prawn/document/bounding_box.rb
Overview
Low level layout helper that simplifies coordinate math.
See Prawn::Document#bounding_box for a description of what this class is used for.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#document ⇒ Object
readonly
Returns the value of attribute document.
-
#parent ⇒ Object
readonly
Returns the value of attribute parent.
-
#total_left_padding ⇒ Object
readonly
The current indentation of the left side of the bounding box.
-
#total_right_padding ⇒ Object
readonly
The current indentation of the right side of the bounding box.
Instance Method Summary collapse
-
#absolute_bottom ⇒ Object
Absolute bottom y-coordinate of the bottom box.
-
#absolute_bottom_left ⇒ Object
Absolute bottom-left point of the bounding box.
-
#absolute_bottom_right ⇒ Object
Absolute bottom-left point of the bounding box.
-
#absolute_left ⇒ Object
Absolute left x-coordinate of the bounding box.
-
#absolute_right ⇒ Object
Absolute right x-coordinate of the bounding box.
-
#absolute_top ⇒ Object
Absolute top y-coordinate of the bounding box.
-
#absolute_top_left ⇒ Object
Absolute top-left point of the bounding box.
-
#absolute_top_right ⇒ Object
Absolute top-right point of the bounding box.
-
#add_left_padding(left_padding) ⇒ Object
Increase the left padding of the bounding box.
-
#add_right_padding(right_padding) ⇒ Object
Increase the right padding of the bounding box.
-
#anchor ⇒ Object
The translated origin (x,y-height) which describes the location of the bottom left corner of the bounding box.
-
#bottom ⇒ Object
Relative bottom y-coordinate of the bounding box (Always 0).
-
#bottom_left ⇒ Object
Relative bottom-left point of the bounding box.
-
#bottom_right ⇒ Object
Relative bottom-right point of the bounding box.
-
#height ⇒ Object
(also: #update_height)
Height of the bounding box.
-
#indent(left_padding, right_padding = 0, &block) ⇒ Object
Temporarily adjust the @x coordinate to allow for left_padding.
-
#initialize(document, parent, point, options = {}) ⇒ BoundingBox
constructor
:nodoc:.
-
#left ⇒ Object
Relative left x-coordinate of the bounding box.
-
#left_side ⇒ Object
an alias for absolute_left.
-
#move_past_bottom ⇒ Object
starts a new page.
-
#right ⇒ Object
Relative right x-coordinate of the bounding box.
-
#right_side ⇒ Object
an alias for absolute_right.
-
#stretchy? ⇒ Boolean
Returns
falsewhen the box has a defined height,truewhen the height is being calculated on the fly based on the current vertical position. -
#subtract_left_padding(left_padding) ⇒ Object
Decrease the left padding of the bounding box.
-
#subtract_right_padding(right_padding) ⇒ Object
Decrease the right padding of the bounding box.
-
#top ⇒ Object
Relative top y-coordinate of the bounding box.
-
#top_left ⇒ Object
Relative top-left point of the bounding_box.
-
#top_right ⇒ Object
Relative top-right point of the bounding box.
-
#width ⇒ Object
Width of the bounding box.
Constructor Details
#initialize(document, parent, point, options = {}) ⇒ BoundingBox
:nodoc:
204 205 206 207 208 209 210 211 212 213 214 215 216 |
# File 'lib/prawn/document/bounding_box.rb', line 204 def initialize(document, parent, point, ={}) #:nodoc: unless [:width] raise ArgumentError, "BoundingBox needs the :width option to be set" end @document = document @parent = parent @x, @y = point @width, @height = [:width], [:height] @total_left_padding = 0 @total_right_padding = 0 @stretched_height = nil end |
Instance Attribute Details
#document ⇒ Object (readonly)
Returns the value of attribute document.
218 219 220 |
# File 'lib/prawn/document/bounding_box.rb', line 218 def document @document end |
#parent ⇒ Object (readonly)
Returns the value of attribute parent.
218 219 220 |
# File 'lib/prawn/document/bounding_box.rb', line 218 def parent @parent end |
#total_left_padding ⇒ Object (readonly)
The current indentation of the left side of the bounding box.
220 221 222 |
# File 'lib/prawn/document/bounding_box.rb', line 220 def total_left_padding @total_left_padding end |
#total_right_padding ⇒ Object (readonly)
The current indentation of the right side of the bounding box.
222 223 224 |
# File 'lib/prawn/document/bounding_box.rb', line 222 def total_right_padding @total_right_padding end |
Instance Method Details
#absolute_bottom ⇒ Object
Absolute bottom y-coordinate of the bottom box
392 393 394 |
# File 'lib/prawn/document/bounding_box.rb', line 392 def absolute_bottom @y - height end |
#absolute_bottom_left ⇒ Object
Absolute bottom-left point of the bounding box
410 411 412 |
# File 'lib/prawn/document/bounding_box.rb', line 410 def absolute_bottom_left [absolute_left, absolute_bottom] end |
#absolute_bottom_right ⇒ Object
Absolute bottom-left point of the bounding box
416 417 418 |
# File 'lib/prawn/document/bounding_box.rb', line 416 def absolute_bottom_right [absolute_right, absolute_bottom] end |
#absolute_left ⇒ Object
Absolute left x-coordinate of the bounding box
374 375 376 |
# File 'lib/prawn/document/bounding_box.rb', line 374 def absolute_left @x end |
#absolute_right ⇒ Object
Absolute right x-coordinate of the bounding box
380 381 382 |
# File 'lib/prawn/document/bounding_box.rb', line 380 def absolute_right @x + width end |
#absolute_top ⇒ Object
Absolute top y-coordinate of the bounding box
386 387 388 |
# File 'lib/prawn/document/bounding_box.rb', line 386 def absolute_top @y end |
#absolute_top_left ⇒ Object
Absolute top-left point of the bounding box
398 399 400 |
# File 'lib/prawn/document/bounding_box.rb', line 398 def absolute_top_left [absolute_left, absolute_top] end |
#absolute_top_right ⇒ Object
Absolute top-right point of the bounding box
404 405 406 |
# File 'lib/prawn/document/bounding_box.rb', line 404 def absolute_top_right [absolute_right, absolute_top] end |
#add_left_padding(left_padding) ⇒ Object
Increase the left padding of the bounding box.
267 268 269 270 271 |
# File 'lib/prawn/document/bounding_box.rb', line 267 def add_left_padding(left_padding) @total_left_padding += left_padding @x += left_padding @width -= left_padding end |
#add_right_padding(right_padding) ⇒ Object
Increase the right padding of the bounding box.
281 282 283 284 |
# File 'lib/prawn/document/bounding_box.rb', line 281 def add_right_padding(right_padding) @total_right_padding += right_padding @width -= right_padding end |
#anchor ⇒ Object
The translated origin (x,y-height) which describes the location of the bottom left corner of the bounding box
227 228 229 |
# File 'lib/prawn/document/bounding_box.rb', line 227 def anchor [@x, @y - height] end |
#bottom ⇒ Object
Relative bottom y-coordinate of the bounding box (Always 0)
Example, position some text 3 pts from the bottom of the containing box:
draw_text('hello', :at => [0, (bounds.bottom + 3)])
318 319 320 |
# File 'lib/prawn/document/bounding_box.rb', line 318 def bottom 0 end |
#bottom_left ⇒ Object
Relative bottom-left point of the bounding box
Example, draw a line along the left hand side of the page:
stroke do
line(bounds.bottom_left, bounds.top_left)
end
368 369 370 |
# File 'lib/prawn/document/bounding_box.rb', line 368 def bottom_left [left,bottom] end |
#bottom_right ⇒ Object
Relative bottom-right point of the bounding box
Example, draw a line along the right hand side of the page:
stroke do
line(bounds.bottom_right, bounds.top_right)
end
356 357 358 |
# File 'lib/prawn/document/bounding_box.rb', line 356 def bottom_right [right,bottom] end |
#height ⇒ Object Also known as: update_height
Height of the bounding box. If the box is ‘stretchy’ (unspecified height attribute), height is calculated as the distance from the top of the box to the current drawing position.
430 431 432 433 434 |
# File 'lib/prawn/document/bounding_box.rb', line 430 def height return @height if @height @stretched_height = [(absolute_top - @document.y), @stretched_height.to_f].max end |
#indent(left_padding, right_padding = 0, &block) ⇒ Object
Temporarily adjust the @x coordinate to allow for left_padding
Example:
indent 20 do
text "20 points in"
indent 30 do
text "50 points in"
end
end
indent 20, 20 do
text "indented on both sides"
end
257 258 259 260 261 262 263 264 |
# File 'lib/prawn/document/bounding_box.rb', line 257 def indent(left_padding, right_padding = 0, &block) add_left_padding(left_padding) add_right_padding(right_padding) yield ensure @document.bounds.subtract_left_padding(left_padding) @document.bounds.subtract_right_padding(right_padding) end |
#left ⇒ Object
Relative left x-coordinate of the bounding box. (Always 0)
Example, position some text 3 pts from the left of the containing box:
draw_text('hello', :at => [(bounds.left + 3), 0])
237 238 239 |
# File 'lib/prawn/document/bounding_box.rb', line 237 def left 0 end |
#left_side ⇒ Object
an alias for absolute_left
48 49 50 |
# File 'lib/prawn/document/column_box.rb', line 48 def left_side absolute_left end |
#move_past_bottom ⇒ Object
starts a new page
58 59 60 |
# File 'lib/prawn/document/column_box.rb', line 58 def move_past_bottom @document.start_new_page end |
#right ⇒ Object
Relative right x-coordinate of the bounding box. (Equal to the box width)
Example, position some text 3 pts from the right of the containing box:
draw_text('hello', :at => [(bounds.right - 3), 0])
298 299 300 |
# File 'lib/prawn/document/bounding_box.rb', line 298 def right @width end |
#right_side ⇒ Object
an alias for absolute_right
53 54 55 |
# File 'lib/prawn/document/column_box.rb', line 53 def right_side absolute_right end |
#stretchy? ⇒ Boolean
Returns false when the box has a defined height, true when the height is being calculated on the fly based on the current vertical position.
457 458 459 |
# File 'lib/prawn/document/bounding_box.rb', line 457 def stretchy? !@height end |
#subtract_left_padding(left_padding) ⇒ Object
Decrease the left padding of the bounding box.
274 275 276 277 278 |
# File 'lib/prawn/document/bounding_box.rb', line 274 def subtract_left_padding(left_padding) @total_left_padding -= left_padding @x -= left_padding @width += left_padding end |
#subtract_right_padding(right_padding) ⇒ Object
Decrease the right padding of the bounding box.
287 288 289 290 |
# File 'lib/prawn/document/bounding_box.rb', line 287 def subtract_right_padding(right_padding) @total_right_padding -= right_padding @width += right_padding end |
#top ⇒ Object
Relative top y-coordinate of the bounding box. (Equal to the box height)
Example, position some text 3 pts from the top of the containing box:
draw_text('hello', :at => [0, (bounds.top - 3)])
308 309 310 |
# File 'lib/prawn/document/bounding_box.rb', line 308 def top height end |
#top_left ⇒ Object
Relative top-left point of the bounding_box
Example, draw a line from the top left of the box diagonally to the bottom right:
stroke do
line(bounds.top_left, bounds.bottom_right)
end
331 332 333 |
# File 'lib/prawn/document/bounding_box.rb', line 331 def top_left [left,top] end |
#top_right ⇒ Object
Relative top-right point of the bounding box
Example, draw a line from the top_right of the box diagonally to the bottom left:
stroke do
line(bounds.top_right, bounds.bottom_left)
end
344 345 346 |
# File 'lib/prawn/document/bounding_box.rb', line 344 def top_right [right,top] end |
#width ⇒ Object
Width of the bounding box
422 423 424 |
# File 'lib/prawn/document/bounding_box.rb', line 422 def width @width end |