#ifndef RenderLayerFilterInfo_h
#define RenderLayerFilterInfo_h
#include "core/dom/Element.h"
#include "core/fetch/DocumentResource.h"
#include "platform/geometry/LayoutRect.h"
#include "platform/graphics/filters/FilterOperation.h"
#include "wtf/HashMap.h"
#include "wtf/PassRefPtr.h"
#include "wtf/RefPtr.h"
namespace WebCore {
class FilterEffectRenderer;
class FilterOperations;
class RenderLayer;
class RenderLayerFilterInfo;
typedef HashMap<const RenderLayer*, RenderLayerFilterInfo*> RenderLayerFilterInfoMap;
class RenderLayerFilterInfo FINAL : public DocumentResourceClient {
public:
static RenderLayerFilterInfo* filterInfoForRenderLayer(const RenderLayer*);
static RenderLayerFilterInfo* createFilterInfoForRenderLayerIfNeeded(RenderLayer*);
static void removeFilterInfoForRenderLayer(RenderLayer*);
const LayoutRect& dirtySourceRect() const { return m_dirtySourceRect; }
void expandDirtySourceRect(const LayoutRect& rect) { m_dirtySourceRect.unite(rect); }
void resetDirtySourceRect() { m_dirtySourceRect = LayoutRect(); }
FilterEffectRenderer* renderer() const { return m_renderer.get(); }
void setRenderer(PassRefPtr<FilterEffectRenderer>);
void updateReferenceFilterClients(const FilterOperations&);
virtual void notifyFinished(Resource*) OVERRIDE;
void removeReferenceFilterClients();
private:
RenderLayerFilterInfo(RenderLayer*);
virtual ~RenderLayerFilterInfo();
RenderLayer* m_layer;
RefPtr<FilterEffectRenderer> m_renderer;
LayoutRect m_dirtySourceRect;
static RenderLayerFilterInfoMap* s_filterMap;
Vector<RefPtr<Element> > m_internalSVGReferences;
Vector<ResourcePtr<DocumentResource> > m_externalSVGReferences;
};
}
#endif