RenderLayerFilters.h [plain text]
#pragma once
#include "CachedResourceHandle.h"
#include "CachedSVGDocumentClient.h"
#include "RenderLayer.h"
namespace WebCore {
class CachedSVGDocument;
class Element;
class FilterOperations;
class RenderLayerFilters final : private CachedSVGDocumentClient {
WTF_MAKE_FAST_ALLOCATED;
public:
explicit RenderLayerFilters(RenderLayer&);
virtual ~RenderLayerFilters();
const LayoutRect& dirtySourceRect() const { return m_dirtySourceRect; }
void expandDirtySourceRect(const LayoutRect& rect) { m_dirtySourceRect.unite(rect); }
CSSFilter* filter() const { return m_filter.get(); }
void setFilter(RefPtr<CSSFilter>&&);
bool hasFilterThatMovesPixels() const;
bool hasFilterThatShouldBeRestrictedBySecurityOrigin() const;
void updateReferenceFilterClients(const FilterOperations&);
void removeReferenceFilterClients();
void buildFilter(RenderElement&, float scaleFactor, RenderingMode);
LayoutRect repaintRect() const { return m_repaintRect; }
GraphicsContext* beginFilterEffect(GraphicsContext& destinationContext, const LayoutRect& filterBoxRect, const LayoutRect& dirtyRect, const LayoutRect& layerRepaintRect);
void applyFilterEffect(GraphicsContext& destinationContext);
private:
void notifyFinished(CachedResource&) final;
void resetDirtySourceRect() { m_dirtySourceRect = LayoutRect(); }
RenderLayer& m_layer;
Vector<RefPtr<Element>> m_internalSVGReferences;
Vector<CachedResourceHandle<CachedSVGDocument>> m_externalSVGReferences;
RefPtr<CSSFilter> m_filter;
LayoutRect m_dirtySourceRect;
LayoutPoint m_paintOffset;
LayoutRect m_repaintRect;
};
}