CSSFilterImageValue.h [plain text]
#ifndef CSSFilterImageValue_h
#define CSSFilterImageValue_h
#if ENABLE(CSS_FILTERS)
#include "CSSImageGeneratorValue.h"
#include "CSSPrimitiveValue.h"
#include "CachedImageClient.h"
#include "CachedResourceHandle.h"
#include "FilterOperations.h"
#include "Image.h"
#include "ImageObserver.h"
namespace WebCore {
class CachedImage;
class FilterSubimageObserverProxy;
class RenderElement;
class Document;
class StyleResolver;
class CSSFilterImageValue : public CSSImageGeneratorValue {
friend class FilterSubimageObserverProxy;
public:
static PassRef<CSSFilterImageValue> create(PassRef<CSSValue> imageValue, PassRef<CSSValue> filterValue)
{
return adoptRef(*new CSSFilterImageValue(WTF::move(imageValue), WTF::move(filterValue)));
}
~CSSFilterImageValue();
String customCSSText() const;
PassRefPtr<Image> image(RenderElement*, const FloatSize&);
bool isFixedSize() const { return true; }
FloatSize fixedSize(const RenderElement*);
bool isPending() const;
bool knownToBeOpaque(const RenderElement*) const;
void loadSubimages(CachedResourceLoader*, const ResourceLoaderOptions&);
bool hasFailedOrCanceledSubresources() const;
bool equals(const CSSFilterImageValue&) const;
bool equalInputImages(const CSSFilterImageValue&) const;
void createFilterOperations(StyleResolver*);
const FilterOperations& filterOperations() const { return m_filterOperations; }
void setFilterOperations(const FilterOperations& filterOperations)
{
m_filterOperations = filterOperations;
}
CachedImage* cachedImage() const { return m_cachedImage.get(); }
private:
CSSFilterImageValue(PassRefPtr<CSSValue> imageValue, PassRefPtr<CSSValue> filterValue)
: CSSImageGeneratorValue(FilterImageClass)
, m_imageValue(imageValue)
, m_filterValue(filterValue)
, m_filterSubimageObserver(this)
{
}
class FilterSubimageObserverProxy : public CachedImageClient {
public:
FilterSubimageObserverProxy(CSSFilterImageValue* ownerValue)
: m_ownerValue(ownerValue)
, m_ready(false)
{
}
virtual ~FilterSubimageObserverProxy() { }
virtual void imageChanged(CachedImage*, const IntRect* = 0) override;
void setReady(bool ready) { m_ready = ready; }
private:
CSSFilterImageValue* m_ownerValue;
bool m_ready;
};
void filterImageChanged(const IntRect&);
RefPtr<CSSValue> m_imageValue;
RefPtr<CSSValue> m_filterValue;
FilterOperations m_filterOperations;
CachedResourceHandle<CachedImage> m_cachedImage;
RefPtr<Image> m_generatedImage;
FilterSubimageObserverProxy m_filterSubimageObserver;
};
CSS_VALUE_TYPE_CASTS(CSSFilterImageValue, isFilterImageValue())
}
#endif // ENABLE(CSS_FILTERS)
#endif // CSSFilterImageValue_h