Commit 1251af4d authored by fmalita@chromium.org's avatar fmalita@chromium.org

Minor Gradient cleanup.

There is no need to manipulate the sorted state externally, we can
efficiently detect sorted color stops on the fly. This may also avoid
a sort pass in some cases.

R=pdr@chromium.org,schenney@chromium.org,rob.buis@samsung.com

Review URL: https://codereview.chromium.org/206493002

git-svn-id: svn://svn.chromium.org/blink/trunk@169660 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 97803235
...@@ -157,8 +157,6 @@ void CSSGradientValue::addStops(Gradient* gradient, const CSSToLengthConversionD ...@@ -157,8 +157,6 @@ void CSSGradientValue::addStops(Gradient* gradient, const CSSToLengthConversionD
gradient->addColorStop(offset, stop.m_resolvedColor); gradient->addColorStop(offset, stop.m_resolvedColor);
} }
// The back end already sorted the stops.
gradient->setStopsSorted(true);
return; return;
} }
...@@ -389,8 +387,6 @@ void CSSGradientValue::addStops(Gradient* gradient, const CSSToLengthConversionD ...@@ -389,8 +387,6 @@ void CSSGradientValue::addStops(Gradient* gradient, const CSSToLengthConversionD
for (unsigned i = 0; i < numStops; i++) for (unsigned i = 0; i < numStops; i++)
gradient->addColorStop(stops[i].offset, stops[i].color); gradient->addColorStop(stops[i].offset, stops[i].color);
gradient->setStopsSorted(true);
} }
static float positionFromValue(CSSPrimitiveValue* value, const CSSToLengthConversionData& conversionData, const IntSize& size, bool isHorizontal) static float positionFromValue(CSSPrimitiveValue* value, const CSSToLengthConversionData& conversionData, const IntSize& size, bool isHorizontal)
......
...@@ -68,27 +68,23 @@ Gradient::~Gradient() ...@@ -68,27 +68,23 @@ Gradient::~Gradient()
{ {
} }
void Gradient::addColorStop(float value, const Color& color) static inline bool compareStops(const Gradient::ColorStop& a, const Gradient::ColorStop& b)
{ {
m_stops.append(ColorStop(value, color)); return a.stop < b.stop;
m_stopsSorted = false;
m_gradient.clear();
} }
void Gradient::addColorStop(const Gradient::ColorStop& stop) void Gradient::addColorStop(const Gradient::ColorStop& stop)
{ {
m_stops.append(stop); if (m_stops.isEmpty()) {
m_stopsSorted = true;
} else {
m_stopsSorted = m_stopsSorted && compareStops(m_stops.last(), stop);
}
m_stopsSorted = false; m_stops.append(stop);
m_gradient.clear(); m_gradient.clear();
} }
static inline bool compareStops(const Gradient::ColorStop& a, const Gradient::ColorStop& b)
{
return a.stop < b.stop;
}
void Gradient::sortStopsIfNecessary() void Gradient::sortStopsIfNecessary()
{ {
if (m_stopsSorted) if (m_stopsSorted)
......
...@@ -65,7 +65,7 @@ public: ...@@ -65,7 +65,7 @@ public:
ColorStop(float s, const Color& c) : stop(s), color(c) { } ColorStop(float s, const Color& c) : stop(s), color(c) { }
}; };
void addColorStop(const ColorStop&); void addColorStop(const ColorStop&);
void addColorStop(float, const Color&); void addColorStop(float value, const Color& color) { addColorStop(ColorStop(value, color)); }
bool hasAlpha() const; bool hasAlpha() const;
bool shaderChanged() const { return !m_gradient; } bool shaderChanged() const { return !m_gradient; }
...@@ -115,8 +115,6 @@ public: ...@@ -115,8 +115,6 @@ public:
SkShader* shader(); SkShader* shader();
void setStopsSorted(bool s) { m_stopsSorted = s; }
void setDrawsInPMColorSpace(bool drawInPMColorSpace); void setDrawsInPMColorSpace(bool drawInPMColorSpace);
void setSpreadMethod(GradientSpreadMethod); void setSpreadMethod(GradientSpreadMethod);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment