Chromium Code Reviews| 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 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. | 4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. |
| 5 * All rights reserved. | 5 * All rights reserved. |
| 6 * | 6 * |
| 7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
| 8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
| 9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
| 10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 339 beforeChild = lastChild(); | 339 beforeChild = lastChild(); |
| 340 | 340 |
| 341 if (!newChild->isInline() && !newChild->isFloatingOrOutOfFlowPositioned() && | 341 if (!newChild->isInline() && !newChild->isFloatingOrOutOfFlowPositioned() && |
| 342 !newChild->isTablePart()) { | 342 !newChild->isTablePart()) { |
| 343 // We are placing a block inside an inline. We have to perform a split of | 343 // We are placing a block inside an inline. We have to perform a split of |
| 344 // this inline into continuations. This involves creating an anonymous | 344 // this inline into continuations. This involves creating an anonymous |
| 345 // block box to hold |newChild|. We then make that block box a continuation | 345 // block box to hold |newChild|. We then make that block box a continuation |
| 346 // of this inline. We take all of the children after |beforeChild| and put | 346 // of this inline. We take all of the children after |beforeChild| and put |
| 347 // them in a clone of this object. | 347 // them in a clone of this object. |
| 348 RefPtr<ComputedStyle> newStyle = | 348 RefPtr<ComputedStyle> newStyle = |
| 349 ComputedStyle::createAnonymousStyleWithDisplay( | 349 ComputedStyle::createAnonymousStyleWithDisplay(styleRef(), |
| 350 containingBlock()->styleRef(), EDisplay::kBlock); | 350 EDisplay::kBlock); |
| 351 // Block elements in the anon block must use the direction set by the | |
| 352 // anon block's containing block, so we need to prevent the anon block | |
| 353 // from inheriting direction from the inline. If there are any other | |
| 354 // inheritable properties that apply to block and inline elements | |
| 355 // but only affect the layout of children we will want to special-case | |
| 356 // them here too. Writing-mode would be one if it didn't create a | |
| 357 // formatting context of its own, removing the need for continuations. | |
|
mstensho (USE GERRIT)
2017/04/19 09:32:48
Great comment. Could you also add that this anonym
| |
| 358 newStyle->setDirection(containingBlock()->styleRef().direction()); | |
| 351 | 359 |
| 352 // If inside an inline affected by in-flow positioning the block needs to be | 360 // If inside an inline affected by in-flow positioning the block needs to be |
| 353 // affected by it too. Giving the block a layer like this allows it to | 361 // affected by it too. Giving the block a layer like this allows it to |
| 354 // collect the x/y offsets from inline parents later. | 362 // collect the x/y offsets from inline parents later. |
| 355 if (LayoutObject* positionedAncestor = inFlowPositionedInlineAncestor(this)) | 363 if (LayoutObject* positionedAncestor = inFlowPositionedInlineAncestor(this)) |
| 356 newStyle->setPosition(positionedAncestor->style()->position()); | 364 newStyle->setPosition(positionedAncestor->style()->position()); |
| 357 | 365 |
| 358 LayoutBlockFlow* newBox = LayoutBlockFlow::createAnonymous(&document()); | 366 LayoutBlockFlow* newBox = LayoutBlockFlow::createAnonymous(&document()); |
| 359 newBox->setStyle(std::move(newStyle)); | 367 newBox->setStyle(std::move(newStyle)); |
| 360 LayoutBoxModelObject* oldContinuation = continuation(); | 368 LayoutBoxModelObject* oldContinuation = continuation(); |
| (...skipping 1174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1535 paintInvalidator.invalidateDisplayItemClient(*box, invalidationReason); | 1543 paintInvalidator.invalidateDisplayItemClient(*box, invalidationReason); |
| 1536 } | 1544 } |
| 1537 | 1545 |
| 1538 // TODO(lunalu): Not to just dump 0, 0 as the x and y here | 1546 // TODO(lunalu): Not to just dump 0, 0 as the x and y here |
| 1539 LayoutRect LayoutInline::debugRect() const { | 1547 LayoutRect LayoutInline::debugRect() const { |
| 1540 IntRect linesBox = enclosingIntRect(linesBoundingBox()); | 1548 IntRect linesBox = enclosingIntRect(linesBoundingBox()); |
| 1541 return LayoutRect(IntRect(0, 0, linesBox.width(), linesBox.height())); | 1549 return LayoutRect(IntRect(0, 0, linesBox.width(), linesBox.height())); |
| 1542 } | 1550 } |
| 1543 | 1551 |
| 1544 } // namespace blink | 1552 } // namespace blink |
| OLD | NEW |