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) 2005 Allan Sandfeld Jensen (kde@carewolf.com) | 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) |
5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) | 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) |
6 * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. | 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. |
7 * Copyright (C) 2010 Google Inc. All rights reserved. | 7 * Copyright (C) 2010 Google Inc. All rights reserved. |
8 * | 8 * |
9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
11 * License as published by the Free Software Foundation; either | 11 * License as published by the Free Software Foundation; either |
12 * version 2 of the License, or (at your option) any later version. | 12 * version 2 of the License, or (at your option) any later version. |
13 * | 13 * |
14 * This library is distributed in the hope that it will be useful, | 14 * This library is distributed in the hope that it will be useful, |
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
17 * Library General Public License for more details. | 17 * Library General Public License for more details. |
18 * | 18 * |
19 * You should have received a copy of the GNU Library General Public License | 19 * You should have received a copy of the GNU Library General Public License |
20 * along with this library; see the file COPYING.LIB. If not, write to | 20 * along with this library; see the file COPYING.LIB. If not, write to |
21 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | 21 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
22 * Boston, MA 02110-1301, USA. | 22 * Boston, MA 02110-1301, USA. |
23 * | 23 * |
24 */ | 24 */ |
25 | 25 |
26 #include "config.h" | 26 #include "config.h" |
27 #include "core/rendering/RenderBoxModelObject.h" | 27 #include "core/rendering/RenderBoxModelObject.h" |
28 | 28 |
29 #include "core/layout/Layer.h" | 29 #include "core/layout/Layer.h" |
| 30 #include "core/layout/LayoutObject.h" |
30 #include "core/layout/compositing/CompositedLayerMapping.h" | 31 #include "core/layout/compositing/CompositedLayerMapping.h" |
31 #include "core/layout/compositing/LayerCompositor.h" | 32 #include "core/layout/compositing/LayerCompositor.h" |
32 #include "core/page/scrolling/ScrollingConstraints.h" | 33 #include "core/page/scrolling/ScrollingConstraints.h" |
33 #include "core/rendering/ImageQualityController.h" | 34 #include "core/rendering/ImageQualityController.h" |
34 #include "core/rendering/RenderBlock.h" | 35 #include "core/rendering/RenderBlock.h" |
35 #include "core/rendering/RenderFlowThread.h" | 36 #include "core/rendering/RenderFlowThread.h" |
36 #include "core/rendering/RenderGeometryMap.h" | 37 #include "core/rendering/RenderGeometryMap.h" |
37 #include "core/rendering/RenderInline.h" | 38 #include "core/rendering/RenderInline.h" |
38 #include "core/rendering/RenderObjectInlines.h" | |
39 #include "core/rendering/RenderRegion.h" | 39 #include "core/rendering/RenderRegion.h" |
40 #include "core/rendering/RenderTextFragment.h" | 40 #include "core/rendering/RenderTextFragment.h" |
41 #include "core/rendering/RenderView.h" | 41 #include "core/rendering/RenderView.h" |
42 #include "core/rendering/style/BorderEdge.h" | 42 #include "core/rendering/style/BorderEdge.h" |
43 #include "core/rendering/style/ShadowList.h" | 43 #include "core/rendering/style/ShadowList.h" |
44 #include "platform/LengthFunctions.h" | 44 #include "platform/LengthFunctions.h" |
45 #include "platform/geometry/TransformState.h" | 45 #include "platform/geometry/TransformState.h" |
46 #include "platform/graphics/DrawLooperBuilder.h" | 46 #include "platform/graphics/DrawLooperBuilder.h" |
47 #include "platform/graphics/GraphicsContextStateSaver.h" | 47 #include "platform/graphics/GraphicsContextStateSaver.h" |
48 #include "platform/graphics/Path.h" | 48 #include "platform/graphics/Path.h" |
(...skipping 11 matching lines...) Expand all Loading... |
60 typedef HashMap<const RenderBoxModelObject*, RenderBoxModelObject*> Continuation
Map; | 60 typedef HashMap<const RenderBoxModelObject*, RenderBoxModelObject*> Continuation
Map; |
61 static ContinuationMap* continuationMap = nullptr; | 61 static ContinuationMap* continuationMap = nullptr; |
62 | 62 |
63 void RenderBoxModelObject::setSelectionState(SelectionState state) | 63 void RenderBoxModelObject::setSelectionState(SelectionState state) |
64 { | 64 { |
65 if (state == SelectionInside && selectionState() != SelectionNone) | 65 if (state == SelectionInside && selectionState() != SelectionNone) |
66 return; | 66 return; |
67 | 67 |
68 if ((state == SelectionStart && selectionState() == SelectionEnd) | 68 if ((state == SelectionStart && selectionState() == SelectionEnd) |
69 || (state == SelectionEnd && selectionState() == SelectionStart)) | 69 || (state == SelectionEnd && selectionState() == SelectionStart)) |
70 RenderObject::setSelectionState(SelectionBoth); | 70 LayoutObject::setSelectionState(SelectionBoth); |
71 else | 71 else |
72 RenderObject::setSelectionState(state); | 72 LayoutObject::setSelectionState(state); |
73 | 73 |
74 // FIXME: We should consider whether it is OK propagating to ancestor Render
Inlines. | 74 // FIXME: We should consider whether it is OK propagating to ancestor Render
Inlines. |
75 // This is a workaround for http://webkit.org/b/32123 | 75 // This is a workaround for http://webkit.org/b/32123 |
76 // The containing block can be null in case of an orphaned tree. | 76 // The containing block can be null in case of an orphaned tree. |
77 RenderBlock* containingBlock = this->containingBlock(); | 77 RenderBlock* containingBlock = this->containingBlock(); |
78 if (containingBlock && !containingBlock->isRenderView()) | 78 if (containingBlock && !containingBlock->isRenderView()) |
79 containingBlock->setSelectionState(state); | 79 containingBlock->setSelectionState(state); |
80 } | 80 } |
81 | 81 |
82 void RenderBoxModelObject::contentChanged(ContentChangeType changeType) | 82 void RenderBoxModelObject::contentChanged(ContentChangeType changeType) |
(...skipping 15 matching lines...) Expand all Loading... |
98 } | 98 } |
99 | 99 |
100 RenderBoxModelObject::~RenderBoxModelObject() | 100 RenderBoxModelObject::~RenderBoxModelObject() |
101 { | 101 { |
102 } | 102 } |
103 | 103 |
104 void RenderBoxModelObject::willBeDestroyed() | 104 void RenderBoxModelObject::willBeDestroyed() |
105 { | 105 { |
106 ImageQualityController::remove(this); | 106 ImageQualityController::remove(this); |
107 | 107 |
108 // A continuation of this RenderObject should be destroyed at subclasses. | 108 // A continuation of this LayoutObject should be destroyed at subclasses. |
109 ASSERT(!continuation()); | 109 ASSERT(!continuation()); |
110 | 110 |
111 LayoutLayerModelObject::willBeDestroyed(); | 111 LayoutLayerModelObject::willBeDestroyed(); |
112 } | 112 } |
113 | 113 |
114 bool RenderBoxModelObject::calculateHasBoxDecorations() const | 114 bool RenderBoxModelObject::calculateHasBoxDecorations() const |
115 { | 115 { |
116 RenderStyle* styleToUse = style(); | 116 RenderStyle* styleToUse = style(); |
117 ASSERT(styleToUse); | 117 ASSERT(styleToUse); |
118 return hasBackground() || styleToUse->hasBorder() || styleToUse->hasAppearan
ce() || styleToUse->boxShadow(); | 118 return hasBackground() || styleToUse->hasBorder() || styleToUse->hasAppearan
ce() || styleToUse->boxShadow(); |
119 } | 119 } |
120 | 120 |
121 void RenderBoxModelObject::updateFromStyle() | 121 void RenderBoxModelObject::updateFromStyle() |
122 { | 122 { |
123 LayoutLayerModelObject::updateFromStyle(); | 123 LayoutLayerModelObject::updateFromStyle(); |
124 | 124 |
125 RenderStyle* styleToUse = style(); | 125 RenderStyle* styleToUse = style(); |
126 setHasBoxDecorationBackground(calculateHasBoxDecorations()); | 126 setHasBoxDecorationBackground(calculateHasBoxDecorations()); |
127 setInline(styleToUse->isDisplayInlineType()); | 127 setInline(styleToUse->isDisplayInlineType()); |
128 setPositionState(styleToUse->position()); | 128 setPositionState(styleToUse->position()); |
129 setHorizontalWritingMode(styleToUse->isHorizontalWritingMode()); | 129 setHorizontalWritingMode(styleToUse->isHorizontalWritingMode()); |
130 } | 130 } |
131 | 131 |
132 static LayoutSize accumulateInFlowPositionOffsets(const RenderObject* child) | 132 static LayoutSize accumulateInFlowPositionOffsets(const LayoutObject* child) |
133 { | 133 { |
134 if (!child->isAnonymousBlock() || !child->isRelPositioned()) | 134 if (!child->isAnonymousBlock() || !child->isRelPositioned()) |
135 return LayoutSize(); | 135 return LayoutSize(); |
136 LayoutSize offset; | 136 LayoutSize offset; |
137 RenderObject* p = toRenderBlock(child)->inlineElementContinuation(); | 137 LayoutObject* p = toRenderBlock(child)->inlineElementContinuation(); |
138 while (p && p->isRenderInline()) { | 138 while (p && p->isRenderInline()) { |
139 if (p->isRelPositioned()) { | 139 if (p->isRelPositioned()) { |
140 RenderInline* renderInline = toRenderInline(p); | 140 RenderInline* renderInline = toRenderInline(p); |
141 offset += renderInline->offsetForInFlowPosition(); | 141 offset += renderInline->offsetForInFlowPosition(); |
142 } | 142 } |
143 p = p->parent(); | 143 p = p->parent(); |
144 } | 144 } |
145 return offset; | 145 return offset; |
146 } | 146 } |
147 | 147 |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 if (!element) | 249 if (!element) |
250 return referencePoint; | 250 return referencePoint; |
251 | 251 |
252 if (const RenderBoxModelObject* offsetParent = element->renderBoxModelObject
()) { | 252 if (const RenderBoxModelObject* offsetParent = element->renderBoxModelObject
()) { |
253 if (offsetParent->isBox() && !offsetParent->isBody()) | 253 if (offsetParent->isBox() && !offsetParent->isBody()) |
254 referencePoint.move(-toRenderBox(offsetParent)->borderLeft(), -toRen
derBox(offsetParent)->borderTop()); | 254 referencePoint.move(-toRenderBox(offsetParent)->borderLeft(), -toRen
derBox(offsetParent)->borderTop()); |
255 if (!isOutOfFlowPositioned() || flowThreadContainingBlock()) { | 255 if (!isOutOfFlowPositioned() || flowThreadContainingBlock()) { |
256 if (isRelPositioned()) | 256 if (isRelPositioned()) |
257 referencePoint.move(relativePositionOffset()); | 257 referencePoint.move(relativePositionOffset()); |
258 | 258 |
259 RenderObject* current; | 259 LayoutObject* current; |
260 for (current = parent(); current != offsetParent && current->parent(
); current = current->parent()) { | 260 for (current = parent(); current != offsetParent && current->parent(
); current = current->parent()) { |
261 // FIXME: What are we supposed to do inside SVG content? | 261 // FIXME: What are we supposed to do inside SVG content? |
262 if (!isOutOfFlowPositioned()) { | 262 if (!isOutOfFlowPositioned()) { |
263 if (current->isBox() && !current->isTableRow()) | 263 if (current->isBox() && !current->isTableRow()) |
264 referencePoint.moveBy(toRenderBox(current)->topLeftLocat
ion()); | 264 referencePoint.moveBy(toRenderBox(current)->topLeftLocat
ion()); |
265 referencePoint.move(current->parent()->columnOffset(referenc
ePoint)); | 265 referencePoint.move(current->parent()->columnOffset(referenc
ePoint)); |
266 } | 266 } |
267 } | 267 } |
268 | 268 |
269 if (offsetParent->isBox() && offsetParent->isBody() && !offsetParent
->isPositioned()) | 269 if (offsetParent->isBox() && offsetParent->isBody() && !offsetParent
->isPositioned()) |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
553 x = std::min(x, std::max<LayoutUnit>(maxX - caretWidth, 0)); | 553 x = std::min(x, std::max<LayoutUnit>(maxX - caretWidth, 0)); |
554 | 554 |
555 LayoutUnit height = style()->fontMetrics().height(); | 555 LayoutUnit height = style()->fontMetrics().height(); |
556 LayoutUnit verticalSpace = lineHeight(true, currentStyle->isHorizontalWritin
gMode() ? HorizontalLine : VerticalLine, PositionOfInteriorLineBoxes) - height; | 556 LayoutUnit verticalSpace = lineHeight(true, currentStyle->isHorizontalWritin
gMode() ? HorizontalLine : VerticalLine, PositionOfInteriorLineBoxes) - height; |
557 LayoutUnit y = paddingTop() + borderTop() + (verticalSpace / 2); | 557 LayoutUnit y = paddingTop() + borderTop() + (verticalSpace / 2); |
558 return currentStyle->isHorizontalWritingMode() ? LayoutRect(x, y, caretWidth
, height) : LayoutRect(y, x, height, caretWidth); | 558 return currentStyle->isHorizontalWritingMode() ? LayoutRect(x, y, caretWidth
, height) : LayoutRect(y, x, height, caretWidth); |
559 } | 559 } |
560 | 560 |
561 void RenderBoxModelObject::mapAbsoluteToLocalPoint(MapCoordinatesFlags mode, Tra
nsformState& transformState) const | 561 void RenderBoxModelObject::mapAbsoluteToLocalPoint(MapCoordinatesFlags mode, Tra
nsformState& transformState) const |
562 { | 562 { |
563 RenderObject* o = container(); | 563 LayoutObject* o = container(); |
564 if (!o) | 564 if (!o) |
565 return; | 565 return; |
566 | 566 |
567 if (o->isRenderFlowThread()) | 567 if (o->isRenderFlowThread()) |
568 transformState.move(o->columnOffset(LayoutPoint(transformState.mappedPoi
nt()))); | 568 transformState.move(o->columnOffset(LayoutPoint(transformState.mappedPoi
nt()))); |
569 | 569 |
570 o->mapAbsoluteToLocalPoint(mode, transformState); | 570 o->mapAbsoluteToLocalPoint(mode, transformState); |
571 | 571 |
572 LayoutSize containerOffset = offsetFromContainer(o, LayoutPoint()); | 572 LayoutSize containerOffset = offsetFromContainer(o, LayoutPoint()); |
573 | 573 |
574 if (!style()->hasOutOfFlowPosition() && o->hasColumns()) { | 574 if (!style()->hasOutOfFlowPosition() && o->hasColumns()) { |
575 RenderBlock* block = toRenderBlock(o); | 575 RenderBlock* block = toRenderBlock(o); |
576 LayoutPoint point(roundedLayoutPoint(transformState.mappedPoint())); | 576 LayoutPoint point(roundedLayoutPoint(transformState.mappedPoint())); |
577 point -= containerOffset; | 577 point -= containerOffset; |
578 block->adjustForColumnRect(containerOffset, point); | 578 block->adjustForColumnRect(containerOffset, point); |
579 } | 579 } |
580 | 580 |
581 bool preserve3D = mode & UseTransforms && (o->style()->preserves3D() || styl
e()->preserves3D()); | 581 bool preserve3D = mode & UseTransforms && (o->style()->preserves3D() || styl
e()->preserves3D()); |
582 if (mode & UseTransforms && shouldUseTransformFromContainer(o)) { | 582 if (mode & UseTransforms && shouldUseTransformFromContainer(o)) { |
583 TransformationMatrix t; | 583 TransformationMatrix t; |
584 getTransformFromContainer(o, containerOffset, t); | 584 getTransformFromContainer(o, containerOffset, t); |
585 transformState.applyTransform(t, preserve3D ? TransformState::Accumulate
Transform : TransformState::FlattenTransform); | 585 transformState.applyTransform(t, preserve3D ? TransformState::Accumulate
Transform : TransformState::FlattenTransform); |
586 } else | 586 } else |
587 transformState.move(containerOffset.width(), containerOffset.height(), p
reserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransfo
rm); | 587 transformState.move(containerOffset.width(), containerOffset.height(), p
reserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransfo
rm); |
588 } | 588 } |
589 | 589 |
590 const RenderObject* RenderBoxModelObject::pushMappingToContainer(const LayoutLay
erModelObject* ancestorToStopAt, RenderGeometryMap& geometryMap) const | 590 const LayoutObject* RenderBoxModelObject::pushMappingToContainer(const LayoutLay
erModelObject* ancestorToStopAt, RenderGeometryMap& geometryMap) const |
591 { | 591 { |
592 ASSERT(ancestorToStopAt != this); | 592 ASSERT(ancestorToStopAt != this); |
593 | 593 |
594 bool ancestorSkipped; | 594 bool ancestorSkipped; |
595 RenderObject* container = this->container(ancestorToStopAt, &ancestorSkipped
); | 595 LayoutObject* container = this->container(ancestorToStopAt, &ancestorSkipped
); |
596 if (!container) | 596 if (!container) |
597 return 0; | 597 return 0; |
598 | 598 |
599 bool isInline = isRenderInline(); | 599 bool isInline = isRenderInline(); |
600 bool isFixedPos = !isInline && style()->position() == FixedPosition; | 600 bool isFixedPos = !isInline && style()->position() == FixedPosition; |
601 bool hasTransform = !isInline && hasLayer() && layer()->transform(); | 601 bool hasTransform = !isInline && hasLayer() && layer()->transform(); |
602 | 602 |
603 LayoutSize adjustmentForSkippedAncestor; | 603 LayoutSize adjustmentForSkippedAncestor; |
604 if (ancestorSkipped) { | 604 if (ancestorSkipped) { |
605 // There can't be a transform between paintInvalidationContainer and o,
because transforms create containers, so it should be safe | 605 // There can't be a transform between paintInvalidationContainer and o,
because transforms create containers, so it should be safe |
(...skipping 11 matching lines...) Expand all Loading... |
617 t.translateRight(adjustmentForSkippedAncestor.width().toFloat(), adjustm
entForSkippedAncestor.height().toFloat()); | 617 t.translateRight(adjustmentForSkippedAncestor.width().toFloat(), adjustm
entForSkippedAncestor.height().toFloat()); |
618 geometryMap.push(this, t, preserve3D, offsetDependsOnPoint, isFixedPos,
hasTransform); | 618 geometryMap.push(this, t, preserve3D, offsetDependsOnPoint, isFixedPos,
hasTransform); |
619 } else { | 619 } else { |
620 containerOffset += adjustmentForSkippedAncestor; | 620 containerOffset += adjustmentForSkippedAncestor; |
621 geometryMap.push(this, containerOffset, preserve3D, offsetDependsOnPoint
, isFixedPos, hasTransform); | 621 geometryMap.push(this, containerOffset, preserve3D, offsetDependsOnPoint
, isFixedPos, hasTransform); |
622 } | 622 } |
623 | 623 |
624 return ancestorSkipped ? ancestorToStopAt : container; | 624 return ancestorSkipped ? ancestorToStopAt : container; |
625 } | 625 } |
626 | 626 |
627 void RenderBoxModelObject::moveChildTo(RenderBoxModelObject* toBoxModelObject, R
enderObject* child, RenderObject* beforeChild, bool fullRemoveInsert) | 627 void RenderBoxModelObject::moveChildTo(RenderBoxModelObject* toBoxModelObject, L
ayoutObject* child, LayoutObject* beforeChild, bool fullRemoveInsert) |
628 { | 628 { |
629 // We assume that callers have cleared their positioned objects list for chi
ld moves (!fullRemoveInsert) so the | 629 // We assume that callers have cleared their positioned objects list for chi
ld moves (!fullRemoveInsert) so the |
630 // positioned renderer maps don't become stale. It would be too slow to do t
he map lookup on each call. | 630 // positioned renderer maps don't become stale. It would be too slow to do t
he map lookup on each call. |
631 ASSERT(!fullRemoveInsert || !isRenderBlock() || !toRenderBlock(this)->hasPos
itionedObjects()); | 631 ASSERT(!fullRemoveInsert || !isRenderBlock() || !toRenderBlock(this)->hasPos
itionedObjects()); |
632 | 632 |
633 ASSERT(this == child->parent()); | 633 ASSERT(this == child->parent()); |
634 ASSERT(!beforeChild || toBoxModelObject == beforeChild->parent()); | 634 ASSERT(!beforeChild || toBoxModelObject == beforeChild->parent()); |
635 if (fullRemoveInsert && (toBoxModelObject->isRenderBlock() || toBoxModelObje
ct->isRenderInline())) { | 635 if (fullRemoveInsert && (toBoxModelObject->isRenderBlock() || toBoxModelObje
ct->isRenderInline())) { |
636 // Takes care of adding the new child correctly if toBlock and fromBlock | 636 // Takes care of adding the new child correctly if toBlock and fromBlock |
637 // have different kind of children (block vs inline). | 637 // have different kind of children (block vs inline). |
638 toBoxModelObject->addChild(virtualChildren()->removeChildNode(this, chil
d), beforeChild); | 638 toBoxModelObject->addChild(virtualChildren()->removeChildNode(this, chil
d), beforeChild); |
639 } else | 639 } else |
640 toBoxModelObject->virtualChildren()->insertChildNode(toBoxModelObject, v
irtualChildren()->removeChildNode(this, child, fullRemoveInsert), beforeChild, f
ullRemoveInsert); | 640 toBoxModelObject->virtualChildren()->insertChildNode(toBoxModelObject, v
irtualChildren()->removeChildNode(this, child, fullRemoveInsert), beforeChild, f
ullRemoveInsert); |
641 } | 641 } |
642 | 642 |
643 void RenderBoxModelObject::moveChildrenTo(RenderBoxModelObject* toBoxModelObject
, RenderObject* startChild, RenderObject* endChild, RenderObject* beforeChild, b
ool fullRemoveInsert) | 643 void RenderBoxModelObject::moveChildrenTo(RenderBoxModelObject* toBoxModelObject
, LayoutObject* startChild, LayoutObject* endChild, LayoutObject* beforeChild, b
ool fullRemoveInsert) |
644 { | 644 { |
645 // This condition is rarely hit since this function is usually called on | 645 // This condition is rarely hit since this function is usually called on |
646 // anonymous blocks which can no longer carry positioned objects (see r12076
1) | 646 // anonymous blocks which can no longer carry positioned objects (see r12076
1) |
647 // or when fullRemoveInsert is false. | 647 // or when fullRemoveInsert is false. |
648 if (fullRemoveInsert && isRenderBlock()) { | 648 if (fullRemoveInsert && isRenderBlock()) { |
649 RenderBlock* block = toRenderBlock(this); | 649 RenderBlock* block = toRenderBlock(this); |
650 block->removePositionedObjects(0); | 650 block->removePositionedObjects(0); |
651 if (block->isRenderBlockFlow()) | 651 if (block->isRenderBlockFlow()) |
652 toRenderBlockFlow(block)->removeFloatingObjects(); | 652 toRenderBlockFlow(block)->removeFloatingObjects(); |
653 } | 653 } |
654 | 654 |
655 ASSERT(!beforeChild || toBoxModelObject == beforeChild->parent()); | 655 ASSERT(!beforeChild || toBoxModelObject == beforeChild->parent()); |
656 for (RenderObject* child = startChild; child && child != endChild; ) { | 656 for (LayoutObject* child = startChild; child && child != endChild; ) { |
657 // Save our next sibling as moveChildTo will clear it. | 657 // Save our next sibling as moveChildTo will clear it. |
658 RenderObject* nextSibling = child->nextSibling(); | 658 LayoutObject* nextSibling = child->nextSibling(); |
659 moveChildTo(toBoxModelObject, child, beforeChild, fullRemoveInsert); | 659 moveChildTo(toBoxModelObject, child, beforeChild, fullRemoveInsert); |
660 child = nextSibling; | 660 child = nextSibling; |
661 } | 661 } |
662 } | 662 } |
663 | 663 |
664 } // namespace blink | 664 } // namespace blink |
OLD | NEW |