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

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

Issue 1162383003: C++11: Replace 0 with nullptr where applicable in layout code. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Add one more file. Created 5 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
« no previous file with comments | « Source/core/layout/LayoutInline.h ('k') | Source/core/layout/LayoutListItem.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 static_assert(sizeof(LayoutInline) == sizeof(SameSizeAsLayoutInline), "LayoutInl ine should stay small"); 53 static_assert(sizeof(LayoutInline) == sizeof(SameSizeAsLayoutInline), "LayoutInl ine should stay small");
54 54
55 LayoutInline::LayoutInline(Element* element) 55 LayoutInline::LayoutInline(Element* element)
56 : LayoutBoxModelObject(element) 56 : LayoutBoxModelObject(element)
57 { 57 {
58 setChildrenInline(true); 58 setChildrenInline(true);
59 } 59 }
60 60
61 LayoutInline* LayoutInline::createAnonymous(Document* document) 61 LayoutInline* LayoutInline::createAnonymous(Document* document)
62 { 62 {
63 LayoutInline* layoutObject = new LayoutInline(0); 63 LayoutInline* layoutObject = new LayoutInline(nullptr);
64 layoutObject->setDocumentForAnonymous(document); 64 layoutObject->setDocumentForAnonymous(document);
65 return layoutObject; 65 return layoutObject;
66 } 66 }
67 67
68 void LayoutInline::willBeDestroyed() 68 void LayoutInline::willBeDestroyed()
69 { 69 {
70 #if ENABLE(ASSERT) 70 #if ENABLE(ASSERT)
71 // Make sure we do not retain "this" in the continuation outline table map o f our containing blocks. 71 // Make sure we do not retain "this" in the continuation outline table map o f our containing blocks.
72 if (parent() && style()->visibility() == VISIBLE && style()->hasOutline()) { 72 if (parent() && style()->visibility() == VISIBLE && style()->hasOutline()) {
73 bool containingBlockPaintsContinuationOutline = continuation() || isInli neElementContinuation(); 73 bool containingBlockPaintsContinuationOutline = continuation() || isInli neElementContinuation();
74 if (containingBlockPaintsContinuationOutline) { 74 if (containingBlockPaintsContinuationOutline) {
75 if (LayoutBlock* cb = containingBlock()) { 75 if (LayoutBlock* cb = containingBlock()) {
76 if (LayoutBlock* cbCb = cb->containingBlock()) 76 if (LayoutBlock* cbCb = cb->containingBlock())
77 ASSERT(!cbCb->paintsContinuationOutline(this)); 77 ASSERT(!cbCb->paintsContinuationOutline(this));
78 } 78 }
79 } 79 }
80 } 80 }
81 #endif 81 #endif
82 82
83 // Make sure to destroy anonymous children first while they are still connec ted to the rest of the tree, so that they will 83 // Make sure to destroy anonymous children first while they are still connec ted to the rest of the tree, so that they will
84 // properly dirty line boxes that they are removed from. Effects that do :b efore/:after only on hover could crash otherwise. 84 // properly dirty line boxes that they are removed from. Effects that do :b efore/:after only on hover could crash otherwise.
85 children()->destroyLeftoverChildren(); 85 children()->destroyLeftoverChildren();
86 86
87 // Destroy our continuation before anything other than anonymous children. 87 // Destroy our continuation before anything other than anonymous children.
88 // The reason we don't destroy it before anonymous children is that they may 88 // The reason we don't destroy it before anonymous children is that they may
89 // have continuations of their own that are anonymous children of our contin uation. 89 // have continuations of their own that are anonymous children of our contin uation.
90 LayoutBoxModelObject* continuation = this->continuation(); 90 LayoutBoxModelObject* continuation = this->continuation();
91 if (continuation) { 91 if (continuation) {
92 continuation->destroy(); 92 continuation->destroy();
93 setContinuation(0); 93 setContinuation(nullptr);
94 } 94 }
95 95
96 if (!documentBeingDestroyed()) { 96 if (!documentBeingDestroyed()) {
97 if (firstLineBox()) { 97 if (firstLineBox()) {
98 // We can't wait for LayoutBoxModelObject::destroy to clear the sele ction, 98 // We can't wait for LayoutBoxModelObject::destroy to clear the sele ction,
99 // because by then we will have nuked the line boxes. 99 // because by then we will have nuked the line boxes.
100 // FIXME: The FrameSelection should be responsible for this when it 100 // FIXME: The FrameSelection should be responsible for this when it
101 // is notified of DOM mutations. 101 // is notified of DOM mutations.
102 if (isSelectionBorder()) 102 if (isSelectionBorder())
103 view()->clearSelection(); 103 view()->clearSelection();
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 setHasReflection(false); 141 setHasReflection(false);
142 } 142 }
143 143
144 static LayoutObject* inFlowPositionedInlineAncestor(LayoutObject* p) 144 static LayoutObject* inFlowPositionedInlineAncestor(LayoutObject* p)
145 { 145 {
146 while (p && p->isLayoutInline()) { 146 while (p && p->isLayoutInline()) {
147 if (p->isRelPositioned()) 147 if (p->isRelPositioned())
148 return p; 148 return p;
149 p = p->parent(); 149 p = p->parent();
150 } 150 }
151 return 0; 151 return nullptr;
152 } 152 }
153 153
154 static void updateStyleOfAnonymousBlockContinuations(LayoutObject* block, const ComputedStyle& newStyle, const ComputedStyle& oldStyle) 154 static void updateStyleOfAnonymousBlockContinuations(LayoutObject* block, const ComputedStyle& newStyle, const ComputedStyle& oldStyle)
155 { 155 {
156 for (;block && block->isAnonymousBlock(); block = block->nextSibling()) { 156 for (;block && block->isAnonymousBlock(); block = block->nextSibling()) {
157 if (!toLayoutBlock(block)->isAnonymousBlockContinuation()) 157 if (!toLayoutBlock(block)->isAnonymousBlockContinuation())
158 continue; 158 continue;
159 159
160 RefPtr<ComputedStyle> newBlockStyle; 160 RefPtr<ComputedStyle> newBlockStyle;
161 161
(...skipping 25 matching lines...) Expand all
187 // Ensure that all of the split inlines pick up the new style. We 187 // Ensure that all of the split inlines pick up the new style. We
188 // only do this if we're an inline, since we don't want to propagate 188 // only do this if we're an inline, since we don't want to propagate
189 // a block's style to the other inlines. 189 // a block's style to the other inlines.
190 // e.g., <font>foo <h4>goo</h4> moo</font>. The <font> inlines before 190 // e.g., <font>foo <h4>goo</h4> moo</font>. The <font> inlines before
191 // and after the block share the same style, but the block doesn't 191 // and after the block share the same style, but the block doesn't
192 // need to pass its style on to anyone else. 192 // need to pass its style on to anyone else.
193 const ComputedStyle& newStyle = styleRef(); 193 const ComputedStyle& newStyle = styleRef();
194 LayoutInline* continuation = inlineElementContinuation(); 194 LayoutInline* continuation = inlineElementContinuation();
195 for (LayoutInline* currCont = continuation; currCont; currCont = currCont->i nlineElementContinuation()) { 195 for (LayoutInline* currCont = continuation; currCont; currCont = currCont->i nlineElementContinuation()) {
196 LayoutBoxModelObject* nextCont = currCont->continuation(); 196 LayoutBoxModelObject* nextCont = currCont->continuation();
197 currCont->setContinuation(0); 197 currCont->setContinuation(nullptr);
198 currCont->setStyle(mutableStyle()); 198 currCont->setStyle(mutableStyle());
199 currCont->setContinuation(nextCont); 199 currCont->setContinuation(nextCont);
200 } 200 }
201 201
202 // If an inline's outline or in-flow positioning has changed then any descen dant blocks will need to change their styles accordingly. 202 // If an inline's outline or in-flow positioning has changed then any descen dant blocks will need to change their styles accordingly.
203 // Do this by updating the styles of the descendant blocks' containing anony mous blocks - there may be more than one. 203 // Do this by updating the styles of the descendant blocks' containing anony mous blocks - there may be more than one.
204 if (continuation && oldStyle 204 if (continuation && oldStyle
205 && (!newStyle.isOutlineEquivalent(oldStyle) 205 && (!newStyle.isOutlineEquivalent(oldStyle)
206 || (newStyle.position() != oldStyle->position() && (newStyle.hasInFl owPosition() || oldStyle->hasInFlowPosition())))) { 206 || (newStyle.position() != oldStyle->position() && (newStyle.hasInFl owPosition() || oldStyle->hasInFlowPosition())))) {
207 // If any descendant blocks exist then they will be in the next anonymou s block and its siblings. 207 // If any descendant blocks exist then they will be in the next anonymou s block and its siblings.
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 middleBlock->setContinuation(cloneInline); 450 middleBlock->setContinuation(cloneInline);
451 451
452 // Now take all of the children from |beforeChild| to the end and remove 452 // Now take all of the children from |beforeChild| to the end and remove
453 // them from |this| and place them in the clone. 453 // them from |this| and place them in the clone.
454 moveChildrenToIgnoringContinuation(cloneInline, beforeChild); 454 moveChildrenToIgnoringContinuation(cloneInline, beforeChild);
455 } 455 }
456 456
457 void LayoutInline::splitFlow(LayoutObject* beforeChild, LayoutBlock* newBlockBox , 457 void LayoutInline::splitFlow(LayoutObject* beforeChild, LayoutBlock* newBlockBox ,
458 LayoutObject* newChild, LayoutBoxModelObject* oldCont) 458 LayoutObject* newChild, LayoutBoxModelObject* oldCont)
459 { 459 {
460 LayoutBlock* pre = 0; 460 LayoutBlock* pre = nullptr;
461 LayoutBlock* block = containingBlock(); 461 LayoutBlock* block = containingBlock();
462 462
463 // Delete our line boxes before we do the inline split into continuations. 463 // Delete our line boxes before we do the inline split into continuations.
464 block->deleteLineBoxTree(); 464 block->deleteLineBoxTree();
465 465
466 bool madeNewBeforeBlock = false; 466 bool madeNewBeforeBlock = false;
467 if (block->isAnonymousBlock() && (!block->parent() || !block->parent()->crea tesAnonymousWrapper())) { 467 if (block->isAnonymousBlock() && (!block->parent() || !block->parent()->crea tesAnonymousWrapper())) {
468 // We can reuse this block and make it the preBlock of the next continua tion. 468 // We can reuse this block and make it the preBlock of the next continua tion.
469 pre = block; 469 pre = block;
470 pre->removePositionedObjects(0); 470 pre->removePositionedObjects(nullptr);
471 if (pre->isLayoutBlockFlow()) 471 if (pre->isLayoutBlockFlow())
472 toLayoutBlockFlow(pre)->removeFloatingObjects(); 472 toLayoutBlockFlow(pre)->removeFloatingObjects();
473 block = block->containingBlock(); 473 block = block->containingBlock();
474 } else { 474 } else {
475 // No anonymous block available for use. Make one. 475 // No anonymous block available for use. Make one.
476 pre = block->createAnonymousBlock(); 476 pre = block->createAnonymousBlock();
477 madeNewBeforeBlock = true; 477 madeNewBeforeBlock = true;
478 } 478 }
479 479
480 LayoutBlock* post = toLayoutBlock(pre->createAnonymousBoxWithSameTypeAs(bloc k)); 480 LayoutBlock* post = toLayoutBlock(pre->createAnonymousBoxWithSameTypeAs(bloc k));
(...skipping 28 matching lines...) Expand all
509 // make new line boxes instead of leaving the old line boxes around. 509 // make new line boxes instead of leaving the old line boxes around.
510 pre->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(LayoutInvalid ationReason::AnonymousBlockChange); 510 pre->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(LayoutInvalid ationReason::AnonymousBlockChange);
511 block->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(LayoutInval idationReason::AnonymousBlockChange); 511 block->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(LayoutInval idationReason::AnonymousBlockChange);
512 post->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(LayoutInvali dationReason::AnonymousBlockChange); 512 post->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(LayoutInvali dationReason::AnonymousBlockChange);
513 } 513 }
514 514
515 void LayoutInline::addChildToContinuation(LayoutObject* newChild, LayoutObject* beforeChild) 515 void LayoutInline::addChildToContinuation(LayoutObject* newChild, LayoutObject* beforeChild)
516 { 516 {
517 LayoutBoxModelObject* flow = continuationBefore(beforeChild); 517 LayoutBoxModelObject* flow = continuationBefore(beforeChild);
518 ASSERT(!beforeChild || beforeChild->parent()->isLayoutBlock() || beforeChild ->parent()->isLayoutInline()); 518 ASSERT(!beforeChild || beforeChild->parent()->isLayoutBlock() || beforeChild ->parent()->isLayoutInline());
519 LayoutBoxModelObject* beforeChildParent = 0; 519 LayoutBoxModelObject* beforeChildParent = nullptr;
520 if (beforeChild) { 520 if (beforeChild) {
521 beforeChildParent = toLayoutBoxModelObject(beforeChild->parent()); 521 beforeChildParent = toLayoutBoxModelObject(beforeChild->parent());
522 } else { 522 } else {
523 LayoutBoxModelObject* cont = nextContinuation(flow); 523 LayoutBoxModelObject* cont = nextContinuation(flow);
524 if (cont) 524 if (cont)
525 beforeChildParent = cont; 525 beforeChildParent = cont;
526 else 526 else
527 beforeChildParent = flow; 527 beforeChildParent = flow;
528 } 528 }
529 529
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after
909 LayoutInline* currInline = toLayoutInline(curr); 909 LayoutInline* currInline = toLayoutInline(curr);
910 InlineBox* result = currInline->firstLineBoxIncludingCulling(); 910 InlineBox* result = currInline->firstLineBoxIncludingCulling();
911 if (result) 911 if (result)
912 return result; 912 return result;
913 } else if (curr->isText()) { 913 } else if (curr->isText()) {
914 LayoutText* currText = toLayoutText(curr); 914 LayoutText* currText = toLayoutText(curr);
915 if (currText->firstTextBox()) 915 if (currText->firstTextBox())
916 return currText->firstTextBox(); 916 return currText->firstTextBox();
917 } 917 }
918 } 918 }
919 return 0; 919 return nullptr;
920 } 920 }
921 921
922 InlineBox* LayoutInline::culledInlineLastLineBox() const 922 InlineBox* LayoutInline::culledInlineLastLineBox() const
923 { 923 {
924 for (LayoutObject* curr = lastChild(); curr; curr = curr->previousSibling()) { 924 for (LayoutObject* curr = lastChild(); curr; curr = curr->previousSibling()) {
925 if (curr->isFloatingOrOutOfFlowPositioned()) 925 if (curr->isFloatingOrOutOfFlowPositioned())
926 continue; 926 continue;
927 927
928 // We want to get the margin box in the inline direction, and then use o ur font ascent/descent in the block 928 // We want to get the margin box in the inline direction, and then use o ur font ascent/descent in the block
929 // direction (aligned to the root box's baseline). 929 // direction (aligned to the root box's baseline).
930 if (curr->isBox()) 930 if (curr->isBox())
931 return toLayoutBox(curr)->inlineBoxWrapper(); 931 return toLayoutBox(curr)->inlineBoxWrapper();
932 if (curr->isLayoutInline()) { 932 if (curr->isLayoutInline()) {
933 LayoutInline* currInline = toLayoutInline(curr); 933 LayoutInline* currInline = toLayoutInline(curr);
934 InlineBox* result = currInline->lastLineBoxIncludingCulling(); 934 InlineBox* result = currInline->lastLineBoxIncludingCulling();
935 if (result) 935 if (result)
936 return result; 936 return result;
937 } else if (curr->isText()) { 937 } else if (curr->isText()) {
938 LayoutText* currText = toLayoutText(curr); 938 LayoutText* currText = toLayoutText(curr);
939 if (currText->lastTextBox()) 939 if (currText->lastTextBox())
940 return currText->lastTextBox(); 940 return currText->lastTextBox();
941 } 941 }
942 } 942 }
943 return 0; 943 return nullptr;
944 } 944 }
945 945
946 LayoutRect LayoutInline::culledInlineVisualOverflowBoundingBox() const 946 LayoutRect LayoutInline::culledInlineVisualOverflowBoundingBox() const
947 { 947 {
948 FloatRect floatResult; 948 FloatRect floatResult;
949 LinesBoundingBoxGeneratorContext context(floatResult); 949 LinesBoundingBoxGeneratorContext context(floatResult);
950 generateCulledLineBoxRects(context, this); 950 generateCulledLineBoxRects(context, this);
951 LayoutRect result(enclosingLayoutRect(floatResult)); 951 LayoutRect result(enclosingLayoutRect(floatResult));
952 bool isHorizontal = style()->isHorizontalWritingMode(); 952 bool isHorizontal = style()->isHorizontalWritingMode();
953 for (LayoutObject* curr = firstChild(); curr; curr = curr->nextSibling()) { 953 for (LayoutObject* curr = firstChild(); curr; curr = curr->nextSibling()) {
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
1431 } 1431 }
1432 1432
1433 void LayoutInline::invalidateDisplayItemClients(const LayoutBoxModelObject& pain tInvalidationContainer) const 1433 void LayoutInline::invalidateDisplayItemClients(const LayoutBoxModelObject& pain tInvalidationContainer) const
1434 { 1434 {
1435 LayoutBoxModelObject::invalidateDisplayItemClients(paintInvalidationContaine r); 1435 LayoutBoxModelObject::invalidateDisplayItemClients(paintInvalidationContaine r);
1436 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLineBox()) 1436 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLineBox())
1437 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*box); 1437 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*box);
1438 } 1438 }
1439 1439
1440 } // namespace blink 1440 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/layout/LayoutInline.h ('k') | Source/core/layout/LayoutListItem.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698