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 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
262 gColumnInfoMap->take(this); | 262 gColumnInfoMap->take(this); |
263 | 263 |
264 if (gPercentHeightDescendantsMap) | 264 if (gPercentHeightDescendantsMap) |
265 removeBlockFromDescendantAndContainerMaps(this, gPercentHeightDescendant
sMap, gPercentHeightContainerMap); | 265 removeBlockFromDescendantAndContainerMaps(this, gPercentHeightDescendant
sMap, gPercentHeightContainerMap); |
266 if (gPositionedDescendantsMap) | 266 if (gPositionedDescendantsMap) |
267 removeBlockFromDescendantAndContainerMaps(this, gPositionedDescendantsMa
p, gPositionedContainerMap); | 267 removeBlockFromDescendantAndContainerMaps(this, gPositionedDescendantsMa
p, gPositionedContainerMap); |
268 } | 268 } |
269 | 269 |
270 RenderBlock* RenderBlock::createAnonymous(Document* document) | 270 RenderBlock* RenderBlock::createAnonymous(Document* document) |
271 { | 271 { |
272 RenderBlock* renderer = new (document->renderArena()) RenderBlock(0); | 272 RenderBlock* renderer = new RenderBlock(0); |
273 renderer->setDocumentForAnonymous(document); | 273 renderer->setDocumentForAnonymous(document); |
274 return renderer; | 274 return renderer; |
275 } | 275 } |
276 | 276 |
277 void RenderBlock::willBeDestroyed() | 277 void RenderBlock::willBeDestroyed() |
278 { | 278 { |
279 // Mark as being destroyed to avoid trouble with merges in removeChild(). | 279 // Mark as being destroyed to avoid trouble with merges in removeChild(). |
280 m_beingDestroyed = true; | 280 m_beingDestroyed = true; |
281 | 281 |
282 if (!documentBeingDestroyed()) { | 282 if (!documentBeingDestroyed()) { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
317 if (isAnonymousBlock()) { | 317 if (isAnonymousBlock()) { |
318 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLi
neBox()) { | 318 for (InlineFlowBox* box = firstLineBox(); box; box = box->nextLi
neBox()) { |
319 while (InlineBox* childBox = box->firstChild()) | 319 while (InlineBox* childBox = box->firstChild()) |
320 childBox->remove(); | 320 childBox->remove(); |
321 } | 321 } |
322 } | 322 } |
323 } else if (parent()) | 323 } else if (parent()) |
324 parent()->dirtyLinesFromChangedChild(this); | 324 parent()->dirtyLinesFromChangedChild(this); |
325 } | 325 } |
326 | 326 |
327 m_lineBoxes.deleteLineBoxes(renderArena()); | 327 m_lineBoxes.deleteLineBoxes(); |
328 | 328 |
329 if (lineGridBox()) | 329 if (lineGridBox()) |
330 lineGridBox()->destroy(renderArena()); | 330 lineGridBox()->destroy(); |
331 | 331 |
332 if (UNLIKELY(gDelayedUpdateScrollInfoSet != 0)) | 332 if (UNLIKELY(gDelayedUpdateScrollInfoSet != 0)) |
333 gDelayedUpdateScrollInfoSet->remove(this); | 333 gDelayedUpdateScrollInfoSet->remove(this); |
334 | 334 |
335 RenderBox::willBeDestroyed(); | 335 RenderBox::willBeDestroyed(); |
336 } | 336 } |
337 | 337 |
338 void RenderBlock::styleWillChange(StyleDifference diff, const RenderStyle* newSt
yle) | 338 void RenderBlock::styleWillChange(StyleDifference diff, const RenderStyle* newSt
yle) |
339 { | 339 { |
340 RenderStyle* oldStyle = style(); | 340 RenderStyle* oldStyle = style(); |
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
727 | 727 |
728 if (madeNewBeforeBlock) | 728 if (madeNewBeforeBlock) |
729 block->moveChildrenTo(pre, boxFirst, 0, true); | 729 block->moveChildrenTo(pre, boxFirst, 0, true); |
730 | 730 |
731 splitBlocks(pre, post, newBlockBox, beforeChild, oldCont); | 731 splitBlocks(pre, post, newBlockBox, beforeChild, oldCont); |
732 | 732 |
733 // We already know the newBlockBox isn't going to contain inline kids, so av
oid wasting | 733 // We already know the newBlockBox isn't going to contain inline kids, so av
oid wasting |
734 // time in makeChildrenNonInline by just setting this explicitly up front. | 734 // time in makeChildrenNonInline by just setting this explicitly up front. |
735 newBlockBox->setChildrenInline(false); | 735 newBlockBox->setChildrenInline(false); |
736 | 736 |
737 // We delayed adding the newChild until now so that the |newBlockBox| would
be fully | |
738 // connected, thus allowing newChild access to a renderArena should it need | |
739 // to wrap itself in additional boxes (e.g., table construction). | |
740 newBlockBox->addChild(newChild); | 737 newBlockBox->addChild(newChild); |
741 | 738 |
742 // Always just do a full layout in order to ensure that line boxes (especial
ly wrappers for images) | 739 // Always just do a full layout in order to ensure that line boxes (especial
ly wrappers for images) |
743 // get deleted properly. Because objects moves from the pre block into the
post block, we want to | 740 // get deleted properly. Because objects moves from the pre block into the
post block, we want to |
744 // make new line boxes instead of leaving the old line boxes around. | 741 // make new line boxes instead of leaving the old line boxes around. |
745 pre->setNeedsLayoutAndPrefWidthsRecalc(); | 742 pre->setNeedsLayoutAndPrefWidthsRecalc(); |
746 block->setNeedsLayoutAndPrefWidthsRecalc(); | 743 block->setNeedsLayoutAndPrefWidthsRecalc(); |
747 post->setNeedsLayoutAndPrefWidthsRecalc(); | 744 post->setNeedsLayoutAndPrefWidthsRecalc(); |
748 } | 745 } |
749 | 746 |
(...skipping 29 matching lines...) Expand all Loading... |
779 block->setChildrenInline(false); | 776 block->setChildrenInline(false); |
780 | 777 |
781 // The pre/post blocks always have layers, so we know to always do a full in
sert/remove (so we pass true as the last argument). | 778 // The pre/post blocks always have layers, so we know to always do a full in
sert/remove (so we pass true as the last argument). |
782 block->moveChildrenTo(pre, boxFirst, beforeChild, true); | 779 block->moveChildrenTo(pre, boxFirst, beforeChild, true); |
783 block->moveChildrenTo(post, beforeChild, 0, true); | 780 block->moveChildrenTo(post, beforeChild, 0, true); |
784 | 781 |
785 // We already know the newBlockBox isn't going to contain inline kids, so av
oid wasting | 782 // We already know the newBlockBox isn't going to contain inline kids, so av
oid wasting |
786 // time in makeChildrenNonInline by just setting this explicitly up front. | 783 // time in makeChildrenNonInline by just setting this explicitly up front. |
787 newBlockBox->setChildrenInline(false); | 784 newBlockBox->setChildrenInline(false); |
788 | 785 |
789 // We delayed adding the newChild until now so that the |newBlockBox| would
be fully | |
790 // connected, thus allowing newChild access to a renderArena should it need | |
791 // to wrap itself in additional boxes (e.g., table construction). | |
792 newBlockBox->addChild(newChild); | 786 newBlockBox->addChild(newChild); |
793 | 787 |
794 // Always just do a full layout in order to ensure that line boxes (especial
ly wrappers for images) | 788 // Always just do a full layout in order to ensure that line boxes (especial
ly wrappers for images) |
795 // get deleted properly. Because objects moved from the pre block into the
post block, we want to | 789 // get deleted properly. Because objects moved from the pre block into the
post block, we want to |
796 // make new line boxes instead of leaving the old line boxes around. | 790 // make new line boxes instead of leaving the old line boxes around. |
797 if (pre) | 791 if (pre) |
798 pre->setNeedsLayoutAndPrefWidthsRecalc(); | 792 pre->setNeedsLayoutAndPrefWidthsRecalc(); |
799 block->setNeedsLayoutAndPrefWidthsRecalc(); | 793 block->setNeedsLayoutAndPrefWidthsRecalc(); |
800 if (post) | 794 if (post) |
801 post->setNeedsLayoutAndPrefWidthsRecalc(); | 795 post->setNeedsLayoutAndPrefWidthsRecalc(); |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1019 { | 1013 { |
1020 if (containsFloats()) { | 1014 if (containsFloats()) { |
1021 // Clear references to originating lines, since the lines are being dele
ted | 1015 // Clear references to originating lines, since the lines are being dele
ted |
1022 const FloatingObjectSet& floatingObjectSet = floatingObjects()->set(); | 1016 const FloatingObjectSet& floatingObjectSet = floatingObjects()->set(); |
1023 FloatingObjectSetIterator end = floatingObjectSet.end(); | 1017 FloatingObjectSetIterator end = floatingObjectSet.end(); |
1024 for (FloatingObjectSetIterator it = floatingObjectSet.begin(); it != end
; ++it) { | 1018 for (FloatingObjectSetIterator it = floatingObjectSet.begin(); it != end
; ++it) { |
1025 ASSERT(!((*it)->m_originatingLine) || (*it)->m_originatingLine->rend
erer() == this); | 1019 ASSERT(!((*it)->m_originatingLine) || (*it)->m_originatingLine->rend
erer() == this); |
1026 (*it)->m_originatingLine = 0; | 1020 (*it)->m_originatingLine = 0; |
1027 } | 1021 } |
1028 } | 1022 } |
1029 m_lineBoxes.deleteLineBoxTree(renderArena()); | 1023 m_lineBoxes.deleteLineBoxTree(); |
1030 | 1024 |
1031 if (AXObjectCache* cache = document()->existingAXObjectCache()) | 1025 if (AXObjectCache* cache = document()->existingAXObjectCache()) |
1032 cache->recomputeIsIgnored(this); | 1026 cache->recomputeIsIgnored(this); |
1033 } | 1027 } |
1034 | 1028 |
1035 RootInlineBox* RenderBlock::createRootInlineBox() | 1029 RootInlineBox* RenderBlock::createRootInlineBox() |
1036 { | 1030 { |
1037 return new (renderArena()) RootInlineBox(this); | 1031 return new RootInlineBox(this); |
1038 } | 1032 } |
1039 | 1033 |
1040 RootInlineBox* RenderBlock::createAndAppendRootInlineBox() | 1034 RootInlineBox* RenderBlock::createAndAppendRootInlineBox() |
1041 { | 1035 { |
1042 RootInlineBox* rootBox = createRootInlineBox(); | 1036 RootInlineBox* rootBox = createRootInlineBox(); |
1043 m_lineBoxes.appendLineBox(rootBox); | 1037 m_lineBoxes.appendLineBox(rootBox); |
1044 | 1038 |
1045 if (UNLIKELY(AXObjectCache::accessibilityEnabled()) && m_lineBoxes.firstLine
Box() == rootBox) { | 1039 if (UNLIKELY(AXObjectCache::accessibilityEnabled()) && m_lineBoxes.firstLine
Box() == rootBox) { |
1046 if (AXObjectCache* cache = document()->existingAXObjectCache()) | 1040 if (AXObjectCache* cache = document()->existingAXObjectCache()) |
1047 cache->recomputeIsIgnored(this); | 1041 cache->recomputeIsIgnored(this); |
(...skipping 897 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1945 } | 1939 } |
1946 } | 1940 } |
1947 | 1941 |
1948 RenderBoxModelObject* RenderBlock::createReplacementRunIn(RenderBoxModelObject*
runIn) | 1942 RenderBoxModelObject* RenderBlock::createReplacementRunIn(RenderBoxModelObject*
runIn) |
1949 { | 1943 { |
1950 ASSERT(runIn->isRunIn()); | 1944 ASSERT(runIn->isRunIn()); |
1951 ASSERT(runIn->node()); | 1945 ASSERT(runIn->node()); |
1952 | 1946 |
1953 RenderBoxModelObject* newRunIn = 0; | 1947 RenderBoxModelObject* newRunIn = 0; |
1954 if (!runIn->isRenderBlock()) | 1948 if (!runIn->isRenderBlock()) |
1955 newRunIn = new (renderArena()) RenderBlock(runIn->node()); | 1949 newRunIn = new RenderBlock(runIn->node()); |
1956 else | 1950 else |
1957 newRunIn = new (renderArena()) RenderInline(toElement(runIn->node())); | 1951 newRunIn = new RenderInline(toElement(runIn->node())); |
1958 | 1952 |
1959 runIn->node()->setRenderer(newRunIn); | 1953 runIn->node()->setRenderer(newRunIn); |
1960 newRunIn->setStyle(runIn->style()); | 1954 newRunIn->setStyle(runIn->style()); |
1961 | 1955 |
1962 runIn->moveAllChildrenTo(newRunIn, true); | 1956 runIn->moveAllChildrenTo(newRunIn, true); |
1963 | 1957 |
1964 return newRunIn; | 1958 return newRunIn; |
1965 } | 1959 } |
1966 | 1960 |
1967 void RenderBlock::moveRunInUnderSiblingBlockIfNeeded(RenderObject* runIn) | 1961 void RenderBlock::moveRunInUnderSiblingBlockIfNeeded(RenderObject* runIn) |
(...skipping 4816 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6784 if (!shouldSkipForFirstLetter(c)) | 6778 if (!shouldSkipForFirstLetter(c)) |
6785 break; | 6779 break; |
6786 | 6780 |
6787 if (isPunctuationForFirstLetter(c)) | 6781 if (isPunctuationForFirstLetter(c)) |
6788 length = scanLength + 1; | 6782 length = scanLength + 1; |
6789 } | 6783 } |
6790 | 6784 |
6791 // Construct a text fragment for the text after the first letter. | 6785 // Construct a text fragment for the text after the first letter. |
6792 // This text fragment might be empty. | 6786 // This text fragment might be empty. |
6793 RenderTextFragment* remainingText = | 6787 RenderTextFragment* remainingText = |
6794 new (renderArena()) RenderTextFragment(textObj->node() ? textObj->no
de() : textObj->document(), oldText.get(), length, oldText->length() - length); | 6788 new RenderTextFragment(textObj->node() ? textObj->node() : textObj->
document(), oldText.get(), length, oldText->length() - length); |
6795 remainingText->setStyle(textObj->style()); | 6789 remainingText->setStyle(textObj->style()); |
6796 if (remainingText->node()) | 6790 if (remainingText->node()) |
6797 remainingText->node()->setRenderer(remainingText); | 6791 remainingText->node()->setRenderer(remainingText); |
6798 | 6792 |
6799 firstLetterContainer->addChild(remainingText, textObj); | 6793 firstLetterContainer->addChild(remainingText, textObj); |
6800 firstLetterContainer->removeChild(textObj); | 6794 firstLetterContainer->removeChild(textObj); |
6801 remainingText->setFirstLetter(firstLetter); | 6795 remainingText->setFirstLetter(firstLetter); |
6802 toRenderBoxModelObject(firstLetter)->setFirstLetterRemainingText(remaini
ngText); | 6796 toRenderBoxModelObject(firstLetter)->setFirstLetterRemainingText(remaini
ngText); |
6803 | 6797 |
6804 // construct text fragment for the first letter | 6798 // construct text fragment for the first letter |
6805 RenderTextFragment* letter = | 6799 RenderTextFragment* letter = |
6806 new (renderArena()) RenderTextFragment(remainingText->node() ? remai
ningText->node() : remainingText->document(), oldText.get(), 0, length); | 6800 new RenderTextFragment(remainingText->node() ? remainingText->node()
: remainingText->document(), oldText.get(), 0, length); |
6807 letter->setStyle(pseudoStyle); | 6801 letter->setStyle(pseudoStyle); |
6808 firstLetter->addChild(letter); | 6802 firstLetter->addChild(letter); |
6809 | 6803 |
6810 textObj->destroy(); | 6804 textObj->destroy(); |
6811 } | 6805 } |
6812 } | 6806 } |
6813 | 6807 |
6814 void RenderBlock::updateFirstLetter() | 6808 void RenderBlock::updateFirstLetter() |
6815 { | 6809 { |
6816 if (!document()->styleSheetCollection()->usesFirstLetterRules()) | 6810 if (!document()->styleSheetCollection()->usesFirstLetterRules()) |
(...skipping 1455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8272 } | 8266 } |
8273 | 8267 |
8274 String ValueToString<RenderBlock::FloatingObject*>::string(const RenderBlock::Fl
oatingObject* floatingObject) | 8268 String ValueToString<RenderBlock::FloatingObject*>::string(const RenderBlock::Fl
oatingObject* floatingObject) |
8275 { | 8269 { |
8276 return String::format("%p (%dx%d %dx%d)", floatingObject, floatingObject->fr
ameRect().pixelSnappedX(), floatingObject->frameRect().pixelSnappedY(), floating
Object->frameRect().pixelSnappedMaxX(), floatingObject->frameRect().pixelSnapped
MaxY()); | 8270 return String::format("%p (%dx%d %dx%d)", floatingObject, floatingObject->fr
ameRect().pixelSnappedX(), floatingObject->frameRect().pixelSnappedY(), floating
Object->frameRect().pixelSnappedMaxX(), floatingObject->frameRect().pixelSnapped
MaxY()); |
8277 } | 8271 } |
8278 | 8272 |
8279 #endif | 8273 #endif |
8280 | 8274 |
8281 } // namespace WebCore | 8275 } // namespace WebCore |
OLD | NEW |