Module: Asciidoctor::PDF::FormattedText::TextBackgroundAndBorderRenderer

Defined in:
lib/asciidoctor/pdf/formatted_text/text_background_and_border_renderer.rb

Constant Summary collapse

DummyText =
?\u0000

Class Method Summary collapse

Class Method Details

.render_behind(fragment) ⇒ Object

render_behind is called before the text is printed



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/asciidoctor/pdf/formatted_text/text_background_and_border_renderer.rb', line 10

def render_behind fragment
  return if (pdf = fragment.document).scratch?
  data = fragment.format_state
  if data[:inline_block]
    padding = (height = fragment.line_height) - fragment.height
    at = [fragment.left, fragment.top + padding * 0.5]
    #width = data[:extend] ? (pdf.bounds.width - fragment.left) : fragment.width
    width = pdf.bounds.width - fragment.left
    fragment.conceal true # if fragment.text == DummyText
  elsif (border_offset = data[:border_offset])
    at = [fragment.left, fragment.top + border_offset]
    width = fragment.width
    height = fragment.height + border_offset * 2
  else
    at = fragment.top_left
    width = fragment.width
    height = fragment.height
  end
  border_radius = data[:border_radius] || 0
  if (background_color = data[:background_color])
    prev_fill_color = pdf.fill_color
    pdf.fill_color background_color
    if border_radius > 0
      pdf.fill_rounded_rectangle at, width, height, border_radius
    else
      pdf.fill_rectangle at, width, height
    end
    pdf.fill_color prev_fill_color
  end
  if (border_width = data[:border_width]) && (border_color = data[:border_color])
    prev_stroke_color = pdf.stroke_color
    prev_line_width = pdf.line_width
    pdf.stroke_color border_color
    pdf.line_width border_width
    border_radius > 0 ? (pdf.stroke_rounded_rectangle at, width, height, border_radius) : (pdf.stroke_rectangle at, width, height)
    pdf.stroke_color prev_stroke_color
    pdf.line_width prev_line_width
  end
  nil
end