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 "RenderSVGResourceContainer.h"
#include "SVGPatternElement.h"
#include "SVGUnitTypes.h"
#include <wtf/HashMap.h>
#include <wtf/OwnPtr.h>
namespace WebCore {
struct PatternData {
RefPtr<Pattern> pattern;
};
struct PatternAttributes;
class RenderSVGResourcePattern : public RenderSVGResourceContainer {
public:
RenderSVGResourcePattern(SVGPatternElement*);
virtual ~RenderSVGResourcePattern();
virtual const char* renderName() const { return "RenderSVGResourcePattern"; }
virtual void invalidateClients();
virtual void invalidateClient(RenderObject*);
virtual bool applyResource(RenderObject*, RenderStyle*, GraphicsContext*&, unsigned short resourceMode);
virtual void postApplyResource(RenderObject*, GraphicsContext*&, unsigned short resourceMode);
virtual FloatRect resourceBoundingBox(RenderObject*) { return FloatRect(); }
virtual RenderSVGResourceType resourceType() const { return s_resourceType; }
static RenderSVGResourceType s_resourceType;
private:
PassOwnPtr<ImageBuffer> createTileImage(FloatRect& patternBoundaries, AffineTransform& patternTransform, const SVGPatternElement*, RenderObject*) const;
void buildPattern(PatternData*, const FloatRect& patternBoundaries, PassOwnPtr<ImageBuffer> tileImage) const;
FloatRect calculatePatternBoundariesIncludingOverflow(PatternAttributes&, const FloatRect& objectBoundingBox,
const AffineTransform& viewBoxCTM, const FloatRect& patternBoundaries) const;
HashMap<RenderObject*, PatternData*> m_pattern;
};
}
#endif
#endif