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

Side by Side Diff: Source/WebCore/rendering/RenderBlock.cpp

Issue 9568025: Merge 107613 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/963/
Patch Set: Created 8 years, 9 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/WebCore/rendering/RenderBlock.h ('k') | no next file » | 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 * (C) 2007 David Smith (catfish.man@gmail.com) 4 * (C) 2007 David Smith (catfish.man@gmail.com)
5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 434
435 if (currBlock->isAnonymousColumnSpanBlock()) 435 if (currBlock->isAnonymousColumnSpanBlock())
436 return 0; 436 return 0;
437 } 437 }
438 return 0; 438 return 0;
439 } 439 }
440 440
441 RenderBlock* RenderBlock::clone() const 441 RenderBlock* RenderBlock::clone() const
442 { 442 {
443 RenderBlock* cloneBlock; 443 RenderBlock* cloneBlock;
444 if (isAnonymousBlock()) 444 if (isAnonymousBlock()) {
445 cloneBlock = createAnonymousBlock(); 445 cloneBlock = createAnonymousBlock();
446 cloneBlock->setChildrenInline(childrenInline());
447 }
446 else { 448 else {
447 cloneBlock = new (renderArena()) RenderBlock(node()); 449 cloneBlock = new (renderArena()) RenderBlock(node());
448 cloneBlock->setStyle(style()); 450 cloneBlock->setStyle(style());
449 if (!childrenInline() && cloneBlock->firstChild() && cloneBlock->firstCh ild()->isInline()) 451
450 cloneBlock->makeChildrenNonInline(); 452 // This takes care of setting the right value of childrenInline in case
453 // generated content is added to cloneBlock and 'this' does not have
454 // generated content added yet.
455 cloneBlock->setChildrenInline(cloneBlock->firstChild() ? cloneBlock->fir stChild()->isInline() : childrenInline());
451 } 456 }
452 cloneBlock->setChildrenInline(childrenInline());
453 return cloneBlock; 457 return cloneBlock;
454 } 458 }
455 459
456 void RenderBlock::splitBlocks(RenderBlock* fromBlock, RenderBlock* toBlock, 460 void RenderBlock::splitBlocks(RenderBlock* fromBlock, RenderBlock* toBlock,
457 RenderBlock* middleBlock, 461 RenderBlock* middleBlock,
458 RenderObject* beforeChild, RenderBoxModelObject* o ldCont) 462 RenderObject* beforeChild, RenderBoxModelObject* o ldCont)
459 { 463 {
460 // Create a clone of this inline. 464 // Create a clone of this inline.
461 RenderBlock* cloneBlock = clone(); 465 RenderBlock* cloneBlock = clone();
462 if (!isAnonymousBlock()) 466 if (!isAnonymousBlock())
(...skipping 18 matching lines...) Expand all
481 while (curr && curr != fromBlock) { 485 while (curr && curr != fromBlock) {
482 ASSERT(curr->isRenderBlock()); 486 ASSERT(curr->isRenderBlock());
483 487
484 RenderBlock* blockCurr = toRenderBlock(curr); 488 RenderBlock* blockCurr = toRenderBlock(curr);
485 489
486 // Create a new clone. 490 // Create a new clone.
487 RenderBlock* cloneChild = cloneBlock; 491 RenderBlock* cloneChild = cloneBlock;
488 cloneBlock = blockCurr->clone(); 492 cloneBlock = blockCurr->clone();
489 493
490 // Insert our child clone as the first child. 494 // Insert our child clone as the first child.
491 cloneBlock->children()->appendChildNode(cloneBlock, cloneChild); 495 cloneBlock->addChildIgnoringContinuation(cloneChild, 0);
492 496
493 // Hook the clone up as a continuation of |curr|. Note we do encounter 497 // Hook the clone up as a continuation of |curr|. Note we do encounter
494 // anonymous blocks possibly as we walk up the block chain. When we spl it an 498 // anonymous blocks possibly as we walk up the block chain. When we spl it an
495 // anonymous block, there's no need to do any continuation hookup, since we haven't 499 // anonymous block, there's no need to do any continuation hookup, since we haven't
496 // actually split a real element. 500 // actually split a real element.
497 if (!blockCurr->isAnonymousBlock()) { 501 if (!blockCurr->isAnonymousBlock()) {
498 oldCont = blockCurr->continuation(); 502 oldCont = blockCurr->continuation();
499 blockCurr->setContinuation(cloneBlock); 503 blockCurr->setContinuation(cloneBlock);
500 cloneBlock->setContinuation(oldCont); 504 cloneBlock->setContinuation(oldCont);
501 } 505 }
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
872 return new (renderArena()) RootInlineBox(this); 876 return new (renderArena()) RootInlineBox(this);
873 } 877 }
874 878
875 RootInlineBox* RenderBlock::createAndAppendRootInlineBox() 879 RootInlineBox* RenderBlock::createAndAppendRootInlineBox()
876 { 880 {
877 RootInlineBox* rootBox = createRootInlineBox(); 881 RootInlineBox* rootBox = createRootInlineBox();
878 m_lineBoxes.appendLineBox(rootBox); 882 m_lineBoxes.appendLineBox(rootBox);
879 return rootBox; 883 return rootBox;
880 } 884 }
881 885
882 void RenderBlock::moveChildTo(RenderBlock* to, RenderObject* child, RenderObject * beforeChild, bool fullRemoveInsert) 886 void RenderBlock::moveChildTo(RenderBlock* toBlock, RenderObject* child, RenderO bject* beforeChild, bool fullRemoveInsert)
883 { 887 {
884 ASSERT(this == child->parent()); 888 ASSERT(this == child->parent());
885 ASSERT(!beforeChild || to == beforeChild->parent()); 889 ASSERT(!beforeChild || toBlock == beforeChild->parent());
886 to->children()->insertChildNode(to, children()->removeChildNode(this, child, fullRemoveInsert), beforeChild, fullRemoveInsert); 890 if (fullRemoveInsert) {
891 // Takes care of adding the new child correctly if toBlock and fromBlock
892 // have different kind of children (block vs inline).
893 toBlock->addChildIgnoringContinuation(children()->removeChildNode(this, child), beforeChild);
894 } else
895 toBlock->children()->insertChildNode(toBlock, children()->removeChildNod e(this, child, false), beforeChild, false);
887 } 896 }
888 897
889 void RenderBlock::moveChildrenTo(RenderBlock* to, RenderObject* startChild, Rend erObject* endChild, RenderObject* beforeChild, bool fullRemoveInsert) 898 void RenderBlock::moveChildrenTo(RenderBlock* toBlock, RenderObject* startChild, RenderObject* endChild, RenderObject* beforeChild, bool fullRemoveInsert)
890 { 899 {
891 ASSERT(!beforeChild || to == beforeChild->parent()); 900 ASSERT(!beforeChild || toBlock == beforeChild->parent());
892 RenderObject* nextChild = startChild; 901 RenderObject* nextChild = startChild;
893 while (nextChild && nextChild != endChild) { 902 while (nextChild && nextChild != endChild) {
894 RenderObject* child = nextChild; 903 RenderObject* child = nextChild;
895 nextChild = child->nextSibling(); 904 nextChild = child->nextSibling();
896 to->children()->insertChildNode(to, children()->removeChildNode(this, ch ild, fullRemoveInsert), beforeChild, fullRemoveInsert); 905 if (fullRemoveInsert) {
906 // Takes care of adding the new child correctly if toBlock and fromB lock
907 // have different kind of children (block vs inline).
908 toBlock->addChildIgnoringContinuation(children()->removeChildNode(th is, child), beforeChild);
909 } else
910 toBlock->children()->insertChildNode(toBlock, children()->removeChil dNode(this, child, false), beforeChild, false);
897 if (child == endChild) 911 if (child == endChild)
898 return; 912 return;
899 } 913 }
900 } 914 }
901 915
902 void RenderBlock::makeChildrenNonInline(RenderObject *insertionPoint) 916 void RenderBlock::makeChildrenNonInline(RenderObject *insertionPoint)
903 { 917 {
904 // makeChildrenNonInline takes a block whose children are *all* inline and i t 918 // makeChildrenNonInline takes a block whose children are *all* inline and i t
905 // makes sure that inline children are coalesced under anonymous 919 // makes sure that inline children are coalesced under anonymous
906 // blocks. If |insertionPoint| is defined, then it represents the insertion point for 920 // blocks. If |insertionPoint| is defined, then it represents the insertion point for
(...skipping 6156 matching lines...) Expand 10 before | Expand all | Expand 10 after
7063 } 7077 }
7064 7078
7065 String ValueToString<RenderBlock::FloatingObject*>::string(const RenderBlock::Fl oatingObject* floatingObject) 7079 String ValueToString<RenderBlock::FloatingObject*>::string(const RenderBlock::Fl oatingObject* floatingObject)
7066 { 7080 {
7067 return String::format("%p (%dx%d %dx%d)", floatingObject, floatingObject->x( ), floatingObject->y(), floatingObject->maxX(), floatingObject->maxY()); 7081 return String::format("%p (%dx%d %dx%d)", floatingObject, floatingObject->x( ), floatingObject->y(), floatingObject->maxX(), floatingObject->maxY());
7068 } 7082 }
7069 7083
7070 #endif 7084 #endif
7071 7085
7072 } // namespace WebCore 7086 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/WebCore/rendering/RenderBlock.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698