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#ifndef RenderSVGResourcePattern_h
2221939df44de1705786c545cd1bf519d47250322dBen Murdoch#define RenderSVGResourcePattern_h
2321939df44de1705786c545cd1bf519d47250322dBen Murdoch
2421939df44de1705786c545cd1bf519d47250322dBen Murdoch#if ENABLE(SVG)
2521939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "AffineTransform.h"
2621939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "FloatRect.h"
2721939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "ImageBuffer.h"
2821939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "Pattern.h"
29a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "PatternAttributes.h"
3021939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "RenderSVGResourceContainer.h"
3121939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "SVGPatternElement.h"
3221939df44de1705786c545cd1bf519d47250322dBen Murdoch#include "SVGUnitTypes.h"
3321939df44de1705786c545cd1bf519d47250322dBen Murdoch
3421939df44de1705786c545cd1bf519d47250322dBen Murdoch#include <wtf/HashMap.h>
3521939df44de1705786c545cd1bf519d47250322dBen Murdoch#include <wtf/OwnPtr.h>
3621939df44de1705786c545cd1bf519d47250322dBen Murdoch
3721939df44de1705786c545cd1bf519d47250322dBen Murdochnamespace WebCore {
3821939df44de1705786c545cd1bf519d47250322dBen Murdoch
3921939df44de1705786c545cd1bf519d47250322dBen Murdochstruct PatternData {
4021939df44de1705786c545cd1bf519d47250322dBen Murdoch    RefPtr<Pattern> pattern;
41545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    AffineTransform transform;
4221939df44de1705786c545cd1bf519d47250322dBen Murdoch};
4321939df44de1705786c545cd1bf519d47250322dBen Murdoch
4421939df44de1705786c545cd1bf519d47250322dBen Murdochclass RenderSVGResourcePattern : public RenderSVGResourceContainer {
4521939df44de1705786c545cd1bf519d47250322dBen Murdochpublic:
4621939df44de1705786c545cd1bf519d47250322dBen Murdoch    RenderSVGResourcePattern(SVGPatternElement*);
4721939df44de1705786c545cd1bf519d47250322dBen Murdoch    virtual ~RenderSVGResourcePattern();
4821939df44de1705786c545cd1bf519d47250322dBen Murdoch
4921939df44de1705786c545cd1bf519d47250322dBen Murdoch    virtual const char* renderName() const { return "RenderSVGResourcePattern"; }
5021939df44de1705786c545cd1bf519d47250322dBen Murdoch
51f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    virtual void removeAllClientsFromCache(bool markForInvalidation = true);
52f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    virtual void removeClientFromCache(RenderObject*, bool markForInvalidation = true);
5321939df44de1705786c545cd1bf519d47250322dBen Murdoch
5421939df44de1705786c545cd1bf519d47250322dBen Murdoch    virtual bool applyResource(RenderObject*, RenderStyle*, GraphicsContext*&, unsigned short resourceMode);
55f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual void postApplyResource(RenderObject*, GraphicsContext*&, unsigned short resourceMode, const Path*);
56545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch    virtual FloatRect resourceBoundingBox(RenderObject*) { return FloatRect(); }
5721939df44de1705786c545cd1bf519d47250322dBen Murdoch
5821939df44de1705786c545cd1bf519d47250322dBen Murdoch    virtual RenderSVGResourceType resourceType() const { return s_resourceType; }
5921939df44de1705786c545cd1bf519d47250322dBen Murdoch    static RenderSVGResourceType s_resourceType;
6021939df44de1705786c545cd1bf519d47250322dBen Murdoch
6121939df44de1705786c545cd1bf519d47250322dBen Murdochprivate:
62a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    bool buildTileImageTransform(RenderObject*, const PatternAttributes&, const SVGPatternElement*, FloatRect& patternBoundaries, AffineTransform& tileImageTransform) const;
63e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block
64e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    PassOwnPtr<ImageBuffer> createTileImage(RenderObject*, const PatternAttributes&, const FloatRect& tileBoundaries,
65e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block                                            const FloatRect& absoluteTileBoundaries, const AffineTransform& tileImageTransform) const;
6621939df44de1705786c545cd1bf519d47250322dBen Murdoch
67a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    bool m_shouldCollectPatternAttributes : 1;
68a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    PatternAttributes m_attributes;
6921939df44de1705786c545cd1bf519d47250322dBen Murdoch    HashMap<RenderObject*, PatternData*> m_pattern;
7021939df44de1705786c545cd1bf519d47250322dBen Murdoch};
7121939df44de1705786c545cd1bf519d47250322dBen Murdoch
7221939df44de1705786c545cd1bf519d47250322dBen Murdoch}
7321939df44de1705786c545cd1bf519d47250322dBen Murdoch
7421939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif
7521939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif
76