esvg/esvg/Path.h

63 lines
1.9 KiB
C++

/**
* @author Edouard DUPIN
*
* @copyright 2011, Edouard DUPIN, all right reserved
*
* @license BSD v3 (see license file)
*/
#ifndef __ESVG_PATH_H__
#define __ESVG_PATH_H__
#include <esvg/Base.h>
#include <agg/agg_path_storage.h>
namespace esvg {
enum pathProperty{
pathStop,
pathMoveTo,
pathLineTo,
pathLineToH,
pathLineToV,
pathCurveTo,
pathSmothCurveTo,
pathBesizeCurveTo,
pathBesizeSmothCurveTo,
pathElliptic
};
class PathBasic {
public:
PathBasic(void) : m_cmd(esvg::pathStop), m_relative(false) {
for(int32_t iii=0; iii<7; ++iii) {
m_element[iii] = 0;
}
}
enum pathProperty m_cmd;
bool m_relative;
float m_element[7];
};
class Path : public esvg::Base {
private:
std::vector<PathBasic> m_listElement;
public:
Path(PaintState _parentPaintState);
~Path(void);
virtual bool parse(exml::Element * _element, agg::trans_affine& _parentTrans, etk::Vector2D<float>& _sizeMax);
virtual void display(int32_t _spacing);
virtual void aggDraw(esvg::Renderer& _myRenderer, agg::trans_affine& _basicTrans);
private:
void abstractMoveTo(agg::path_storage& _path, bool _rel, double _x, double _y);
void abstractLineTo(agg::path_storage& _path, bool _rel, double _x, double _y);
void abstractHLineTo(agg::path_storage& _path, bool _rel, double _x);
void abstractVLineTo(agg::path_storage& _path, bool _rel, double _y);
void abstractCurve3(agg::path_storage& _path, bool _rel, double _x1, double _y1, double _x, double _y);
void abstractCurve3(agg::path_storage& _path, bool _rel, double _x, double _y);
void abstractCurve4(agg::path_storage& _path, bool _rel, double _x1, double _y1, double _x2, double _y2, double _x, double _y);
void abstractCurve4(agg::path_storage& _path, bool _rel, double _x2, double _y2, double _x, double _y);
void abstractCloseSubpath(agg::path_storage& _path);
};
};
#endif