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.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

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

:nodoc:



203
204
205
206
207
208
209
210
211
212
# File 'lib/prawn/document/bounding_box.rb', line 203

def initialize(parent, point, options={}) #:nodoc:   
  unless options[:width]
    raise ArgumentError, "BoundingBox needs the :width option to be set"
  end

  @parent = parent
  @x, @y = point
  @width, @height = options[:width], options[:height]
 @stretched_height = nil
end

Instance Attribute Details

#parentObject (readonly)

Returns the value of attribute parent.



214
215
216
# File 'lib/prawn/document/bounding_box.rb', line 214

def parent
  @parent
end

Instance Method Details

#absolute_bottomObject

Absolute bottom y-coordinate of the bottom box



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

def absolute_bottom
  @y - height
end

#absolute_bottom_leftObject

Absolute bottom-left point of the bounding box



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

def absolute_bottom_left
  [absolute_left, absolute_bottom]
end

#absolute_bottom_rightObject

Absolute bottom-left point of the bounding box



378
379
380
# File 'lib/prawn/document/bounding_box.rb', line 378

def absolute_bottom_right
  [absolute_right, absolute_bottom]
end

#absolute_leftObject

Absolute left x-coordinate of the bounding box



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

def absolute_left
  @x
end

#absolute_rightObject

Absolute right x-coordinate of the bounding box



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

def absolute_right
  @x + width
end

#absolute_topObject

Absolute top y-coordinate of the bounding box



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

def absolute_top
  @y
end

#absolute_top_leftObject

Absolute top-left point of the bounding box



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

def absolute_top_left
  [absolute_left, absolute_top]
end

#absolute_top_rightObject

Absolute top-right point of the bounding box



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

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



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

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:

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


280
281
282
# File 'lib/prawn/document/bounding_box.rb', line 280

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


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

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


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

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.



392
393
394
395
# File 'lib/prawn/document/bounding_box.rb', line 392

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

Example:

indent 20 do
   text "20 points in"
   indent 30 do
     text "50 points in"
   end
 end


245
246
247
248
249
250
251
252
# File 'lib/prawn/document/bounding_box.rb', line 245

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:

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


229
230
231
# File 'lib/prawn/document/bounding_box.rb', line 229

def left
  0
end

#left_sideObject

an alias for absolute_left



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

def left_side
   absolute_left
end

#move_past_bottomObject

starts a new page



408
409
410
# File 'lib/prawn/document/bounding_box.rb', line 408

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:

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


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

def right
  @width
end

#right_sideObject

an alias for absolute_right



403
404
405
# File 'lib/prawn/document/bounding_box.rb', line 403

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)


418
419
420
# File 'lib/prawn/document/bounding_box.rb', line 418

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


270
271
272
# File 'lib/prawn/document/bounding_box.rb', line 270

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


293
294
295
# File 'lib/prawn/document/bounding_box.rb', line 293

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


306
307
308
# File 'lib/prawn/document/bounding_box.rb', line 306

def top_right
  [right,top]
end

#widthObject

Width of the bounding box



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

def width
  @width
end