RenderSVGResourceMasker.h [plain text]
#ifndef RenderSVGResourceMasker_h
#define RenderSVGResourceMasker_h
#if ENABLE(SVG)
#include "FloatRect.h"
#include "GraphicsContext.h"
#include "ImageBuffer.h"
#include "IntSize.h"
#include "RenderSVGResourceContainer.h"
#include "SVGMaskElement.h"
#include "SVGUnitTypes.h"
#include <wtf/HashMap.h>
#include <wtf/OwnPtr.h>
namespace WebCore {
struct MaskerData {
MaskerData()
: emptyMask(false)
{
}
OwnPtr<ImageBuffer> maskImage;
FloatRect maskRect;
bool emptyMask;
};
class RenderSVGResourceMasker : public RenderSVGResourceContainer {
public:
RenderSVGResourceMasker(SVGMaskElement*);
virtual ~RenderSVGResourceMasker();
virtual const char* renderName() const { return "RenderSVGResourceMasker"; }
virtual void invalidateClients();
virtual void invalidateClient(RenderObject*);
virtual bool applyResource(RenderObject*, RenderStyle*, GraphicsContext*&, unsigned short resourceMode);
virtual FloatRect resourceBoundingBox(RenderObject*);
SVGUnitTypes::SVGUnitType maskUnits() const { return toUnitType(static_cast<SVGMaskElement*>(node())->maskUnits()); }
SVGUnitTypes::SVGUnitType maskContentUnits() const { return toUnitType(static_cast<SVGMaskElement*>(node())->maskContentUnits()); }
virtual RenderSVGResourceType resourceType() const { return s_resourceType; }
static RenderSVGResourceType s_resourceType;
private:
void createMaskImage(MaskerData*, const SVGMaskElement*, RenderObject*);
void calculateMaskContentRepaintRect();
FloatRect m_maskBoundaries;
HashMap<RenderObject*, MaskerData*> m_masker;
};
}
#endif
#endif