Remove "virtual" from all lines that have both "virtual" and "override".
[WebKit-https.git] / Source / WebCore / rendering / svg / RenderSVGResourceMarker.h
1 /*
2  * Copyright (C) Research In Motion Limited 2009-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 #ifndef RenderSVGResourceMarker_h
21 #define RenderSVGResourceMarker_h
22
23 #include "RenderSVGResourceContainer.h"
24 #include "SVGMarkerElement.h"
25
26 #include <wtf/HashSet.h>
27
28 namespace WebCore {
29
30 class AffineTransform;
31 class RenderObject;
32
33 class RenderSVGResourceMarker final : public RenderSVGResourceContainer {
34 public:
35     RenderSVGResourceMarker(SVGMarkerElement&, Ref<RenderStyle>&&);
36     virtual ~RenderSVGResourceMarker();
37
38     SVGMarkerElement& markerElement() const { return downcast<SVGMarkerElement>(RenderSVGResourceContainer::element()); }
39
40     void removeAllClientsFromCache(bool markForInvalidation = true) override;
41     void removeClientFromCache(RenderElement&, bool markForInvalidation = true) override;
42
43     void draw(PaintInfo&, const AffineTransform&);
44
45     // Calculates marker boundaries, mapped to the target element's coordinate space
46     FloatRect markerBoundaries(const AffineTransform& markerTransformation) const;
47
48     void applyViewportClip(PaintInfo&) override;
49     void layout() override;
50     void calcViewport() override;
51
52     const AffineTransform& localToParentTransform() const override;
53     AffineTransform markerTransformation(const FloatPoint& origin, float angle, float strokeWidth) const;
54
55     bool applyResource(RenderElement&, const RenderStyle&, GraphicsContext*&, unsigned short) override { return false; }
56     FloatRect resourceBoundingBox(const RenderObject&) override { return FloatRect(); }
57
58     FloatPoint referencePoint() const;
59     float angle() const;
60     SVGMarkerUnitsType markerUnits() const { return markerElement().markerUnits(); }
61
62     RenderSVGResourceType resourceType() const override { return MarkerResourceType; }
63
64 private:
65     void element() const = delete;
66
67     const char* renderName() const override { return "RenderSVGResourceMarker"; }
68
69     // Generates a transformation matrix usable to render marker content. Handles scaling the marker content
70     // acording to SVGs markerUnits="strokeWidth" concept, when a strokeWidth value != -1 is passed in.
71     AffineTransform markerContentTransformation(const AffineTransform& contentTransformation, const FloatPoint& origin, float strokeWidth = -1) const;
72
73     AffineTransform viewportTransform() const;
74
75     mutable AffineTransform m_localToParentTransform;
76     FloatRect m_viewport;
77 };
78
79 }
80
81 SPECIALIZE_TYPE_TRAITS_RENDER_SVG_RESOURCE(RenderSVGResourceMarker, MarkerResourceType)
82
83 #endif