Index: Source/core/platform/graphics/DrawLooper.h |
diff --git a/Source/core/platform/graphics/DrawLooper.h b/Source/core/platform/graphics/DrawLooper.h |
index 97a3b0d4f7b9cb969075f6816825c7597de6c765..14d6cd109af8fb019770ff2a67bed4b15d807823 100644 |
--- a/Source/core/platform/graphics/DrawLooper.h |
+++ b/Source/core/platform/graphics/DrawLooper.h |
@@ -31,18 +31,22 @@ |
#ifndef DrawLooper_h |
#define DrawLooper_h |
+#include "SkRefCnt.h" |
+#include "core/platform/graphics/Color.h" |
+#include "core/platform/graphics/FloatSize.h" |
#include "wtf/Noncopyable.h" |
+#include "wtf/RefCounted.h" |
#include "wtf/RefPtr.h" |
+#include "wtf/Vector.h" |
+class SkBitmap; |
class SkDrawLooper; |
+class SkImageFilter; |
class SkLayerDrawLooper; |
namespace WebCore { |
-class Color; |
-class FloatSize; |
- |
-class DrawLooper { |
+class DrawLooper : public RefCounted<DrawLooper> { |
// Implementing the copy constructor properly would require writing code to |
// copy the underlying SkDrawLooper. |
WTF_MAKE_NONCOPYABLE(DrawLooper); |
@@ -63,14 +67,39 @@ public: |
// Callees should not modify this looper other than to iterate over it. |
// A downcast to SkLayerDrawLooper* is tantamount to a const_cast. |
SkDrawLooper* skDrawLooper() const; |
+ SkImageFilter* imageFilter() const; |
void addUnmodifiedContent(); |
void addShadow(const FloatSize& offset, float blur, const Color&, |
ShadowTransformMode = ShadowRespectsTransforms, |
ShadowAlphaMode = ShadowRespectsAlpha); |
+ bool shouldUseImageFilterToDrawBitmap(const SkBitmap&) const; |
+ |
private: |
- RefPtr<SkLayerDrawLooper> m_skDrawLooper; |
+ enum LayerType { |
+ ShadowLayer, |
+ UnmodifiedLayer |
+ }; |
+ void clearCached(); |
+ void buildCachedDrawLooper() const; |
+ void buildCachedImageFilter() const; |
+ |
+ struct DrawLooperLayerInfo { |
+ FloatSize m_offset; |
+ float m_blur; |
+ Color m_color; |
+ ShadowTransformMode m_shadowTransformMode; |
+ ShadowAlphaMode m_shadowAlphaMode; |
+ LayerType m_layerType; |
+ }; |
+ |
+ typedef Vector<DrawLooperLayerInfo, 2> LayerVector; |
+ |
+ LayerVector m_layerInfo; |
+ |
+ mutable RefPtr<SkLayerDrawLooper> m_cachedDrawLooper; |
+ mutable RefPtr<SkImageFilter> m_cachedImageFilter; |
}; |
} // namespace WebCore |