Introduce RENDER_OBJECT_TYPE_CASTS to replace manual toFoo() in child render object
[WebKit-https.git] / Source / WebCore / rendering / svg / RenderSVGImage.h
1 /*
2  * Copyright (C) 2006 Alexander Kellett <lypanov@kde.org>
3  * Copyright (C) 2006, 2009 Apple Inc. All rights reserved.
4  * Copyright (C) 2007 Rob Buis <buis@kde.org>
5  * Copyright (C) 2009 Google, Inc.
6  * Copyright (C) 2010 Patrick Gansterer <paroga@paroga.com>
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 #ifndef RenderSVGImage_h
25 #define RenderSVGImage_h
26
27 #if ENABLE(SVG)
28 #include "AffineTransform.h"
29 #include "FloatRect.h"
30 #include "RenderSVGModelObject.h"
31 #include "SVGPreserveAspectRatio.h"
32 #include "SVGRenderSupport.h"
33
34 namespace WebCore {
35
36 class RenderImageResource;
37 class SVGImageElement;
38
39 class RenderSVGImage FINAL : public RenderSVGModelObject {
40 public:
41     explicit RenderSVGImage(SVGImageElement&);
42     virtual ~RenderSVGImage();
43
44     SVGImageElement& imageElement() const;
45
46     bool updateImageViewport();
47     virtual void setNeedsBoundariesUpdate() { m_needsBoundariesUpdate = true; }
48     virtual bool needsBoundariesUpdate() OVERRIDE { return m_needsBoundariesUpdate; }
49     virtual void setNeedsTransformUpdate() { m_needsTransformUpdate = true; }
50
51     RenderImageResource* imageResource() { return m_imageResource.get(); }
52     const RenderImageResource* imageResource() const { return m_imageResource.get(); }
53
54     // Note: Assumes the PaintInfo context has had all local transforms applied.
55     void paintForeground(PaintInfo&);
56
57 private:
58     void element() const WTF_DELETED_FUNCTION;
59
60     virtual const char* renderName() const { return "RenderSVGImage"; }
61     virtual bool isSVGImage() const OVERRIDE { return true; }
62     virtual bool canHaveChildren() const OVERRIDE { return false; }
63
64     virtual const AffineTransform& localToParentTransform() const { return m_localTransform; }
65
66     virtual FloatRect objectBoundingBox() const { return m_objectBoundingBox; }
67     virtual FloatRect strokeBoundingBox() const { return m_objectBoundingBox; }
68     virtual FloatRect repaintRectInLocalCoordinates() const { return m_repaintBoundingBox; }
69     virtual FloatRect repaintRectInLocalCoordinatesExcludingSVGShadow() const OVERRIDE { return m_repaintBoundingBoxExcludingShadow; }
70
71     virtual void addFocusRingRects(Vector<IntRect>&, const LayoutPoint& additionalOffset, const RenderLayerModelObject* paintContainer = 0) OVERRIDE;
72
73     virtual void imageChanged(WrappedImagePtr, const IntRect* = 0);
74
75     virtual void layout();
76     virtual void paint(PaintInfo&, const LayoutPoint&);
77
78     void invalidateBufferedForeground();
79
80     virtual bool nodeAtFloatPoint(const HitTestRequest&, HitTestResult&, const FloatPoint& pointInParent, HitTestAction);
81
82     virtual AffineTransform localTransform() const { return m_localTransform; }
83     void calculateImageViewport();
84
85     bool m_needsBoundariesUpdate : 1;
86     bool m_needsTransformUpdate : 1;
87     AffineTransform m_localTransform;
88     FloatRect m_objectBoundingBox;
89     FloatRect m_repaintBoundingBox;
90     FloatRect m_repaintBoundingBoxExcludingShadow;
91     OwnPtr<RenderImageResource> m_imageResource;
92
93     OwnPtr<ImageBuffer> m_bufferedForeground;
94 };
95
96 RENDER_OBJECT_TYPE_CASTS(RenderSVGImage, isSVGImage())
97
98 } // namespace WebCore
99
100 #endif // ENABLE(SVG)
101 #endif // RenderSVGImage_h