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

Unified Diff: Source/core/platform/graphics/Gradient.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
« no previous file with comments | « Source/core/platform/graphics/Gradient.h ('k') | Source/core/platform/graphics/Pattern.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/platform/graphics/Gradient.cpp
diff --git a/Source/core/platform/graphics/Gradient.cpp b/Source/core/platform/graphics/Gradient.cpp
index bb110b747f16745aa69819896c8e4ad883c5d1a4..5a69dfd12b45629f753fec13d0c986e4484b1d27 100644
--- a/Source/core/platform/graphics/Gradient.cpp
+++ b/Source/core/platform/graphics/Gradient.cpp
@@ -53,7 +53,6 @@ Gradient::Gradient(const FloatPoint& p0, const FloatPoint& p1)
, m_spreadMethod(SpreadMethodPad)
, m_cachedHash(0)
, m_drawInPMColorSpace(false)
- , m_gradient(0)
{
}
@@ -68,19 +67,11 @@ Gradient::Gradient(const FloatPoint& p0, float r0, const FloatPoint& p1, float r
, m_spreadMethod(SpreadMethodPad)
, m_cachedHash(0)
, m_drawInPMColorSpace(false)
- , m_gradient(0)
{
}
Gradient::~Gradient()
{
- destroyShader();
-}
-
-void Gradient::destroyShader()
-{
- SkSafeUnref(m_gradient);
- m_gradient = 0;
}
void Gradient::adjustParametersForTiledDrawing(IntSize& size, FloatRect& srcRect)
@@ -115,7 +106,7 @@ void Gradient::addColorStop(float value, const Color& color)
m_stops.append(ColorStop(value, r, g, b, a));
m_stopsSorted = false;
- destroyShader();
+ m_gradient.clear();
invalidateHash();
}
@@ -125,7 +116,7 @@ void Gradient::addColorStop(const Gradient::ColorStop& stop)
m_stops.append(stop);
m_stopsSorted = false;
- destroyShader();
+ m_gradient.clear();
invalidateHash();
}
@@ -163,7 +154,7 @@ bool Gradient::hasAlpha() const
void Gradient::setSpreadMethod(GradientSpreadMethod spreadMethod)
{
// FIXME: Should it become necessary, allow calls to this method after m_gradient has been set.
- ASSERT(m_gradient == 0);
+ ASSERT(!m_gradient);
if (m_spreadMethod == spreadMethod)
return;
@@ -179,9 +170,7 @@ void Gradient::setDrawsInPMColorSpace(bool drawInPMColorSpace)
return;
m_drawInPMColorSpace = drawInPMColorSpace;
-
- if (m_gradient)
- destroyShader();
+ m_gradient.clear();
invalidateHash();
}
@@ -307,7 +296,7 @@ static void fillStops(const Gradient::ColorStop* stopData,
SkShader* Gradient::shader()
{
if (m_gradient)
- return m_gradient;
+ return m_gradient.get();
sortStopsIfNecessary();
ASSERT(m_stopsSorted);
@@ -340,14 +329,14 @@ SkShader* Gradient::shader()
if (m_radial) {
// Since the two-point radial gradient is slower than the plain radial,
// only use it if we have to.
- if (m_p0 == m_p1 && m_r0 <= 0.0f)
- m_gradient = SkGradientShader::CreateRadial(m_p1, m_r1, colors, pos, static_cast<int>(countUsed), tile, 0, shouldDrawInPMColorSpace);
- else {
+ if (m_p0 == m_p1 && m_r0 <= 0.0f) {
+ m_gradient = adoptRef(SkGradientShader::CreateRadial(m_p1, m_r1, colors, pos, static_cast<int>(countUsed), tile, 0, shouldDrawInPMColorSpace));
Stephen Chennney 2013/07/08 13:55:11 In Blink, a "Create..." method would return a Pass
jbroman 2013/07/08 13:59:19 Correct; these methods are defined in Skia, which
+ } else {
// The radii we give to Skia must be positive. If we're given a
// negative radius, ask for zero instead.
SkScalar radius0 = m_r0 >= 0.0f ? WebCoreFloatToSkScalar(m_r0) : 0;
SkScalar radius1 = m_r1 >= 0.0f ? WebCoreFloatToSkScalar(m_r1) : 0;
- m_gradient = SkGradientShader::CreateTwoPointConical(m_p0, radius0, m_p1, radius1, colors, pos, static_cast<int>(countUsed), tile, 0, shouldDrawInPMColorSpace);
+ m_gradient = adoptRef(SkGradientShader::CreateTwoPointConical(m_p0, radius0, m_p1, radius1, colors, pos, static_cast<int>(countUsed), tile, 0, shouldDrawInPMColorSpace));
}
if (aspectRatio() != 1) {
@@ -360,15 +349,16 @@ SkShader* Gradient::shader()
}
} else {
SkPoint pts[2] = { m_p0, m_p1 };
- m_gradient = SkGradientShader::CreateLinear(pts, colors, pos, static_cast<int>(countUsed), tile, 0, shouldDrawInPMColorSpace);
+ m_gradient = adoptRef(SkGradientShader::CreateLinear(pts, colors, pos, static_cast<int>(countUsed), tile, 0, shouldDrawInPMColorSpace));
}
- if (!m_gradient)
+ if (!m_gradient) {
// use last color, since our "geometry" was degenerate (e.g. radius==0)
- m_gradient = new SkColorShader(colors[countUsed - 1]);
- else
+ m_gradient = adoptRef(new SkColorShader(colors[countUsed - 1]));
+ } else {
m_gradient->setLocalMatrix(m_gradientSpaceTransformation);
- return m_gradient;
+ }
+ return m_gradient.get();
}
} //namespace
« no previous file with comments | « Source/core/platform/graphics/Gradient.h ('k') | Source/core/platform/graphics/Pattern.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698