Base.hpp
Go to the documentation of this file.
1 
8 #include <esvg/join.hpp>
9 #include <esvg/cap.hpp>
10 
11 #pragma once
12 
13 #include <etk/types.hpp>
14 #include <vector>
15 #include <etk/math/Vector2D.hpp>
16 #include <etk/math/Matrix2.hpp>
17 #include <etk/Color.hpp>
18 #include <esvg/render/Path.hpp>
19 
20 #include <exml/exml.hpp>
21 #include <esvg/Renderer.hpp>
22 #include <esvg/Dimension.hpp>
23 
24 namespace esvg {
25  extern const float kappa90;
26 
29  enum paint {
34  };
35 
36  class PaintState {
37  public:
38  PaintState();
39  void clear();
40  public:
41  std::pair<etk::Color<float,4>, std::string> fill;
42  std::pair<etk::Color<float,4>, std::string> stroke;
43  float strokeWidth;
44  bool flagEvenOdd;
45  enum esvg::cap lineCap;
46  enum esvg::join lineJoin;
47  float miterLimit;
48  std::pair<vec2, vec2> viewPort;
49  float opacity;
50  };
51 
52  class Base {
53  protected:
54  PaintState m_paint;
56  const char * spacingDist(int32_t _spacing);
57  public:
58  Base() {};
59  Base(PaintState _parentPaintState);
60  virtual ~Base() { };
66  virtual bool parseXML(const exml::Element& _element, mat2& _parentTrans, vec2& _sizeMax);
73  virtual void draw(esvg::Renderer& _myRenderer, mat2& _basicTrans, int32_t _level=1);
82  virtual void drawShapePoints(std::vector<std::vector<vec2>>& _out,
83  int32_t _recurtionMax,
84  float _threshold,
85  mat2& _basicTrans,
86  int32_t _level=1);
87 
88  virtual void display(int32_t _spacing) { };
89  void parseTransform(const exml::Element& _element);
96  void parsePosition(const exml::Element& _element, vec2 &_pos, vec2 &_size);
102  float parseLength(const std::string& _dataInput);
103  std::pair<float, enum esvg::distance> parseLength2(const std::string& _dataInput);
108  void parsePaintAttr(const exml::Element& _element);
114  std::pair<etk::Color<float,4>, std::string> parseColor(const std::string& _inputData);
115  protected:
116  std::string m_id;
117  public:
122  const std::string& getId() const;
127  void setId(const std::string& _newId);
128  };
129 };
Main esvg namespace.
Definition: Base.hpp:24
Painting a radial gradient.
Definition: Base.hpp:33
const float kappa90
proportional lenght to the radius of a bezier handle for 90° arcs.
No painting.
Definition: Base.hpp:30
Definition: Base.hpp:52
mat2 m_transformMatrix
specific render of the curent element
Definition: Base.hpp:55
Painting a color.
Definition: Base.hpp:31
Definition: Renderer.hpp:16
Painting a linear gradient.
Definition: Base.hpp:32
bool flagEvenOdd
Fill rules.
Definition: Base.hpp:44
Definition: Base.hpp:36
std::string m_id
unique ID of the element.
Definition: Base.hpp:116
paint
Painting mode of the Object:
Definition: Base.hpp:29
std::pair< vec2, vec2 > viewPort
min pos, max pos
Definition: Base.hpp:48