c079776dc82082d4d5dff1595219855556fbd16b
[WebKit-https.git] / Source / WebCore / dom / NodeRenderingContext.h
1 /*
2  * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3  *           (C) 1999 Antti Koivisto (koivisto@kde.org)
4  *           (C) 2001 Dirk Mueller (mueller@kde.org)
5  * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
6  * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
7  * Copyright (C) 2011 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 NodeRenderingContext_h
27 #define NodeRenderingContext_h
28
29 #include "NodeRenderingTraversal.h"
30
31 #include <wtf/Noncopyable.h>
32 #include <wtf/RefPtr.h>
33 #include <wtf/text/AtomicString.h>
34
35 namespace WebCore {
36
37 class ContainerNode;
38 class Document;
39 class InsertionPoint;
40 class Node;
41 class RenderNamedFlowThread;
42 class RenderObject;
43 class RenderStyle;
44 class ElementShadow;
45
46 class NodeRenderingContext {
47 public:
48     explicit NodeRenderingContext(Node*);
49     NodeRenderingContext(Node*, RenderStyle*);
50     ~NodeRenderingContext();
51
52     void createRendererForTextIfNeeded();
53     void createRendererForElementIfNeeded();
54
55     Node* node() const;
56     ContainerNode* parentNodeForRenderingAndStyle() const;
57     bool resetStyleInheritance() const;
58     RenderObject* parentRenderer() const;
59     RenderObject* nextRenderer() const;
60     RenderObject* previousRenderer() const;
61     InsertionPoint* insertionPoint() const;
62
63     const RenderStyle* style() const;
64
65     bool isOnUpperEncapsulationBoundary() const;
66     bool isOnEncapsulationBoundary() const;
67
68 private:
69     bool shouldCreateRenderer() const;
70     void moveToFlowThreadIfNeeded();
71
72     Node* m_node;
73     ContainerNode* m_renderingParent;
74     NodeRenderingTraversal::ParentDetails m_parentDetails;
75     RefPtr<RenderStyle> m_style;
76     RenderNamedFlowThread* m_parentFlowRenderer;
77     AtomicString m_flowThread;
78 };
79
80 inline Node* NodeRenderingContext::node() const
81 {
82     return m_node;
83 }
84
85 inline ContainerNode* NodeRenderingContext::parentNodeForRenderingAndStyle() const
86 {
87     return m_renderingParent;
88 }
89
90 inline bool NodeRenderingContext::resetStyleInheritance() const
91 {
92     return m_parentDetails.resetStyleInheritance();
93 }
94
95 inline const RenderStyle* NodeRenderingContext::style() const
96 {
97     return m_style.get();
98 }
99
100 inline InsertionPoint* NodeRenderingContext::insertionPoint() const
101 {
102     return m_parentDetails.insertionPoint();
103 }
104
105 } // namespace WebCore
106
107 #endif