| Index: Source/core/rendering/svg/RenderSVGResourcePattern.h
|
| diff --git a/Source/core/rendering/svg/RenderSVGResourcePattern.h b/Source/core/rendering/svg/RenderSVGResourcePattern.h
|
| index 97ea61870e2bfac056d5e82e611027c463d75fac..03266b7c9368163811fd29046046e57ea8bab85f 100644
|
| --- a/Source/core/rendering/svg/RenderSVGResourcePattern.h
|
| +++ b/Source/core/rendering/svg/RenderSVGResourcePattern.h
|
| @@ -1,6 +1,7 @@
|
| /*
|
| * Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org>
|
| * Copyright (C) Research In Motion Limited 2010. All rights reserved.
|
| + * Copyright 2014 The Chromium Authors. All rights reserved.
|
| *
|
| * This library is free software; you can redistribute it and/or
|
| * modify it under the terms of the GNU Library General Public
|
| @@ -23,24 +24,18 @@
|
|
|
| #include "core/rendering/svg/RenderSVGResourceContainer.h"
|
| #include "core/svg/PatternAttributes.h"
|
| -#include "core/svg/SVGPatternElement.h"
|
| -#include "core/svg/SVGUnitTypes.h"
|
| -#include "platform/geometry/FloatRect.h"
|
| -#include "platform/graphics/ImageBuffer.h"
|
| -#include "platform/graphics/Pattern.h"
|
| -#include "platform/transforms/AffineTransform.h"
|
|
|
| #include "wtf/HashMap.h"
|
| #include "wtf/OwnPtr.h"
|
| +#include "wtf/RefPtr.h"
|
|
|
| namespace blink {
|
|
|
| -struct PatternData {
|
| - WTF_MAKE_FAST_ALLOCATED;
|
| -public:
|
| - RefPtr<Pattern> pattern;
|
| - AffineTransform transform;
|
| -};
|
| +class AffineTransform;
|
| +class DisplayList;
|
| +class FloatRect;
|
| +class SVGPatternElement;
|
| +struct PatternData;
|
|
|
| class RenderSVGResourcePattern final : public RenderSVGResourceContainer {
|
| public:
|
| @@ -57,15 +52,19 @@ public:
|
| static const RenderSVGResourceType s_resourceType;
|
|
|
| private:
|
| - bool buildTileImageTransform(const RenderObject&, const PatternAttributes&, const SVGPatternElement*, FloatRect& patternBoundaries, AffineTransform& tileImageTransform) const;
|
| -
|
| - PassOwnPtr<ImageBuffer> createTileImage(const PatternAttributes&, const FloatRect& tileBoundaries,
|
| - const FloatRect& absoluteTileBoundaries, const AffineTransform& tileImageTransform) const;
|
| -
|
| - PatternData* buildPattern(const RenderObject&, const SVGPatternElement*);
|
| + PassOwnPtr<PatternData> buildPatternData(const RenderObject&);
|
| + PassRefPtr<DisplayList> asDisplayList(const FloatRect& tileBounds, const AffineTransform&) const;
|
| + PatternData* patternForRenderer(const RenderObject&);
|
|
|
| bool m_shouldCollectPatternAttributes : 1;
|
| PatternAttributes m_attributes;
|
| +
|
| + // FIXME: we can almost do away with this per-object map, but not quite: the tile size can be
|
| + // relative to the client bounding box, and it gets captured in the cached Pattern shader.
|
| + // Hence, we need one Pattern shader per client. The display list OTOH is the same => we
|
| + // should be able to cache a single display list per RenderSVGResourcePattern + one
|
| + // Pattern(shader) for each client -- this would avoid re-recording when multiple clients
|
| + // share the same pattern.
|
| HashMap<const RenderObject*, OwnPtr<PatternData> > m_patternMap;
|
| };
|
|
|
|
|