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 * (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 446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
457 { | 457 { |
458 // Create a clone of this inline. | 458 // Create a clone of this inline. |
459 RenderBlock* cloneBlock = clone(); | 459 RenderBlock* cloneBlock = clone(); |
460 if (!isAnonymousBlock()) | 460 if (!isAnonymousBlock()) |
461 cloneBlock->setContinuation(oldCont); | 461 cloneBlock->setContinuation(oldCont); |
462 | 462 |
463 // Now take all of the children from beforeChild to the end and remove | 463 // Now take all of the children from beforeChild to the end and remove |
464 // them from |this| and place them in the clone. | 464 // them from |this| and place them in the clone. |
465 if (!beforeChild && isAfterContent(lastChild())) | 465 if (!beforeChild && isAfterContent(lastChild())) |
466 beforeChild = lastChild(); | 466 beforeChild = lastChild(); |
467 moveChildrenTo(cloneBlock, beforeChild, 0); | 467 moveChildrenTo(cloneBlock, beforeChild, 0, true); |
468 | 468 |
469 // Hook |clone| up as the continuation of the middle block. | 469 // Hook |clone| up as the continuation of the middle block. |
470 if (!cloneBlock->isAnonymousBlock()) | 470 if (!cloneBlock->isAnonymousBlock()) |
471 middleBlock->setContinuation(cloneBlock); | 471 middleBlock->setContinuation(cloneBlock); |
472 | 472 |
473 // We have been reparented and are now under the fromBlock. We need | 473 // We have been reparented and are now under the fromBlock. We need |
474 // to walk up our block parent chain until we hit the containing anonymous c
olumns block. | 474 // to walk up our block parent chain until we hit the containing anonymous c
olumns block. |
475 // Once we hit the anonymous columns block we're done. | 475 // Once we hit the anonymous columns block we're done. |
476 RenderBoxModelObject* curr = toRenderBoxModelObject(parent()); | 476 RenderBoxModelObject* curr = toRenderBoxModelObject(parent()); |
477 RenderBoxModelObject* currChild = this; | 477 RenderBoxModelObject* currChild = this; |
(...skipping 21 matching lines...) Expand all Loading... |
499 } | 499 } |
500 | 500 |
501 // Someone may have indirectly caused a <q> to split. When this happens
, the :after content | 501 // Someone may have indirectly caused a <q> to split. When this happens
, the :after content |
502 // has to move into the inline continuation. Call updateBeforeAfterCont
ent to ensure that the inline's :after | 502 // has to move into the inline continuation. Call updateBeforeAfterCont
ent to ensure that the inline's :after |
503 // content gets properly destroyed. | 503 // content gets properly destroyed. |
504 if (document()->usesBeforeAfterRules()) | 504 if (document()->usesBeforeAfterRules()) |
505 blockCurr->children()->updateBeforeAfterContent(blockCurr, AFTER); | 505 blockCurr->children()->updateBeforeAfterContent(blockCurr, AFTER); |
506 | 506 |
507 // Now we need to take all of the children starting from the first child | 507 // Now we need to take all of the children starting from the first child |
508 // *after* currChild and append them all to the clone. | 508 // *after* currChild and append them all to the clone. |
509 RenderObject* afterContent = isAfterContent(cloneBlock->lastChild()) ? c
loneBlock->lastChild() : 0; | 509 blockCurr->moveChildrenTo(cloneBlock, currChild->nextSibling(), 0, true)
; |
510 blockCurr->moveChildrenTo(cloneBlock, currChild->nextSibling(), 0, after
Content); | |
511 | 510 |
512 // Keep walking up the chain. | 511 // Keep walking up the chain. |
513 currChild = curr; | 512 currChild = curr; |
514 curr = toRenderBoxModelObject(curr->parent()); | 513 curr = toRenderBoxModelObject(curr->parent()); |
515 } | 514 } |
516 | 515 |
517 // Now we are at the columns block level. We need to put the clone into the
toBlock. | 516 // Now we are at the columns block level. We need to put the clone into the
toBlock. |
518 toBlock->children()->appendChildNode(toBlock, cloneBlock); | 517 toBlock->children()->appendChildNode(toBlock, cloneBlock); |
519 | 518 |
520 // Now take all the children after currChild and remove them from the fromBl
ock | 519 // Now take all the children after currChild and remove them from the fromBl
ock |
521 // and put them in the toBlock. | 520 // and put them in the toBlock. |
522 fromBlock->moveChildrenTo(toBlock, currChild->nextSibling(), 0); | 521 fromBlock->moveChildrenTo(toBlock, currChild->nextSibling(), 0, true); |
523 } | 522 } |
524 | 523 |
525 void RenderBlock::splitFlow(RenderObject* beforeChild, RenderBlock* newBlockBox, | 524 void RenderBlock::splitFlow(RenderObject* beforeChild, RenderBlock* newBlockBox, |
526 RenderObject* newChild, RenderBoxModelObject* oldCon
t) | 525 RenderObject* newChild, RenderBoxModelObject* oldCon
t) |
527 { | 526 { |
528 RenderBlock* pre = 0; | 527 RenderBlock* pre = 0; |
529 RenderBlock* block = containingColumnsBlock(); | 528 RenderBlock* block = containingColumnsBlock(); |
530 | 529 |
531 // Delete our line boxes before we do the inline split into continuations. | 530 // Delete our line boxes before we do the inline split into continuations. |
532 block->deleteLineBoxTree(); | 531 block->deleteLineBoxTree(); |
(...skipping 15 matching lines...) Expand all Loading... |
548 post->setChildrenInline(false); | 547 post->setChildrenInline(false); |
549 | 548 |
550 RenderObject* boxFirst = madeNewBeforeBlock ? block->firstChild() : pre->nex
tSibling(); | 549 RenderObject* boxFirst = madeNewBeforeBlock ? block->firstChild() : pre->nex
tSibling(); |
551 if (madeNewBeforeBlock) | 550 if (madeNewBeforeBlock) |
552 block->children()->insertChildNode(block, pre, boxFirst); | 551 block->children()->insertChildNode(block, pre, boxFirst); |
553 block->children()->insertChildNode(block, newBlockBox, boxFirst); | 552 block->children()->insertChildNode(block, newBlockBox, boxFirst); |
554 block->children()->insertChildNode(block, post, boxFirst); | 553 block->children()->insertChildNode(block, post, boxFirst); |
555 block->setChildrenInline(false); | 554 block->setChildrenInline(false); |
556 | 555 |
557 if (madeNewBeforeBlock) | 556 if (madeNewBeforeBlock) |
558 block->moveChildrenTo(pre, boxFirst, 0); | 557 block->moveChildrenTo(pre, boxFirst, 0, true); |
559 | 558 |
560 splitBlocks(pre, post, newBlockBox, beforeChild, oldCont); | 559 splitBlocks(pre, post, newBlockBox, beforeChild, oldCont); |
561 | 560 |
562 // We already know the newBlockBox isn't going to contain inline kids, so av
oid wasting | 561 // We already know the newBlockBox isn't going to contain inline kids, so av
oid wasting |
563 // time in makeChildrenNonInline by just setting this explicitly up front. | 562 // time in makeChildrenNonInline by just setting this explicitly up front. |
564 newBlockBox->setChildrenInline(false); | 563 newBlockBox->setChildrenInline(false); |
565 | 564 |
566 // We delayed adding the newChild until now so that the |newBlockBox| would
be fully | 565 // We delayed adding the newChild until now so that the |newBlockBox| would
be fully |
567 // connected, thus allowing newChild access to a renderArena should it need | 566 // connected, thus allowing newChild access to a renderArena should it need |
568 // to wrap itself in additional boxes (e.g., table construction). | 567 // to wrap itself in additional boxes (e.g., table construction). |
(...skipping 6493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7062 } | 7061 } |
7063 | 7062 |
7064 String ValueToString<RenderBlock::FloatingObject*>::string(const RenderBlock::Fl
oatingObject* floatingObject) | 7063 String ValueToString<RenderBlock::FloatingObject*>::string(const RenderBlock::Fl
oatingObject* floatingObject) |
7065 { | 7064 { |
7066 return String::format("%p (%dx%d %dx%d)", floatingObject, floatingObject->x(
), floatingObject->y(), floatingObject->maxX(), floatingObject->maxY()); | 7065 return String::format("%p (%dx%d %dx%d)", floatingObject, floatingObject->x(
), floatingObject->y(), floatingObject->maxX(), floatingObject->maxY()); |
7067 } | 7066 } |
7068 | 7067 |
7069 #endif | 7068 #endif |
7070 | 7069 |
7071 } // namespace WebCore | 7070 } // namespace WebCore |
OLD | NEW |