Module: HexaPDF::Type::Annotations::BorderStyling
- Included in:
- Line, PolygonPolyline, SquareCircle, Widget
- Defined in:
- lib/hexapdf/type/annotations/border_styling.rb
Overview
This module provides a convenience method for getting and setting the border style and is included in the annotations that need it.
See: PDF2.0 s12.5.4
Defined Under Namespace
Classes: BorderStyle
Instance Method Summary collapse
-
#border_style(color: nil, width: nil, style: nil) ⇒ Object
:call-seq: annot.border_style => border_style annot.border_style(color: 0, width: 1, style: :solid) => annot.
Instance Method Details
#border_style(color: nil, width: nil, style: nil) ⇒ Object
:call-seq:
annot.border_style => border_style
annot.border_style(color: 0, width: 1, style: :solid) => annot
Returns a BorderStyle instance representing the border style of the annotation when no argument is given. Otherwise sets the border style of the annotation and returns self.
When setting a border style, arguments that are not provided will use the default: a border with a solid, black, 1pt wide line. This also means that multiple invocations will reset all prior values.
color
-
The color of the border. See HexaPDF::Content::ColorSpace.device_color_from_specification for information on the allowed arguments.
If the special value
:transparent
is used when setting the color, a transparent is used. A transparent border will return anil
value when getting the border color. width
-
The width of the border. If set to 0, no border is shown.
style
-
Defines how the border is drawn. can be one of the following:
:solid
-
Draws a solid border.
:beveled
-
Draws a beveled border.
:inset
-
Draws an inset border.
:underlined
-
Draws only the bottom border.
- Array
-
An array specifying a line dash pattern (see HexaPDF::Content::LineDashPattern)
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/hexapdf/type/annotations/border_styling.rb', line 95 def border_style(color: nil, width: nil, style: nil) if color || width || style color = if color == :transparent [] else Content::ColorSpace.device_color_from_specification(color || 0).components end width ||= 1 style ||= :solid if self[:Subtype] == :Widget (self[:MK] ||= {})[:BC] = color else self[:C] = color end bs = self[:BS] = {W: width} case style when :solid then bs[:S] = :S when :beveled then bs[:S] = :B when :inset then bs[:S] = :I when :underlined then bs[:S] = :U when Array bs[:S] = :D bs[:D] = style else raise ArgumentError, "Unknown value #{style} for style argument" end self else result = BorderStyle.new(1, nil, :solid, 0, 0) bc = if self[:Subtype] == :Widget (ac = self[:MK]) && (bc = ac[:BC]) else self[:C] end if bc && !bc.empty? result.color = Content::ColorSpace.prenormalized_device_color(bc.value) end if (bs = self[:BS]) result.width = bs[:W] if bs.key?(:W) result.style = case bs[:S] when :S then :solid when :B then :beveled when :I then :inset when :U then :underlined when :D then bs[:D].value else :solid end elsif key?(:Border) border = self[:Border] result.horizontal_corner_radius = border[0] result.vertical_corner_radius = border[1] result.width = border[2] result.style = border[3] if border[3] end result end end |