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
gradient->addColorStop(offset, stop.m_resolvedColor);
}
// The back end already sorted the stops.
gradient->setStopsSorted(true);
return;
}
......@@ -389,8 +387,6 @@ void CSSGradientValue::addStops(Gradient* gradient, const CSSToLengthConversionD
for (unsigned i = 0; i < numStops; i++)
gradient->addColorStop(stops[i].offset, stops[i].color);
gradient->setStopsSorted(true);
}
static float positionFromValue(CSSPrimitiveValue* value, const CSSToLengthConversionData& conversionData, const IntSize& size, bool isHorizontal)
......
......@@ -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));
m_stopsSorted = false;
m_gradient.clear();
return a.stop < b.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();
}
static inline bool compareStops(const Gradient::ColorStop& a, const Gradient::ColorStop& b)
{
return a.stop < b.stop;
}
void Gradient::sortStopsIfNecessary()
{
if (m_stopsSorted)
......
......@@ -65,7 +65,7 @@ public:
ColorStop(float s, const Color& c) : stop(s), color(c) { }
};
void addColorStop(const ColorStop&);
void addColorStop(float, const Color&);
void addColorStop(float value, const Color& color) { addColorStop(ColorStop(value, color)); }
bool hasAlpha() const;
bool shaderChanged() const { return !m_gradient; }
......@@ -115,8 +115,6 @@ public:
SkShader* shader();
void setStopsSorted(bool s) { m_stopsSorted = s; }
void setDrawsInPMColorSpace(bool drawInPMColorSpace);
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