| Index: Source/platform/graphics/Gradient.cpp
|
| diff --git a/Source/platform/graphics/Gradient.cpp b/Source/platform/graphics/Gradient.cpp
|
| index ab3ac96cdaa7e9dd0126152b73766e29608b5c35..0741e855616bb1f6e756c5c9ee32b8dd92351708 100644
|
| --- a/Source/platform/graphics/Gradient.cpp
|
| +++ b/Source/platform/graphics/Gradient.cpp
|
| @@ -29,9 +29,9 @@
|
| #include "platform/graphics/Gradient.h"
|
|
|
| #include "platform/geometry/FloatRect.h"
|
| -#include "platform/graphics/Color.h"
|
| #include "platform/graphics/GraphicsContext.h"
|
| #include "platform/graphics/skia/SkiaUtils.h"
|
| +#include "third_party/skia/include/core/SkColor.h"
|
| #include "third_party/skia/include/core/SkColorShader.h"
|
| #include "third_party/skia/include/core/SkShader.h"
|
| #include "third_party/skia/include/effects/SkGradientShader.h"
|
| @@ -70,12 +70,7 @@ Gradient::~Gradient()
|
|
|
| void Gradient::addColorStop(float value, const Color& color)
|
| {
|
| - float r;
|
| - float g;
|
| - float b;
|
| - float a;
|
| - color.getRGBA(r, g, b, a);
|
| - m_stops.append(ColorStop(value, r, g, b, a));
|
| + m_stops.append(ColorStop(value, color));
|
|
|
| m_stopsSorted = false;
|
| m_gradient.clear();
|
| @@ -110,7 +105,7 @@ void Gradient::sortStopsIfNecessary()
|
| bool Gradient::hasAlpha() const
|
| {
|
| for (size_t i = 0; i < m_stops.size(); i++) {
|
| - if (m_stops[i].alpha < 1)
|
| + if (m_stops[i].color.hasAlpha())
|
| return true;
|
| }
|
|
|
| @@ -147,16 +142,6 @@ void Gradient::setGradientSpaceTransform(const AffineTransform& gradientSpaceTra
|
| m_gradient->setLocalMatrix(affineTransformToSkMatrix(m_gradientSpaceTransformation));
|
| }
|
|
|
| -static inline U8CPU F2B(float x)
|
| -{
|
| - return static_cast<int>(x * 255);
|
| -}
|
| -
|
| -static SkColor makeSkColor(float a, float r, float g, float b)
|
| -{
|
| - return SkColorSetARGB(F2B(a), F2B(r), F2B(g), F2B(b));
|
| -}
|
| -
|
| // Determine the total number of stops needed, including pseudo-stops at the
|
| // ends as necessary.
|
| static size_t totalStopsNeeded(const Gradient::ColorStop* stopData, size_t count)
|
| @@ -173,6 +158,12 @@ static size_t totalStopsNeeded(const Gradient::ColorStop* stopData, size_t count
|
| return countUsed;
|
| }
|
|
|
| +// FIXME: This would be more at home as Color::operator SkColor.
|
| +static inline SkColor makeSkColor(const Color& c)
|
| +{
|
| + return SkColorSetARGB(c.alpha(), c.red(), c.green(), c.blue());
|
| +}
|
| +
|
| // Collect sorted stop position and color information into the pos and colors
|
| // buffers, ensuring stops at both 0.0 and 1.0. The buffers must be large
|
| // enough to hold information for all stops, including the new endpoints if
|
| @@ -185,7 +176,7 @@ static void fillStops(const Gradient::ColorStop* stopData,
|
| if (count < 1) {
|
| // A gradient with no stops must be transparent black.
|
| pos[0] = WebCoreFloatToSkScalar(0.0);
|
| - colors[0] = makeSkColor(0.0, 0.0, 0.0, 0.0);
|
| + colors[0] = SK_ColorTRANSPARENT;
|
| start = 1;
|
| } else if (stop->stop > 0.0) {
|
| // Copy the first stop to 0.0. The first stop position may have a slight
|
| @@ -193,13 +184,13 @@ static void fillStops(const Gradient::ColorStop* stopData,
|
| // 0.0 comes through cleanly and people aren't likely to want a gradient
|
| // with a stop at (0 + epsilon).
|
| pos[0] = WebCoreFloatToSkScalar(0.0);
|
| - colors[0] = makeSkColor(stop->alpha, stop->red, stop->green, stop->blue);
|
| + colors[0] = makeSkColor(stop->color);
|
| start = 1;
|
| }
|
|
|
| for (size_t i = start; i < start + count; i++) {
|
| pos[i] = WebCoreFloatToSkScalar(stop->stop);
|
| - colors[i] = makeSkColor(stop->alpha, stop->red, stop->green, stop->blue);
|
| + colors[i] = makeSkColor(stop->color);
|
| ++stop;
|
| }
|
|
|
|
|