34
34
35
35
namespace WebCore {
36
36
37
- LayoutState::LayoutState (std::unique_ptr<LayoutState> ancestor, RenderBox* renderer, const LayoutSize& offset, LayoutUnit pageLogicalHeight, bool pageLogicalHeightChanged)
37
+ LayoutState::LayoutState (std::unique_ptr<LayoutState> ancestor, RenderBox& renderer, const LayoutSize& offset, LayoutUnit pageLogicalHeight, bool pageLogicalHeightChanged)
38
38
: m_ancestor(WTFMove(ancestor))
39
39
#ifndef NDEBUG
40
- , m_renderer(renderer)
40
+ , m_renderer(& renderer)
41
41
#endif
42
42
{
43
43
ASSERT (m_ancestor);
44
44
45
- bool fixed = renderer-> isFixedPositioned ();
45
+ bool fixed = renderer. isFixedPositioned ();
46
46
if (fixed) {
47
47
// FIXME: This doesn't work correctly with transforms.
48
- FloatPoint fixedOffset = renderer-> view ().localToAbsolute (FloatPoint (), IsFixed);
48
+ FloatPoint fixedOffset = renderer. view ().localToAbsolute (FloatPoint (), IsFixed);
49
49
m_paintOffset = LayoutSize (fixedOffset.x (), fixedOffset.y ()) + offset;
50
50
} else
51
51
m_paintOffset = m_ancestor->m_paintOffset + offset;
52
52
53
- if (renderer-> isOutOfFlowPositioned () && !fixed) {
54
- if (RenderElement* container = renderer-> container ()) {
53
+ if (renderer. isOutOfFlowPositioned () && !fixed) {
54
+ if (RenderElement* container = renderer. container ()) {
55
55
if (container->isInFlowPositioned () && is<RenderInline>(*container))
56
- m_paintOffset += downcast<RenderInline>(*container).offsetForInFlowPositionedInline (renderer);
56
+ m_paintOffset += downcast<RenderInline>(*container).offsetForInFlowPositionedInline (& renderer);
57
57
}
58
58
}
59
59
60
60
m_layoutOffset = m_paintOffset;
61
61
62
- if (renderer-> isInFlowPositioned () && renderer-> hasLayer ())
63
- m_paintOffset += renderer-> layer ()->offsetForInFlowPosition ();
62
+ if (renderer. isInFlowPositioned () && renderer. hasLayer ())
63
+ m_paintOffset += renderer. layer ()->offsetForInFlowPosition ();
64
64
65
65
m_clipped = !fixed && m_ancestor->m_clipped ;
66
66
if (m_clipped)
67
67
m_clipRect = m_ancestor->m_clipRect ;
68
68
69
- if (renderer-> hasOverflowClip ()) {
70
- LayoutRect clipRect (toLayoutPoint (m_paintOffset) + renderer-> view ().layoutDelta (), renderer-> cachedSizeForOverflowClip ());
69
+ if (renderer. hasOverflowClip ()) {
70
+ LayoutRect clipRect (toLayoutPoint (m_paintOffset) + renderer. view ().layoutDelta (), renderer. cachedSizeForOverflowClip ());
71
71
if (m_clipped)
72
72
m_clipRect.intersect (clipRect);
73
73
else {
74
74
m_clipRect = clipRect;
75
75
m_clipped = true ;
76
76
}
77
77
78
- m_paintOffset -= toLayoutSize (renderer-> scrollPosition ());
78
+ m_paintOffset -= toLayoutSize (renderer. scrollPosition ());
79
79
}
80
80
81
81
// If we establish a new page height, then cache the offset to the top of the first page.
82
82
// We can compare this later on to figure out what part of the page we're actually on,
83
- if (pageLogicalHeight || renderer-> isRenderFragmentedFlow ()) {
83
+ if (pageLogicalHeight || renderer. isRenderFragmentedFlow ()) {
84
84
m_pageLogicalHeight = pageLogicalHeight;
85
- bool isFlipped = renderer->style ().isFlippedBlocksWritingMode ();
86
- m_pageOffset = LayoutSize (m_layoutOffset.width () + (!isFlipped ? renderer->borderLeft () + renderer->paddingLeft () : renderer->borderRight () + renderer->paddingRight ()),
87
- m_layoutOffset.height () + (!isFlipped ? renderer->borderTop () + renderer->paddingTop () : renderer->borderBottom () + renderer->paddingBottom ()));
85
+ bool isFlipped = renderer.style ().isFlippedBlocksWritingMode ();
86
+ m_pageOffset = LayoutSize (m_layoutOffset.width () + (!isFlipped ? renderer.borderLeft () + renderer.paddingLeft () : renderer.borderRight () + renderer.paddingRight ()), m_layoutOffset.height () + (!isFlipped ? renderer.borderTop () + renderer.paddingTop () : renderer.borderBottom () + renderer.paddingBottom ()));
88
87
m_pageLogicalHeightChanged = pageLogicalHeightChanged;
89
88
m_isPaginated = true ;
90
89
} else {
@@ -95,11 +94,11 @@ LayoutState::LayoutState(std::unique_ptr<LayoutState> ancestor, RenderBox* rende
95
94
96
95
// Disable pagination for objects we don't support. For now this includes overflow:scroll/auto, inline blocks and
97
96
// writing mode roots.
98
- if (renderer-> isUnsplittableForPagination ()) {
97
+ if (renderer. isUnsplittableForPagination ()) {
99
98
m_pageLogicalHeight = 0 ;
100
99
m_isPaginated = false ;
101
100
} else
102
- m_isPaginated = m_pageLogicalHeight || renderer-> enclosingFragmentedFlow ();
101
+ m_isPaginated = m_pageLogicalHeight || renderer. enclosingFragmentedFlow ();
103
102
}
104
103
105
104
// Propagate line grid information.
@@ -111,17 +110,17 @@ LayoutState::LayoutState(std::unique_ptr<LayoutState> ancestor, RenderBox* rende
111
110
m_layoutDeltaYSaturated = m_ancestor->m_layoutDeltaYSaturated ;
112
111
#endif
113
112
114
- if (lineGrid () && (lineGrid ()->style ().writingMode () == renderer-> style ().writingMode ()) && is<RenderMultiColumnFlow>(* renderer))
115
- downcast<RenderMultiColumnFlow>(* renderer).computeLineGridPaginationOrigin (*this );
113
+ if (lineGrid () && (lineGrid ()->style ().writingMode () == renderer. style ().writingMode ()) && is<RenderMultiColumnFlow>(renderer))
114
+ downcast<RenderMultiColumnFlow>(renderer).computeLineGridPaginationOrigin (*this );
116
115
117
116
// If we have a new grid to track, then add it to our set.
118
- if (renderer-> style ().lineGrid () != RenderStyle::initialLineGrid () && is<RenderBlockFlow>(* renderer))
117
+ if (renderer. style ().lineGrid () != RenderStyle::initialLineGrid () && is<RenderBlockFlow>(renderer))
119
118
establishLineGrid (downcast<RenderBlockFlow>(renderer));
120
119
121
120
// FIXME: <http://bugs.webkit.org/show_bug.cgi?id=13443> Apply control clip if present.
122
121
}
123
122
124
- LayoutState::LayoutState (RenderObject& root )
123
+ LayoutState::LayoutState (RenderElement& renderer )
125
124
: m_clipped(false )
126
125
, m_isPaginated(false )
127
126
, m_pageLogicalHeightChanged(false )
@@ -130,10 +129,10 @@ LayoutState::LayoutState(RenderObject& root)
130
129
, m_layoutDeltaYSaturated(false )
131
130
#endif
132
131
#ifndef NDEBUG
133
- , m_renderer(&root )
132
+ , m_renderer(&renderer )
134
133
#endif
135
134
{
136
- if (RenderElement* container = root .container ()) {
135
+ if (RenderElement* container = renderer .container ()) {
137
136
FloatPoint absContentPoint = container->localToAbsolute (FloatPoint (), UseTransforms);
138
137
m_paintOffset = LayoutSize (absContentPoint.x (), absContentPoint.y ());
139
138
@@ -159,23 +158,23 @@ LayoutUnit LayoutState::pageLogicalOffset(RenderBox* child, LayoutUnit childLogi
159
158
return m_layoutOffset.width () + childLogicalOffset - m_pageOffset.width ();
160
159
}
161
160
162
- void LayoutState::propagateLineGridInfo (RenderBox* renderer)
161
+ void LayoutState::propagateLineGridInfo (RenderBox& renderer)
163
162
{
164
163
// Disable line grids for objects we don't support. For now this includes overflow:scroll/auto, inline blocks and
165
164
// writing mode roots.
166
- if (!m_ancestor || renderer-> isUnsplittableForPagination ())
165
+ if (!m_ancestor || renderer. isUnsplittableForPagination ())
167
166
return ;
168
167
169
168
m_lineGrid = m_ancestor->m_lineGrid ;
170
169
m_lineGridOffset = m_ancestor->m_lineGridOffset ;
171
170
m_lineGridPaginationOrigin = m_ancestor->m_lineGridPaginationOrigin ;
172
171
}
173
172
174
- void LayoutState::establishLineGrid (RenderBlockFlow* block )
173
+ void LayoutState::establishLineGrid (RenderBlockFlow& renderer )
175
174
{
176
175
// First check to see if this grid has been established already.
177
176
if (m_lineGrid) {
178
- if (m_lineGrid->style ().lineGrid () == block-> style ().lineGrid ())
177
+ if (m_lineGrid->style ().lineGrid () == renderer. style ().lineGrid ())
179
178
return ;
180
179
RenderBlockFlow* currentGrid = m_lineGrid;
181
180
for (LayoutState* currentState = m_ancestor.get (); currentState; currentState = currentState->m_ancestor .get ()) {
@@ -184,7 +183,7 @@ void LayoutState::establishLineGrid(RenderBlockFlow* block)
184
183
currentGrid = currentState->m_lineGrid ;
185
184
if (!currentGrid)
186
185
break ;
187
- if (currentGrid->style ().lineGrid () == block-> style ().lineGrid ()) {
186
+ if (currentGrid->style ().lineGrid () == renderer. style ().lineGrid ()) {
188
187
m_lineGrid = currentGrid;
189
188
m_lineGridOffset = currentState->m_lineGridOffset ;
190
189
return ;
@@ -193,7 +192,7 @@ void LayoutState::establishLineGrid(RenderBlockFlow* block)
193
192
}
194
193
195
194
// We didn't find an already-established grid with this identifier. Our render object establishes the grid.
196
- m_lineGrid = block ;
195
+ m_lineGrid = &renderer ;
197
196
m_lineGridOffset = m_layoutOffset;
198
197
}
199
198
0 commit comments