Line data Source code
1 : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* libcdr
3 : * Version: MPL 1.1 / GPLv2+ / LGPLv2+
4 : *
5 : * The contents of this file are subject to the Mozilla Public License Version
6 : * 1.1 (the "License"); you may not use this file except in compliance with
7 : * the License or as specified alternatively below. You may obtain a copy of
8 : * the License at http://www.mozilla.org/MPL/
9 : *
10 : * Software distributed under the License is distributed on an "AS IS" basis,
11 : * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12 : * for the specific language governing rights and limitations under the
13 : * License.
14 : *
15 : * Major Contributor(s):
16 : * Copyright (C) 2012 Fridrich Strba <fridrich.strba@bluewin.ch>
17 : *
18 : *
19 : * All Rights Reserved.
20 : *
21 : * For minor contributions see the git repository.
22 : *
23 : * Alternatively, the contents of this file may be used under the terms of
24 : * either the GNU General Public License Version 2 or later (the "GPLv2+"), or
25 : * the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"),
26 : * in which case the provisions of the GPLv2+ or the LGPLv2+ are applicable
27 : * instead of those above.
28 : */
29 :
30 : #ifndef __CDRPATH_H__
31 : #define __CDRPATH_H__
32 :
33 : #include <vector>
34 : #include <libwpd/libwpd.h>
35 :
36 : #include "CDRTypes.h"
37 :
38 : namespace libcdr
39 : {
40 :
41 : class CDRTransform;
42 :
43 : class CDRPathElement
44 : {
45 : public:
46 0 : CDRPathElement() {}
47 0 : virtual ~CDRPathElement() {}
48 : virtual void writeOut(WPXPropertyListVector &vec) const = 0;
49 : virtual void transform(const CDRTransforms &trafos) = 0;
50 : virtual void transform(const CDRTransform &trafo) = 0;
51 : virtual CDRPathElement *clone() = 0;
52 : };
53 :
54 :
55 : class CDRPath : public CDRPathElement
56 : {
57 : public:
58 0 : CDRPath() : m_elements(), m_isClosed(false) {}
59 : CDRPath(const CDRPath &path);
60 : ~CDRPath();
61 :
62 : void appendMoveTo(double x, double y);
63 : void appendLineTo(double x, double y);
64 : void appendCubicBezierTo(double x1, double y1, double x2, double y2, double x, double y);
65 : void appendQuadraticBezierTo(double x1, double y1, double x, double y);
66 : void appendSplineTo(std::vector<std::pair<double, double> > &points);
67 : void appendArcTo(double rx, double ry, double rotation, bool longAngle, bool sweep, double x, double y);
68 : void appendClosePath();
69 : void appendPath(const CDRPath &path);
70 :
71 : void writeOut(WPXPropertyListVector &vec) const;
72 : void transform(const CDRTransforms &trafos);
73 : void transform(const CDRTransform &trafo);
74 : CDRPathElement *clone();
75 :
76 : void clear();
77 : bool empty() const;
78 : bool isClosed() const;
79 :
80 : private:
81 : CDRPath &operator=(const CDRPath &path);
82 :
83 : private:
84 : std::vector<CDRPathElement *> m_elements;
85 : bool m_isClosed;
86 : };
87 :
88 : } // namespace libcdr
89 :
90 : #endif /* __CDRPATH_H__ */
91 : /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
|