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