summaryrefslogtreecommitdiffstats
path: root/WebCore/platform
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2010-02-05 16:13:18 +0000
committerSteve Block <steveblock@google.com>2010-02-15 10:54:06 +0000
commit39cf4a175628e4fd54a93c2c642df8af6325c148 (patch)
treec63998151809fe7f8f80977f757326a662320f39 /WebCore/platform
parentb967d408980e3c7c4a122c30a7a9de486dd2edd3 (diff)
downloadexternal_webkit-39cf4a175628e4fd54a93c2c642df8af6325c148.zip
external_webkit-39cf4a175628e4fd54a93c2c642df8af6325c148.tar.gz
external_webkit-39cf4a175628e4fd54a93c2c642df8af6325c148.tar.bz2
Merge webkit.org at r54340 : Implement new Pattern methods for Android
See http://trac.webkit.org/changeset/54203 Change-Id: Ib68d10f5b7d045b19ae815613ffb0ff836aafe56
Diffstat (limited to 'WebCore/platform')
-rw-r--r--WebCore/platform/graphics/android/GraphicsContextAndroid.cpp4
-rw-r--r--WebCore/platform/graphics/android/PatternAndroid.cpp27
2 files changed, 23 insertions, 8 deletions
diff --git a/WebCore/platform/graphics/android/GraphicsContextAndroid.cpp b/WebCore/platform/graphics/android/GraphicsContextAndroid.cpp
index 76d3e73..c150ff4 100644
--- a/WebCore/platform/graphics/android/GraphicsContextAndroid.cpp
+++ b/WebCore/platform/graphics/android/GraphicsContextAndroid.cpp
@@ -333,8 +333,8 @@ static SkShader::TileMode SpreadMethod2TileMode(GradientSpreadMethod sm) {
static void extactShader(SkPaint* paint, Pattern* pat, Gradient* grad)
{
if (pat) {
- // createPlatformPattern() returns a new inst
- paint->setShader(pat->createPlatformPattern(TransformationMatrix()))->safeUnref();
+ // platformPattern() returns a cached obj
+ paint->setShader(pat->platformPattern(TransformationMatrix()));
} else if (grad) {
// grad->getShader() returns a cached obj
GradientSpreadMethod sm = grad->spreadMethod();
diff --git a/WebCore/platform/graphics/android/PatternAndroid.cpp b/WebCore/platform/graphics/android/PatternAndroid.cpp
index 58709fc..c80e0d1 100644
--- a/WebCore/platform/graphics/android/PatternAndroid.cpp
+++ b/WebCore/platform/graphics/android/PatternAndroid.cpp
@@ -40,16 +40,31 @@ static SkShader::TileMode toTileMode(bool doRepeat) {
return doRepeat ? SkShader::kRepeat_TileMode : SkShader::kClamp_TileMode;
}
-SkShader* Pattern::createPlatformPattern(const TransformationMatrix& ) const
+void Pattern::platformDestroy()
{
+ m_pattern->safeUnref();
+ m_pattern = 0;
+}
+
+SkShader* Pattern::platformPattern(const TransformationMatrix& )
+{
+ if (m_pattern)
+ return m_pattern;
+
SkBitmapRef* ref = tileImage()->nativeImageForCurrentFrame();
if (!ref)
return 0;
- SkShader* s = SkShader::CreateBitmapShader(ref->bitmap(),
- toTileMode(m_repeatX),
- toTileMode(m_repeatY));
- s->setLocalMatrix(m_patternSpaceTransformation);
- return s;
+ m_pattern = SkShader::CreateBitmapShader(ref->bitmap(),
+ toTileMode(m_repeatX),
+ toTileMode(m_repeatY));
+ m_pattern->setLocalMatrix(m_patternSpaceTransformation);
+ return m_pattern;
+}
+
+void Pattern::setPlatformPatternSpaceTransform()
+{
+ if (m_pattern)
+ m_pattern->setLocalMatrix(m_patternSpaceTransformation);
}
} //namespace