Class: Prawn::Document::BoundingBox

Inherits:
Object
  • Object
show all
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

ColumnBox

Defined Under Namespace

Classes: NoReferenceBounds

Stable API collapse

Stable API collapse

Extension API collapse

Instance Attribute Details

#widthObject (readonly)

Width of the bounding box



463
464
465
# File 'lib/prawn/document/bounding_box.rb', line 463

def width
  @width
end

Instance Method Details

#absolute_bottomObject

Absolute bottom y-coordinate of the bottom box



434
435
436
# File 'lib/prawn/document/bounding_box.rb', line 434

def absolute_bottom
  @y - height
end

#absolute_bottom_leftObject

Absolute bottom-left point of the bounding box



452
453
454
# File 'lib/prawn/document/bounding_box.rb', line 452

def absolute_bottom_left
  [absolute_left, absolute_bottom]
end

#absolute_bottom_rightObject

Absolute bottom-left point of the bounding box



458
459
460
# File 'lib/prawn/document/bounding_box.rb', line 458

def absolute_bottom_right
  [absolute_right, absolute_bottom]
end

#absolute_leftObject

Absolute left x-coordinate of the bounding box



416
417
418
# File 'lib/prawn/document/bounding_box.rb', line 416

def absolute_left
  @x
end

#absolute_rightObject

Absolute right x-coordinate of the bounding box



422
423
424
# File 'lib/prawn/document/bounding_box.rb', line 422

def absolute_right
  @x + width
end

#absolute_topObject

Absolute top y-coordinate of the bounding box



428
429
430
# File 'lib/prawn/document/bounding_box.rb', line 428

def absolute_top
  @y
end

#absolute_top_leftObject

Absolute top-left point of the bounding box



440
441
442
# File 'lib/prawn/document/bounding_box.rb', line 440

def absolute_top_left
  [absolute_left, absolute_top]
end

#absolute_top_rightObject

Absolute top-right point of the bounding box



446
447
448
# File 'lib/prawn/document/bounding_box.rb', line 446

def absolute_top_right
  [absolute_right, absolute_top]
end

#bottomObject

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)])


360
361
362
# File 'lib/prawn/document/bounding_box.rb', line 360

def bottom
  0
end

#bottom_leftObject

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


410
411
412
# File 'lib/prawn/document/bounding_box.rb', line 410

def bottom_left
  [left, bottom]
end

#bottom_rightObject

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


398
399
400
# File 'lib/prawn/document/bounding_box.rb', line 398

def bottom_right
  [right, bottom]
end

#heightObject 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.



469
470
471
472
473
474
475
476
# File 'lib/prawn/document/bounding_box.rb', line 469

def height
  return @height if @height

  @stretched_height = [
    (absolute_top - @document.y),
    @stretched_height.to_f
  ].max
end

#leftObject

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])


274
275
276
# File 'lib/prawn/document/bounding_box.rb', line 274

def left
  0
end

#move_past_bottomObject

Moves to the top of the next page of the document, starting a new page if necessary.



495
496
497
498
499
500
501
# File 'lib/prawn/document/bounding_box.rb', line 495

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_boundsObject

Returns the innermost non-stretchy bounding box.



513
514
515
516
517
518
519
520
521
# File 'lib/prawn/document/bounding_box.rb', line 513

def reference_bounds
  if stretchy?
    raise NoReferenceBounds unless @parent

    @parent.reference_bounds
  else
    self
  end
end

#rightObject

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])


340
341
342
# File 'lib/prawn/document/bounding_box.rb', line 340

def right
  @width
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.

Returns:

  • (Boolean)


507
508
509
# File 'lib/prawn/document/bounding_box.rb', line 507

def stretchy?
  !@height
end

#topObject

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)])


350
351
352
# File 'lib/prawn/document/bounding_box.rb', line 350

def top
  height
end

#top_leftObject

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


373
374
375
# File 'lib/prawn/document/bounding_box.rb', line 373

def top_left
  [left, top]
end

#top_rightObject

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


386
387
388
# File 'lib/prawn/document/bounding_box.rb', line 386

def top_right
  [right, top]
end