Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(150)

Side by Side Diff: Source/core/rendering/svg/SVGRenderingContext.h

Issue 23643003: ImageBuffer-less SVG masking and clipping. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Removed Linux rebaselines. Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /** 1 /**
2 * Copyright (C) 2007 Rob Buis <buis@kde.org> 2 * Copyright (C) 2007 Rob Buis <buis@kde.org>
3 * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> 3 * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org>
4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org> 4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
5 * Copyright (C) 2009 Google, Inc. All rights reserved. 5 * Copyright (C) 2009 Google, Inc. All rights reserved.
6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
7 * Copyright (C) 2012 Zoltan Herczeg <zherczeg@webkit.org>. 7 * Copyright (C) 2012 Zoltan Herczeg <zherczeg@webkit.org>.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
11 * License as published by the Free Software Foundation; either 11 * License as published by the Free Software Foundation; either
12 * version 2 of the License, or (at your option) any later version. 12 * version 2 of the License, or (at your option) any later version.
13 * 13 *
14 * This library is distributed in the hope that it will be useful, 14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Library General Public License for more details. 17 * Library General Public License for more details.
18 * 18 *
19 * You should have received a copy of the GNU Library General Public License 19 * You should have received a copy of the GNU Library General Public License
20 * along with this library; see the file COPYING.LIB. If not, write to 20 * along with this library; see the file COPYING.LIB. If not, write to
21 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 21 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22 * Boston, MA 02110-1301, USA. 22 * Boston, MA 02110-1301, USA.
23 */ 23 */
24 24
25 #ifndef SVGRenderingContext_h 25 #ifndef SVGRenderingContext_h
26 #define SVGRenderingContext_h 26 #define SVGRenderingContext_h
27 27
28 #include "core/platform/graphics/ImageBuffer.h" 28 #include "core/platform/graphics/ImageBuffer.h"
29 #include "core/rendering/PaintInfo.h" 29 #include "core/rendering/PaintInfo.h"
30 #include "core/svg/SVGUnitTypes.h"
30 31
31 namespace WebCore { 32 namespace WebCore {
32 33
33 class AffineTransform; 34 class AffineTransform;
34 class RenderObject; 35 class RenderObject;
35 class FloatRect; 36 class FloatRect;
37 class RenderSVGResourceClipper;
36 class RenderSVGResourceFilter; 38 class RenderSVGResourceFilter;
39 class RenderSVGResourceMasker;
37 40
38 // SVGRenderingContext 41 // SVGRenderingContext
39 class SVGRenderingContext { 42 class SVGRenderingContext {
40 public: 43 public:
41 enum NeedsGraphicsContextSave { 44 enum NeedsGraphicsContextSave {
42 SaveGraphicsContext, 45 SaveGraphicsContext,
43 DontSaveGraphicsContext, 46 DontSaveGraphicsContext,
44 }; 47 };
45 48
46 // Does not start rendering. 49 // Does not start rendering.
47 SVGRenderingContext() 50 SVGRenderingContext()
48 : m_renderingFlags(0) 51 : m_renderingFlags(0)
49 , m_object(0) 52 , m_object(0)
50 , m_paintInfo(0) 53 , m_paintInfo(0)
51 , m_savedContext(0) 54 , m_savedContext(0)
52 , m_filter(0) 55 , m_filter(0)
56 , m_clipper(0)
57 , m_masker(0)
53 { 58 {
54 } 59 }
55 60
56 SVGRenderingContext(RenderObject* object, PaintInfo& paintinfo, NeedsGraphic sContextSave needsGraphicsContextSave = DontSaveGraphicsContext) 61 SVGRenderingContext(RenderObject* object, PaintInfo& paintinfo, NeedsGraphic sContextSave needsGraphicsContextSave = DontSaveGraphicsContext)
57 : m_renderingFlags(0) 62 : m_renderingFlags(0)
58 , m_object(0) 63 , m_object(0)
59 , m_paintInfo(0) 64 , m_paintInfo(0)
60 , m_savedContext(0) 65 , m_savedContext(0)
61 , m_filter(0) 66 , m_filter(0)
67 , m_clipper(0)
68 , m_masker(0)
62 { 69 {
63 prepareToRenderSVGContent(object, paintinfo, needsGraphicsContextSave); 70 prepareToRenderSVGContent(object, paintinfo, needsGraphicsContextSave);
64 } 71 }
65 72
66 // Automatically finishes context rendering. 73 // Automatically finishes context rendering.
67 ~SVGRenderingContext(); 74 ~SVGRenderingContext();
68 75
69 // Used by all SVG renderers who apply clip/filter/etc. resources to the ren derer content. 76 // Used by all SVG renderers who apply clip/filter/etc. resources to the ren derer content.
70 void prepareToRenderSVGContent(RenderObject*, PaintInfo&, NeedsGraphicsConte xtSave = DontSaveGraphicsContext); 77 void prepareToRenderSVGContent(RenderObject*, PaintInfo&, NeedsGraphicsConte xtSave = DontSaveGraphicsContext);
71 bool isRenderingPrepared() const { return m_renderingFlags & RenderingPrepar ed; } 78 bool isRenderingPrepared() const { return m_renderingFlags & RenderingPrepar ed; }
72 79
73 static bool createImageBuffer(const FloatRect& paintRect, const AffineTransf orm& absoluteTransform, OwnPtr<ImageBuffer>&, RenderingMode); 80 static bool createImageBuffer(const FloatRect& paintRect, const AffineTransf orm& absoluteTransform, OwnPtr<ImageBuffer>&, RenderingMode);
74 // Patterns need a different float-to-integer coordinate mapping. 81 // Patterns need a different float-to-integer coordinate mapping.
75 static bool createImageBufferForPattern(const FloatRect& absoluteTargetRect, const FloatRect& clampedAbsoluteTargetRect, OwnPtr<ImageBuffer>&, RenderingMode ); 82 static bool createImageBufferForPattern(const FloatRect& absoluteTargetRect, const FloatRect& clampedAbsoluteTargetRect, OwnPtr<ImageBuffer>&, RenderingMode );
76 83
77 static void renderSubtreeToImageBuffer(ImageBuffer*, RenderObject*, const Af fineTransform&); 84 static void renderSubtree(GraphicsContext*, RenderObject*, const AffineTrans form&);
78 static void clipToImageBuffer(GraphicsContext*, const AffineTransform& absol uteTransform, const FloatRect& targetRect, OwnPtr<ImageBuffer>&, bool safeToClea r);
79 85
80 static float calculateScreenFontSizeScalingFactor(const RenderObject*); 86 static float calculateScreenFontSizeScalingFactor(const RenderObject*);
81 static void calculateTransformationToOutermostCoordinateSystem(const RenderO bject*, AffineTransform& absoluteTransform); 87 static void calculateTransformationToOutermostCoordinateSystem(const RenderO bject*, AffineTransform& absoluteTransform);
82 static IntSize clampedAbsoluteSize(const IntSize&); 88 static IntSize clampedAbsoluteSize(const IntSize&);
83 static FloatRect clampedAbsoluteTargetRect(const FloatRect& absoluteTargetRe ct); 89 static FloatRect clampedAbsoluteTargetRect(const FloatRect& absoluteTargetRe ct);
84 static void clear2DRotation(AffineTransform&); 90 static void clear2DRotation(AffineTransform&);
85 91
86 static IntRect calculateImageBufferRect(const FloatRect& targetRect, const A ffineTransform& absoluteTransform) 92 static IntRect calculateImageBufferRect(const FloatRect& targetRect, const A ffineTransform& absoluteTransform)
87 { 93 {
88 return enclosingIntRect(absoluteTransform.mapRect(targetRect)); 94 return enclosingIntRect(absoluteTransform.mapRect(targetRect));
89 } 95 }
90 96
91 // Support for the buffered-rendering hint. 97 // Support for the buffered-rendering hint.
92 bool bufferForeground(OwnPtr<ImageBuffer>&); 98 bool bufferForeground(OwnPtr<ImageBuffer>&);
93 99
94 private: 100 private:
95 // To properly revert partially successful initializtions in the destructor, we record all successful steps. 101 // To properly revert partially successful initializtions in the destructor, we record all successful steps.
96 enum RenderingFlags { 102 enum RenderingFlags {
97 RenderingPrepared = 1, 103 RenderingPrepared = 1,
98 RestoreGraphicsContext = 1 << 1, 104 RestoreGraphicsContext = 1 << 1,
99 EndOpacityLayer = 1 << 2, 105 EndOpacityLayer = 1 << 2,
100 EndFilterLayer = 1 << 3, 106 PostApplyResources = 1 << 3,
101 PrepareToRenderSVGContentWasCalled = 1 << 4 107 PrepareToRenderSVGContentWasCalled = 1 << 4
102 }; 108 };
103 109
104 // List of those flags which require actions during the destructor. 110 // List of those flags which require actions during the destructor.
105 const static int ActionsNeeded = RestoreGraphicsContext | EndOpacityLayer | EndFilterLayer; 111 const static int ActionsNeeded = RestoreGraphicsContext | EndOpacityLayer | PostApplyResources;
106 112
107 int m_renderingFlags; 113 int m_renderingFlags;
108 RenderObject* m_object; 114 RenderObject* m_object;
109 PaintInfo* m_paintInfo; 115 PaintInfo* m_paintInfo;
110 GraphicsContext* m_savedContext; 116 GraphicsContext* m_savedContext;
111 IntRect m_savedPaintRect; 117 IntRect m_savedPaintRect;
112 RenderSVGResourceFilter* m_filter; 118 RenderSVGResourceFilter* m_filter;
119 RenderSVGResourceClipper* m_clipper;
120 RenderSVGResourceMasker* m_masker;
113 }; 121 };
114 122
115 } // namespace WebCore 123 } // namespace WebCore
116 124
117 #endif // SVGRenderingContext_h 125 #endif // SVGRenderingContext_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698