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 37namespace WebCore { 38 39struct PatternData { 40 WTF_MAKE_FAST_ALLOCATED; 41public: 42 RefPtr<Pattern> pattern; 43 AffineTransform transform; 44}; 45 46class RenderSVGResourcePattern : public RenderSVGResourceContainer { 47public: 48 RenderSVGResourcePattern(SVGPatternElement*); 49 50 virtual const char* renderName() const { return "RenderSVGResourcePattern"; } 51 52 virtual void removeAllClientsFromCache(bool markForInvalidation = true); 53 virtual void removeClientFromCache(RenderObject*, bool markForInvalidation = true); 54 55 virtual bool applyResource(RenderObject*, RenderStyle*, GraphicsContext*&, unsigned short resourceMode); 56 virtual void postApplyResource(RenderObject*, GraphicsContext*&, unsigned short resourceMode, const Path*, const RenderSVGShape*); 57 virtual FloatRect resourceBoundingBox(RenderObject*) { return FloatRect(); } 58 59 virtual RenderSVGResourceType resourceType() const { return s_resourceType; } 60 static RenderSVGResourceType s_resourceType; 61 62private: 63 bool buildTileImageTransform(RenderObject*, const PatternAttributes&, const SVGPatternElement*, FloatRect& patternBoundaries, AffineTransform& tileImageTransform) const; 64 65 PassOwnPtr<ImageBuffer> createTileImage(const PatternAttributes&, const FloatRect& tileBoundaries, 66 const FloatRect& absoluteTileBoundaries, const AffineTransform& tileImageTransform, 67 FloatRect& clampedAbsoluteTileBoundaries) const; 68 69 PatternData* buildPattern(RenderObject*, unsigned short resourceMode); 70 71 bool m_shouldCollectPatternAttributes : 1; 72 PatternAttributes m_attributes; 73 HashMap<RenderObject*, OwnPtr<PatternData> > m_patternMap; 74}; 75 76} 77 78#endif 79#endif 80