Use #pragma once in WebCore
[WebKit-https.git] / Source / WebCore / svg / SVGPathSegListBuilder.cpp
1 /*
2  * Copyright (C) 2002, 2003 The Karbon Developers
3  * Copyright (C) 2006 Alexander Kellett <lypanov@kde.org>
4  * Copyright (C) 2006, 2007 Rob Buis <buis@kde.org>
5  * Copyright (C) 2007, 2009, 2015 Apple Inc. All rights reserved.
6  * Copyright (C) Research In Motion Limited 2010. All rights reserved.
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Library General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Library General Public License for more details.
17  *
18  * You should have received a copy of the GNU Library General Public License
19  * along with this library; see the file COPYING.LIB.  If not, write to
20  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21  * Boston, MA 02110-1301, USA.
22  */
23
24 #include "config.h"
25 #include "SVGPathSegListBuilder.h"
26
27 #include "SVGPathElement.h"
28 #include "SVGPathSegArcAbs.h"
29 #include "SVGPathSegArcRel.h"
30 #include "SVGPathSegClosePath.h"
31 #include "SVGPathSegCurvetoCubicAbs.h"
32 #include "SVGPathSegCurvetoCubicRel.h"
33 #include "SVGPathSegCurvetoCubicSmoothAbs.h"
34 #include "SVGPathSegCurvetoCubicSmoothRel.h"
35 #include "SVGPathSegCurvetoQuadraticAbs.h"
36 #include "SVGPathSegCurvetoQuadraticRel.h"
37 #include "SVGPathSegCurvetoQuadraticSmoothAbs.h"
38 #include "SVGPathSegCurvetoQuadraticSmoothRel.h"
39 #include "SVGPathSegLinetoAbs.h"
40 #include "SVGPathSegLinetoHorizontalAbs.h"
41 #include "SVGPathSegLinetoHorizontalRel.h"
42 #include "SVGPathSegLinetoRel.h"
43 #include "SVGPathSegLinetoVerticalAbs.h"
44 #include "SVGPathSegLinetoVerticalRel.h"
45 #include "SVGPathSegList.h"
46 #include "SVGPathSegMovetoAbs.h"
47 #include "SVGPathSegMovetoRel.h"
48
49 namespace WebCore {
50
51 SVGPathSegListBuilder::SVGPathSegListBuilder(SVGPathElement& pathElement, SVGPathSegList& pathSegList, SVGPathSegRole role)
52     : m_pathElement(pathElement)
53     , m_pathSegList(pathSegList)
54     , m_pathSegRole(role)
55 {
56 }
57
58 void SVGPathSegListBuilder::moveTo(const FloatPoint& targetPoint, bool, PathCoordinateMode mode)
59 {
60     if (mode == AbsoluteCoordinates)
61         m_pathSegList.append(m_pathElement.createSVGPathSegMovetoAbs(targetPoint.x(), targetPoint.y(), m_pathSegRole));
62     else
63         m_pathSegList.append(m_pathElement.createSVGPathSegMovetoRel(targetPoint.x(), targetPoint.y(), m_pathSegRole));
64 }
65
66 void SVGPathSegListBuilder::lineTo(const FloatPoint& targetPoint, PathCoordinateMode mode)
67 {
68     if (mode == AbsoluteCoordinates)
69         m_pathSegList.append(m_pathElement.createSVGPathSegLinetoAbs(targetPoint.x(), targetPoint.y(), m_pathSegRole));
70     else
71         m_pathSegList.append(m_pathElement.createSVGPathSegLinetoRel(targetPoint.x(), targetPoint.y(), m_pathSegRole));
72 }
73
74 void SVGPathSegListBuilder::lineToHorizontal(float x, PathCoordinateMode mode)
75 {
76     if (mode == AbsoluteCoordinates)
77         m_pathSegList.append(m_pathElement.createSVGPathSegLinetoHorizontalAbs(x, m_pathSegRole));
78     else
79         m_pathSegList.append(m_pathElement.createSVGPathSegLinetoHorizontalRel(x, m_pathSegRole));
80 }
81
82 void SVGPathSegListBuilder::lineToVertical(float y, PathCoordinateMode mode)
83 {
84     if (mode == AbsoluteCoordinates)
85         m_pathSegList.append(m_pathElement.createSVGPathSegLinetoVerticalAbs(y, m_pathSegRole));
86     else
87         m_pathSegList.append(m_pathElement.createSVGPathSegLinetoVerticalRel(y, m_pathSegRole));
88 }
89
90 void SVGPathSegListBuilder::curveToCubic(const FloatPoint& point1, const FloatPoint& point2, const FloatPoint& targetPoint, PathCoordinateMode mode)
91 {
92     if (mode == AbsoluteCoordinates)
93         m_pathSegList.append(m_pathElement.createSVGPathSegCurvetoCubicAbs(targetPoint.x(), targetPoint.y(), point1.x(), point1.y(), point2.x(), point2.y(), m_pathSegRole));
94     else
95         m_pathSegList.append(m_pathElement.createSVGPathSegCurvetoCubicRel(targetPoint.x(), targetPoint.y(), point1.x(), point1.y(), point2.x(), point2.y(), m_pathSegRole));
96 }
97
98 void SVGPathSegListBuilder::curveToCubicSmooth(const FloatPoint& point2, const FloatPoint& targetPoint, PathCoordinateMode mode)
99 {
100     if (mode == AbsoluteCoordinates)
101         m_pathSegList.append(m_pathElement.createSVGPathSegCurvetoCubicSmoothAbs(targetPoint.x(), targetPoint.y(), point2.x(), point2.y(), m_pathSegRole));
102     else
103         m_pathSegList.append(m_pathElement.createSVGPathSegCurvetoCubicSmoothRel(targetPoint.x(), targetPoint.y(), point2.x(), point2.y(), m_pathSegRole));
104 }
105
106 void SVGPathSegListBuilder::curveToQuadratic(const FloatPoint& point1, const FloatPoint& targetPoint, PathCoordinateMode mode)
107 {
108     if (mode == AbsoluteCoordinates)
109         m_pathSegList.append(m_pathElement.createSVGPathSegCurvetoQuadraticAbs(targetPoint.x(), targetPoint.y(), point1.x(), point1.y(), m_pathSegRole));
110     else
111         m_pathSegList.append(m_pathElement.createSVGPathSegCurvetoQuadraticRel(targetPoint.x(), targetPoint.y(), point1.x(), point1.y(), m_pathSegRole));
112 }
113
114 void SVGPathSegListBuilder::curveToQuadraticSmooth(const FloatPoint& targetPoint, PathCoordinateMode mode)
115 {
116     if (mode == AbsoluteCoordinates)
117         m_pathSegList.append(m_pathElement.createSVGPathSegCurvetoQuadraticSmoothAbs(targetPoint.x(), targetPoint.y(), m_pathSegRole));
118     else
119         m_pathSegList.append(m_pathElement.createSVGPathSegCurvetoQuadraticSmoothRel(targetPoint.x(), targetPoint.y(), m_pathSegRole));
120 }
121
122 void SVGPathSegListBuilder::arcTo(float r1, float r2, float angle, bool largeArcFlag, bool sweepFlag, const FloatPoint& targetPoint, PathCoordinateMode mode)
123 {
124     if (mode == AbsoluteCoordinates)
125         m_pathSegList.append(m_pathElement.createSVGPathSegArcAbs(targetPoint.x(), targetPoint.y(), r1, r2, angle, largeArcFlag, sweepFlag, m_pathSegRole));
126     else
127         m_pathSegList.append(m_pathElement.createSVGPathSegArcRel(targetPoint.x(), targetPoint.y(), r1, r2, angle, largeArcFlag, sweepFlag, m_pathSegRole));
128 }
129
130 void SVGPathSegListBuilder::closePath()
131 {
132     m_pathSegList.append(m_pathElement.createSVGPathSegClosePath(m_pathSegRole));
133 }
134
135 }