DeviceOrientation.absolute should return false when it was not initialized.
[framework/web/webkit-efl.git] / Source / WebCore / rendering / PaintInfo.h
1 /*
2  * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
3  *           (C) 2000 Antti Koivisto (koivisto@kde.org)
4  *           (C) 2000 Dirk Mueller (mueller@kde.org)
5  *           (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com)
6  * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
7  * Copyright (C) 2009 Google Inc. All rights reserved.
8  *
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.
13  *
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.
18  *
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.
23  *
24  */
25
26 #ifndef PaintInfo_h
27 #define PaintInfo_h
28
29 #if ENABLE(SVG)
30 #include "AffineTransform.h"
31 #endif
32
33 #include "GraphicsContext.h"
34 #include "IntRect.h"
35 #include "LayoutTypes.h"
36 #include "PaintPhase.h"
37 #include <limits>
38 #include <wtf/HashMap.h>
39 #include <wtf/ListHashSet.h>
40
41 namespace WebCore {
42
43 class OverlapTestRequestClient;
44 class RenderInline;
45 class RenderObject;
46 class RenderRegion;
47
48 typedef HashMap<OverlapTestRequestClient*, IntRect> OverlapTestRequestMap;
49
50 /*
51  * Paint the object and its children, clipped by (x|y|w|h).
52  * (tx|ty) is the calculated position of the parent
53  */
54 struct PaintInfo {
55     PaintInfo(GraphicsContext* newContext, const IntRect& newRect, PaintPhase newPhase, bool newForceBlackText,
56               RenderObject* newPaintingRoot, RenderRegion* region, ListHashSet<RenderInline*>* newOutlineObjects,
57               OverlapTestRequestMap* overlapTestRequests = 0)
58         : context(newContext)
59         , rect(newRect)
60         , phase(newPhase)
61         , forceBlackText(newForceBlackText)
62         , paintingRoot(newPaintingRoot)
63         , renderRegion(region)
64         , outlineObjects(newOutlineObjects)
65         , overlapTestRequests(overlapTestRequests)
66     {
67     }
68
69     void updatePaintingRootForChildren(const RenderObject* renderer)
70     {
71         if (!paintingRoot)
72             return;
73
74         // If we're the painting root, kids draw normally, and see root of 0.
75         if (paintingRoot == renderer) {
76             paintingRoot = 0; 
77             return;
78         }
79     }
80
81     bool shouldPaintWithinRoot(const RenderObject* renderer) const
82     {
83         return !paintingRoot || paintingRoot == renderer;
84     }
85
86 #if ENABLE(SVG)
87     void applyTransform(const AffineTransform& localToAncestorTransform)
88     {
89         if (localToAncestorTransform.isIdentity())
90             return;
91
92         context->concatCTM(localToAncestorTransform);
93
94         if (rect == infiniteRect())
95             return;
96
97         rect = localToAncestorTransform.inverse().mapRect(rect);
98     }
99 #endif
100
101     static IntRect infiniteRect() { return IntRect(LayoutRect::infiniteRect()); }
102
103     // FIXME: Introduce setters/getters at some point. Requires a lot of changes throughout rendering/.
104     GraphicsContext* context;
105     IntRect rect;
106     PaintPhase phase;
107     bool forceBlackText;
108     RenderObject* paintingRoot; // used to draw just one element and its visual kids
109     RenderRegion* renderRegion;
110     ListHashSet<RenderInline*>* outlineObjects; // used to list outlines that should be painted by a block with inline children
111     OverlapTestRequestMap* overlapTestRequests;
112 };
113
114 } // namespace WebCore
115
116 #endif // PaintInfo_h