Class: Prawn::Document::BoundingBox

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

ColumnBox

Instance Method Summary collapse

Constructor Details

#initialize(parent, point, options = {}) ⇒ BoundingBox

:nodoc:


200
201
202
203
204
# File 'lib/prawn/document/bounding_box.rb', line 200

def initialize(parent, point, options={}) #:nodoc:   
  @parent = parent
  @x, @y = point
  @width, @height = options[:width], options[:height]
end

Instance Method Details

#absolute_bottomObject

Absolute bottom y-coordinate of the bottom box


335
336
337
# File 'lib/prawn/document/bounding_box.rb', line 335

def absolute_bottom
  @y - height
end

#absolute_bottom_leftObject

Absolute bottom-left point of the bounding box


353
354
355
# File 'lib/prawn/document/bounding_box.rb', line 353

def absolute_bottom_left
  [absolute_left, absolute_bottom]
end

#absolute_bottom_rightObject

Absolute bottom-left point of the bounding box


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

def absolute_bottom_right
  [absolute_right, absolute_bottom]
end

#absolute_leftObject

Absolute left x-coordinate of the bounding box


317
318
319
# File 'lib/prawn/document/bounding_box.rb', line 317

def absolute_left
  @x
end

#absolute_rightObject

Absolute right x-coordinate of the bounding box


323
324
325
# File 'lib/prawn/document/bounding_box.rb', line 323

def absolute_right
  @x + width
end

#absolute_topObject

Absolute top y-coordinate of the bounding box


329
330
331
# File 'lib/prawn/document/bounding_box.rb', line 329

def absolute_top
  @y
end

#absolute_top_leftObject

Absolute top-left point of the bounding box


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

def absolute_top_left
  [absolute_left, absolute_top]
end

#absolute_top_rightObject

Absolute top-right point of the bounding box


347
348
349
# File 'lib/prawn/document/bounding_box.rb', line 347

def absolute_top_right
  [absolute_right, absolute_top]
end

#anchorObject

The translated origin (x,y-height) which describes the location of the bottom left corner of the bounding box


209
210
211
# File 'lib/prawn/document/bounding_box.rb', line 209

def anchor
  [@x, @y - height]
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:

text('hello', :at => [0, (bounds.bottom + 3)])

261
262
263
# File 'lib/prawn/document/bounding_box.rb', line 261

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

311
312
313
# File 'lib/prawn/document/bounding_box.rb', line 311

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

299
300
301
# File 'lib/prawn/document/bounding_box.rb', line 299

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.


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

def height  
  return @height if @height
  @stretched_height = [(absolute_top - @parent.y), @stretched_height.to_f].max
end

#indent(left_padding, &block) ⇒ Object

Temporarily adjust the @x coordinate to allow for left_padding


226
227
228
229
230
231
232
233
# File 'lib/prawn/document/bounding_box.rb', line 226

def indent(left_padding, &block)
  @x += left_padding
  @width -= left_padding
  yield
ensure
  @x -= left_padding
  @width += left_padding
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:

text('hello', :at => [(bounds.left + 3), 0])

219
220
221
# File 'lib/prawn/document/bounding_box.rb', line 219

def left
  0
end

#left_sideObject


46
47
48
# File 'lib/prawn/document/column_box.rb', line 46

def left_side
   absolute_left
end

#move_past_bottomObject


54
55
56
# File 'lib/prawn/document/column_box.rb', line 54

def move_past_bottom
   @parent.start_new_page
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:

text('hello', :at => [(bounds.right - 3), 0])

241
242
243
# File 'lib/prawn/document/bounding_box.rb', line 241

def right
  @width
end

#right_sideObject


50
51
52
# File 'lib/prawn/document/column_box.rb', line 50

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.

Returns:

  • (Boolean)

383
384
385
# File 'lib/prawn/document/bounding_box.rb', line 383

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:

text('hello', :at => [0, (bounds.top - 3)])

251
252
253
# File 'lib/prawn/document/bounding_box.rb', line 251

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., bounds.bottom_right)
end

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

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

287
288
289
# File 'lib/prawn/document/bounding_box.rb', line 287

def top_right
  [right,top]
end

#widthObject

Width of the bounding box


365
366
367
# File 'lib/prawn/document/bounding_box.rb', line 365

def width
  @width
end