Build fix.
[WebKit-https.git] / WebCore / kcanvas / RenderPath.h
1 /*
2     Copyright (C) 2004, 2005 Nikolas Zimmermann <wildfox@kde.org>
3                   2004, 2005 Rob Buis <buis@kde.org>
4                   2005 Eric Seidel <eric.seidel@kdemail.net>
5                   2006 Apple Computer, Inc
6
7     This file is part of the KDE project
8
9     This library is free software; you can redistribute it and/or
10     modify it under the terms of the GNU Library General Public
11     License as published by the Free Software Foundation; either
12     version 2 of the License, or (at your option) any later version.
13
14     This library is distributed in the hope that it will be useful,
15     but WITHOUT ANY WARRANTY; without even the implied warranty of
16     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17     Library General Public License for more details.
18
19     You should have received a copy of the GNU Library General Public License
20     aint with this library; see the file COPYING.LIB.  If not, write to
21     the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
22     Boston, MA 02111-1307, USA.
23 */
24
25 #ifndef RenderPath_H
26 #define RenderPath_H
27 #ifdef SVG_SUPPORT
28
29 #include "AffineTransform.h"
30 #include "DeprecatedValueList.h"
31 #include "FloatRect.h"
32
33 #include "RenderObject.h"
34
35 namespace WebCore {
36
37 class FloatPoint;
38 class SVGStyledElement;
39
40 class Path;
41 class RenderSVGContainer;
42
43 class RenderPath : public RenderObject
44 {
45 public:
46     RenderPath(RenderStyle* style, SVGStyledElement *node);
47     virtual ~RenderPath();
48
49     // Hit-detection seperated for the fill and the stroke
50     virtual bool fillContains(const FloatPoint&, bool requiresFill = true) const;
51     virtual bool strokeContains(const FloatPoint&, bool requiresStroke = true) const;
52
53     // Returns an unscaled bounding box (not even including localTransform()) for this vector path
54     virtual FloatRect relativeBBox(bool includeStroke = true) const;
55
56     void setPath(const Path& newPath);
57     const Path& path() const;
58
59     virtual bool isRenderPath() const { return true; }
60     virtual const char *renderName() const { return "KCanvasItem"; }
61     
62     virtual AffineTransform localTransform() const;
63     virtual void setLocalTransform(const AffineTransform &matrix);
64     
65     virtual void layout();
66     virtual IntRect getAbsoluteRepaintRect();
67     virtual bool requiresLayer();
68     virtual short lineHeight(bool b, bool isRootLineBox = false) const;
69     virtual short baselinePosition(bool b, bool isRootLineBox = false) const;
70     virtual void paint(PaintInfo&, int parentX, int parentY);
71  
72     virtual void absoluteRects(Vector<IntRect>&, int tx, int ty);
73
74     virtual bool nodeAtPoint(NodeInfo&, int x, int y, int tx, int ty, HitTestAction);
75     
76     // FIXME: When the other SVG classes get pointer-events support this should be moved elsewhere
77     struct PointerEventsHitRules {
78         PointerEventsHitRules()
79         : requireVisible(false)
80         , requireFill(false)
81         , requireStroke(false)
82         , canHitStroke(false)
83         , canHitFill(false)
84     {}
85         
86         bool requireVisible;
87         bool requireFill;
88         bool requireStroke;
89         bool canHitStroke;
90         bool canHitFill;  
91     };
92
93     virtual void drawMarkersIfNeeded(GraphicsContext*, const FloatRect&, const Path&) const;
94     virtual FloatRect strokeBBox() const;
95
96     bool hasPercentageValues() const;
97
98 private:
99     FloatPoint mapAbsolutePointToLocal(const FloatPoint&) const;
100     
101     PointerEventsHitRules pointerEventsHitRules();
102
103     Path m_path;
104
105     mutable FloatRect m_fillBBox;
106     mutable FloatRect m_strokeBbox;
107     AffineTransform m_matrix;
108     IntRect m_absoluteBounds;
109 };
110
111 }
112
113 #endif // SVG_SUPPORT
114 #endif
115
116 // vim:ts=4:noet