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, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. | 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. |
6 * All rights reserved. | 6 * All rights reserved. |
7 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 7 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
8 * | 8 * |
9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 } | 236 } |
237 | 237 |
238 if (TextAutosizer* textAutosizer = document().textAutosizer()) | 238 if (TextAutosizer* textAutosizer = document().textAutosizer()) |
239 textAutosizer->record(this); | 239 textAutosizer->record(this); |
240 | 240 |
241 propagateStyleToAnonymousChildren(); | 241 propagateStyleToAnonymousChildren(); |
242 | 242 |
243 // It's possible for our border/padding to change, but for the overall logical | 243 // It's possible for our border/padding to change, but for the overall logical |
244 // width or height of the block to end up being the same. We keep track of | 244 // width or height of the block to end up being the same. We keep track of |
245 // this change so in layoutBlock, we can know to set relayoutChildren=true. | 245 // this change so in layoutBlock, we can know to set relayoutChildren=true. |
246 m_widthAvailableToChildrenChanged |= | 246 m_widthAvailableToChildrenChanged |= oldStyle && needsLayout() && |
247 oldStyle && needsLayout() && | 247 (diff.needsFullLayout() || |
248 (diff.needsFullLayout() || borderOrPaddingLogicalDimensionChanged( | 248 borderOrPaddingLogicalDimensionChanged( |
249 *oldStyle, newStyle, LogicalWidth)); | 249 *oldStyle, newStyle, LogicalWidth)); |
250 m_heightAvailableToChildrenChanged |= oldStyle && diff.needsFullLayout() && | 250 m_heightAvailableToChildrenChanged |= oldStyle && diff.needsFullLayout() && |
251 needsLayout() && | 251 needsLayout() && |
252 borderOrPaddingLogicalDimensionChanged( | 252 borderOrPaddingLogicalDimensionChanged( |
253 *oldStyle, newStyle, LogicalHeight); | 253 *oldStyle, newStyle, LogicalHeight); |
254 } | 254 } |
255 | 255 |
256 void LayoutBlock::updateFromStyle() { | 256 void LayoutBlock::updateFromStyle() { |
257 LayoutBox::updateFromStyle(); | 257 LayoutBox::updateFromStyle(); |
258 | 258 |
259 bool shouldClipOverflow = | 259 bool shouldClipOverflow = |
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
634 // container moves, and the absolute element has a fixed position child | 634 // container moves, and the absolute element has a fixed position child |
635 // neither the fixed element nor its container learn of the movement since | 635 // neither the fixed element nor its container learn of the movement since |
636 // posChildNeedsLayout() is only marked as far as the relative positioned | 636 // posChildNeedsLayout() is only marked as far as the relative positioned |
637 // container. So if we can have fixed pos objects in our positioned objects | 637 // container. So if we can have fixed pos objects in our positioned objects |
638 // list check if any of them are statically positioned and thus need to move | 638 // list check if any of them are statically positioned and thus need to move |
639 // with their absolute ancestors. | 639 // with their absolute ancestors. |
640 bool canContainFixedPosObjects = canContainFixedPositionObjects(); | 640 bool canContainFixedPosObjects = canContainFixedPositionObjects(); |
641 if (posChildNeedsLayout() || needsPositionedMovementLayout() || | 641 if (posChildNeedsLayout() || needsPositionedMovementLayout() || |
642 canContainFixedPosObjects) | 642 canContainFixedPosObjects) |
643 layoutPositionedObjects( | 643 layoutPositionedObjects( |
644 false, needsPositionedMovementLayout() | 644 false, |
645 ? ForcedLayoutAfterContainingBlockMoved | 645 needsPositionedMovementLayout() |
646 : (!posChildNeedsLayout() && canContainFixedPosObjects | 646 ? ForcedLayoutAfterContainingBlockMoved |
647 ? LayoutOnlyFixedPositionedObjects | 647 : (!posChildNeedsLayout() && canContainFixedPosObjects |
648 : DefaultLayout)); | 648 ? LayoutOnlyFixedPositionedObjects |
| 649 : DefaultLayout)); |
649 | 650 |
650 // Recompute our overflow information. | 651 // Recompute our overflow information. |
651 // FIXME: We could do better here by computing a temporary overflow object | 652 // FIXME: We could do better here by computing a temporary overflow object |
652 // from layoutPositionedObjects and only updating our overflow if we either | 653 // from layoutPositionedObjects and only updating our overflow if we either |
653 // used to have overflow or if the new temporary object has overflow. | 654 // used to have overflow or if the new temporary object has overflow. |
654 // For now just always recompute overflow. This is no worse performance-wise | 655 // For now just always recompute overflow. This is no worse performance-wise |
655 // than the old code that called rightmostPosition and lowestPosition on | 656 // than the old code that called rightmostPosition and lowestPosition on |
656 // every relayout so it's not a regression. computeOverflow expects the | 657 // every relayout so it's not a regression. computeOverflow expects the |
657 // bottom edge before we clamp our height. Since this information isn't | 658 // bottom edge before we clamp our height. Since this information isn't |
658 // available during simplifiedLayout, we cache the value in m_overflow. | 659 // available during simplifiedLayout, we cache the value in m_overflow. |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
931 | 932 |
932 LayoutBlock* LayoutBlock::blockBeforeWithinSelectionRoot( | 933 LayoutBlock* LayoutBlock::blockBeforeWithinSelectionRoot( |
933 LayoutSize& offset) const { | 934 LayoutSize& offset) const { |
934 if (isSelectionRoot()) | 935 if (isSelectionRoot()) |
935 return nullptr; | 936 return nullptr; |
936 | 937 |
937 const LayoutObject* object = this; | 938 const LayoutObject* object = this; |
938 LayoutObject* sibling; | 939 LayoutObject* sibling; |
939 do { | 940 do { |
940 sibling = object->previousSibling(); | 941 sibling = object->previousSibling(); |
941 while (sibling && (!sibling->isLayoutBlock() || | 942 while (sibling && |
942 toLayoutBlock(sibling)->isSelectionRoot())) | 943 (!sibling->isLayoutBlock() || |
| 944 toLayoutBlock(sibling)->isSelectionRoot())) |
943 sibling = sibling->previousSibling(); | 945 sibling = sibling->previousSibling(); |
944 | 946 |
945 offset -= LayoutSize(toLayoutBlock(object)->logicalLeft(), | 947 offset -= LayoutSize(toLayoutBlock(object)->logicalLeft(), |
946 toLayoutBlock(object)->logicalTop()); | 948 toLayoutBlock(object)->logicalTop()); |
947 object = object->parent(); | 949 object = object->parent(); |
948 } while (!sibling && object && object->isLayoutBlock() && | 950 } while (!sibling && object && object->isLayoutBlock() && |
949 !toLayoutBlock(object)->isSelectionRoot()); | 951 !toLayoutBlock(object)->isSelectionRoot()); |
950 | 952 |
951 if (!sibling) | 953 if (!sibling) |
952 return nullptr; | 954 return nullptr; |
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1201 if (hitTestAction == HitTestChildBlockBackgrounds) | 1203 if (hitTestAction == HitTestChildBlockBackgrounds) |
1202 childHitTest = HitTestChildBlockBackground; | 1204 childHitTest = HitTestChildBlockBackground; |
1203 for (LayoutBox* child = lastChildBox(); child; | 1205 for (LayoutBox* child = lastChildBox(); child; |
1204 child = child->previousSiblingBox()) { | 1206 child = child->previousSiblingBox()) { |
1205 LayoutPoint childPoint = flipForWritingModeForChild(child, scrolledOffset); | 1207 LayoutPoint childPoint = flipForWritingModeForChild(child, scrolledOffset); |
1206 if (!child->hasSelfPaintingLayer() && !child->isFloating() && | 1208 if (!child->hasSelfPaintingLayer() && !child->isFloating() && |
1207 !child->isColumnSpanAll() && | 1209 !child->isColumnSpanAll() && |
1208 child->nodeAtPoint(result, locationInContainer, childPoint, | 1210 child->nodeAtPoint(result, locationInContainer, childPoint, |
1209 childHitTest)) { | 1211 childHitTest)) { |
1210 updateHitTestResult( | 1212 updateHitTestResult( |
1211 result, flipForWritingMode(toLayoutPoint(locationInContainer.point() - | 1213 result, |
1212 accumulatedOffset))); | 1214 flipForWritingMode( |
| 1215 toLayoutPoint(locationInContainer.point() - accumulatedOffset))); |
1213 return true; | 1216 return true; |
1214 } | 1217 } |
1215 } | 1218 } |
1216 | 1219 |
1217 return false; | 1220 return false; |
1218 } | 1221 } |
1219 | 1222 |
1220 Position LayoutBlock::positionForBox(InlineBox* box, bool start) const { | 1223 Position LayoutBlock::positionForBox(InlineBox* box, bool start) const { |
1221 if (!box) | 1224 if (!box) |
1222 return Position(); | 1225 return Position(); |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1412 | 1415 |
1413 maxLogicalWidth = std::max(minLogicalWidth, maxLogicalWidth); | 1416 maxLogicalWidth = std::max(minLogicalWidth, maxLogicalWidth); |
1414 | 1417 |
1415 if (isHTMLMarqueeElement(node()) && | 1418 if (isHTMLMarqueeElement(node()) && |
1416 toHTMLMarqueeElement(node())->isHorizontal()) | 1419 toHTMLMarqueeElement(node())->isHorizontal()) |
1417 minLogicalWidth = LayoutUnit(); | 1420 minLogicalWidth = LayoutUnit(); |
1418 | 1421 |
1419 if (isTableCell()) { | 1422 if (isTableCell()) { |
1420 Length tableCellWidth = toLayoutTableCell(this)->styleOrColLogicalWidth(); | 1423 Length tableCellWidth = toLayoutTableCell(this)->styleOrColLogicalWidth(); |
1421 if (tableCellWidth.isFixed() && tableCellWidth.value() > 0) | 1424 if (tableCellWidth.isFixed() && tableCellWidth.value() > 0) |
1422 maxLogicalWidth = | 1425 maxLogicalWidth = std::max(minLogicalWidth, |
1423 std::max(minLogicalWidth, adjustContentBoxLogicalWidthForBoxSizing( | 1426 adjustContentBoxLogicalWidthForBoxSizing( |
1424 LayoutUnit(tableCellWidth.value()))); | 1427 LayoutUnit(tableCellWidth.value()))); |
1425 } | 1428 } |
1426 | 1429 |
1427 int scrollbarWidth = scrollbarLogicalWidth(); | 1430 int scrollbarWidth = scrollbarLogicalWidth(); |
1428 maxLogicalWidth += scrollbarWidth; | 1431 maxLogicalWidth += scrollbarWidth; |
1429 minLogicalWidth += scrollbarWidth; | 1432 minLogicalWidth += scrollbarWidth; |
1430 } | 1433 } |
1431 | 1434 |
1432 DISABLE_CFI_PERF | 1435 DISABLE_CFI_PERF |
1433 void LayoutBlock::computePreferredLogicalWidths() { | 1436 void LayoutBlock::computePreferredLogicalWidths() { |
1434 ASSERT(preferredLogicalWidthsDirty()); | 1437 ASSERT(preferredLogicalWidthsDirty()); |
(...skipping 780 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2215 } | 2218 } |
2216 | 2219 |
2217 return availableHeight; | 2220 return availableHeight; |
2218 } | 2221 } |
2219 | 2222 |
2220 bool LayoutBlock::hasDefiniteLogicalHeight() const { | 2223 bool LayoutBlock::hasDefiniteLogicalHeight() const { |
2221 return availableLogicalHeightForPercentageComputation() != LayoutUnit(-1); | 2224 return availableLogicalHeightForPercentageComputation() != LayoutUnit(-1); |
2222 } | 2225 } |
2223 | 2226 |
2224 } // namespace blink | 2227 } // namespace blink |
OLD | NEW |