Class: HexaPDF::Layout::Frame::FitResult

Inherits:
Object
  • Object
show all
Defined in:
lib/hexapdf/layout/frame.rb

Overview

Stores the result of fitting a box in a Frame.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(box) ⇒ FitResult

Initialize the result object for the given box.



114
115
116
117
118
119
# File 'lib/hexapdf/layout/frame.rb', line 114

def initialize(box)
  @box = box
  @available_width = 0
  @available_height = 0
  @success = false
end

Instance Attribute Details

#available_heightObject

The available height in the frame for this particular box.



107
108
109
# File 'lib/hexapdf/layout/frame.rb', line 107

def available_height
  @available_height
end

#available_widthObject

The available width in the frame for this particular box.



104
105
106
# File 'lib/hexapdf/layout/frame.rb', line 104

def available_width
  @available_width
end

#boxObject

The box that was fitted into the frame.



95
96
97
# File 'lib/hexapdf/layout/frame.rb', line 95

def box
  @box
end

#maskObject

The rectangle (a Geom2D::Rectangle object) that will be removed from the frame when drawing the box.



111
112
113
# File 'lib/hexapdf/layout/frame.rb', line 111

def mask
  @mask
end

#xObject

The horizontal position where the box will be drawn.



98
99
100
# File 'lib/hexapdf/layout/frame.rb', line 98

def x
  @x
end

#yObject

The vertical position where the box will be drawn.



101
102
103
# File 'lib/hexapdf/layout/frame.rb', line 101

def y
  @y
end

Instance Method Details

#draw(canvas, dx: 0, dy: 0) ⇒ Object

Draws the #box onto the canvas at (#x + dx, #y + dy).

The relative offset (dx, dy) is useful when rendering results that were accumulated and then need to be moved because the container holding them changes its position.

The configuration option “debug” can be used to add visual debug output with respect to box placement.



138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# File 'lib/hexapdf/layout/frame.rb', line 138

def draw(canvas, dx: 0, dy: 0)
  doc = canvas.context.document
  if doc.config['debug']
    name = "#{box.class} (#{x.to_i},#{y.to_i}-#{box.width.to_i}x#{box.height.to_i})"
    ocg = doc.optional_content.ocg(name)
    canvas.optional_content(ocg) do
      canvas.translate(dx, dy) do
        canvas.fill_color("green").stroke_color("darkgreen").
          opacity(fill_alpha: 0.1, stroke_alpha: 0.2).
          draw(:geom2d, object: mask, path_only: true).fill_stroke
      end
    end
    doc.optional_content.default_configuration.add_ocg_to_ui(ocg, path: 'Debug')
  end
  box.draw(canvas, x + dx, y + dy)
end

#success!Object

Marks the fitting status as success.



122
123
124
# File 'lib/hexapdf/layout/frame.rb', line 122

def success!
  @success = true
end

#success?Boolean

Returns true if fitting was successful.

Returns:

  • (Boolean)


127
128
129
# File 'lib/hexapdf/layout/frame.rb', line 127

def success?
  @success
end