Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutInline.cpp

Issue 1997033002: Move continuation getter and setter down to LayoutBlockFlow. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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. All rights reserved. 4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
5 * 5 *
6 * This library is free software; you can redistribute it and/or 6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public 7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either 8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version. 9 * version 2 of the License, or (at your option) any later version.
10 * 10 *
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 void LayoutInline::moveChildrenToIgnoringContinuation(LayoutInline* to, LayoutOb ject* startChild) 338 void LayoutInline::moveChildrenToIgnoringContinuation(LayoutInline* to, LayoutOb ject* startChild)
339 { 339 {
340 LayoutObject* child = startChild; 340 LayoutObject* child = startChild;
341 while (child) { 341 while (child) {
342 LayoutObject* currentChild = child; 342 LayoutObject* currentChild = child;
343 child = currentChild->nextSibling(); 343 child = currentChild->nextSibling();
344 to->addChildIgnoringContinuation(children()->removeChildNode(this, curre ntChild), nullptr); 344 to->addChildIgnoringContinuation(children()->removeChildNode(this, curre ntChild), nullptr);
345 } 345 }
346 } 346 }
347 347
348 void LayoutInline::splitInlines(LayoutBlock* fromBlock, LayoutBlock* toBlock, 348 void LayoutInline::splitInlines(LayoutBlockFlow* fromBlock, LayoutBlockFlow* toB lock,
349 LayoutBlock* middleBlock, LayoutObject* beforeChild, LayoutBoxModelObject* o ldCont) 349 LayoutBlockFlow* middleBlock, LayoutObject* beforeChild, LayoutBoxModelObjec t* oldCont)
350 { 350 {
351 ASSERT(isDescendantOf(fromBlock)); 351 ASSERT(isDescendantOf(fromBlock));
352 352
353 // If we're splitting the inline containing the fullscreened element, 353 // If we're splitting the inline containing the fullscreened element,
354 // |beforeChild| may be the layoutObject for the fullscreened element. Howev er, 354 // |beforeChild| may be the layoutObject for the fullscreened element. Howev er,
355 // that layoutObject is wrapped in a LayoutFullScreen, so |this| is not its 355 // that layoutObject is wrapped in a LayoutFullScreen, so |this| is not its
356 // parent. Since the splitting logic expects |this| to be the parent, set 356 // parent. Since the splitting logic expects |this| to be the parent, set
357 // |beforeChild| to be the LayoutFullScreen. 357 // |beforeChild| to be the LayoutFullScreen.
358 if (Fullscreen* fullscreen = Fullscreen::fromIfExists(document())) { 358 if (Fullscreen* fullscreen = Fullscreen::fromIfExists(document())) {
359 const Element* fullScreenElement = fullscreen->webkitCurrentFullScreenEl ement(); 359 const Element* fullScreenElement = fullscreen->webkitCurrentFullScreenEl ement();
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 419
420 // Hook |cloneInline| up as the continuation of the middle block. 420 // Hook |cloneInline| up as the continuation of the middle block.
421 cloneInline->setContinuation(oldCont); 421 cloneInline->setContinuation(oldCont);
422 middleBlock->setContinuation(cloneInline); 422 middleBlock->setContinuation(cloneInline);
423 423
424 // Now take all of the children from |beforeChild| to the end and remove 424 // Now take all of the children from |beforeChild| to the end and remove
425 // them from |this| and place them in the clone. 425 // them from |this| and place them in the clone.
426 moveChildrenToIgnoringContinuation(cloneInline, beforeChild); 426 moveChildrenToIgnoringContinuation(cloneInline, beforeChild);
427 } 427 }
428 428
429 void LayoutInline::splitFlow(LayoutObject* beforeChild, LayoutBlock* newBlockBox , 429 void LayoutInline::splitFlow(LayoutObject* beforeChild, LayoutBlockFlow* newBloc kBox,
430 LayoutObject* newChild, LayoutBoxModelObject* oldCont) 430 LayoutObject* newChild, LayoutBoxModelObject* oldCont)
431 { 431 {
432 LayoutBlockFlow* containingBlockFlow = toLayoutBlockFlow(containingBlock()); 432 LayoutBlockFlow* block = toLayoutBlockFlow(containingBlock());
433 LayoutBlock* pre = nullptr; 433 LayoutBlockFlow* pre = nullptr;
434 LayoutBlock* block = containingBlockFlow;
435 434
436 // Delete our line boxes before we do the inline split into continuations. 435 // Delete our line boxes before we do the inline split into continuations.
437 containingBlockFlow->deleteLineBoxTree(); 436 block->deleteLineBoxTree();
438 437
439 bool reusedAnonymousBlock = false; 438 bool reusedAnonymousBlock = false;
440 if (block->isAnonymousBlock()) { 439 if (block->isAnonymousBlock()) {
441 LayoutBlock* outerContainingBlock = block->containingBlock(); 440 LayoutBlock* outerContainingBlock = block->containingBlock();
442 if (outerContainingBlock 441 if (outerContainingBlock
443 && outerContainingBlock->isLayoutBlockFlow() 442 && outerContainingBlock->isLayoutBlockFlow()
444 && !outerContainingBlock->createsAnonymousWrapper()) { 443 && !outerContainingBlock->createsAnonymousWrapper()) {
445 // We can reuse this block and make it the preBlock of the next cont inuation. 444 // We can reuse this block and make it the preBlock of the next cont inuation.
446 containingBlockFlow->removePositionedObjects(nullptr); 445 block->removePositionedObjects(nullptr);
447 containingBlockFlow->removeFloatingObjects(); 446 block->removeFloatingObjects();
448 pre = containingBlockFlow; 447 pre = block;
449 block = outerContainingBlock; 448 block = toLayoutBlockFlow(outerContainingBlock);
450 reusedAnonymousBlock = true; 449 reusedAnonymousBlock = true;
451 } 450 }
452 } 451 }
453 if (!reusedAnonymousBlock) 452 if (!reusedAnonymousBlock)
454 pre = block->createAnonymousBlock(); // No anonymous block available for use. Make one. 453 pre = toLayoutBlockFlow(block->createAnonymousBlock()); // No anonymous block available for use. Make one.
455 454
456 LayoutBlock* post = toLayoutBlock(pre->createAnonymousBoxWithSameTypeAs(bloc k)); 455 LayoutBlockFlow* post = toLayoutBlockFlow(pre->createAnonymousBlock());
457 456
458 LayoutObject* boxFirst = !reusedAnonymousBlock ? block->firstChild() : pre-> nextSibling(); 457 LayoutObject* boxFirst = !reusedAnonymousBlock ? block->firstChild() : pre-> nextSibling();
459 if (!reusedAnonymousBlock) 458 if (!reusedAnonymousBlock)
460 block->children()->insertChildNode(block, pre, boxFirst); 459 block->children()->insertChildNode(block, pre, boxFirst);
461 block->children()->insertChildNode(block, newBlockBox, boxFirst); 460 block->children()->insertChildNode(block, newBlockBox, boxFirst);
462 block->children()->insertChildNode(block, post, boxFirst); 461 block->children()->insertChildNode(block, post, boxFirst);
463 block->setChildrenInline(false); 462 block->setChildrenInline(false);
464 463
465 if (!reusedAnonymousBlock) { 464 if (!reusedAnonymousBlock) {
466 LayoutObject* o = boxFirst; 465 LayoutObject* o = boxFirst;
(...skipping 661 matching lines...) Expand 10 before | Expand all | Expand 10 after
1128 void LayoutInline::updateDragState(bool dragOn) 1127 void LayoutInline::updateDragState(bool dragOn)
1129 { 1128 {
1130 LayoutBoxModelObject::updateDragState(dragOn); 1129 LayoutBoxModelObject::updateDragState(dragOn);
1131 if (LayoutBoxModelObject* continuation = this->continuation()) 1130 if (LayoutBoxModelObject* continuation = this->continuation())
1132 continuation->updateDragState(dragOn); 1131 continuation->updateDragState(dragOn);
1133 } 1132 }
1134 1133
1135 void LayoutInline::childBecameNonInline(LayoutObject* child) 1134 void LayoutInline::childBecameNonInline(LayoutObject* child)
1136 { 1135 {
1137 // We have to split the parent flow. 1136 // We have to split the parent flow.
1138 LayoutBlock* newBox = containingBlock()->createAnonymousBlock(); 1137 LayoutBlockFlow* newBox = toLayoutBlockFlow(containingBlock()->createAnonymo usBlock());
1139 LayoutBoxModelObject* oldContinuation = continuation(); 1138 LayoutBoxModelObject* oldContinuation = continuation();
1140 setContinuation(newBox); 1139 setContinuation(newBox);
1141 LayoutObject* beforeChild = child->nextSibling(); 1140 LayoutObject* beforeChild = child->nextSibling();
1142 children()->removeChildNode(this, child); 1141 children()->removeChildNode(this, child);
1143 splitFlow(beforeChild, newBox, child, oldContinuation); 1142 splitFlow(beforeChild, newBox, child, oldContinuation);
1144 } 1143 }
1145 1144
1146 void LayoutInline::updateHitTestResult(HitTestResult& result, const LayoutPoint& point) 1145 void LayoutInline::updateHitTestResult(HitTestResult& result, const LayoutPoint& point)
1147 { 1146 {
1148 if (result.innerNode()) 1147 if (result.innerNode())
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
1356 1355
1357 void LayoutInline::invalidateDisplayItemClients(const LayoutBoxModelObject& pain tInvalidationContainer, PaintInvalidationReason invalidationReason) const 1356 void LayoutInline::invalidateDisplayItemClients(const LayoutBoxModelObject& pain tInvalidationContainer, PaintInvalidationReason invalidationReason) const
1358 { 1357 {
1359 LayoutBoxModelObject::invalidateDisplayItemClients(paintInvalidationContaine r, invalidationReason); 1358 LayoutBoxModelObject::invalidateDisplayItemClients(paintInvalidationContaine r, invalidationReason);
1360 1359
1361 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLineBox()) 1360 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLineBox())
1362 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*box, in validationReason); 1361 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*box, in validationReason);
1363 } 1362 }
1364 1363
1365 } // namespace blink 1364 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutInline.h ('k') | third_party/WebKit/Source/core/layout/LayoutObject.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698