121939df44de1705786c545cd1bf519d47250322dBen Murdoch/* 221939df44de1705786c545cd1bf519d47250322dBen Murdoch * Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org> 365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2008 Eric Seidel <eric@webkit.org> 421939df44de1705786c545cd1bf519d47250322dBen Murdoch * Copyright (C) Research In Motion Limited 2010. All rights reserved. 521939df44de1705786c545cd1bf519d47250322dBen Murdoch * 621939df44de1705786c545cd1bf519d47250322dBen Murdoch * This library is free software; you can redistribute it and/or 721939df44de1705786c545cd1bf519d47250322dBen Murdoch * modify it under the terms of the GNU Library General Public 821939df44de1705786c545cd1bf519d47250322dBen Murdoch * License as published by the Free Software Foundation; either 921939df44de1705786c545cd1bf519d47250322dBen Murdoch * version 2 of the License, or (at your option) any later version. 1021939df44de1705786c545cd1bf519d47250322dBen Murdoch * 1121939df44de1705786c545cd1bf519d47250322dBen Murdoch * This library is distributed in the hope that it will be useful, 1221939df44de1705786c545cd1bf519d47250322dBen Murdoch * but WITHOUT ANY WARRANTY; without even the implied warranty of 1321939df44de1705786c545cd1bf519d47250322dBen Murdoch * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1421939df44de1705786c545cd1bf519d47250322dBen Murdoch * Library General Public License for more details. 1521939df44de1705786c545cd1bf519d47250322dBen Murdoch * 1621939df44de1705786c545cd1bf519d47250322dBen Murdoch * You should have received a copy of the GNU Library General Public License 1721939df44de1705786c545cd1bf519d47250322dBen Murdoch * along with this library; see the file COPYING.LIB. If not, write to 1821939df44de1705786c545cd1bf519d47250322dBen Murdoch * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 1921939df44de1705786c545cd1bf519d47250322dBen Murdoch * Boston, MA 02110-1301, USA. 2021939df44de1705786c545cd1bf519d47250322dBen Murdoch */ 2121939df44de1705786c545cd1bf519d47250322dBen Murdoch 2221939df44de1705786c545cd1bf519d47250322dBen Murdoch#ifndef RenderSVGResourceGradient_h 2321939df44de1705786c545cd1bf519d47250322dBen Murdoch#define RenderSVGResourceGradient_h 2421939df44de1705786c545cd1bf519d47250322dBen Murdoch 2521939df44de1705786c545cd1bf519d47250322dBen Murdoch#if ENABLE(SVG) 2621939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "AffineTransform.h" 2721939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "FloatRect.h" 2821939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "Gradient.h" 2921939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "ImageBuffer.h" 3021939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "RenderSVGResourceContainer.h" 3121939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "SVGGradientElement.h" 3221939df44de1705786c545cd1bf519d47250322dBen Murdoch 3321939df44de1705786c545cd1bf519d47250322dBen Murdoch#include <wtf/HashMap.h> 3421939df44de1705786c545cd1bf519d47250322dBen Murdoch 3521939df44de1705786c545cd1bf519d47250322dBen Murdochnamespace WebCore { 3621939df44de1705786c545cd1bf519d47250322dBen Murdoch 3721939df44de1705786c545cd1bf519d47250322dBen Murdochstruct GradientData { 3821939df44de1705786c545cd1bf519d47250322dBen Murdoch RefPtr<Gradient> gradient; 39545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch AffineTransform userspaceTransform; 4021939df44de1705786c545cd1bf519d47250322dBen Murdoch}; 4121939df44de1705786c545cd1bf519d47250322dBen Murdoch 4221939df44de1705786c545cd1bf519d47250322dBen Murdochclass GraphicsContext; 4321939df44de1705786c545cd1bf519d47250322dBen Murdoch 4421939df44de1705786c545cd1bf519d47250322dBen Murdochclass RenderSVGResourceGradient : public RenderSVGResourceContainer { 4521939df44de1705786c545cd1bf519d47250322dBen Murdochpublic: 4621939df44de1705786c545cd1bf519d47250322dBen Murdoch RenderSVGResourceGradient(SVGGradientElement*); 4721939df44de1705786c545cd1bf519d47250322dBen Murdoch virtual ~RenderSVGResourceGradient(); 4821939df44de1705786c545cd1bf519d47250322dBen Murdoch 49f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick virtual void removeAllClientsFromCache(bool markForInvalidation = true); 50f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick virtual void removeClientFromCache(RenderObject*, bool markForInvalidation = true); 5121939df44de1705786c545cd1bf519d47250322dBen Murdoch 5221939df44de1705786c545cd1bf519d47250322dBen Murdoch virtual bool applyResource(RenderObject*, RenderStyle*, GraphicsContext*&, unsigned short resourceMode); 53f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual void postApplyResource(RenderObject*, GraphicsContext*&, unsigned short resourceMode, const Path*); 54545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch virtual FloatRect resourceBoundingBox(RenderObject*) { return FloatRect(); } 5521939df44de1705786c545cd1bf519d47250322dBen Murdoch 5621939df44de1705786c545cd1bf519d47250322dBen Murdochprotected: 5721939df44de1705786c545cd1bf519d47250322dBen Murdoch void addStops(GradientData*, const Vector<Gradient::ColorStop>&) const; 58a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 59a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch virtual bool boundingBoxMode() const = 0; 60a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch virtual void calculateGradientTransform(AffineTransform&) = 0; 61a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch virtual void collectGradientAttributes(SVGGradientElement*) = 0; 6221939df44de1705786c545cd1bf519d47250322dBen Murdoch virtual void buildGradient(GradientData*, SVGGradientElement*) const = 0; 6321939df44de1705786c545cd1bf519d47250322dBen Murdoch 6421939df44de1705786c545cd1bf519d47250322dBen Murdochprivate: 65a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch bool m_shouldCollectGradientAttributes : 1; 6621939df44de1705786c545cd1bf519d47250322dBen Murdoch HashMap<RenderObject*, GradientData*> m_gradient; 6721939df44de1705786c545cd1bf519d47250322dBen Murdoch 682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(CG) 6921939df44de1705786c545cd1bf519d47250322dBen Murdoch GraphicsContext* m_savedContext; 7021939df44de1705786c545cd1bf519d47250322dBen Murdoch OwnPtr<ImageBuffer> m_imageBuffer; 7121939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif 7221939df44de1705786c545cd1bf519d47250322dBen Murdoch}; 7321939df44de1705786c545cd1bf519d47250322dBen Murdoch 7421939df44de1705786c545cd1bf519d47250322dBen Murdoch} 7521939df44de1705786c545cd1bf519d47250322dBen Murdoch 7621939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif 7721939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif 78