RenderSVGResourcePattern.h [plain text]
#ifndef RenderSVGResourcePattern_h
#define RenderSVGResourcePattern_h
#if ENABLE(SVG)
#include "AffineTransform.h"
#include "FloatRect.h"
#include "ImageBuffer.h"
#include "Pattern.h"
#include "PatternAttributes.h"
#include "RenderSVGResourceContainer.h"
#include "SVGPatternElement.h"
#include "SVGUnitTypes.h"
#include <wtf/HashMap.h>
#include <wtf/OwnPtr.h>
namespace WebCore {
struct PatternData {
RefPtr<Pattern> pattern;
AffineTransform transform;
};
class RenderSVGResourcePattern : public RenderSVGResourceContainer {
public:
RenderSVGResourcePattern(SVGPatternElement*);
virtual const char* renderName() const { return "RenderSVGResourcePattern"; }
virtual void removeAllClientsFromCache(bool markForInvalidation = true);
virtual void removeClientFromCache(RenderObject*, bool markForInvalidation = true);
virtual bool applyResource(RenderObject*, RenderStyle*, GraphicsContext*&, unsigned short resourceMode);
virtual void postApplyResource(RenderObject*, GraphicsContext*&, unsigned short resourceMode, const Path*, const RenderSVGShape*);
virtual FloatRect resourceBoundingBox(RenderObject*) { return FloatRect(); }
virtual RenderSVGResourceType resourceType() const { return s_resourceType; }
static RenderSVGResourceType s_resourceType;
private:
bool buildTileImageTransform(RenderObject*, const PatternAttributes&, const SVGPatternElement*, FloatRect& patternBoundaries, AffineTransform& tileImageTransform) const;
PassOwnPtr<ImageBuffer> createTileImage(const PatternAttributes&, const FloatRect& tileBoundaries,
const FloatRect& absoluteTileBoundaries, const AffineTransform& tileImageTransform,
FloatRect& clampedAbsoluteTileBoundaries) const;
PatternData* buildPattern(RenderObject*, unsigned short resourceMode);
bool m_shouldCollectPatternAttributes : 1;
PatternAttributes m_attributes;
HashMap<RenderObject*, OwnPtr<PatternData> > m_patternMap;
};
}
#endif
#endif