RenderLayerFilterInfo.h [plain text]
#ifndef RenderLayerFilterInfo_h
#define RenderLayerFilterInfo_h
#if ENABLE(CSS_FILTERS)
#include "LayoutTypes.h"
#include <wtf/HashMap.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RefPtr.h>
#if ENABLE(CSS_SHADERS)
#include "CustomFilterProgramClient.h"
#endif
namespace WebCore {
class FilterEffectRenderer;
class FilterOperations;
class RenderLayer;
class RenderLayerFilterInfo;
typedef HashMap<const RenderLayer*, RenderLayerFilterInfo*> RenderLayerFilterInfoMap;
class RenderLayerFilterInfo
#if ENABLE(CSS_SHADERS)
: public CustomFilterProgramClient
#endif
{
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>);
#if ENABLE(CSS_SHADERS)
virtual void notifyCustomFilterProgramLoaded(CustomFilterProgram*);
void updateCustomFilterClients(const FilterOperations&);
void removeCustomFilterClients();
#endif
private:
RenderLayerFilterInfo(RenderLayer*);
~RenderLayerFilterInfo();
RenderLayer* m_layer;
RefPtr<FilterEffectRenderer> m_renderer;
LayoutRect m_dirtySourceRect;
#if ENABLE(CSS_SHADERS)
typedef Vector<RefPtr<CustomFilterProgram> > CustomFilterProgramList;
CustomFilterProgramList m_cachedCustomFilterPrograms;
#endif
static RenderLayerFilterInfoMap* s_filterMap;
};
}
#endif // ENABLE(CSS_FILTERS)
#endif // RenderLayerFilterInfo_h