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 Attribute Summary collapse

Instance Method Summary collapse

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, options={}) #:nodoc:
  unless options[:width]
    raise ArgumentError, "BoundingBox needs the :width option to be set"
  end

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

Instance Attribute Details

#documentObject (readonly)

Returns the value of attribute document.



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

def document
  @document
end

#parentObject (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_paddingObject (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_paddingObject (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_bottomObject

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_leftObject

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_rightObject

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_leftObject

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_rightObject

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_topObject

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_leftObject

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_rightObject

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

#anchorObject

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

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


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

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


368
369
370
# File 'lib/prawn/document/bounding_box.rb', line 368

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


356
357
358
# File 'lib/prawn/document/bounding_box.rb', line 356

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.



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

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


237
238
239
# File 'lib/prawn/document/bounding_box.rb', line 237

def left
  0
end

#left_sideObject

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_bottomObject

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

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


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

def right
  @width
end

#right_sideObject

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.

Returns:

  • (Boolean)


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

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


308
309
310
# File 'lib/prawn/document/bounding_box.rb', line 308

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


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

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


344
345
346
# File 'lib/prawn/document/bounding_box.rb', line 344

def top_right
  [right,top]
end

#widthObject

Width of the bounding box



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

def width
  @width
end