Use #pragma once in WebCore
[WebKit-https.git] / Source / WebCore / svg / SVGPathSegWithContext.h
1 /*
2  * Copyright (C) Research In Motion Limited 2010. All rights reserved.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public License
15  * along with this library; see the file COPYING.LIB.  If not, write to
16  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  */
19
20 #pragma once
21
22 #include "SVGAnimatedPathSegListPropertyTearOff.h"
23
24 namespace WebCore {
25
26 class SVGPathSegWithContext : public SVGPathSeg {
27 public:
28     SVGPathSegWithContext(const SVGPathElement& element, SVGPathSegRole role)
29         : m_role(role)
30         , m_element(element.createWeakPtr())
31     {
32     }
33
34     RefPtr<SVGAnimatedProperty> animatedProperty() const
35     {
36         if (!m_element)
37             return nullptr;
38
39         switch (m_role) {
40         case PathSegUndefinedRole:
41             return nullptr;
42         case PathSegUnalteredRole:
43             return SVGAnimatedProperty::lookupWrapper<SVGPathElement, SVGAnimatedPathSegListPropertyTearOff>(m_element.get(), SVGPathElement::dPropertyInfo());
44         case PathSegNormalizedRole:
45             // FIXME: https://bugs.webkit.org/show_bug.cgi?id=15412 - Implement normalized path segment lists!
46             return nullptr;
47         };
48
49         return nullptr;
50     }
51
52     SVGPathElement* contextElement() const { return m_element.get(); }
53     SVGPathSegRole role() const { return m_role; }
54
55     void setContextAndRole(SVGPathElement* element, SVGPathSegRole role)
56     {
57         m_role = role;
58         m_element = element ? element->createWeakPtr() : WeakPtr<SVGPathElement>();
59     }
60
61 protected:
62     void commitChange()
63     {
64         if (!m_element || m_role == PathSegUndefinedRole)
65             return;
66         m_element->pathSegListChanged(m_role);
67     }
68
69 private:
70     SVGPathSegRole m_role;
71     WeakPtr<SVGPathElement> m_element;
72 };
73
74 class SVGPathSegSingleCoordinate : public SVGPathSegWithContext { 
75 public:
76     float x() const { return m_x; }
77     void setX(float x)
78     {
79         m_x = x;
80         commitChange();
81     }
82
83     float y() const { return m_y; }
84     void setY(float y)
85     {
86         m_y = y;
87         commitChange();
88     }
89
90 protected:
91     SVGPathSegSingleCoordinate(const SVGPathElement& element, SVGPathSegRole role, float x, float y)
92         : SVGPathSegWithContext(element, role)
93         , m_x(x)
94         , m_y(y)
95     {
96     }
97
98 private:
99     float m_x;
100     float m_y;
101 };
102
103 } // namespace WebCore