OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2007 David Smith (catfish.man@gmail.com) | 4 * (C) 2007 David Smith (catfish.man@gmail.com) |
5 * Copyright (C) 2003-2013 Apple Inc. All rights reserved. | 5 * Copyright (C) 2003-2013 Apple Inc. All rights reserved. |
6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
7 * Copyright (C) 2013 Google Inc. All rights reserved. | 7 * Copyright (C) 2013 Google Inc. All rights reserved. |
8 * | 8 * |
9 * Redistribution and use in source and binary forms, with or without | 9 * Redistribution and use in source and binary forms, with or without |
10 * modification, are permitted provided that the following conditions are | 10 * modification, are permitted provided that the following conditions are |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 void setLogicalWidthForFloat(FloatingObject* floatingObject, LayoutUnit logi
calWidth) | 154 void setLogicalWidthForFloat(FloatingObject* floatingObject, LayoutUnit logi
calWidth) |
155 { | 155 { |
156 if (isHorizontalWritingMode()) | 156 if (isHorizontalWritingMode()) |
157 floatingObject->setWidth(logicalWidth); | 157 floatingObject->setWidth(logicalWidth); |
158 else | 158 else |
159 floatingObject->setHeight(logicalWidth); | 159 floatingObject->setHeight(logicalWidth); |
160 } | 160 } |
161 | 161 |
162 LayoutUnit startAlignedOffsetForLine(LayoutUnit position, bool shouldIndentT
ext); | 162 LayoutUnit startAlignedOffsetForLine(LayoutUnit position, bool shouldIndentT
ext); |
163 | 163 |
164 void setStaticInlinePositionForChild(RenderBox*, LayoutUnit inlinePosition); | 164 void setStaticInlinePositionForChild(RenderBox&, LayoutUnit inlinePosition); |
165 void updateStaticInlinePositionForChild(RenderBox*, LayoutUnit logicalTop); | 165 void updateStaticInlinePositionForChild(RenderBox&, LayoutUnit logicalTop); |
166 | 166 |
167 static bool shouldSkipCreatingRunsForObject(RenderObject* obj) | 167 static bool shouldSkipCreatingRunsForObject(RenderObject* obj) |
168 { | 168 { |
169 return obj->isFloating() || (obj->isOutOfFlowPositioned() && !obj->style
()->isOriginalDisplayInlineType() && !obj->container()->isRenderInline()); | 169 return obj->isFloating() || (obj->isOutOfFlowPositioned() && !obj->style
()->isOriginalDisplayInlineType() && !obj->container()->isRenderInline()); |
170 } | 170 } |
171 | 171 |
172 RenderMultiColumnFlowThread* multiColumnFlowThread() const { return m_rareDa
ta ? m_rareData->m_multiColumnFlowThread.get() : 0; } | 172 RenderMultiColumnFlowThread* multiColumnFlowThread() const { return m_rareDa
ta ? m_rareData->m_multiColumnFlowThread.get() : 0; } |
173 void resetMultiColumnFlowThread() | 173 void resetMultiColumnFlowThread() |
174 { | 174 { |
175 if (m_rareData) | 175 if (m_rareData) |
(...skipping 29 matching lines...) Expand all Loading... |
205 virtual bool avoidsFloats() const override; | 205 virtual bool avoidsFloats() const override; |
206 | 206 |
207 using RenderBoxModelObject::moveChildrenTo; | 207 using RenderBoxModelObject::moveChildrenTo; |
208 virtual void moveChildrenTo(RenderBoxModelObject* toBoxModelObject, RenderOb
ject* startChild, RenderObject* endChild, RenderObject* beforeChild, bool fullRe
moveInsert = false) override; | 208 virtual void moveChildrenTo(RenderBoxModelObject* toBoxModelObject, RenderOb
ject* startChild, RenderObject* endChild, RenderObject* beforeChild, bool fullRe
moveInsert = false) override; |
209 | 209 |
210 LayoutUnit xPositionForFloatIncludingMargin(const FloatingObject* child) con
st | 210 LayoutUnit xPositionForFloatIncludingMargin(const FloatingObject* child) con
st |
211 { | 211 { |
212 if (isHorizontalWritingMode()) | 212 if (isHorizontalWritingMode()) |
213 return child->x() + child->renderer()->marginLeft(); | 213 return child->x() + child->renderer()->marginLeft(); |
214 | 214 |
215 return child->x() + marginBeforeForChild(child->renderer()); | 215 return child->x() + marginBeforeForChild(*(child->renderer())); |
216 } | 216 } |
217 | 217 |
218 LayoutUnit yPositionForFloatIncludingMargin(const FloatingObject* child) con
st | 218 LayoutUnit yPositionForFloatIncludingMargin(const FloatingObject* child) con
st |
219 { | 219 { |
220 if (isHorizontalWritingMode()) | 220 if (isHorizontalWritingMode()) |
221 return child->y() + marginBeforeForChild(child->renderer()); | 221 return child->y() + marginBeforeForChild(*(child->renderer())); |
222 | 222 |
223 return child->y() + child->renderer()->marginTop(); | 223 return child->y() + child->renderer()->marginTop(); |
224 } | 224 } |
225 | 225 |
226 LayoutPoint flipFloatForWritingModeForChild(const FloatingObject*, const Lay
outPoint&) const; | 226 LayoutPoint flipFloatForWritingModeForChild(const FloatingObject*, const Lay
outPoint&) const; |
227 | 227 |
228 protected: | 228 protected: |
229 void rebuildFloatsFromIntruding(); | 229 void rebuildFloatsFromIntruding(); |
230 void layoutInlineChildren(bool relayoutChildren, LayoutUnit& paintInvalidati
onLogicalTop, LayoutUnit& paintInvalidationLogicalBottom, LayoutUnit afterEdge); | 230 void layoutInlineChildren(bool relayoutChildren, LayoutUnit& paintInvalidati
onLogicalTop, LayoutUnit& paintInvalidationLogicalBottom, LayoutUnit afterEdge); |
231 | 231 |
232 void createFloatingObjects(); | 232 void createFloatingObjects(); |
233 | 233 |
234 virtual void styleWillChange(StyleDifference, const RenderStyle& newStyle) o
verride; | 234 virtual void styleWillChange(StyleDifference, const RenderStyle& newStyle) o
verride; |
235 virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) ov
erride; | 235 virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle) ov
erride; |
236 | 236 |
237 void addOverflowFromFloats(); | 237 void addOverflowFromFloats(); |
238 | 238 |
239 LayoutUnit logicalRightOffsetForLine(LayoutUnit logicalTop, LayoutUnit fixed
Offset, bool applyTextIndent, LayoutUnit logicalHeight = 0) const | 239 LayoutUnit logicalRightOffsetForLine(LayoutUnit logicalTop, LayoutUnit fixed
Offset, bool applyTextIndent, LayoutUnit logicalHeight = 0) const |
240 { | 240 { |
241 return adjustLogicalRightOffsetForLine(logicalRightFloatOffsetForLine(lo
gicalTop, fixedOffset, logicalHeight), applyTextIndent); | 241 return adjustLogicalRightOffsetForLine(logicalRightFloatOffsetForLine(lo
gicalTop, fixedOffset, logicalHeight), applyTextIndent); |
242 } | 242 } |
243 LayoutUnit logicalLeftOffsetForLine(LayoutUnit logicalTop, LayoutUnit fixedO
ffset, bool applyTextIndent, LayoutUnit logicalHeight = 0) const | 243 LayoutUnit logicalLeftOffsetForLine(LayoutUnit logicalTop, LayoutUnit fixedO
ffset, bool applyTextIndent, LayoutUnit logicalHeight = 0) const |
244 { | 244 { |
245 return adjustLogicalLeftOffsetForLine(logicalLeftFloatOffsetForLine(logi
calTop, fixedOffset, logicalHeight), applyTextIndent); | 245 return adjustLogicalLeftOffsetForLine(logicalLeftFloatOffsetForLine(logi
calTop, fixedOffset, logicalHeight), applyTextIndent); |
246 } | 246 } |
247 | 247 |
248 virtual RenderObject* layoutSpecialExcludedChild(bool /*relayoutChildren*/,
SubtreeLayoutScope&); | 248 virtual RenderObject* layoutSpecialExcludedChild(bool /*relayoutChildren*/,
SubtreeLayoutScope&); |
249 virtual bool updateLogicalWidthAndColumnWidth() override; | 249 virtual bool updateLogicalWidthAndColumnWidth() override; |
250 | 250 |
251 void setLogicalLeftForChild(RenderBox* child, LayoutUnit logicalLeft); | 251 void setLogicalLeftForChild(RenderBox& child, LayoutUnit logicalLeft); |
252 void setLogicalTopForChild(RenderBox* child, LayoutUnit logicalTop); | 252 void setLogicalTopForChild(RenderBox& child, LayoutUnit logicalTop); |
253 void determineLogicalLeftPositionForChild(RenderBox* child); | 253 void determineLogicalLeftPositionForChild(RenderBox& child); |
254 | 254 |
255 private: | 255 private: |
256 bool layoutBlockFlow(bool relayoutChildren, LayoutUnit& pageLogicalHeight, S
ubtreeLayoutScope&); | 256 bool layoutBlockFlow(bool relayoutChildren, LayoutUnit& pageLogicalHeight, S
ubtreeLayoutScope&); |
257 void layoutBlockChildren(bool relayoutChildren, SubtreeLayoutScope&, LayoutU
nit beforeEdge, LayoutUnit afterEdge); | 257 void layoutBlockChildren(bool relayoutChildren, SubtreeLayoutScope&, LayoutU
nit beforeEdge, LayoutUnit afterEdge); |
258 | 258 |
259 void layoutBlockChild(RenderBox* child, MarginInfo&, LayoutUnit& previousFlo
atLogicalBottom); | 259 void layoutBlockChild(RenderBox& child, MarginInfo&, LayoutUnit& previousFlo
atLogicalBottom); |
260 void adjustPositionedBlock(RenderBox* child, const MarginInfo&); | 260 void adjustPositionedBlock(RenderBox& child, const MarginInfo&); |
261 void adjustFloatingBlock(const MarginInfo&); | 261 void adjustFloatingBlock(const MarginInfo&); |
262 | 262 |
263 LayoutPoint computeLogicalLocationForFloat(const FloatingObject*, LayoutUnit
logicalTopOffset) const; | 263 LayoutPoint computeLogicalLocationForFloat(const FloatingObject*, LayoutUnit
logicalTopOffset) const; |
264 | 264 |
265 FloatingObject* insertFloatingObject(RenderBox*); | 265 FloatingObject* insertFloatingObject(RenderBox&); |
266 void removeFloatingObject(RenderBox*); | 266 void removeFloatingObject(RenderBox*); |
267 void removeFloatingObjectsBelow(FloatingObject*, int logicalOffset); | 267 void removeFloatingObjectsBelow(FloatingObject*, int logicalOffset); |
268 | 268 |
269 // Called from lineWidth, to position the floats added in the last line. | 269 // Called from lineWidth, to position the floats added in the last line. |
270 // Returns true if and only if it has positioned any floats. | 270 // Returns true if and only if it has positioned any floats. |
271 bool positionNewFloats(); | 271 bool positionNewFloats(); |
272 | 272 |
273 LayoutUnit getClearDelta(RenderBox* child, LayoutUnit yPos); | 273 LayoutUnit getClearDelta(RenderBox* child, LayoutUnit yPos); |
274 | 274 |
275 bool hasOverhangingFloats() { return parent() && !hasColumns() && containsFl
oats() && lowestFloatLogicalBottom() > logicalHeight(); } | 275 bool hasOverhangingFloats() { return parent() && !hasColumns() && containsFl
oats() && lowestFloatLogicalBottom() > logicalHeight(); } |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 void setNegativeMarginBefore(LayoutUnit neg) { m_negativeMarginBefore =
neg; } | 358 void setNegativeMarginBefore(LayoutUnit neg) { m_negativeMarginBefore =
neg; } |
359 void setPositiveMarginAfter(LayoutUnit pos) { m_positiveMarginAfter = po
s; } | 359 void setPositiveMarginAfter(LayoutUnit pos) { m_positiveMarginAfter = po
s; } |
360 void setNegativeMarginAfter(LayoutUnit neg) { m_negativeMarginAfter = ne
g; } | 360 void setNegativeMarginAfter(LayoutUnit neg) { m_negativeMarginAfter = ne
g; } |
361 | 361 |
362 private: | 362 private: |
363 LayoutUnit m_positiveMarginBefore; | 363 LayoutUnit m_positiveMarginBefore; |
364 LayoutUnit m_negativeMarginBefore; | 364 LayoutUnit m_negativeMarginBefore; |
365 LayoutUnit m_positiveMarginAfter; | 365 LayoutUnit m_positiveMarginAfter; |
366 LayoutUnit m_negativeMarginAfter; | 366 LayoutUnit m_negativeMarginAfter; |
367 }; | 367 }; |
368 MarginValues marginValuesForChild(RenderBox* child) const; | 368 MarginValues marginValuesForChild(RenderBox& child) const; |
369 | 369 |
370 // Allocated only when some of these fields have non-default values | 370 // Allocated only when some of these fields have non-default values |
371 struct RenderBlockFlowRareData : public NoBaseWillBeGarbageCollected<RenderB
lockFlowRareData> { | 371 struct RenderBlockFlowRareData : public NoBaseWillBeGarbageCollected<RenderB
lockFlowRareData> { |
372 WTF_MAKE_NONCOPYABLE(RenderBlockFlowRareData); WTF_MAKE_FAST_ALLOCATED_W
ILL_BE_REMOVED; | 372 WTF_MAKE_NONCOPYABLE(RenderBlockFlowRareData); WTF_MAKE_FAST_ALLOCATED_W
ILL_BE_REMOVED; |
373 public: | 373 public: |
374 RenderBlockFlowRareData(const RenderBlockFlow* block) | 374 RenderBlockFlowRareData(const RenderBlockFlow* block) |
375 : m_margins(positiveMarginBeforeDefault(block), negativeMarginBefore
Default(block), positiveMarginAfterDefault(block), negativeMarginAfterDefault(bl
ock)) | 375 : m_margins(positiveMarginBeforeDefault(block), negativeMarginBefore
Default(block), positiveMarginAfterDefault(block), negativeMarginAfterDefault(bl
ock)) |
376 , m_paginationStrut(0) | 376 , m_paginationStrut(0) |
377 , m_multiColumnFlowThread(nullptr) | 377 , m_multiColumnFlowThread(nullptr) |
378 , m_lineBreakToAvoidWidow(-1) | 378 , m_lineBreakToAvoidWidow(-1) |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
423 | 423 |
424 void setMaxMarginBeforeValues(LayoutUnit pos, LayoutUnit neg); | 424 void setMaxMarginBeforeValues(LayoutUnit pos, LayoutUnit neg); |
425 void setMaxMarginAfterValues(LayoutUnit pos, LayoutUnit neg); | 425 void setMaxMarginAfterValues(LayoutUnit pos, LayoutUnit neg); |
426 | 426 |
427 void setMustDiscardMarginBefore(bool = true); | 427 void setMustDiscardMarginBefore(bool = true); |
428 void setMustDiscardMarginAfter(bool = true); | 428 void setMustDiscardMarginAfter(bool = true); |
429 | 429 |
430 bool mustDiscardMarginBefore() const; | 430 bool mustDiscardMarginBefore() const; |
431 bool mustDiscardMarginAfter() const; | 431 bool mustDiscardMarginAfter() const; |
432 | 432 |
433 bool mustDiscardMarginBeforeForChild(const RenderBox*) const; | 433 bool mustDiscardMarginBeforeForChild(const RenderBox&) const; |
434 bool mustDiscardMarginAfterForChild(const RenderBox*) const; | 434 bool mustDiscardMarginAfterForChild(const RenderBox&) const; |
435 | 435 |
436 bool mustSeparateMarginBeforeForChild(const RenderBox*) const; | 436 bool mustSeparateMarginBeforeForChild(const RenderBox&) const; |
437 bool mustSeparateMarginAfterForChild(const RenderBox*) const; | 437 bool mustSeparateMarginAfterForChild(const RenderBox&) const; |
438 | 438 |
439 void initMaxMarginValues() | 439 void initMaxMarginValues() |
440 { | 440 { |
441 if (m_rareData) { | 441 if (m_rareData) { |
442 m_rareData->m_margins = MarginValues(RenderBlockFlowRareData::positi
veMarginBeforeDefault(this) , RenderBlockFlowRareData::negativeMarginBeforeDefau
lt(this), | 442 m_rareData->m_margins = MarginValues(RenderBlockFlowRareData::positi
veMarginBeforeDefault(this) , RenderBlockFlowRareData::negativeMarginBeforeDefau
lt(this), |
443 RenderBlockFlowRareData::positiveMarginAfterDefault(this), Rende
rBlockFlowRareData::negativeMarginAfterDefault(this)); | 443 RenderBlockFlowRareData::positiveMarginAfterDefault(this), Rende
rBlockFlowRareData::negativeMarginAfterDefault(this)); |
444 | 444 |
445 m_rareData->m_discardMarginBefore = false; | 445 m_rareData->m_discardMarginBefore = false; |
446 m_rareData->m_discardMarginAfter = false; | 446 m_rareData->m_discardMarginAfter = false; |
447 } | 447 } |
448 } | 448 } |
449 | 449 |
450 virtual ETextAlign textAlignmentForLine(bool endsWithSoftBreak) const; | 450 virtual ETextAlign textAlignmentForLine(bool endsWithSoftBreak) const; |
451 private: | 451 private: |
452 virtual LayoutUnit collapsedMarginBefore() const override final { return max
PositiveMarginBefore() - maxNegativeMarginBefore(); } | 452 virtual LayoutUnit collapsedMarginBefore() const override final { return max
PositiveMarginBefore() - maxNegativeMarginBefore(); } |
453 virtual LayoutUnit collapsedMarginAfter() const override final { return maxP
ositiveMarginAfter() - maxNegativeMarginAfter(); } | 453 virtual LayoutUnit collapsedMarginAfter() const override final { return maxP
ositiveMarginAfter() - maxNegativeMarginAfter(); } |
454 | 454 |
455 LayoutUnit collapseMargins(RenderBox* child, MarginInfo&, bool childIsSelfCo
llapsing); | 455 LayoutUnit collapseMargins(RenderBox& child, MarginInfo&, bool childIsSelfCo
llapsing); |
456 LayoutUnit clearFloatsIfNeeded(RenderBox* child, MarginInfo&, LayoutUnit old
TopPosMargin, LayoutUnit oldTopNegMargin, LayoutUnit yPos, bool childIsSelfColla
psing); | 456 LayoutUnit clearFloatsIfNeeded(RenderBox& child, MarginInfo&, LayoutUnit old
TopPosMargin, LayoutUnit oldTopNegMargin, LayoutUnit yPos, bool childIsSelfColla
psing); |
457 LayoutUnit estimateLogicalTopPosition(RenderBox* child, const MarginInfo&, L
ayoutUnit& estimateWithoutPagination); | 457 LayoutUnit estimateLogicalTopPosition(RenderBox& child, const MarginInfo&, L
ayoutUnit& estimateWithoutPagination); |
458 void marginBeforeEstimateForChild(RenderBox*, LayoutUnit&, LayoutUnit&, bool
&) const; | 458 void marginBeforeEstimateForChild(RenderBox&, LayoutUnit&, LayoutUnit&, bool
&) const; |
459 void handleAfterSideOfBlock(RenderBox* lastChild, LayoutUnit top, LayoutUnit
bottom, MarginInfo&); | 459 void handleAfterSideOfBlock(RenderBox* lastChild, LayoutUnit top, LayoutUnit
bottom, MarginInfo&); |
460 void setCollapsedBottomMargin(const MarginInfo&); | 460 void setCollapsedBottomMargin(const MarginInfo&); |
461 | 461 |
462 LayoutUnit applyBeforeBreak(RenderBox* child, LayoutUnit logicalOffset); //
If the child has a before break, then return a new yPos that shifts to the top o
f the next page/column. | 462 LayoutUnit applyBeforeBreak(RenderBox& child, LayoutUnit logicalOffset); //
If the child has a before break, then return a new yPos that shifts to the top o
f the next page/column. |
463 LayoutUnit applyAfterBreak(RenderBox* child, LayoutUnit logicalOffset, Margi
nInfo&); // If the child has an after break, then return a new offset that shift
s to the top of the next page/column. | 463 LayoutUnit applyAfterBreak(RenderBox& child, LayoutUnit logicalOffset, Margi
nInfo&); // If the child has an after break, then return a new offset that shift
s to the top of the next page/column. |
464 | 464 |
465 LayoutUnit adjustBlockChildForPagination(LayoutUnit logicalTopAfterClear, La
youtUnit estimateWithoutPagination, RenderBox* child, bool atBeforeSideOfBlock); | 465 LayoutUnit adjustBlockChildForPagination(LayoutUnit logicalTopAfterClear, La
youtUnit estimateWithoutPagination, RenderBox& child, bool atBeforeSideOfBlock); |
466 // Computes a deltaOffset value that put a line at the top of the next page
if it doesn't fit on the current page. | 466 // Computes a deltaOffset value that put a line at the top of the next page
if it doesn't fit on the current page. |
467 void adjustLinePositionForPagination(RootInlineBox*, LayoutUnit& deltaOffset
, RenderFlowThread*); | 467 void adjustLinePositionForPagination(RootInlineBox&, LayoutUnit& deltaOffset
, RenderFlowThread*); |
468 // If the child is unsplittable and can't fit on the current page, return th
e top of the next page/column. | 468 // If the child is unsplittable and can't fit on the current page, return th
e top of the next page/column. |
469 LayoutUnit adjustForUnsplittableChild(RenderBox*, LayoutUnit logicalOffset,
bool includeMargins = false); | 469 LayoutUnit adjustForUnsplittableChild(RenderBox&, LayoutUnit logicalOffset,
bool includeMargins = false); |
470 | 470 |
471 // Used to store state between styleWillChange and styleDidChange | 471 // Used to store state between styleWillChange and styleDidChange |
472 static bool s_canPropagateFloatIntoSibling; | 472 static bool s_canPropagateFloatIntoSibling; |
473 | 473 |
474 RenderBlockFlowRareData& ensureRareData(); | 474 RenderBlockFlowRareData& ensureRareData(); |
475 | 475 |
476 LayoutUnit m_paintInvalidationLogicalTop; | 476 LayoutUnit m_paintInvalidationLogicalTop; |
477 LayoutUnit m_paintInvalidationLogicalBottom; | 477 LayoutUnit m_paintInvalidationLogicalBottom; |
478 | 478 |
479 virtual bool isSelfCollapsingBlock() const override; | 479 virtual bool isSelfCollapsingBlock() const override; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
522 | 522 |
523 // END METHODS DEFINED IN RenderBlockLineLayout | 523 // END METHODS DEFINED IN RenderBlockLineLayout |
524 | 524 |
525 }; | 525 }; |
526 | 526 |
527 DEFINE_RENDER_OBJECT_TYPE_CASTS(RenderBlockFlow, isRenderBlockFlow()); | 527 DEFINE_RENDER_OBJECT_TYPE_CASTS(RenderBlockFlow, isRenderBlockFlow()); |
528 | 528 |
529 } // namespace blink | 529 } // namespace blink |
530 | 530 |
531 #endif // RenderBlockFlow_h | 531 #endif // RenderBlockFlow_h |
OLD | NEW |