2 * Copyright (C) 2007 Rob Buis <buis@kde.org>
3 * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org>
4 * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
5 * Copyright (C) 2009 Google, Inc. All rights reserved.
6 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
7 * Copyright (C) 2012 Zoltan Herczeg <zherczeg@webkit.org>.
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public
11 * License as published by the Free Software Foundation; either
12 * version 2 of the License, or (at your option) any later version.
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Library General Public License for more details.
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
21 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22 * Boston, MA 02110-1301, USA.
25 #ifndef SVGRenderingContext_h
26 #define SVGRenderingContext_h
28 #include "core/rendering/PaintInfo.h"
29 #include "core/rendering/svg/RenderSVGResourceClipper.h"
30 #include "platform/graphics/ImageBuffer.h"
34 class AffineTransform;
37 class RenderSVGResourceFilter;
38 class RenderSVGResourceMasker;
40 // SVGRenderingContext
41 class SVGRenderingContext {
43 enum NeedsGraphicsContextSave {
45 DontSaveGraphicsContext,
48 // Does not start rendering.
60 SVGRenderingContext(RenderObject* object, PaintInfo& paintinfo, NeedsGraphicsContextSave needsGraphicsContextSave = DontSaveGraphicsContext)
69 prepareToRenderSVGContent(object, paintinfo, needsGraphicsContextSave);
72 // Automatically finishes context rendering.
73 ~SVGRenderingContext();
75 // Used by all SVG renderers who apply clip/filter/etc. resources to the renderer content.
76 void prepareToRenderSVGContent(RenderObject*, PaintInfo&, NeedsGraphicsContextSave = DontSaveGraphicsContext);
77 bool isRenderingPrepared() const { return m_renderingFlags & RenderingPrepared; }
79 static void renderSubtree(GraphicsContext*, RenderObject*, const AffineTransform&);
81 static float calculateScreenFontSizeScalingFactor(const RenderObject*);
82 static void calculateDeviceSpaceTransformation(const RenderObject*, AffineTransform& absoluteTransform);
83 static FloatRect clampedAbsoluteTargetRect(const FloatRect& absoluteTargetRect);
84 static void clear2DRotation(AffineTransform&);
86 static IntRect calculateImageBufferRect(const FloatRect& targetRect, const AffineTransform& absoluteTransform)
88 return enclosingIntRect(absoluteTransform.mapRect(targetRect));
91 // Support for the buffered-rendering hint.
92 bool bufferForeground(OwnPtr<ImageBuffer>&);
95 // To properly revert partially successful initializtions in the destructor, we record all successful steps.
97 RenderingPrepared = 1,
98 RestoreGraphicsContext = 1 << 1,
99 EndOpacityLayer = 1 << 2,
100 PostApplyResources = 1 << 3,
101 PrepareToRenderSVGContentWasCalled = 1 << 4
104 // List of those flags which require actions during the destructor.
105 const static int ActionsNeeded = RestoreGraphicsContext | EndOpacityLayer | PostApplyResources;
107 int m_renderingFlags;
108 RenderObject* m_object;
109 PaintInfo* m_paintInfo;
110 GraphicsContext* m_savedContext;
111 IntRect m_savedPaintRect;
112 RenderSVGResourceFilter* m_filter;
113 RenderSVGResourceClipper* m_clipper;
114 ClipperContext m_clipperContext;
115 RenderSVGResourceMasker* m_masker;
120 #endif // SVGRenderingContext_h