Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1100)

Unified Diff: Source/core/platform/graphics/Pattern.cpp

Issue 18718002: Use RefPtr to manage shaders in Gradient and Pattern. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/platform/graphics/Pattern.cpp
diff --git a/Source/core/platform/graphics/Pattern.cpp b/Source/core/platform/graphics/Pattern.cpp
index 1256718db5fb8d8c3a8d84752611020c89e5fdf6..7e12c81354911ce96c2b8d646d1a070b4ca3735d 100644
--- a/Source/core/platform/graphics/Pattern.cpp
+++ b/Source/core/platform/graphics/Pattern.cpp
@@ -40,7 +40,6 @@ Pattern::Pattern(PassRefPtr<Image> image, bool repeatX, bool repeatY)
: m_tileImage(image)
, m_repeatX(repeatX)
, m_repeatY(repeatY)
- , m_pattern(0)
, m_externalMemoryAllocated(0)
{
ASSERT(m_tileImage);
@@ -48,25 +47,21 @@ Pattern::Pattern(PassRefPtr<Image> image, bool repeatX, bool repeatY)
Pattern::~Pattern()
{
- SkSafeUnref(m_pattern);
- m_pattern = 0;
- if (m_externalMemoryAllocated) {
+ if (m_externalMemoryAllocated)
v8::V8::AdjustAmountOfExternalAllocatedMemory(-m_externalMemoryAllocated);
- m_externalMemoryAllocated = 0;
- }
}
SkShader* Pattern::shader()
{
if (m_pattern)
- return m_pattern;
+ return m_pattern.get();
RefPtr<NativeImageSkia> image = m_tileImage->nativeImageForCurrentFrame();
// If we don't have a bitmap, return a transparent shader.
if (!image)
- m_pattern = new SkColorShader(SkColorSetARGB(0, 0, 0, 0));
+ m_pattern = adoptRef(new SkColorShader(SK_ColorTRANSPARENT));
else if (m_repeatX && m_repeatY)
- m_pattern = SkShader::CreateBitmapShader(image->bitmap(), SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode);
+ m_pattern = adoptRef(SkShader::CreateBitmapShader(image->bitmap(), SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode));
else {
// Skia does not have a "draw the tile only once" option. Clamp_TileMode
// repeats the last line of the image after drawing one tile. To avoid
@@ -88,14 +83,14 @@ SkShader* Pattern::shader()
SkCanvas canvas(bm2);
canvas.drawBitmap(image->bitmap(), 0, 0);
bm2.setImmutable();
- m_pattern = SkShader::CreateBitmapShader(bm2, tileModeX, tileModeY);
+ m_pattern = adoptRef(SkShader::CreateBitmapShader(bm2, tileModeX, tileModeY));
// Clamp to int, since that's what the adjust function takes.
m_externalMemoryAllocated = static_cast<int>(std::min(static_cast<size_t>(INT_MAX), bm2.getSafeSize()));
v8::V8::AdjustAmountOfExternalAllocatedMemory(m_externalMemoryAllocated);
}
m_pattern->setLocalMatrix(m_patternSpaceTransformation);
- return m_pattern;
+ return m_pattern.get();
}
void Pattern::setPatternSpaceTransform(const AffineTransform& patternSpaceTransformation)
« Source/core/platform/graphics/Gradient.cpp ('K') | « Source/core/platform/graphics/Pattern.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698