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