Class: Prawn::Document::BoundingBox
- Inherits:
-
Object
- Object
- Prawn::Document::BoundingBox
- Defined in:
- 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.
Class Method Summary collapse
-
.restore_deep_copy(bounds, document) ⇒ Object
Restores a copy of the bounds taken by BoundingBox.deep_copy in the context of the given
document
.
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.
-
#deep_copy ⇒ Object
Returns a deep copy of these bounds (including all parent bounds but not copying the reference to the Document).
-
#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
Moves to the top of the next page of the document, starting a new page if necessary.
-
#reference_bounds ⇒ Object
Returns the innermost non-stretchy bounding box.
-
#right ⇒ Object
Relative right x-coordinate of the bounding box.
-
#right_side ⇒ Object
an alias for absolute_right.
-
#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. -
#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:
222 223 224 225 226 227 228 229 230 231 232 233 234 |
# File 'lib/prawn/document/bounding_box.rb', line 222 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.
236 237 238 |
# File 'lib/prawn/document/bounding_box.rb', line 236 def document @document end |
#parent ⇒ Object (readonly)
Returns the value of attribute parent.
236 237 238 |
# File 'lib/prawn/document/bounding_box.rb', line 236 def parent @parent end |
#total_left_padding ⇒ Object (readonly)
The current indentation of the left side of the bounding box.
238 239 240 |
# File 'lib/prawn/document/bounding_box.rb', line 238 def total_left_padding @total_left_padding end |
#total_right_padding ⇒ Object (readonly)
The current indentation of the right side of the bounding box.
240 241 242 |
# File 'lib/prawn/document/bounding_box.rb', line 240 def total_right_padding @total_right_padding end |
Class Method Details
.restore_deep_copy(bounds, document) ⇒ Object
Restores a copy of the bounds taken by BoundingBox.deep_copy in the context of the given document
. Does not set the bounds of the document to the resulting BoundingBox, only returns it.
513 514 515 516 |
# File 'lib/prawn/document/bounding_box.rb', line 513 def self.restore_deep_copy(bounds, document) bounds.instance_variable_set("@document", document) bounds end |
Instance Method Details
#absolute_bottom ⇒ Object
Absolute bottom y-coordinate of the bottom box
410 411 412 |
# File 'lib/prawn/document/bounding_box.rb', line 410 def absolute_bottom @y - height end |
#absolute_bottom_left ⇒ Object
Absolute bottom-left point of the bounding box
428 429 430 |
# File 'lib/prawn/document/bounding_box.rb', line 428 def absolute_bottom_left [absolute_left, absolute_bottom] end |
#absolute_bottom_right ⇒ Object
Absolute bottom-left point of the bounding box
434 435 436 |
# File 'lib/prawn/document/bounding_box.rb', line 434 def absolute_bottom_right [absolute_right, absolute_bottom] end |
#absolute_left ⇒ Object
Absolute left x-coordinate of the bounding box
392 393 394 |
# File 'lib/prawn/document/bounding_box.rb', line 392 def absolute_left @x end |
#absolute_right ⇒ Object
Absolute right x-coordinate of the bounding box
398 399 400 |
# File 'lib/prawn/document/bounding_box.rb', line 398 def absolute_right @x + width end |
#absolute_top ⇒ Object
Absolute top y-coordinate of the bounding box
404 405 406 |
# File 'lib/prawn/document/bounding_box.rb', line 404 def absolute_top @y end |
#absolute_top_left ⇒ Object
Absolute top-left point of the bounding box
416 417 418 |
# File 'lib/prawn/document/bounding_box.rb', line 416 def absolute_top_left [absolute_left, absolute_top] end |
#absolute_top_right ⇒ Object
Absolute top-right point of the bounding box
422 423 424 |
# File 'lib/prawn/document/bounding_box.rb', line 422 def absolute_top_right [absolute_right, absolute_top] end |
#add_left_padding(left_padding) ⇒ Object
Increase the left padding of the bounding box.
285 286 287 288 289 |
# File 'lib/prawn/document/bounding_box.rb', line 285 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.
299 300 301 302 |
# File 'lib/prawn/document/bounding_box.rb', line 299 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
245 246 247 |
# File 'lib/prawn/document/bounding_box.rb', line 245 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)])
336 337 338 |
# File 'lib/prawn/document/bounding_box.rb', line 336 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
386 387 388 |
# File 'lib/prawn/document/bounding_box.rb', line 386 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
374 375 376 |
# File 'lib/prawn/document/bounding_box.rb', line 374 def bottom_right [right,bottom] end |
#deep_copy ⇒ Object
Returns a deep copy of these bounds (including all parent bounds but not copying the reference to the Document).
499 500 501 502 503 504 505 506 507 |
# File 'lib/prawn/document/bounding_box.rb', line 499 def deep_copy copy = dup # Deep-copy the parent bounds copy.instance_variable_set("@parent", if BoundingBox === @parent @parent.deep_copy end) copy.instance_variable_set("@document", nil) copy 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.
448 449 450 451 452 |
# File 'lib/prawn/document/bounding_box.rb', line 448 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
275 276 277 278 279 280 281 282 |
# File 'lib/prawn/document/bounding_box.rb', line 275 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])
255 256 257 |
# File 'lib/prawn/document/bounding_box.rb', line 255 def left 0 end |
#left_side ⇒ Object
an alias for absolute_left
455 456 457 |
# File 'lib/prawn/document/bounding_box.rb', line 455 def left_side absolute_left end |
#move_past_bottom ⇒ Object
Moves to the top of the next page of the document, starting a new page if necessary.
467 468 469 470 471 472 473 |
# File 'lib/prawn/document/bounding_box.rb', line 467 def move_past_bottom if @document.page_number == @document.page_count @document.start_new_page else @document.go_to_page(@document.page_number + 1) end end |
#reference_bounds ⇒ Object
Returns the innermost non-stretchy bounding box.
487 488 489 490 491 492 493 494 |
# File 'lib/prawn/document/bounding_box.rb', line 487 def reference_bounds if stretchy? raise "Can't find reference bounds: my parent is unset" unless @parent @parent.reference_bounds else self end 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])
316 317 318 |
# File 'lib/prawn/document/bounding_box.rb', line 316 def right @width end |
#right_side ⇒ Object
an alias for absolute_right
460 461 462 |
# File 'lib/prawn/document/bounding_box.rb', line 460 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.
481 482 483 |
# File 'lib/prawn/document/bounding_box.rb', line 481 def stretchy? !@height end |
#subtract_left_padding(left_padding) ⇒ Object
Decrease the left padding of the bounding box.
292 293 294 295 296 |
# File 'lib/prawn/document/bounding_box.rb', line 292 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.
305 306 307 308 |
# File 'lib/prawn/document/bounding_box.rb', line 305 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)])
326 327 328 |
# File 'lib/prawn/document/bounding_box.rb', line 326 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
349 350 351 |
# File 'lib/prawn/document/bounding_box.rb', line 349 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
362 363 364 |
# File 'lib/prawn/document/bounding_box.rb', line 362 def top_right [right,top] end |
#width ⇒ Object
Width of the bounding box
440 441 442 |
# File 'lib/prawn/document/bounding_box.rb', line 440 def width @width end |