class Prawn::SVG::Elements::Marker
Public Instance Methods
apply_marker(element, point: nil, angle: 0)
click to toggle source
# File lib/prawn/svg/elements/marker.rb, line 11 def apply_marker(element, point: nil, angle: 0) sizing = Prawn::SVG::Calculators::DocumentSizing.new([0, 0], attributes) sizing.document_width = attributes["markerWidth"] || 3 sizing.document_height = attributes["markerHeight"] || 3 sizing.calculate if sizing.invalid? document.warnings << "<marker> cannot be rendered due to invalid sizing information" return end element.new_call_context_from_base do element.add_call 'save' # LATER : these will probably change when we separate out properties from attributes element.parse_transform_attribute_and_call element.parse_opacity_attributes_and_call element.parse_clip_path_attribute_and_call element.add_call 'transformation_matrix', 1, 0, 0, 1, point[0], -point[1] if attributes['orient'] != 'auto' angle = attributes['orient'].to_f # defaults to 0 if not specified end element.push_call_position element.add_call_and_enter 'rotate', -angle, origin: [0, y('0')] if angle != 0 if attributes['markerUnits'] != 'userSpaceOnUse' scale = element.state.stroke_width element.add_call 'transformation_matrix', scale, 0, 0, scale, 0, 0 end ref_x = x_pixels(attributes['refX']) || 0 ref_y = y_pixels(attributes['refY']) || 0 element.add_call 'transformation_matrix', 1, 0, 0, 1, -ref_x * sizing.x_scale, ref_y * sizing.y_scale # `overflow: visible` must be on the <marker> element if properties.overflow != 'visible' point = [sizing.x_offset * sizing.x_scale, y(sizing.y_offset * sizing.y_scale)] element.add_call "rectangle", point, sizing.output_width, sizing.output_height element.add_call "clip" end element.add_call 'transformation_matrix', sizing.x_scale, 0, 0, sizing.y_scale, 0, 0 new_state = state.dup new_state.computed_properties = computed_properties.dup container = Prawn::SVG::Elements::Container.new(document, nil, [], new_state) container.properties.compute_properties(new_state.computed_properties) container.parse_and_apply container.add_calls_from_element(self) element.add_calls_from_element(container) element.pop_call_position element.add_call 'restore' end end
container?()
click to toggle source
# File lib/prawn/svg/elements/marker.rb, line 7 def container? true end
parse()
click to toggle source
# File lib/prawn/svg/elements/marker.rb, line 2 def parse properties.display = 'none' computed_properties.display = 'none' end