| 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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 class ClipScope; | 47 class ClipScope; |
| 48 class MarginInfo; | 48 class MarginInfo; |
| 49 class LineBreaker; | 49 class LineBreaker; |
| 50 class LineInfo; | 50 class LineInfo; |
| 51 class LineWidth; | 51 class LineWidth; |
| 52 class LayoutMultiColumnFlowThread; | 52 class LayoutMultiColumnFlowThread; |
| 53 class LayoutMultiColumnSpannerPlaceholder; | 53 class LayoutMultiColumnSpannerPlaceholder; |
| 54 class LayoutRubyRun; | 54 class LayoutRubyRun; |
| 55 template <class Run> class BidiRunList; | 55 template <class Run> class BidiRunList; |
| 56 | 56 |
| 57 enum IndentTextOrNot { DoNotIndentText, IndentText }; |
| 58 |
| 57 // LayoutBlockFlow is the class that implements a block container in CSS 2.1. | 59 // LayoutBlockFlow is the class that implements a block container in CSS 2.1. |
| 58 // http://www.w3.org/TR/CSS21/visuren.html#block-boxes | 60 // http://www.w3.org/TR/CSS21/visuren.html#block-boxes |
| 59 // | 61 // |
| 60 // LayoutBlockFlows are the only LayoutObject allowed to own floating objects | 62 // LayoutBlockFlows are the only LayoutObject allowed to own floating objects |
| 61 // (aka floats): http://www.w3.org/TR/CSS21/visuren.html#floats . | 63 // (aka floats): http://www.w3.org/TR/CSS21/visuren.html#floats . |
| 62 // | 64 // |
| 63 // Floats are inserted into |m_floatingObjects| (see FloatingObjects for more | 65 // Floats are inserted into |m_floatingObjects| (see FloatingObjects for more |
| 64 // information on how floats are modelled) during layout. This happens either as | 66 // information on how floats are modelled) during layout. This happens either as |
| 65 // part of laying out blocks (layoutBlockChildren) or line layout (LineBreaker | 67 // part of laying out blocks (layoutBlockChildren) or line layout (LineBreaker |
| 66 // class). This is because floats can be part of an inline or a block context. | 68 // class). This is because floats can be part of an inline or a block context. |
| (...skipping 23 matching lines...) Expand all Loading... |
| 90 static LayoutBlockFlow* createAnonymous(Document*); | 92 static LayoutBlockFlow* createAnonymous(Document*); |
| 91 | 93 |
| 92 bool isLayoutBlockFlow() const final { return true; } | 94 bool isLayoutBlockFlow() const final { return true; } |
| 93 | 95 |
| 94 void layoutBlock(bool relayoutChildren) override; | 96 void layoutBlock(bool relayoutChildren) override; |
| 95 | 97 |
| 96 void computeOverflow(LayoutUnit oldClientAfterEdge, bool recomputeFloats = f
alse) override; | 98 void computeOverflow(LayoutUnit oldClientAfterEdge, bool recomputeFloats = f
alse) override; |
| 97 | 99 |
| 98 void deleteLineBoxTree() final; | 100 void deleteLineBoxTree() final; |
| 99 | 101 |
| 100 LayoutUnit availableLogicalWidthForLine(LayoutUnit position, bool shouldInde
ntText, LayoutUnit logicalHeight = 0) const | 102 LayoutUnit availableLogicalWidthForLine(LayoutUnit position, IndentTextOrNot
shouldIndentText, LayoutUnit logicalHeight = 0) const |
| 101 { | 103 { |
| 102 return max<LayoutUnit>(0, logicalRightOffsetForLine(position, shouldInde
ntText, logicalHeight) - logicalLeftOffsetForLine(position, shouldIndentText, lo
gicalHeight)); | 104 return max<LayoutUnit>(0, logicalRightOffsetForLine(position, shouldInde
ntText, logicalHeight) - logicalLeftOffsetForLine(position, shouldIndentText, lo
gicalHeight)); |
| 103 } | 105 } |
| 104 LayoutUnit logicalRightOffsetForLine(LayoutUnit position, bool shouldIndentT
ext, LayoutUnit logicalHeight = 0) const | 106 LayoutUnit logicalRightOffsetForLine(LayoutUnit position, IndentTextOrNot sh
ouldIndentText, LayoutUnit logicalHeight = 0) const |
| 105 { | 107 { |
| 106 return logicalRightOffsetForLine(position, logicalRightOffsetForContent(
), shouldIndentText, logicalHeight); | 108 return logicalRightOffsetForLine(position, logicalRightOffsetForContent(
), shouldIndentText, logicalHeight); |
| 107 } | 109 } |
| 108 LayoutUnit logicalLeftOffsetForLine(LayoutUnit position, bool shouldIndentTe
xt, LayoutUnit logicalHeight = 0) const | 110 LayoutUnit logicalLeftOffsetForLine(LayoutUnit position, IndentTextOrNot sho
uldIndentText, LayoutUnit logicalHeight = 0) const |
| 109 { | 111 { |
| 110 return logicalLeftOffsetForLine(position, logicalLeftOffsetForContent(),
shouldIndentText, logicalHeight); | 112 return logicalLeftOffsetForLine(position, logicalLeftOffsetForContent(),
shouldIndentText, logicalHeight); |
| 111 } | 113 } |
| 112 LayoutUnit startOffsetForLine(LayoutUnit position, bool shouldIndentText, La
youtUnit logicalHeight = 0) const | 114 LayoutUnit startOffsetForLine(LayoutUnit position, IndentTextOrNot shouldInd
entText, LayoutUnit logicalHeight = 0) const |
| 113 { | 115 { |
| 114 return style()->isLeftToRightDirection() ? logicalLeftOffsetForLine(posi
tion, shouldIndentText, logicalHeight) | 116 return style()->isLeftToRightDirection() ? logicalLeftOffsetForLine(posi
tion, shouldIndentText, logicalHeight) |
| 115 : logicalWidth() - logicalRightOffsetForLine(position, shouldIndentT
ext, logicalHeight); | 117 : logicalWidth() - logicalRightOffsetForLine(position, shouldIndentT
ext, logicalHeight); |
| 116 } | 118 } |
| 117 LayoutUnit endOffsetForLine(LayoutUnit position, bool shouldIndentText, Layo
utUnit logicalHeight = 0) const | 119 LayoutUnit endOffsetForLine(LayoutUnit position, IndentTextOrNot shouldInden
tText, LayoutUnit logicalHeight = 0) const |
| 118 { | 120 { |
| 119 return !style()->isLeftToRightDirection() ? logicalLeftOffsetForLine(pos
ition, shouldIndentText, logicalHeight) | 121 return !style()->isLeftToRightDirection() ? logicalLeftOffsetForLine(pos
ition, shouldIndentText, logicalHeight) |
| 120 : logicalWidth() - logicalRightOffsetForLine(position, shouldIndentT
ext, logicalHeight); | 122 : logicalWidth() - logicalRightOffsetForLine(position, shouldIndentT
ext, logicalHeight); |
| 121 } | 123 } |
| 122 | 124 |
| 123 // FIXME-BLOCKFLOW: Move this into LayoutBlockFlow once there are no calls | 125 // FIXME-BLOCKFLOW: Move this into LayoutBlockFlow once there are no calls |
| 124 // in LayoutBlock. http://crbug.com/393945, http://crbug.com/302024 | 126 // in LayoutBlock. http://crbug.com/393945, http://crbug.com/302024 |
| 125 using LayoutBlock::lineBoxes; | 127 using LayoutBlock::lineBoxes; |
| 126 using LayoutBlock::firstLineBox; | 128 using LayoutBlock::firstLineBox; |
| 127 using LayoutBlock::lastLineBox; | 129 using LayoutBlock::lastLineBox; |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 176 floatingObject.setWidth(logicalHeight); | 178 floatingObject.setWidth(logicalHeight); |
| 177 } | 179 } |
| 178 void setLogicalWidthForFloat(FloatingObject& floatingObject, LayoutUnit logi
calWidth) | 180 void setLogicalWidthForFloat(FloatingObject& floatingObject, LayoutUnit logi
calWidth) |
| 179 { | 181 { |
| 180 if (isHorizontalWritingMode()) | 182 if (isHorizontalWritingMode()) |
| 181 floatingObject.setWidth(logicalWidth); | 183 floatingObject.setWidth(logicalWidth); |
| 182 else | 184 else |
| 183 floatingObject.setHeight(logicalWidth); | 185 floatingObject.setHeight(logicalWidth); |
| 184 } | 186 } |
| 185 | 187 |
| 186 LayoutUnit startAlignedOffsetForLine(LayoutUnit position, bool shouldIndentT
ext); | 188 LayoutUnit startAlignedOffsetForLine(LayoutUnit position, IndentTextOrNot sh
ouldIndentText); |
| 187 | 189 |
| 188 void setStaticInlinePositionForChild(LayoutBox&, LayoutUnit inlinePosition); | 190 void setStaticInlinePositionForChild(LayoutBox&, LayoutUnit inlinePosition); |
| 189 void updateStaticInlinePositionForChild(LayoutBox&, LayoutUnit logicalTop, b
ool shouldIndentText = false); | 191 void updateStaticInlinePositionForChild(LayoutBox&, LayoutUnit logicalTop, I
ndentTextOrNot shouldIndentText = DoNotIndentText); |
| 190 | 192 |
| 191 static bool shouldSkipCreatingRunsForObject(LayoutObject* obj) | 193 static bool shouldSkipCreatingRunsForObject(LayoutObject* obj) |
| 192 { | 194 { |
| 193 return obj->isFloating() || (obj->isOutOfFlowPositioned() && !obj->style
()->isOriginalDisplayInlineType() && !obj->container()->isLayoutInline()); | 195 return obj->isFloating() || (obj->isOutOfFlowPositioned() && !obj->style
()->isOriginalDisplayInlineType() && !obj->container()->isLayoutInline()); |
| 194 } | 196 } |
| 195 | 197 |
| 196 LayoutMultiColumnFlowThread* multiColumnFlowThread() const { return m_rareDa
ta ? m_rareData->m_multiColumnFlowThread : 0; } | 198 LayoutMultiColumnFlowThread* multiColumnFlowThread() const { return m_rareDa
ta ? m_rareData->m_multiColumnFlowThread : 0; } |
| 197 void resetMultiColumnFlowThread() | 199 void resetMultiColumnFlowThread() |
| 198 { | 200 { |
| 199 if (m_rareData) | 201 if (m_rareData) |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 302 | 304 |
| 303 void createFloatingObjects(); | 305 void createFloatingObjects(); |
| 304 | 306 |
| 305 void styleWillChange(StyleDifference, const ComputedStyle& newStyle) overrid
e; | 307 void styleWillChange(StyleDifference, const ComputedStyle& newStyle) overrid
e; |
| 306 void styleDidChange(StyleDifference, const ComputedStyle* oldStyle) override
; | 308 void styleDidChange(StyleDifference, const ComputedStyle* oldStyle) override
; |
| 307 | 309 |
| 308 void updateBlockChildDirtyBitsBeforeLayout(bool relayoutChildren, LayoutBox&
); | 310 void updateBlockChildDirtyBitsBeforeLayout(bool relayoutChildren, LayoutBox&
); |
| 309 | 311 |
| 310 void addOverflowFromFloats(); | 312 void addOverflowFromFloats(); |
| 311 | 313 |
| 312 LayoutUnit logicalRightOffsetForLine(LayoutUnit logicalTop, LayoutUnit fixed
Offset, bool applyTextIndent, LayoutUnit logicalHeight = 0) const | 314 LayoutUnit logicalRightOffsetForLine(LayoutUnit logicalTop, LayoutUnit fixed
Offset, IndentTextOrNot applyTextIndent, LayoutUnit logicalHeight = 0) const |
| 313 { | 315 { |
| 314 return adjustLogicalRightOffsetForLine(logicalRightFloatOffsetForLine(lo
gicalTop, fixedOffset, logicalHeight), applyTextIndent); | 316 return adjustLogicalRightOffsetForLine(logicalRightFloatOffsetForLine(lo
gicalTop, fixedOffset, logicalHeight), applyTextIndent); |
| 315 } | 317 } |
| 316 LayoutUnit logicalLeftOffsetForLine(LayoutUnit logicalTop, LayoutUnit fixedO
ffset, bool applyTextIndent, LayoutUnit logicalHeight = 0) const | 318 LayoutUnit logicalLeftOffsetForLine(LayoutUnit logicalTop, LayoutUnit fixedO
ffset, IndentTextOrNot applyTextIndent, LayoutUnit logicalHeight = 0) const |
| 317 { | 319 { |
| 318 return adjustLogicalLeftOffsetForLine(logicalLeftFloatOffsetForLine(logi
calTop, fixedOffset, logicalHeight), applyTextIndent); | 320 return adjustLogicalLeftOffsetForLine(logicalLeftFloatOffsetForLine(logi
calTop, fixedOffset, logicalHeight), applyTextIndent); |
| 319 } | 321 } |
| 320 | 322 |
| 321 virtual LayoutObject* layoutSpecialExcludedChild(bool /*relayoutChildren*/,
SubtreeLayoutScope&); | 323 virtual LayoutObject* layoutSpecialExcludedChild(bool /*relayoutChildren*/,
SubtreeLayoutScope&); |
| 322 bool updateLogicalWidthAndColumnWidth() override; | 324 bool updateLogicalWidthAndColumnWidth() override; |
| 323 | 325 |
| 324 void setLogicalLeftForChild(LayoutBox& child, LayoutUnit logicalLeft); | 326 void setLogicalLeftForChild(LayoutBox& child, LayoutUnit logicalLeft); |
| 325 void setLogicalTopForChild(LayoutBox& child, LayoutUnit logicalTop); | 327 void setLogicalTopForChild(LayoutBox& child, LayoutUnit logicalTop); |
| 326 void determineLogicalLeftPositionForChild(LayoutBox& child); | 328 void determineLogicalLeftPositionForChild(LayoutBox& child); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 359 void paintSelection(const PaintInfo&, const LayoutPoint&) const final; | 361 void paintSelection(const PaintInfo&, const LayoutPoint&) const final; |
| 360 virtual void clipOutFloatingObjects(const LayoutBlock*, ClipScope&, const La
youtPoint&, const LayoutSize&) const; | 362 virtual void clipOutFloatingObjects(const LayoutBlock*, ClipScope&, const La
youtPoint&, const LayoutSize&) const; |
| 361 void clearFloats(EClear); | 363 void clearFloats(EClear); |
| 362 | 364 |
| 363 LayoutUnit logicalRightFloatOffsetForLine(LayoutUnit logicalTop, LayoutUnit
fixedOffset, LayoutUnit logicalHeight) const; | 365 LayoutUnit logicalRightFloatOffsetForLine(LayoutUnit logicalTop, LayoutUnit
fixedOffset, LayoutUnit logicalHeight) const; |
| 364 LayoutUnit logicalLeftFloatOffsetForLine(LayoutUnit logicalTop, LayoutUnit f
ixedOffset, LayoutUnit logicalHeight) const; | 366 LayoutUnit logicalLeftFloatOffsetForLine(LayoutUnit logicalTop, LayoutUnit f
ixedOffset, LayoutUnit logicalHeight) const; |
| 365 | 367 |
| 366 LayoutUnit logicalRightOffsetForPositioningFloat(LayoutUnit logicalTop, Layo
utUnit fixedOffset, LayoutUnit* heightRemaining) const; | 368 LayoutUnit logicalRightOffsetForPositioningFloat(LayoutUnit logicalTop, Layo
utUnit fixedOffset, LayoutUnit* heightRemaining) const; |
| 367 LayoutUnit logicalLeftOffsetForPositioningFloat(LayoutUnit logicalTop, Layou
tUnit fixedOffset, LayoutUnit* heightRemaining) const; | 369 LayoutUnit logicalLeftOffsetForPositioningFloat(LayoutUnit logicalTop, Layou
tUnit fixedOffset, LayoutUnit* heightRemaining) const; |
| 368 | 370 |
| 369 LayoutUnit adjustLogicalRightOffsetForLine(LayoutUnit offsetFromFloats, bool
applyTextIndent) const; | 371 LayoutUnit adjustLogicalRightOffsetForLine(LayoutUnit offsetFromFloats, Inde
ntTextOrNot applyTextIndent) const; |
| 370 LayoutUnit adjustLogicalLeftOffsetForLine(LayoutUnit offsetFromFloats, bool
applyTextIndent) const; | 372 LayoutUnit adjustLogicalLeftOffsetForLine(LayoutUnit offsetFromFloats, Inden
tTextOrNot applyTextIndent) const; |
| 371 | 373 |
| 372 virtual RootInlineBox* createRootInlineBox(); // Subclassed by SVG | 374 virtual RootInlineBox* createRootInlineBox(); // Subclassed by SVG |
| 373 | 375 |
| 374 bool isPagedOverflow(const ComputedStyle&); | 376 bool isPagedOverflow(const ComputedStyle&); |
| 375 | 377 |
| 376 enum FlowThreadType { | 378 enum FlowThreadType { |
| 377 NoFlowThread, | 379 NoFlowThread, |
| 378 MultiColumnFlowThread, | 380 MultiColumnFlowThread, |
| 379 PagedFlowThread | 381 PagedFlowThread |
| 380 }; | 382 }; |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 594 | 596 |
| 595 // END METHODS DEFINED IN LayoutBlockFlowLine | 597 // END METHODS DEFINED IN LayoutBlockFlowLine |
| 596 | 598 |
| 597 }; | 599 }; |
| 598 | 600 |
| 599 DEFINE_LAYOUT_OBJECT_TYPE_CASTS(LayoutBlockFlow, isLayoutBlockFlow()); | 601 DEFINE_LAYOUT_OBJECT_TYPE_CASTS(LayoutBlockFlow, isLayoutBlockFlow()); |
| 600 | 602 |
| 601 } // namespace blink | 603 } // namespace blink |
| 602 | 604 |
| 603 #endif // LayoutBlockFlow_h | 605 #endif // LayoutBlockFlow_h |
| OLD | NEW |