Class: Sevgi::Graphics::Canvas

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/sevgi/graphics/auxiliary/canvas.rb

Overview

SVG canvas size, margins, viewport, and viewBox.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(width:, height:, unit: "mm", name: :custom, margins: []) ⇒ void

Creates a canvas.

Parameters:

  • width (Numeric)

    canvas width

  • height (Numeric)

    canvas height

  • unit (Symbol, String) (defaults to: "mm")

    SVG unit

  • name (Symbol, String) (defaults to: :custom)

    paper name

  • margins (Array<Numeric>) (defaults to: [])

    margin shorthand values

Raises:

  • (Sevgi::ArgumentError)

    when margins or numeric dimensions are invalid



67
68
69
70
71
72
73
# File 'lib/sevgi/graphics/auxiliary/canvas.rb', line 67

def initialize(width:, height:, unit: "mm", name: :custom, margins: [])
  @size = Paper[width, height, unit, name]
  @margin = Margin[*margins]

  compute
  freeze
end

Instance Attribute Details

#innerObject (readonly)

Returns the value of attribute inner.



57
# File 'lib/sevgi/graphics/auxiliary/canvas.rb', line 57

attr_reader :size, :margin, :inner

#marginSevgi::Graphics::Margin (readonly)

Returns canvas margins.

Returns:



57
# File 'lib/sevgi/graphics/auxiliary/canvas.rb', line 57

attr_reader :size, :margin, :inner

#sizeSevgi::Graphics::Paper (readonly)

Returns paper size object.

Returns:



57
58
59
# File 'lib/sevgi/graphics/auxiliary/canvas.rb', line 57

def size
  @size
end

Class Method Details

.call(arg = Undefined, **kwargs) ⇒ Sevgi::Graphics::Canvas

Builds a canvas from a paper profile or explicit size.

Parameters:

  • arg (Sevgi::Graphics::Paper, Symbol, String, Sevgi::Undefined) (defaults to: Undefined)

    paper profile or paper object

  • kwargs (Hash)

    canvas keyword arguments

Returns:

Raises:

  • (Sevgi::ArgumentError)

    when the paper profile is unknown



15
# File 'lib/sevgi/graphics/auxiliary/canvas.rb', line 15

def self.call(...) = from_paper(...)

.from_paper(arg = Undefined, **kwargs) ⇒ Sevgi::Graphics::Canvas

Builds a canvas from a paper profile or explicit size.

Parameters:

  • arg (Sevgi::Graphics::Paper, Symbol, String, Sevgi::Undefined) (defaults to: Undefined)

    paper profile or paper object

  • kwargs (Hash)

    canvas keyword arguments

Returns:

Raises:

  • (Sevgi::ArgumentError)

    when the paper profile is unknown



22
23
24
25
26
27
28
29
# File 'lib/sevgi/graphics/auxiliary/canvas.rb', line 22

def self.from_paper(arg = Undefined, **kwargs)
  case arg
  when Undefined
    new(**kwargs)
  else
    new(**paper(arg).to_h, **kwargs)
  end
end

Instance Method Details

#attributes(origin = Undefined) ⇒ Hash

Returns SVG root viewport attributes.

Parameters:

  • origin (Numeric, Array<Numeric>, nil, Sevgi::Undefined) (defaults to: Undefined)

    viewBox origin

Returns:

  • (Hash)

Raises:

  • (Sevgi::ArgumentError)

    when origin is invalid



80
# File 'lib/sevgi/graphics/auxiliary/canvas.rb', line 80

def attributes(...) = {**viewport, viewBox: viewbox(...)}

#viewbox(origin = Undefined) ⇒ String

Returns the SVG viewBox string.

Parameters:

  • origin (Numeric, Array<Numeric>, nil, Sevgi::Undefined) (defaults to: Undefined)

    viewBox origin

Returns:

  • (String)

Raises:

  • (Sevgi::ArgumentError)

    when origin is invalid



90
# File 'lib/sevgi/graphics/auxiliary/canvas.rb', line 90

def viewbox(origin = Undefined) = prettify(*originate(origin), width, height).join(" ")

#viewportHash

Returns SVG width and height attributes.

Returns:

  • (Hash)


84
# File 'lib/sevgi/graphics/auxiliary/canvas.rb', line 84

def viewport = {width: "#{width}#{unit}", height: "#{height}#{unit}"}

#with(**kwargs) ⇒ Sevgi::Graphics::Canvas

Returns a canvas with selected fields replaced.

Parameters:

  • kwargs (Hash)

    replacement options

Returns:



95
# File 'lib/sevgi/graphics/auxiliary/canvas.rb', line 95

def with(**kwargs) = self.class.new(**size.to_h, margins: kwargs.fetch(:margins, margin.to_a))