RenderSVGResourceMasker.h [plain text]
#ifndef RenderSVGResourceMasker_h
#define RenderSVGResourceMasker_h
#include "GraphicsContext.h"
#include "ImageBuffer.h"
#include "IntSize.h"
#include "RenderSVGResourceContainer.h"
#include "SVGMaskElement.h"
#include "SVGUnitTypes.h"
#include <wtf/HashMap.h>
namespace WebCore {
struct MaskerData {
std::unique_ptr<ImageBuffer> maskImage;
};
class RenderSVGResourceMasker final : public RenderSVGResourceContainer {
public:
RenderSVGResourceMasker(SVGMaskElement&, PassRef<RenderStyle>);
virtual ~RenderSVGResourceMasker();
SVGMaskElement& maskElement() const { return toSVGMaskElement(RenderSVGResourceContainer::element()); }
virtual void removeAllClientsFromCache(bool markForInvalidation = true) override;
virtual void removeClientFromCache(RenderElement&, bool markForInvalidation = true) override;
virtual bool applyResource(RenderElement&, const RenderStyle&, GraphicsContext*&, unsigned short resourceMode) override;
virtual FloatRect resourceBoundingBox(const RenderObject&) override;
SVGUnitTypes::SVGUnitType maskUnits() const { return maskElement().maskUnits(); }
SVGUnitTypes::SVGUnitType maskContentUnits() const { return maskElement().maskContentUnits(); }
virtual RenderSVGResourceType resourceType() const { return s_resourceType; }
static RenderSVGResourceType s_resourceType;
private:
void element() const = delete;
virtual const char* renderName() const override { return "RenderSVGResourceMasker"; }
bool drawContentIntoMaskImage(MaskerData*, ColorSpace, RenderObject*);
void calculateMaskContentRepaintRect();
FloatRect m_maskContentBoundaries;
HashMap<RenderObject*, std::unique_ptr<MaskerData>> m_masker;
};
}
#endif