Module: Postsvg::Visitors::PsVisitor::GraphicsState

Included in:
Postsvg::Visitors::PsVisitor
Defined in:
lib/postsvg/visitors/ps_visitor/graphics_state.rb

Overview

Graphics state operator handlers: gsave/grestore and the line/ dash attribute setters.

Instance Method Summary collapse

Instance Method Details

#visit_grestore(_op, _ctx) ⇒ Object



13
14
15
# File 'lib/postsvg/visitors/ps_visitor/graphics_state.rb', line 13

def visit_grestore(_op, _ctx)
  @graphics.grestore
end

#visit_grestoreall(_op, _ctx) ⇒ Object



17
18
19
# File 'lib/postsvg/visitors/ps_visitor/graphics_state.rb', line 17

def visit_grestoreall(_op, _ctx)
  @graphics.grestore while @graphics.depth > 1
end

#visit_gsave(_op, _ctx) ⇒ Object



9
10
11
# File 'lib/postsvg/visitors/ps_visitor/graphics_state.rb', line 9

def visit_gsave(_op, _ctx)
  @graphics.gsave
end

#visit_setdash(op, _ctx) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/postsvg/visitors/ps_visitor/graphics_state.rb', line 39

def visit_setdash(op, _ctx)
  pattern = op.pattern
  dash_str =
    case pattern
    when Array
      pattern.map { |v| FormatNumber.call(v.to_f) }.join(" ")
    when Numeric
      FormatNumber.call(pattern.to_f)
    else
      nil
    end
  @graphics.update(dash: dash_str)
end

#visit_setlinecap(op, _ctx) ⇒ Object



25
26
27
28
# File 'lib/postsvg/visitors/ps_visitor/graphics_state.rb', line 25

def visit_setlinecap(op, _ctx)
  name = { 0 => :butt, 1 => :round, 2 => :square }.fetch(op.cap_code, :butt)
  @graphics.update(line_cap: name)
end

#visit_setlinejoin(op, _ctx) ⇒ Object



30
31
32
33
# File 'lib/postsvg/visitors/ps_visitor/graphics_state.rb', line 30

def visit_setlinejoin(op, _ctx)
  name = { 0 => :miter, 1 => :round, 2 => :bevel }.fetch(op.join_code, :miter)
  @graphics.update(line_join: name)
end

#visit_setlinewidth(op, _ctx) ⇒ Object



21
22
23
# File 'lib/postsvg/visitors/ps_visitor/graphics_state.rb', line 21

def visit_setlinewidth(op, _ctx)
  @graphics.update(stroke_width: op.width.to_f)
end

#visit_setmiterlimit(op, _ctx) ⇒ Object



35
36
37
# File 'lib/postsvg/visitors/ps_visitor/graphics_state.rb', line 35

def visit_setmiterlimit(op, _ctx)
  @graphics.update(miter_limit: op.limit.to_f)
end