| 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 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 137 RenderBox* lastNormalFlowChild = 0; | 137 RenderBox* lastNormalFlowChild = 0; |
| 138 | 138 |
| 139 while (next) { | 139 while (next) { |
| 140 RenderBox* child = next; | 140 RenderBox* child = next; |
| 141 next = child->nextSiblingBox(); | 141 next = child->nextSiblingBox(); |
| 142 | 142 |
| 143 updateBlockChildDirtyBitsBeforeLayout(relayoutChildren, child); | 143 updateBlockChildDirtyBitsBeforeLayout(relayoutChildren, child); |
| 144 | 144 |
| 145 if (child->isOutOfFlowPositioned()) { | 145 if (child->isOutOfFlowPositioned()) { |
| 146 child->containingBlock()->insertPositionedObject(child); | 146 child->containingBlock()->insertPositionedObject(child); |
| 147 adjustPositionedBlock(child); | |
| 148 continue; | 147 continue; |
| 149 } | 148 } |
| 150 | 149 |
| 151 // Lay out the child. | 150 // Lay out the child. |
| 152 layoutBlockChild(child); | 151 layoutBlockChild(child); |
| 153 lastNormalFlowChild = child; | 152 lastNormalFlowChild = child; |
| 154 } | 153 } |
| 155 | 154 |
| 156 // Negative margins can cause our height to shrink below our minimal height
(border/padding). | 155 // Negative margins can cause our height to shrink below our minimal height
(border/padding). |
| 157 // If this happens, ensure that the computed height is increased to the mini
mal height. | 156 // If this happens, ensure that the computed height is increased to the mini
mal height. |
| 158 setLogicalHeight(std::max(logicalHeight() + afterEdge, beforeEdge + afterEdg
e)); | 157 setLogicalHeight(std::max(logicalHeight() + afterEdge, beforeEdge + afterEdg
e)); |
| 159 } | 158 } |
| 160 | 159 |
| 161 void RenderBlockFlow::adjustPositionedBlock(RenderBox* child) | |
| 162 { | |
| 163 bool hasStaticBlockPosition = child->style()->hasStaticBlockPosition(); | |
| 164 | |
| 165 LayoutUnit logicalTop = logicalHeight(); | |
| 166 updateStaticInlinePositionForChild(child); | |
| 167 | |
| 168 RenderLayer* childLayer = child->layer(); | |
| 169 if (childLayer->staticBlockPosition() != logicalTop) { | |
| 170 childLayer->setStaticBlockPosition(logicalTop); | |
| 171 if (hasStaticBlockPosition) | |
| 172 child->setChildNeedsLayout(MarkOnlyThis); | |
| 173 } | |
| 174 } | |
| 175 | |
| 176 RootInlineBox* RenderBlockFlow::createAndAppendRootInlineBox() | 160 RootInlineBox* RenderBlockFlow::createAndAppendRootInlineBox() |
| 177 { | 161 { |
| 178 RootInlineBox* rootBox = createRootInlineBox(); | 162 RootInlineBox* rootBox = createRootInlineBox(); |
| 179 m_lineBoxes.appendLineBox(rootBox); | 163 m_lineBoxes.appendLineBox(rootBox); |
| 180 | 164 |
| 181 return rootBox; | 165 return rootBox; |
| 182 } | 166 } |
| 183 | 167 |
| 184 void RenderBlockFlow::deleteLineBoxTree() | 168 void RenderBlockFlow::deleteLineBoxTree() |
| 185 { | 169 { |
| 186 m_lineBoxes.deleteLineBoxTree(); | 170 m_lineBoxes.deleteLineBoxTree(); |
| 187 } | 171 } |
| 188 | 172 |
| 189 void RenderBlockFlow::updateStaticInlinePositionForChild(RenderBox* child) | |
| 190 { | |
| 191 if (child->style()->isOriginalDisplayInlineType()) | |
| 192 setStaticInlinePositionForChild(child, startAlignedOffsetForLine(false))
; | |
| 193 else | |
| 194 setStaticInlinePositionForChild(child, startOffsetForContent()); | |
| 195 } | |
| 196 | |
| 197 void RenderBlockFlow::setStaticInlinePositionForChild(RenderBox* child, LayoutUn
it inlinePosition) | |
| 198 { | |
| 199 child->layer()->setStaticInlinePosition(inlinePosition); | |
| 200 } | |
| 201 | |
| 202 void RenderBlockFlow::addChild(RenderObject* newChild, RenderObject* beforeChild
) | 173 void RenderBlockFlow::addChild(RenderObject* newChild, RenderObject* beforeChild
) |
| 203 { | 174 { |
| 204 RenderBlock::addChild(newChild, beforeChild); | 175 RenderBlock::addChild(newChild, beforeChild); |
| 205 } | 176 } |
| 206 | 177 |
| 207 LayoutUnit RenderBlockFlow::logicalLeftSelectionOffset(RenderBlock* rootBlock, L
ayoutUnit position) | 178 LayoutUnit RenderBlockFlow::logicalLeftSelectionOffset(RenderBlock* rootBlock, L
ayoutUnit position) |
| 208 { | 179 { |
| 209 LayoutUnit logicalLeft = logicalLeftOffsetForLine(false); | 180 LayoutUnit logicalLeft = logicalLeftOffsetForLine(false); |
| 210 if (logicalLeft == logicalLeftOffsetForContent()) | 181 if (logicalLeft == logicalLeftOffsetForContent()) |
| 211 return RenderBlock::logicalLeftSelectionOffset(rootBlock, position); | 182 return RenderBlock::logicalLeftSelectionOffset(rootBlock, position); |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 float logicalLeft = logicalLeftOffsetForLine(false).toFloat(); | 319 float logicalLeft = logicalLeftOffsetForLine(false).toFloat(); |
| 349 float availableLogicalWidth = logicalRightOffsetForLine(false) - logicalLeft
; | 320 float availableLogicalWidth = logicalRightOffsetForLine(false) - logicalLeft
; |
| 350 updateLogicalWidthForAlignment(textAlign, 0, 0, logicalLeft, totalLogicalWid
th, availableLogicalWidth, 0); | 321 updateLogicalWidthForAlignment(textAlign, 0, 0, logicalLeft, totalLogicalWid
th, availableLogicalWidth, 0); |
| 351 | 322 |
| 352 if (!style()->isLeftToRightDirection()) | 323 if (!style()->isLeftToRightDirection()) |
| 353 return logicalWidth() - logicalLeft; | 324 return logicalWidth() - logicalLeft; |
| 354 return logicalLeft; | 325 return logicalLeft; |
| 355 } | 326 } |
| 356 | 327 |
| 357 } // namespace blink | 328 } // namespace blink |
| OLD | NEW |