OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 static_assert(sizeof(MarginInfo) == sizeof(SameSizeAsMarginInfo), "MarginInf
o should stay small"); | 168 static_assert(sizeof(MarginInfo) == sizeof(SameSizeAsMarginInfo), "MarginInf
o should stay small"); |
169 setChildrenInline(true); | 169 setChildrenInline(true); |
170 } | 170 } |
171 | 171 |
172 LayoutBlockFlow::~LayoutBlockFlow() | 172 LayoutBlockFlow::~LayoutBlockFlow() |
173 { | 173 { |
174 } | 174 } |
175 | 175 |
176 LayoutBlockFlow* LayoutBlockFlow::createAnonymous(Document* document) | 176 LayoutBlockFlow* LayoutBlockFlow::createAnonymous(Document* document) |
177 { | 177 { |
178 LayoutBlockFlow* layoutBlockFlow = new LayoutBlockFlow(0); | 178 LayoutBlockFlow* layoutBlockFlow = new LayoutBlockFlow(nullptr); |
179 layoutBlockFlow->setDocumentForAnonymous(document); | 179 layoutBlockFlow->setDocumentForAnonymous(document); |
180 return layoutBlockFlow; | 180 return layoutBlockFlow; |
181 } | 181 } |
182 | 182 |
183 LayoutObject* LayoutBlockFlow::layoutSpecialExcludedChild(bool relayoutChildren,
SubtreeLayoutScope& layoutScope) | 183 LayoutObject* LayoutBlockFlow::layoutSpecialExcludedChild(bool relayoutChildren,
SubtreeLayoutScope& layoutScope) |
184 { | 184 { |
185 LayoutMultiColumnFlowThread* flowThread = multiColumnFlowThread(); | 185 LayoutMultiColumnFlowThread* flowThread = multiColumnFlowThread(); |
186 if (!flowThread) | 186 if (!flowThread) |
187 return 0; | 187 return nullptr; |
188 setLogicalTopForChild(*flowThread, borderBefore() + paddingBefore()); | 188 setLogicalTopForChild(*flowThread, borderBefore() + paddingBefore()); |
189 flowThread->layoutColumns(relayoutChildren, layoutScope); | 189 flowThread->layoutColumns(relayoutChildren, layoutScope); |
190 determineLogicalLeftPositionForChild(*flowThread); | 190 determineLogicalLeftPositionForChild(*flowThread); |
191 return flowThread; | 191 return flowThread; |
192 } | 192 } |
193 | 193 |
194 bool LayoutBlockFlow::updateLogicalWidthAndColumnWidth() | 194 bool LayoutBlockFlow::updateLogicalWidthAndColumnWidth() |
195 { | 195 { |
196 bool relayoutChildren = LayoutBlock::updateLogicalWidthAndColumnWidth(); | 196 bool relayoutChildren = LayoutBlock::updateLogicalWidthAndColumnWidth(); |
197 if (LayoutMultiColumnFlowThread* flowThread = multiColumnFlowThread()) { | 197 if (LayoutMultiColumnFlowThread* flowThread = multiColumnFlowThread()) { |
(...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
947 MarginInfo marginInfo(this, beforeEdge, afterEdge); | 947 MarginInfo marginInfo(this, beforeEdge, afterEdge); |
948 | 948 |
949 // Fieldsets need to find their legend and position it inside the border of
the object. | 949 // Fieldsets need to find their legend and position it inside the border of
the object. |
950 // The legend then gets skipped during normal layout. The same is true for r
uby text. | 950 // The legend then gets skipped during normal layout. The same is true for r
uby text. |
951 // It doesn't get included in the normal layout process but is instead skipp
ed. | 951 // It doesn't get included in the normal layout process but is instead skipp
ed. |
952 LayoutObject* childToExclude = layoutSpecialExcludedChild(relayoutChildren,
layoutScope); | 952 LayoutObject* childToExclude = layoutSpecialExcludedChild(relayoutChildren,
layoutScope); |
953 | 953 |
954 LayoutUnit previousFloatLogicalBottom = 0; | 954 LayoutUnit previousFloatLogicalBottom = 0; |
955 | 955 |
956 LayoutBox* next = firstChildBox(); | 956 LayoutBox* next = firstChildBox(); |
957 LayoutBox* lastNormalFlowChild = 0; | 957 LayoutBox* lastNormalFlowChild = nullptr; |
958 | 958 |
959 while (next) { | 959 while (next) { |
960 LayoutBox* child = next; | 960 LayoutBox* child = next; |
961 next = child->nextSiblingBox(); | 961 next = child->nextSiblingBox(); |
962 | 962 |
963 child->setMayNeedPaintInvalidation(); | 963 child->setMayNeedPaintInvalidation(); |
964 | 964 |
965 if (childToExclude == child) | 965 if (childToExclude == child) |
966 continue; // Skip this child, since it will be positioned by the spe
cialized subclass (fieldsets and ruby runs). | 966 continue; // Skip this child, since it will be positioned by the spe
cialized subclass (fieldsets and ruby runs). |
967 | 967 |
(...skipping 1296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2264 // the line that they're on, but it still needs to be dirtie
d. This is | 2264 // the line that they're on, but it still needs to be dirtie
d. This is |
2265 // accomplished by pretending they have a height of 1. | 2265 // accomplished by pretending they have a height of 1. |
2266 logicalBottom = std::max(logicalBottom, logicalTop + 1); | 2266 logicalBottom = std::max(logicalBottom, logicalTop + 1); |
2267 } | 2267 } |
2268 if (floatingObject->originatingLine()) { | 2268 if (floatingObject->originatingLine()) { |
2269 if (!selfNeedsLayout()) { | 2269 if (!selfNeedsLayout()) { |
2270 ASSERT(floatingObject->originatingLine()->layoutObject()
== this); | 2270 ASSERT(floatingObject->originatingLine()->layoutObject()
== this); |
2271 floatingObject->originatingLine()->markDirty(); | 2271 floatingObject->originatingLine()->markDirty(); |
2272 } | 2272 } |
2273 #if ENABLE(ASSERT) | 2273 #if ENABLE(ASSERT) |
2274 floatingObject->setOriginatingLine(0); | 2274 floatingObject->setOriginatingLine(nullptr); |
2275 #endif | 2275 #endif |
2276 } | 2276 } |
2277 markLinesDirtyInBlockRange(0, logicalBottom); | 2277 markLinesDirtyInBlockRange(0, logicalBottom); |
2278 } | 2278 } |
2279 m_floatingObjects->remove(floatingObject); | 2279 m_floatingObjects->remove(floatingObject); |
2280 } | 2280 } |
2281 } | 2281 } |
2282 } | 2282 } |
2283 | 2283 |
2284 void LayoutBlockFlow::removeFloatingObjectsBelow(FloatingObject* lastFloat, int
logicalOffset) | 2284 void LayoutBlockFlow::removeFloatingObjectsBelow(FloatingObject* lastFloat, int
logicalOffset) |
(...skipping 23 matching lines...) Expand all Loading... |
2308 // If all floats have already been positioned, then we have no work to do. | 2308 // If all floats have already been positioned, then we have no work to do. |
2309 if (floatingObjectSet.last()->isPlaced()) | 2309 if (floatingObjectSet.last()->isPlaced()) |
2310 return false; | 2310 return false; |
2311 | 2311 |
2312 // Move backwards through our floating object list until we find a float tha
t has | 2312 // Move backwards through our floating object list until we find a float tha
t has |
2313 // already been positioned. Then we'll be able to move forward, positioning
all of | 2313 // already been positioned. Then we'll be able to move forward, positioning
all of |
2314 // the new floats that need it. | 2314 // the new floats that need it. |
2315 FloatingObjectSetIterator it = floatingObjectSet.end(); | 2315 FloatingObjectSetIterator it = floatingObjectSet.end(); |
2316 --it; // Go to last item. | 2316 --it; // Go to last item. |
2317 FloatingObjectSetIterator begin = floatingObjectSet.begin(); | 2317 FloatingObjectSetIterator begin = floatingObjectSet.begin(); |
2318 FloatingObject* lastPlacedFloatingObject = 0; | 2318 FloatingObject* lastPlacedFloatingObject = nullptr; |
2319 while (it != begin) { | 2319 while (it != begin) { |
2320 --it; | 2320 --it; |
2321 if ((*it)->isPlaced()) { | 2321 if ((*it)->isPlaced()) { |
2322 lastPlacedFloatingObject = it->get(); | 2322 lastPlacedFloatingObject = it->get(); |
2323 ++it; | 2323 ++it; |
2324 break; | 2324 break; |
2325 } | 2325 } |
2326 } | 2326 } |
2327 | 2327 |
2328 LayoutUnit logicalTop = logicalHeight(); | 2328 LayoutUnit logicalTop = logicalHeight(); |
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2686 if (containsStart) { | 2686 if (containsStart) { |
2687 // Go ahead and update our lastLogicalTop to be the bottom of the bl
ock. <hr>s or empty blocks with height can trip this | 2687 // Go ahead and update our lastLogicalTop to be the bottom of the bl
ock. <hr>s or empty blocks with height can trip this |
2688 // case. | 2688 // case. |
2689 lastLogicalTop = rootBlock->blockDirectionOffset(offsetFromRootBlock
) + logicalHeight(); | 2689 lastLogicalTop = rootBlock->blockDirectionOffset(offsetFromRootBlock
) + logicalHeight(); |
2690 lastLogicalLeft = logicalLeftSelectionOffset(rootBlock, logicalHeigh
t()); | 2690 lastLogicalLeft = logicalLeftSelectionOffset(rootBlock, logicalHeigh
t()); |
2691 lastLogicalRight = logicalRightSelectionOffset(rootBlock, logicalHei
ght()); | 2691 lastLogicalRight = logicalRightSelectionOffset(rootBlock, logicalHei
ght()); |
2692 } | 2692 } |
2693 return result; | 2693 return result; |
2694 } | 2694 } |
2695 | 2695 |
2696 RootInlineBox* lastSelectedLine = 0; | 2696 RootInlineBox* lastSelectedLine = nullptr; |
2697 RootInlineBox* curr; | 2697 RootInlineBox* curr; |
2698 for (curr = firstRootBox(); curr && !curr->hasSelectedChildren(); curr = cur
r->nextRootBox()) { } | 2698 for (curr = firstRootBox(); curr && !curr->hasSelectedChildren(); curr = cur
r->nextRootBox()) { } |
2699 | 2699 |
2700 // Now paint the gaps for the lines. | 2700 // Now paint the gaps for the lines. |
2701 for (; curr && curr->hasSelectedChildren(); curr = curr->nextRootBox()) { | 2701 for (; curr && curr->hasSelectedChildren(); curr = curr->nextRootBox()) { |
2702 LayoutUnit selTop = curr->selectionTopAdjustedForPrecedingBlock(); | 2702 LayoutUnit selTop = curr->selectionTopAdjustedForPrecedingBlock(); |
2703 LayoutUnit selHeight = curr->selectionHeightAdjustedForPrecedingBlock(); | 2703 LayoutUnit selHeight = curr->selectionHeightAdjustedForPrecedingBlock(); |
2704 | 2704 |
2705 if (!containsStart && !lastSelectedLine && selectionState() != Selection
Start && selectionState() != SelectionBoth) { | 2705 if (!containsStart && !lastSelectedLine && selectionState() != Selection
Start && selectionState() != SelectionBoth) { |
2706 result.uniteCenter(blockSelectionGap(rootBlock, rootBlockPhysicalPos
ition, offsetFromRootBlock, lastLogicalTop, | 2706 result.uniteCenter(blockSelectionGap(rootBlock, rootBlockPhysicalPos
ition, offsetFromRootBlock, lastLogicalTop, |
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3053 FrameView* frameView = document().view(); | 3053 FrameView* frameView = document().view(); |
3054 LayoutUnit top = (style()->position() == FixedPosition) ? 0 : frameView->scr
ollOffset().height(); | 3054 LayoutUnit top = (style()->position() == FixedPosition) ? 0 : frameView->scr
ollOffset().height(); |
3055 int visibleHeight = frameView->visibleContentRect(IncludeScrollbars).height(
); | 3055 int visibleHeight = frameView->visibleContentRect(IncludeScrollbars).height(
); |
3056 if (size().height() < visibleHeight) | 3056 if (size().height() < visibleHeight) |
3057 top += (visibleHeight - size().height()) / 2; | 3057 top += (visibleHeight - size().height()) / 2; |
3058 setY(top); | 3058 setY(top); |
3059 dialog->setCentered(top); | 3059 dialog->setCentered(top); |
3060 } | 3060 } |
3061 | 3061 |
3062 } // namespace blink | 3062 } // namespace blink |
OLD | NEW |