121939df44de1705786c545cd1bf519d47250322dBen Murdoch/*
221939df44de1705786c545cd1bf519d47250322dBen Murdoch * Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org>
321939df44de1705786c545cd1bf519d47250322dBen Murdoch * Copyright (C) Research In Motion Limited 2010. All rights reserved.
421939df44de1705786c545cd1bf519d47250322dBen Murdoch *
521939df44de1705786c545cd1bf519d47250322dBen Murdoch * This library is free software; you can redistribute it and/or
621939df44de1705786c545cd1bf519d47250322dBen Murdoch * modify it under the terms of the GNU Library General Public
721939df44de1705786c545cd1bf519d47250322dBen Murdoch * License as published by the Free Software Foundation; either
821939df44de1705786c545cd1bf519d47250322dBen Murdoch * version 2 of the License, or (at your option) any later version.
921939df44de1705786c545cd1bf519d47250322dBen Murdoch *
1021939df44de1705786c545cd1bf519d47250322dBen Murdoch * This library is distributed in the hope that it will be useful,
1121939df44de1705786c545cd1bf519d47250322dBen Murdoch * but WITHOUT ANY WARRANTY; without even the implied warranty of
1221939df44de1705786c545cd1bf519d47250322dBen Murdoch * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1321939df44de1705786c545cd1bf519d47250322dBen Murdoch * Library General Public License for more details.
1421939df44de1705786c545cd1bf519d47250322dBen Murdoch *
1521939df44de1705786c545cd1bf519d47250322dBen Murdoch * You should have received a copy of the GNU Library General Public License
1621939df44de1705786c545cd1bf519d47250322dBen Murdoch * along with this library; see the file COPYING.LIB.  If not, write to
1721939df44de1705786c545cd1bf519d47250322dBen Murdoch * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
1821939df44de1705786c545cd1bf519d47250322dBen Murdoch * Boston, MA 02110-1301, USA.
1921939df44de1705786c545cd1bf519d47250322dBen Murdoch */
2021939df44de1705786c545cd1bf519d47250322dBen Murdoch
2121939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "config.h"
2221939df44de1705786c545cd1bf519d47250322dBen Murdoch
2321939df44de1705786c545cd1bf519d47250322dBen Murdoch#if ENABLE(SVG)
2421939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "RenderSVGResourceLinearGradient.h"
2521939df44de1705786c545cd1bf519d47250322dBen Murdoch
2621939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "LinearGradientAttributes.h"
2721939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "SVGLinearGradientElement.h"
2821939df44de1705786c545cd1bf519d47250322dBen Murdoch
2921939df44de1705786c545cd1bf519d47250322dBen Murdochnamespace WebCore {
3021939df44de1705786c545cd1bf519d47250322dBen Murdoch
3121939df44de1705786c545cd1bf519d47250322dBen MurdochRenderSVGResourceType RenderSVGResourceLinearGradient::s_resourceType = LinearGradientResourceType;
3221939df44de1705786c545cd1bf519d47250322dBen Murdoch
3321939df44de1705786c545cd1bf519d47250322dBen MurdochRenderSVGResourceLinearGradient::RenderSVGResourceLinearGradient(SVGLinearGradientElement* node)
3421939df44de1705786c545cd1bf519d47250322dBen Murdoch    : RenderSVGResourceGradient(node)
3521939df44de1705786c545cd1bf519d47250322dBen Murdoch{
3621939df44de1705786c545cd1bf519d47250322dBen Murdoch}
3721939df44de1705786c545cd1bf519d47250322dBen Murdoch
3821939df44de1705786c545cd1bf519d47250322dBen MurdochRenderSVGResourceLinearGradient::~RenderSVGResourceLinearGradient()
3921939df44de1705786c545cd1bf519d47250322dBen Murdoch{
4021939df44de1705786c545cd1bf519d47250322dBen Murdoch}
4121939df44de1705786c545cd1bf519d47250322dBen Murdoch
42a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochvoid RenderSVGResourceLinearGradient::collectGradientAttributes(SVGGradientElement* gradientElement)
43a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{
44a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    m_attributes = LinearGradientAttributes();
45a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    static_cast<SVGLinearGradientElement*>(gradientElement)->collectGradientAttributes(m_attributes);
46a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch}
47a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
4821939df44de1705786c545cd1bf519d47250322dBen Murdochvoid RenderSVGResourceLinearGradient::buildGradient(GradientData* gradientData, SVGGradientElement* gradientElement) const
4921939df44de1705786c545cd1bf519d47250322dBen Murdoch{
5021939df44de1705786c545cd1bf519d47250322dBen Murdoch    SVGLinearGradientElement* linearGradientElement = static_cast<SVGLinearGradientElement*>(gradientElement);
5121939df44de1705786c545cd1bf519d47250322dBen Murdoch
5221939df44de1705786c545cd1bf519d47250322dBen Murdoch    // Determine gradient start/end points
5321939df44de1705786c545cd1bf519d47250322dBen Murdoch    FloatPoint startPoint;
5421939df44de1705786c545cd1bf519d47250322dBen Murdoch    FloatPoint endPoint;
55a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    linearGradientElement->calculateStartEndPoints(m_attributes, startPoint, endPoint);
5621939df44de1705786c545cd1bf519d47250322dBen Murdoch
5721939df44de1705786c545cd1bf519d47250322dBen Murdoch    gradientData->gradient = Gradient::create(startPoint, endPoint);
58a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    gradientData->gradient->setSpreadMethod(m_attributes.spreadMethod());
5921939df44de1705786c545cd1bf519d47250322dBen Murdoch
6021939df44de1705786c545cd1bf519d47250322dBen Murdoch    // Add stops
61a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    addStops(gradientData, m_attributes.stops());
6221939df44de1705786c545cd1bf519d47250322dBen Murdoch}
6321939df44de1705786c545cd1bf519d47250322dBen Murdoch
6421939df44de1705786c545cd1bf519d47250322dBen Murdoch}
6521939df44de1705786c545cd1bf519d47250322dBen Murdoch
6621939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif
67