initial import
[vuplus_webkit] / Source / WebCore / rendering / svg / RenderSVGResourcePattern.h
1 /*
2  * Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org>
3  * Copyright (C) Research In Motion Limited 2010. All rights reserved.
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public License
16  * along with this library; see the file COPYING.LIB.  If not, write to
17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  */
20
21 #ifndef RenderSVGResourcePattern_h
22 #define RenderSVGResourcePattern_h
23
24 #if ENABLE(SVG)
25 #include "AffineTransform.h"
26 #include "FloatRect.h"
27 #include "ImageBuffer.h"
28 #include "Pattern.h"
29 #include "PatternAttributes.h"
30 #include "RenderSVGResourceContainer.h"
31 #include "SVGPatternElement.h"
32 #include "SVGUnitTypes.h"
33
34 #include <wtf/HashMap.h>
35 #include <wtf/OwnPtr.h>
36
37 namespace WebCore {
38
39 struct PatternData {
40     RefPtr<Pattern> pattern;
41     AffineTransform transform;
42 };
43
44 class RenderSVGResourcePattern : public RenderSVGResourceContainer {
45 public:
46     RenderSVGResourcePattern(SVGPatternElement*);
47     virtual ~RenderSVGResourcePattern();
48
49     virtual const char* renderName() const { return "RenderSVGResourcePattern"; }
50
51     virtual void removeAllClientsFromCache(bool markForInvalidation = true);
52     virtual void removeClientFromCache(RenderObject*, bool markForInvalidation = true);
53
54     virtual bool applyResource(RenderObject*, RenderStyle*, GraphicsContext*&, unsigned short resourceMode);
55     virtual void postApplyResource(RenderObject*, GraphicsContext*&, unsigned short resourceMode, const Path*);
56     virtual FloatRect resourceBoundingBox(RenderObject*) { return FloatRect(); }
57
58     virtual RenderSVGResourceType resourceType() const { return s_resourceType; }
59     static RenderSVGResourceType s_resourceType;
60
61 private:
62     bool buildTileImageTransform(RenderObject*, const PatternAttributes&, const SVGPatternElement*, FloatRect& patternBoundaries, AffineTransform& tileImageTransform) const;
63
64     PassOwnPtr<ImageBuffer> createTileImage(RenderObject*, const PatternAttributes&, const FloatRect& tileBoundaries,
65                                             const FloatRect& absoluteTileBoundaries, const AffineTransform& tileImageTransform) const;
66
67     bool m_shouldCollectPatternAttributes : 1;
68     PatternAttributes m_attributes;
69     HashMap<RenderObject*, PatternData*> m_pattern;
70 };
71
72 }
73
74 #endif
75 #endif