SVG for C++
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | Protected Types | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
SVG::Element Class Reference

Abstract base class for all SVG elements. More...

#include <svg.hpp>

Inherits SVG::AttributeMap.

Inherited by SVG::Defs, SVG::Group, SVG::Polygon, SVG::SVG::Style, SVG::Shape, SVG::Symbol, SVG::Text, and SVG::Title.

Classes

class  BoundingBox
 Represents the top left and bottom right corners of a bounding rectangle. More...
 
class  ConstDepthFirstIterator
 
class  ConstDepthFirstRange
 
class  DepthFirstIterator
 
class  DepthFirstRange
 
struct  TraversalOptions
 

Public Types

using ChildList = std::vector< Element * >
 
using ConstChildList = std::vector< const Element * >
 
using ChildMap = std::map< std::string, ChildList >
 
using ConstChildMap = std::map< std::string, ConstChildList >
 

Public Member Functions

 Element (const Element &other)
 
 Element (Element &&other) noexcept
 
Elementoperator= (const Element &)=delete
 
Elementoperator= (Element &&other) noexcept
 
 Element (const char *id)
 
 operator std::string () const
 
std::unique_ptr< Elementclone_element () const
 
template<typename T , typename... Args>
T * add_child (Args &&... args)
 
template<typename T >
Elementoperator<< (T &&node)
 
template<typename T >
std::vector< T * > get_children ()
 
template<typename T >
std::vector< const T * > get_children () const
 
template<typename T >
std::vector< T * > get_immediate_children ()
 
template<typename T >
std::vector< const T * > get_immediate_children () const
 
Elementget_element_by_id (const std::string &id)
 
const Elementget_element_by_id (const std::string &id) const
 
std::vector< Element * > get_elements_by_class (const std::string &clsname)
 
std::vector< const Element * > get_elements_by_class (const std::string &clsname) const
 
const Elementparent () const
 
virtual ElementKind kind () const
 
Elementid (const std::string &value)
 
std::string id () const
 
void autoscale (const Margins &margins=DEFAULT_MARGINS)
 
void autoscale (const double margin)
 
void autoscale (const AutoscaleOptions &options)
 
void responsive_autoscale (const Margins &margins=DEFAULT_MARGINS)
 
void responsive_autoscale (const double margin)
 
void responsive_autoscale (const AutoscaleOptions &options)
 
Elementlayout_bbox (const BoundingBox &bbox)
 
Elementbbox_padding (const Margins &padding)
 
Elementbbox_padding (double padding)
 
Elementclear_layout_bbox ()
 
bool has_layout_bbox () const
 
BoundingBox layout_bbox () const
 
Elementsnap_to (const Element &target, RelativeAlignment relative, Point offset=Point(0, 0))
 
Elementsnap_to (const Element &target, Alignment alignment, Point offset=Point(0, 0))
 
Elementalign_to (const Element &target, Axis axis, Point offset=Point(0, 0))
 
Elementalign_to (const Element &target, Axis axis, Anchor anchor, Point offset=Point(0, 0))
 
TransformList transform_list ()
 
TransformList transform_list () const
 
TransformList transform ()
 
TransformList transform () const
 
virtual BoundingBox get_bbox () const
 
ChildMap get_children ()
 
ConstChildMap get_children () const
 
DepthFirstIterator begin ()
 
ConstDepthFirstIterator begin () const
 
DepthFirstIterator end ()
 
ConstDepthFirstIterator end () const
 
DepthFirstRange depth_first ()
 
DepthFirstRange depth_first (TraversalOptions options)
 
ConstDepthFirstRange depth_first () const
 
ConstDepthFirstRange depth_first (TraversalOptions options) const
 
DepthFirstRange descendants ()
 
DepthFirstRange descendants (TraversalOptions options)
 
ConstDepthFirstRange descendants () const
 
ConstDepthFirstRange descendants (TraversalOptions options) const
 
template<>
Element::ChildList get_immediate_children ()
 
template<>
Element::ConstChildList get_immediate_children () const
 
 AttributeMap ()=default
 
 AttributeMap (SVGAttrib _attr)
 
- Public Member Functions inherited from SVG::AttributeMap
 AttributeMap (SVGAttrib _attr)
 
const SVGAttrib & attrs () const
 
bool has_attr (const std::string &key) const
 
std::string get_attr (const std::string &key, const std::string &fallback="") const
 
template<typename T >
std::enable_if< detail::is_numeric_attr_type< T >::value, T >::type get_attr (const std::string &key, T fallback) const
 
template<typename T >
AttributeMapset_attr (const std::string key, T value)
 
AttributeMapset_attr (const std::string key, const Color &value)
 
AttributeMapset_attrs (std::initializer_list< std::pair< std::string, std::string > > values)
 
AttributeMapset_attrs (const SVGAttrib &values)
 
AttrSetter set_attr (const std::string key)
 
ClassList class_list ()
 
ClassList class_list () const
 
TransformList transform_list ()
 
TransformList transform_list () const
 
TransformList transform ()
 
TransformList transform () const
 
template<>
AttributeMapset_attr (const std::string key, const double value)
 
template<>
AttributeMapset_attr (const std::string key, const char *value)
 
template<>
AttributeMapset_attr (const std::string key, const std::string value)
 

Protected Types

using ChildIterator = std::vector< std::unique_ptr< Element > >::iterator
 

Protected Member Functions

std::vector< Element * > get_children_helper ()
 
std::vector< const Element * > get_children_helper () const
 
BoundingBox get_autoscale_bbox () const
 
BoundingBox measured_layout_bbox () const
 
BoundingBox include_stroke_width (const BoundingBox &bbox) const
 
void autoscale_nested_svgs (const AutoscaleOptions &options, bool responsive)
 
void get_bbox (Element::BoundingBox &, bool visible_only=true) const
 
void set_viewbox_from_bbox (const BoundingBox &bbox, const Margins &margins)
 
virtual std::string svg_to_string (const size_t indent_level) const
 
virtual std::string tag ()
 
virtual std::string tag () const
 
virtual std::unique_ptr< Elementclone_element_impl () const
 
template<typename T >
std::unique_ptr< T > clone_as () const
 
void set_attr_value (const std::string &key, const std::string &value) override
 
AttrSetter make_attr_setter (const std::string &key) override
 
SVGowner_svg ()
 
const SVGowner_svg () const
 
void set_owner_svg (SVG *owner)
 
void register_subtree_ids ()
 
void unregister_subtree_ids ()
 
void register_own_id ()
 
void unregister_own_id ()
 
void clear_children ()
 
Elementinsert_child (std::unique_ptr< Element > child, ChildIterator position)
 
void reparent_children ()
 
double find_numeric (const std::string &key) const
 
- Protected Member Functions inherited from SVG::AttributeMap
SVGAttrib & mutable_attrs ()
 

Static Protected Member Functions

static detail::AffineTransform transform_for (const Element *element, const detail::AffineTransform &parent_transform)
 

Protected Attributes

std::vector< std::unique_ptr< Element > > children
 

Detailed Description

Abstract base class for all SVG elements.

Member Typedef Documentation

◆ ChildIterator

using SVG::Element::ChildIterator = std::vector<std::unique_ptr<Element> >::iterator
protected

Smart pointers to child elements

Constructor & Destructor Documentation

◆ Element()

SVG::Element::Element ( const Element other)
inline

Copy attributes and deep-copy children without carrying parent or owner indexes.

Member Function Documentation

◆ add_child()

template<typename T , typename... Args>
T * SVG::Element::add_child ( Args &&...  args)
inline

Add an SVG element as a child and return a pointer to the element added

◆ align_to() [1/2]

Element & SVG::Element::align_to ( const Element target,
Axis  axis,
Anchor  anchor,
Point  offset = Point(0, 0) 
)
inline

Align this element to a target axis using the same anchor on both elements.

◆ align_to() [2/2]

Element & SVG::Element::align_to ( const Element target,
Axis  axis,
Point  offset = Point(0, 0) 
)
inline

Align this element to a target axis, centered by default.

◆ autoscale() [1/2]

void SVG::Element::autoscale ( const AutoscaleOptions options)
inline

Autoscale with explicit layout behavior options.

Automatically set the width, height, and viewBox attribute of this item so that it can contain all of its children without clipping

Parameters
[in]optionsMargins and nested SVG autoscale behavior

◆ autoscale() [2/2]

void SVG::Element::autoscale ( const double  margin)
inline

Like other autoscale() but accepts margin as a percentage

◆ bbox_padding() [1/2]

Element & SVG::Element::bbox_padding ( const Margins padding)
inline

Inflate measured autoscale/layout bounds; explicit layout_bbox() overrides this padding.

◆ bbox_padding() [2/2]

Element & SVG::Element::bbox_padding ( double  padding)
inline

Inflate measured autoscale/layout bounds equally on every side.

◆ begin() [1/2]

Element::DepthFirstIterator SVG::Element::begin ( )
inline

Range-for iteration visits this element and descendants in depth-first document order.

◆ begin() [2/2]

Element::ConstDepthFirstIterator SVG::Element::begin ( ) const
inline

Range-for iteration visits this element and descendants in depth-first document order.

◆ clear_layout_bbox()

Element & SVG::Element::clear_layout_bbox ( )
inline

Remove an explicit autoscale/layout bound override.

◆ clone_element()

std::unique_ptr< Element > SVG::Element::clone_element ( ) const
inline

Return a type-preserving deep copy of this element subtree. Custom subclasses must override clone_element_impl(), usually by returning clone_as<Subclass>().

◆ depth_first() [1/4]

Element::DepthFirstRange SVG::Element::depth_first ( )
inline

Iterate through this element and its descendants in depth-first order.

◆ depth_first() [2/4]

Element::ConstDepthFirstRange SVG::Element::depth_first ( ) const
inline

Iterate through this element and its descendants in depth-first order.

◆ depth_first() [3/4]

Element::DepthFirstRange SVG::Element::depth_first ( TraversalOptions  options)
inline

Iterate through this element and its descendants with traversal options.

◆ depth_first() [4/4]

Element::ConstDepthFirstRange SVG::Element::depth_first ( TraversalOptions  options) const
inline

Iterate through this element and its descendants with traversal options.

◆ descendants() [1/4]

Element::DepthFirstRange SVG::Element::descendants ( )
inline

Iterate through descendants in depth-first order, excluding this element.

◆ descendants() [2/4]

Element::ConstDepthFirstRange SVG::Element::descendants ( ) const
inline

Iterate through descendants in depth-first order, excluding this element.

◆ descendants() [3/4]

Element::DepthFirstRange SVG::Element::descendants ( TraversalOptions  options)
inline

Iterate through descendants in depth-first order with traversal options.

◆ descendants() [4/4]

Element::ConstDepthFirstRange SVG::Element::descendants ( TraversalOptions  options) const
inline

Iterate through descendants in depth-first order with traversal options.

◆ find_numeric()

double SVG::Element::find_numeric ( const std::string &  key) const
inlineprotected

Return the numeric attribute (if it exists) or NAN

Parameters
[in]keyName of the attribute

◆ get_bbox() [1/2]

Element::BoundingBox SVG::Element::get_bbox ( ) const
inlinevirtual

Compute the bounding box necessary to contain this element

Reimplemented in SVG::Symbol, SVG::Use, SVG::SVG, and SVG::Text.

◆ get_bbox() [2/2]

void SVG::Element::get_bbox ( Element::BoundingBox box,
bool  visible_only = true 
) const
inlineprotected

Compute a transform-aware bounding box without recursive traversal.

◆ get_children() [1/4]

template<typename T >
std::vector< T * > SVG::Element::get_children ( )
inline

Return all children of type T

◆ get_children() [2/4]

Element::ChildMap SVG::Element::get_children ( )
inline

Recursively compute all of the children of an SVG element

◆ get_children() [3/4]

template<typename T >
std::vector< const T * > SVG::Element::get_children ( ) const
inline

Return all children of type T

◆ get_children() [4/4]

Element::ConstChildMap SVG::Element::get_children ( ) const
inline

Recursively compute all of the children of an SVG element

◆ get_children_helper() [1/2]

std::vector< Element * > SVG::Element::get_children_helper ( )
inlineprotected

Helper function which populates a std::deque with all of an Element's children

◆ get_children_helper() [2/2]

std::vector< const Element * > SVG::Element::get_children_helper ( ) const
inlineprotected

Helper function which populates a std::deque with all of an Element's children

◆ get_element_by_id() [1/2]

Element * SVG::Element::get_element_by_id ( const std::string &  id)
inline

Return the SVG element that has a certain id

◆ get_element_by_id() [2/2]

const Element * SVG::Element::get_element_by_id ( const std::string &  id) const
inline

Return the SVG element that has a certain id

◆ get_elements_by_class() [1/2]

std::vector< Element * > SVG::Element::get_elements_by_class ( const std::string &  clsname)
inline

Return all SVG elements with a certain class name

◆ get_elements_by_class() [2/2]

std::vector< const Element * > SVG::Element::get_elements_by_class ( const std::string &  clsname) const
inline

Return all SVG elements with a certain class name

◆ get_immediate_children() [1/4]

template<typename T >
std::vector< T * > SVG::Element::get_immediate_children ( )
inline

Return all immediate children of type T

◆ get_immediate_children() [2/4]

template<>
Element::ChildList SVG::Element::get_immediate_children ( )
inline

Return all immediate children, regardless of type, as Element pointers

◆ get_immediate_children() [3/4]

template<typename T >
std::vector< const T * > SVG::Element::get_immediate_children ( ) const
inline

Return all immediate children of type T

◆ get_immediate_children() [4/4]

template<>
Element::ConstChildList SVG::Element::get_immediate_children ( ) const
inline

Return all immediate children, regardless of type, as Element pointers

◆ has_layout_bbox()

bool SVG::Element::has_layout_bbox ( ) const
inline

Return true when autoscale/layout uses caller-provided bounds for this element.

◆ kind()

virtual ElementKind SVG::Element::kind ( ) const
inlinevirtual

Return the element category used by typed traversal; custom subclasses default to Custom.

Reimplemented in SVG::Defs, SVG::Symbol, SVG::Use, SVG::SVG::Style, SVG::SVG, SVG::Path, SVG::Text, SVG::Title, SVG::Group, SVG::Line, SVG::Rect, SVG::Circle, and SVG::Polygon.

◆ layout_bbox() [1/2]

Element::BoundingBox SVG::Element::layout_bbox ( ) const
inline

Return explicit autoscale/layout bounds, or this element's measured bounds when unset.

◆ layout_bbox() [2/2]

Element & SVG::Element::layout_bbox ( const BoundingBox bbox)
inline

Provide explicit bounds for autoscale/layout when built-in measurement is insufficient.

◆ make_attr_setter()

AttributeMap::AttrSetter SVG::Element::make_attr_setter ( const std::string &  key)
inlineoverrideprotectedvirtual

Reimplemented from SVG::AttributeMap.

◆ operator<<()

template<typename T >
Element & SVG::Element::operator<< ( T &&  node)
inline

Move an SVG element into this container

◆ responsive_autoscale() [1/3]

void SVG::Element::responsive_autoscale ( const AutoscaleOptions options)
inline

Set only the viewBox using explicit layout behavior options.

◆ responsive_autoscale() [2/3]

void SVG::Element::responsive_autoscale ( const double  margin)
inline

Set only the viewBox from content bounds and percentage margins.

◆ responsive_autoscale() [3/3]

void SVG::Element::responsive_autoscale ( const Margins margins = DEFAULT_MARGINS)
inline

Set only the viewBox from content bounds, leaving width and height unchanged.

◆ set_attr_value()

void SVG::Element::set_attr_value ( const std::string &  key,
const std::string &  value 
)
inlineoverrideprotectedvirtual

Reimplemented from SVG::AttributeMap.

◆ snap_to() [1/2]

Element & SVG::Element::snap_to ( const Element target,
Alignment  alignment,
Point  offset = Point(0, 0) 
)
inline

Snap this element using RelativeAlignment | Anchor.

◆ snap_to() [2/2]

Element & SVG::Element::snap_to ( const Element target,
RelativeAlignment  relative,
Point  offset = Point(0, 0) 
)
inline

Snap this element to a target side, centered along the target edge by default.

◆ svg_to_string()

std::string SVG::Element::svg_to_string ( const size_t  indent_level) const
inlineprotectedvirtual

Return the string representation of an SVG element

Parameters
[out]indent_levelThe current level of indentation

Reimplemented in SVG::SVG::Style, and SVG::Title.

◆ tag() [1/2]

virtual std::string SVG::Element::tag ( )
inlineprotectedvirtual

SVG string corresponding to this element

◆ tag() [2/2]

virtual std::string SVG::Element::tag ( ) const
inlineprotectedvirtual

The SVG tag of this element Const rendering remains compatible with custom subclasses that still override only non-const tag().


The documentation for this class was generated from the following file: