18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
2d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007 Alp Toker <alp@atoker.com>
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Gradient.h"
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Color.h"
31d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "FloatRect.h"
32d0825bca7fe65beaee391d30da42e937db621564Steve Block#include <wtf/UnusedParam.h>
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectGradient::Gradient(const FloatPoint& p0, const FloatPoint& p1)
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : m_radial(false)
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_p0(p0)
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_p1(p1)
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_r0(0)
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_r1(0)
42cad810f21b803229eb11403f9209855525a25d57Steve Block    , m_aspectRatio(1)
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_stopsSorted(false)
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_lastStop(0)
458f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    , m_spreadMethod(SpreadMethodPad)
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    platformInit();
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
50cad810f21b803229eb11403f9209855525a25d57Steve BlockGradient::Gradient(const FloatPoint& p0, float r0, const FloatPoint& p1, float r1, float aspectRatio)
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : m_radial(true)
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_p0(p0)
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_p1(p1)
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_r0(r0)
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_r1(r1)
56cad810f21b803229eb11403f9209855525a25d57Steve Block    , m_aspectRatio(aspectRatio)
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_stopsSorted(false)
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_lastStop(0)
595f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    , m_spreadMethod(SpreadMethodPad)
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    platformInit();
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectGradient::~Gradient()
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    platformDestroy();
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
69d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid Gradient::adjustParametersForTiledDrawing(IntSize& size, FloatRect& srcRect)
70d0825bca7fe65beaee391d30da42e937db621564Steve Block{
71d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (m_radial)
72d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
73d0825bca7fe65beaee391d30da42e937db621564Steve Block
74d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (srcRect.isEmpty())
75d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
76d0825bca7fe65beaee391d30da42e937db621564Steve Block
77d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (m_p0.x() == m_p1.x()) {
78d0825bca7fe65beaee391d30da42e937db621564Steve Block        size.setWidth(1);
79d0825bca7fe65beaee391d30da42e937db621564Steve Block        srcRect.setWidth(1);
80d0825bca7fe65beaee391d30da42e937db621564Steve Block        srcRect.setX(0);
81d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
82d0825bca7fe65beaee391d30da42e937db621564Steve Block    }
83d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (m_p0.y() != m_p1.y())
84d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
85d0825bca7fe65beaee391d30da42e937db621564Steve Block
86d0825bca7fe65beaee391d30da42e937db621564Steve Block    size.setHeight(1);
87d0825bca7fe65beaee391d30da42e937db621564Steve Block    srcRect.setHeight(1);
88d0825bca7fe65beaee391d30da42e937db621564Steve Block    srcRect.setY(0);
89d0825bca7fe65beaee391d30da42e937db621564Steve Block}
90d0825bca7fe65beaee391d30da42e937db621564Steve Block
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Gradient::addColorStop(float value, const Color& color)
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float r;
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float g;
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float b;
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float a;
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    color.getRGBA(r, g, b, a);
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_stops.append(ColorStop(value, r, g, b, a));
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_stopsSorted = false;
10121939df44de1705786c545cd1bf519d47250322dBen Murdoch    platformDestroy();
10221939df44de1705786c545cd1bf519d47250322dBen Murdoch}
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
10421939df44de1705786c545cd1bf519d47250322dBen Murdochvoid Gradient::addColorStop(const Gradient::ColorStop& stop)
10521939df44de1705786c545cd1bf519d47250322dBen Murdoch{
10621939df44de1705786c545cd1bf519d47250322dBen Murdoch    m_stops.append(stop);
10721939df44de1705786c545cd1bf519d47250322dBen Murdoch
10821939df44de1705786c545cd1bf519d47250322dBen Murdoch    m_stopsSorted = false;
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    platformDestroy();
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic inline bool compareStops(const Gradient::ColorStop& a, const Gradient::ColorStop& b)
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return a.stop < b.stop;
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
117d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid Gradient::sortStopsIfNecessary()
118d0825bca7fe65beaee391d30da42e937db621564Steve Block{
119d0825bca7fe65beaee391d30da42e937db621564Steve Block    if (m_stopsSorted)
120d0825bca7fe65beaee391d30da42e937db621564Steve Block        return;
121d0825bca7fe65beaee391d30da42e937db621564Steve Block
122d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_stopsSorted = true;
12368513a70bcd92384395513322f1b801e7bf9c729Steve Block
12468513a70bcd92384395513322f1b801e7bf9c729Steve Block    if (!m_stops.size())
12568513a70bcd92384395513322f1b801e7bf9c729Steve Block        return;
12668513a70bcd92384395513322f1b801e7bf9c729Steve Block
12768513a70bcd92384395513322f1b801e7bf9c729Steve Block    // Shortcut for the ideal case (ordered 2-stop gradient)
12868513a70bcd92384395513322f1b801e7bf9c729Steve Block    if (m_stops.size() == 2 && compareStops(*m_stops.begin(), *m_stops.end()))
12968513a70bcd92384395513322f1b801e7bf9c729Steve Block        return;
13068513a70bcd92384395513322f1b801e7bf9c729Steve Block
13168513a70bcd92384395513322f1b801e7bf9c729Steve Block    std::stable_sort(m_stops.begin(), m_stops.end(), compareStops);
132d0825bca7fe65beaee391d30da42e937db621564Steve Block}
133d0825bca7fe65beaee391d30da42e937db621564Steve Block
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Gradient::getColor(float value, float* r, float* g, float* b, float* a) const
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT(value >= 0);
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT(value <= 1);
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (m_stops.isEmpty()) {
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        *r = 0;
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        *g = 0;
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        *b = 0;
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        *a = 0;
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!m_stopsSorted) {
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (m_stops.size())
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            std::stable_sort(m_stops.begin(), m_stops.end(), compareStops);
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        m_stopsSorted = true;
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (value <= 0 || value <= m_stops.first().stop) {
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        *r = m_stops.first().red;
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        *g = m_stops.first().green;
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        *b = m_stops.first().blue;
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        *a = m_stops.first().alpha;
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (value >= 1 || value >= m_stops.last().stop) {
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        *r = m_stops.last().red;
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        *g = m_stops.last().green;
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        *b = m_stops.last().blue;
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        *a = m_stops.last().alpha;
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Find stop before and stop after and interpolate.
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int stop = findStop(value);
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    const ColorStop& lastStop = m_stops[stop];
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    const ColorStop& nextStop = m_stops[stop + 1];
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float stopFraction = (value - lastStop.stop) / (nextStop.stop - lastStop.stop);
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    *r = lastStop.red + (nextStop.red - lastStop.red) * stopFraction;
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    *g = lastStop.green + (nextStop.green - lastStop.green) * stopFraction;
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    *b = lastStop.blue + (nextStop.blue - lastStop.blue) * stopFraction;
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    *a = lastStop.alpha + (nextStop.alpha - lastStop.alpha) * stopFraction;
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint Gradient::findStop(float value) const
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT(value >= 0);
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT(value <= 1);
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT(m_stopsSorted);
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int numStops = m_stops.size();
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT(numStops >= 2);
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT(m_lastStop < numStops - 1);
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int i = m_lastStop;
1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (value < m_stops[i].stop)
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        i = 1;
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    else
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        i = m_lastStop + 1;
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for (; i < numStops - 1; ++i)
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (value < m_stops[i].stop)
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            break;
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_lastStop = i - 1;
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_lastStop;
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
201e14391e94c850b8bd03680c23b38978db68687a8John Reckbool Gradient::hasAlpha() const
202e14391e94c850b8bd03680c23b38978db68687a8John Reck{
203e14391e94c850b8bd03680c23b38978db68687a8John Reck    for (size_t i = 0; i < m_stops.size(); i++) {
204e14391e94c850b8bd03680c23b38978db68687a8John Reck        if (m_stops[i].alpha < 1)
205e14391e94c850b8bd03680c23b38978db68687a8John Reck            return true;
206e14391e94c850b8bd03680c23b38978db68687a8John Reck    }
207e14391e94c850b8bd03680c23b38978db68687a8John Reck
208e14391e94c850b8bd03680c23b38978db68687a8John Reck    return false;
209e14391e94c850b8bd03680c23b38978db68687a8John Reck}
210e14391e94c850b8bd03680c23b38978db68687a8John Reck
2118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianvoid Gradient::setSpreadMethod(GradientSpreadMethod spreadMethod)
2128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{
2138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    // FIXME: Should it become necessary, allow calls to this method after m_gradient has been set.
2148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    ASSERT(m_gradient == 0);
2158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    m_spreadMethod = spreadMethod;
2168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian}
2178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
2188a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockvoid Gradient::setGradientSpaceTransform(const AffineTransform& gradientSpaceTransformation)
2190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_gradientSpaceTransformation = gradientSpaceTransformation;
2210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    setPlatformGradientSpaceTransform(gradientSpaceTransformation);
2220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
224ee56698cfd6b899a9065d40b908cde82bde63657John Reck#if !USE(SKIA) && !USE(CAIRO)
2258a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockvoid Gradient::setPlatformGradientSpaceTransform(const AffineTransform&)
2260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
2270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
2280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif
2290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} //namespace
232