- add third_party src.
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / rendering / svg / RenderSVGViewportContainer.h
1 /*
2  * Copyright (C) 2004, 2005, 2007 Nikolas Zimmermann <zimmermann@kde.org>
3  * Copyright (C) 2004, 2005, 2007 Rob Buis <buis@kde.org>
4  * Copyright (C) 2009 Google, Inc.
5  * Copyright (C) 2009 Apple Inc. All rights reserved.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public License
18  * along with this library; see the file COPYING.LIB.  If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA 02110-1301, USA.
21  */
22
23 #ifndef RenderSVGViewportContainer_h
24 #define RenderSVGViewportContainer_h
25
26 #include "core/rendering/svg/RenderSVGContainer.h"
27
28 namespace WebCore {
29
30 // This is used for non-root <svg> elements and <marker> elements, neither of which are SVGTransformable
31 // thus we inherit from RenderSVGContainer instead of RenderSVGTransformableContainer
32 class RenderSVGViewportContainer FINAL : public RenderSVGContainer {
33 public:
34     explicit RenderSVGViewportContainer(SVGElement*);
35     FloatRect viewport() const { return m_viewport; }
36
37     bool isLayoutSizeChanged() const { return m_isLayoutSizeChanged; }
38     virtual bool didTransformToRootUpdate() { return m_didTransformToRootUpdate; }
39
40     virtual void determineIfLayoutSizeChanged();
41     virtual void setNeedsTransformUpdate() { m_needsTransformUpdate = true; }
42
43     virtual void paint(PaintInfo&, const LayoutPoint&) OVERRIDE;
44
45 private:
46     virtual bool isSVGViewportContainer() const { return true; }
47     virtual const char* renderName() const { return "RenderSVGViewportContainer"; }
48
49     AffineTransform viewportTransform() const;
50     virtual const AffineTransform& localToParentTransform() const { return m_localToParentTransform; }
51
52     virtual void calcViewport();
53     virtual bool calculateLocalTransform();
54
55     virtual void applyViewportClip(PaintInfo&);
56     virtual bool pointIsInsideViewportClip(const FloatPoint& pointInParent);
57
58     FloatRect m_viewport;
59     mutable AffineTransform m_localToParentTransform;
60     bool m_didTransformToRootUpdate : 1;
61     bool m_isLayoutSizeChanged : 1;
62     bool m_needsTransformUpdate : 1;
63 };
64
65 DEFINE_RENDER_OBJECT_TYPE_CASTS(RenderSVGViewportContainer, isSVGViewportContainer());
66
67 } // namespace WebCore
68
69 #endif // RenderSVGViewportContainer_h