/src/libfreehand/src/lib/FHPath.h
Line | Count | Source |
1 | | /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
2 | | /* |
3 | | * This file is part of the libfreehand project. |
4 | | * |
5 | | * This Source Code Form is subject to the terms of the Mozilla Public |
6 | | * License, v. 2.0. If a copy of the MPL was not distributed with this |
7 | | * file, You can obtain one at http://mozilla.org/MPL/2.0/. |
8 | | */ |
9 | | |
10 | | #ifndef __FHPATH_H__ |
11 | | #define __FHPATH_H__ |
12 | | |
13 | | #include <memory> |
14 | | #include <vector> |
15 | | #include <ostream> |
16 | | |
17 | | #include <librevenge/librevenge.h> |
18 | | |
19 | | namespace libfreehand |
20 | | { |
21 | | |
22 | | struct FHTransform; |
23 | | |
24 | | class FHPathElement |
25 | | { |
26 | | public: |
27 | 62.8M | FHPathElement() {} |
28 | 62.8M | virtual ~FHPathElement() {} |
29 | | virtual void writeOut(librevenge::RVNGPropertyListVector &vec) const = 0; |
30 | | virtual void writeOut(std::ostream &s) const = 0; |
31 | | virtual void transform(const FHTransform &trafo) = 0; |
32 | | virtual FHPathElement *clone() = 0; |
33 | | virtual void getBoundingBox(double x0, double y0, double &px, double &py, double &qx, double &qy) const = 0; |
34 | | virtual double getX() const = 0; |
35 | | virtual double getY() const = 0; |
36 | | }; |
37 | | |
38 | | |
39 | | class FHPath |
40 | | { |
41 | | public: |
42 | 925k | FHPath() : m_elements(), m_isClosed(false), m_xFormId(0), m_graphicStyleId(0), m_evenOdd(false) {} |
43 | | FHPath(const FHPath &path); |
44 | | ~FHPath(); |
45 | | |
46 | | FHPath &operator=(const FHPath &path); |
47 | | |
48 | | void appendMoveTo(double x, double y); |
49 | | void appendLineTo(double x, double y); |
50 | | void appendCubicBezierTo(double x1, double y1, double x2, double y2, double x, double y); |
51 | | void appendQuadraticBezierTo(double x1, double y1, double x, double y); |
52 | | void appendArcTo(double rx, double ry, double rotation, bool longAngle, bool sweep, double x, double y); |
53 | | void appendClosePath(); |
54 | | void appendPath(const FHPath &path); |
55 | | void setXFormId(unsigned xFormId); |
56 | | void setGraphicStyleId(unsigned graphicStyleId); |
57 | | void setEvenOdd(bool evenOdd); |
58 | | |
59 | | void writeOut(librevenge::RVNGPropertyListVector &vec) const; |
60 | | std::string getPathString() const; |
61 | | void transform(const FHTransform &trafo); |
62 | | void getBoundingBox(double x0, double y0, double &xmin, double &ymin, double &xmax, double &ymax) const; |
63 | | double getX() const; |
64 | | double getY() const; |
65 | | |
66 | | void clear(); |
67 | | bool empty() const; |
68 | | bool isClosed() const; |
69 | | unsigned getXFormId() const; |
70 | | unsigned getGraphicStyleId() const; |
71 | | bool getEvenOdd() const; |
72 | | void getBoundingBox(double &xmin, double &ymin, double &xmax, double &ymax) const; |
73 | | |
74 | | private: |
75 | | std::vector<std::unique_ptr<FHPathElement>> m_elements; |
76 | | bool m_isClosed; |
77 | | unsigned m_xFormId; |
78 | | unsigned m_graphicStyleId; |
79 | | bool m_evenOdd; |
80 | | }; |
81 | | |
82 | | } // namespace libfreehand |
83 | | |
84 | | #endif /* __FHPATH_H__ */ |
85 | | /* vim:set shiftwidth=2 softtabstop=2 expandtab: */ |