Skip to content

Commit b34d12e

Browse files
LayoutState should take RenderBox reference.
https://bugs.webkit.org/show_bug.cgi?id=179272 <rdar://problem/35345247> Reviewed by Simon Fraser. No change in functionality. * rendering/LayoutState.cpp: (WebCore::LayoutState::LayoutState): (WebCore::LayoutState::propagateLineGridInfo): (WebCore::LayoutState::establishLineGrid): * rendering/LayoutState.h: type tightening. * rendering/RenderBlock.cpp: (WebCore::RenderBlock::offsetFromLogicalTopOfFirstPage const): * rendering/RenderView.cpp: (WebCore::RenderView::pushLayoutState): * rendering/RenderView.h: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@224455 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent 12c769e commit b34d12e

File tree

5 files changed

+58
-39
lines changed

5 files changed

+58
-39
lines changed

Source/WebCore/ChangeLog

+21
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,24 @@
1+
2017-11-03 Zalan Bujtas <[email protected]>
2+
3+
LayoutState should take RenderBox reference.
4+
https://bugs.webkit.org/show_bug.cgi?id=179272
5+
<rdar://problem/35345247>
6+
7+
Reviewed by Simon Fraser.
8+
9+
No change in functionality.
10+
11+
* rendering/LayoutState.cpp:
12+
(WebCore::LayoutState::LayoutState):
13+
(WebCore::LayoutState::propagateLineGridInfo):
14+
(WebCore::LayoutState::establishLineGrid):
15+
* rendering/LayoutState.h: type tightening.
16+
* rendering/RenderBlock.cpp:
17+
(WebCore::RenderBlock::offsetFromLogicalTopOfFirstPage const):
18+
* rendering/RenderView.cpp:
19+
(WebCore::RenderView::pushLayoutState):
20+
* rendering/RenderView.h:
21+
122
2017-11-03 Youenn Fablet <[email protected]>
223

324
Implement ServiceWorkerContainer.getRegistration

Source/WebCore/rendering/LayoutState.cpp

+29-30
Original file line numberDiff line numberDiff line change
@@ -34,57 +34,56 @@
3434

3535
namespace WebCore {
3636

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)
3838
: m_ancestor(WTFMove(ancestor))
3939
#ifndef NDEBUG
40-
, m_renderer(renderer)
40+
, m_renderer(&renderer)
4141
#endif
4242
{
4343
ASSERT(m_ancestor);
4444

45-
bool fixed = renderer->isFixedPositioned();
45+
bool fixed = renderer.isFixedPositioned();
4646
if (fixed) {
4747
// FIXME: This doesn't work correctly with transforms.
48-
FloatPoint fixedOffset = renderer->view().localToAbsolute(FloatPoint(), IsFixed);
48+
FloatPoint fixedOffset = renderer.view().localToAbsolute(FloatPoint(), IsFixed);
4949
m_paintOffset = LayoutSize(fixedOffset.x(), fixedOffset.y()) + offset;
5050
} else
5151
m_paintOffset = m_ancestor->m_paintOffset + offset;
5252

53-
if (renderer->isOutOfFlowPositioned() && !fixed) {
54-
if (RenderElement* container = renderer->container()) {
53+
if (renderer.isOutOfFlowPositioned() && !fixed) {
54+
if (RenderElement* container = renderer.container()) {
5555
if (container->isInFlowPositioned() && is<RenderInline>(*container))
56-
m_paintOffset += downcast<RenderInline>(*container).offsetForInFlowPositionedInline(renderer);
56+
m_paintOffset += downcast<RenderInline>(*container).offsetForInFlowPositionedInline(&renderer);
5757
}
5858
}
5959

6060
m_layoutOffset = m_paintOffset;
6161

62-
if (renderer->isInFlowPositioned() && renderer->hasLayer())
63-
m_paintOffset += renderer->layer()->offsetForInFlowPosition();
62+
if (renderer.isInFlowPositioned() && renderer.hasLayer())
63+
m_paintOffset += renderer.layer()->offsetForInFlowPosition();
6464

6565
m_clipped = !fixed && m_ancestor->m_clipped;
6666
if (m_clipped)
6767
m_clipRect = m_ancestor->m_clipRect;
6868

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());
7171
if (m_clipped)
7272
m_clipRect.intersect(clipRect);
7373
else {
7474
m_clipRect = clipRect;
7575
m_clipped = true;
7676
}
7777

78-
m_paintOffset -= toLayoutSize(renderer->scrollPosition());
78+
m_paintOffset -= toLayoutSize(renderer.scrollPosition());
7979
}
8080

8181
// If we establish a new page height, then cache the offset to the top of the first page.
8282
// 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()) {
8484
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()));
8887
m_pageLogicalHeightChanged = pageLogicalHeightChanged;
8988
m_isPaginated = true;
9089
} else {
@@ -95,11 +94,11 @@ LayoutState::LayoutState(std::unique_ptr<LayoutState> ancestor, RenderBox* rende
9594

9695
// Disable pagination for objects we don't support. For now this includes overflow:scroll/auto, inline blocks and
9796
// writing mode roots.
98-
if (renderer->isUnsplittableForPagination()) {
97+
if (renderer.isUnsplittableForPagination()) {
9998
m_pageLogicalHeight = 0;
10099
m_isPaginated = false;
101100
} else
102-
m_isPaginated = m_pageLogicalHeight || renderer->enclosingFragmentedFlow();
101+
m_isPaginated = m_pageLogicalHeight || renderer.enclosingFragmentedFlow();
103102
}
104103

105104
// Propagate line grid information.
@@ -111,17 +110,17 @@ LayoutState::LayoutState(std::unique_ptr<LayoutState> ancestor, RenderBox* rende
111110
m_layoutDeltaYSaturated = m_ancestor->m_layoutDeltaYSaturated;
112111
#endif
113112

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);
116115

117116
// 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))
119118
establishLineGrid(downcast<RenderBlockFlow>(renderer));
120119

121120
// FIXME: <http://bugs.webkit.org/show_bug.cgi?id=13443> Apply control clip if present.
122121
}
123122

124-
LayoutState::LayoutState(RenderObject& root)
123+
LayoutState::LayoutState(RenderElement& renderer)
125124
: m_clipped(false)
126125
, m_isPaginated(false)
127126
, m_pageLogicalHeightChanged(false)
@@ -130,10 +129,10 @@ LayoutState::LayoutState(RenderObject& root)
130129
, m_layoutDeltaYSaturated(false)
131130
#endif
132131
#ifndef NDEBUG
133-
, m_renderer(&root)
132+
, m_renderer(&renderer)
134133
#endif
135134
{
136-
if (RenderElement* container = root.container()) {
135+
if (RenderElement* container = renderer.container()) {
137136
FloatPoint absContentPoint = container->localToAbsolute(FloatPoint(), UseTransforms);
138137
m_paintOffset = LayoutSize(absContentPoint.x(), absContentPoint.y());
139138

@@ -159,23 +158,23 @@ LayoutUnit LayoutState::pageLogicalOffset(RenderBox* child, LayoutUnit childLogi
159158
return m_layoutOffset.width() + childLogicalOffset - m_pageOffset.width();
160159
}
161160

162-
void LayoutState::propagateLineGridInfo(RenderBox* renderer)
161+
void LayoutState::propagateLineGridInfo(RenderBox& renderer)
163162
{
164163
// Disable line grids for objects we don't support. For now this includes overflow:scroll/auto, inline blocks and
165164
// writing mode roots.
166-
if (!m_ancestor || renderer->isUnsplittableForPagination())
165+
if (!m_ancestor || renderer.isUnsplittableForPagination())
167166
return;
168167

169168
m_lineGrid = m_ancestor->m_lineGrid;
170169
m_lineGridOffset = m_ancestor->m_lineGridOffset;
171170
m_lineGridPaginationOrigin = m_ancestor->m_lineGridPaginationOrigin;
172171
}
173172

174-
void LayoutState::establishLineGrid(RenderBlockFlow* block)
173+
void LayoutState::establishLineGrid(RenderBlockFlow& renderer)
175174
{
176175
// First check to see if this grid has been established already.
177176
if (m_lineGrid) {
178-
if (m_lineGrid->style().lineGrid() == block->style().lineGrid())
177+
if (m_lineGrid->style().lineGrid() == renderer.style().lineGrid())
179178
return;
180179
RenderBlockFlow* currentGrid = m_lineGrid;
181180
for (LayoutState* currentState = m_ancestor.get(); currentState; currentState = currentState->m_ancestor.get()) {
@@ -184,7 +183,7 @@ void LayoutState::establishLineGrid(RenderBlockFlow* block)
184183
currentGrid = currentState->m_lineGrid;
185184
if (!currentGrid)
186185
break;
187-
if (currentGrid->style().lineGrid() == block->style().lineGrid()) {
186+
if (currentGrid->style().lineGrid() == renderer.style().lineGrid()) {
188187
m_lineGrid = currentGrid;
189188
m_lineGridOffset = currentState->m_lineGridOffset;
190189
return;
@@ -193,7 +192,7 @@ void LayoutState::establishLineGrid(RenderBlockFlow* block)
193192
}
194193

195194
// 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;
197196
m_lineGridOffset = m_layoutOffset;
198197
}
199198

Source/WebCore/rendering/LayoutState.h

+5-6
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ class LayoutState {
5353
{
5454
}
5555

56-
LayoutState(std::unique_ptr<LayoutState> ancestor, RenderBox*, const LayoutSize& offset, LayoutUnit pageHeight, bool pageHeightChanged);
57-
explicit LayoutState(RenderObject&);
56+
LayoutState(std::unique_ptr<LayoutState> ancestor, RenderBox&, const LayoutSize& offset, LayoutUnit pageHeight, bool pageHeightChanged);
57+
explicit LayoutState(RenderElement&);
5858

5959
void clearPaginationInformation();
6060
bool isPaginated() const { return m_isPaginated; }
@@ -81,8 +81,8 @@ class LayoutState {
8181
void setCurrentRenderFragmentedFlow(RenderFragmentedFlow* fragmentedFlow) { m_currentRenderFragmentedFlow = fragmentedFlow; }
8282

8383
private:
84-
void propagateLineGridInfo(RenderBox*);
85-
void establishLineGrid(RenderBlockFlow*);
84+
void propagateLineGridInfo(RenderBox&);
85+
void establishLineGrid(RenderBlockFlow&);
8686

8787
public:
8888
// Do not add anything apart from bitfields. See https://bugs.webkit.org/show_bug.cgi?id=100173
@@ -120,9 +120,8 @@ class LayoutState {
120120
LayoutSize m_lineGridPaginationOrigin;
121121

122122
RenderFragmentedFlow* m_currentRenderFragmentedFlow { nullptr };
123-
124123
#ifndef NDEBUG
125-
RenderObject* m_renderer { nullptr };
124+
RenderElement* m_renderer { nullptr };
126125
#endif
127126
};
128127

Source/WebCore/rendering/RenderView.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -753,7 +753,7 @@ float RenderView::zoomFactor() const
753753
return frameView().frame().pageZoomFactor();
754754
}
755755

756-
void RenderView::pushLayoutState(RenderObject& root)
756+
void RenderView::pushLayoutState(RenderElement& root)
757757
{
758758
ASSERT(m_layoutStateDisableCount == 0);
759759
ASSERT(m_layoutState == 0);

Source/WebCore/rendering/RenderView.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ class RenderView final : public RenderBlockFlow {
120120
bool doingFullRepaint() const { return frameView().layoutContext().needsFullRepaint(); }
121121

122122
// Subtree push/pop
123-
void pushLayoutState(RenderObject&);
123+
void pushLayoutState(RenderElement&);
124124
bool pushLayoutStateForPaginationIfNeeded(RenderBlockFlow&);
125125
void popLayoutState(RenderObject&) { return popLayoutState(); } // Just doing this to keep popLayoutState() private and to make the subtree calls symmetrical.
126126

@@ -255,7 +255,7 @@ class RenderView final : public RenderBlockFlow {
255255
// We push LayoutState even if layoutState is disabled because it stores layoutDelta too.
256256
if (!doingFullRepaint() || m_layoutState->isPaginated() || renderer.enclosingFragmentedFlow()
257257
|| m_layoutState->lineGrid() || (renderer.style().lineGrid() != RenderStyle::initialLineGrid() && renderer.isRenderBlockFlow())) {
258-
m_layoutState = std::make_unique<LayoutState>(WTFMove(m_layoutState), &renderer, offset, pageHeight, pageHeightChanged);
258+
m_layoutState = std::make_unique<LayoutState>(WTFMove(m_layoutState), renderer, offset, pageHeight, pageHeightChanged);
259259
return true;
260260
}
261261
return false;

0 commit comments

Comments
 (0)