| 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 4831 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  4842 RenderBlockFlow* RenderBlock::createAnonymousColumnSpanWithParentRenderer(const 
      RenderObject* parent) |  4842 RenderBlockFlow* RenderBlock::createAnonymousColumnSpanWithParentRenderer(const 
      RenderObject* parent) | 
|  4843 { |  4843 { | 
|  4844     RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(
      parent->style(), BLOCK); |  4844     RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyleWithDisplay(
      parent->style(), BLOCK); | 
|  4845     newStyle->setColumnSpan(ColumnSpanAll); |  4845     newStyle->setColumnSpan(ColumnSpanAll); | 
|  4846  |  4846  | 
|  4847     RenderBlockFlow* newBox = RenderBlockFlow::createAnonymous(&parent->document
      ()); |  4847     RenderBlockFlow* newBox = RenderBlockFlow::createAnonymous(&parent->document
      ()); | 
|  4848     newBox->setStyle(newStyle.release()); |  4848     newBox->setStyle(newStyle.release()); | 
|  4849     return newBox; |  4849     return newBox; | 
|  4850 } |  4850 } | 
|  4851  |  4851  | 
|  4852 bool RenderBlock::recalcChildOverflowAfterStyleChange() |  | 
|  4853 { |  | 
|  4854     ASSERT(childNeedsOverflowRecalcAfterStyleChange()); |  | 
|  4855     setChildNeedsOverflowRecalcAfterStyleChange(false); |  | 
|  4856  |  | 
|  4857     bool childrenOverflowChanged = false; |  | 
|  4858  |  | 
|  4859     if (childrenInline()) { |  | 
|  4860         ListHashSet<RootInlineBox*> lineBoxes; |  | 
|  4861         for (InlineWalker walker(this); !walker.atEnd(); walker.advance()) { |  | 
|  4862             RenderObject* renderer = walker.current(); |  | 
|  4863             if (renderer->isOutOfFlowPositioned() || !renderer->needsOverflowRec
      alcAfterStyleChange()) |  | 
|  4864                 continue; |  | 
|  4865  |  | 
|  4866             RenderBlock* block = toRenderBlock(renderer); |  | 
|  4867             if (!block->recalcOverflowAfterStyleChange()) |  | 
|  4868                 continue; |  | 
|  4869  |  | 
|  4870             childrenOverflowChanged = true; |  | 
|  4871             if (InlineBox* inlineBoxWrapper = block->inlineBoxWrapper()) |  | 
|  4872                 lineBoxes.add(&inlineBoxWrapper->root()); |  | 
|  4873         } |  | 
|  4874  |  | 
|  4875         // FIXME: Glyph overflow will get lost in this case, but not really a bi
      g deal. |  | 
|  4876         GlyphOverflowAndFallbackFontsMap textBoxDataMap; |  | 
|  4877         for (ListHashSet<RootInlineBox*>::const_iterator it = lineBoxes.begin();
       it != lineBoxes.end(); ++it) { |  | 
|  4878             RootInlineBox* box = *it; |  | 
|  4879             box->computeOverflow(box->lineTop(), box->lineBottom(), textBoxDataM
      ap); |  | 
|  4880         } |  | 
|  4881     } else { |  | 
|  4882         for (RenderBox* box = firstChildBox(); box; box = box->nextSiblingBox())
       { |  | 
|  4883             if (box->isOutOfFlowPositioned() || !box->needsOverflowRecalcAfterSt
      yleChange()) |  | 
|  4884                 continue; |  | 
|  4885  |  | 
|  4886             RenderBlock* block = toRenderBlock(box); |  | 
|  4887             if (!block->recalcOverflowAfterStyleChange()) |  | 
|  4888                 continue; |  | 
|  4889  |  | 
|  4890             childrenOverflowChanged = true; |  | 
|  4891         } |  | 
|  4892     } |  | 
|  4893  |  | 
|  4894     TrackedRendererListHashSet* positionedDescendants = positionedObjects(); |  | 
|  4895     if (!positionedDescendants) |  | 
|  4896         return childrenOverflowChanged; |  | 
|  4897  |  | 
|  4898     TrackedRendererListHashSet::iterator end = positionedDescendants->end(); |  | 
|  4899     for (TrackedRendererListHashSet::iterator it = positionedDescendants->begin(
      ); it != end; ++it) { |  | 
|  4900         RenderBox* box = *it; |  | 
|  4901  |  | 
|  4902         if (!box->needsOverflowRecalcAfterStyleChange()) |  | 
|  4903             continue; |  | 
|  4904         RenderBlock* block = toRenderBlock(box); |  | 
|  4905         if (!block->recalcOverflowAfterStyleChange() || box->style()->position()
       == FixedPosition) |  | 
|  4906             continue; |  | 
|  4907  |  | 
|  4908         childrenOverflowChanged = true; |  | 
|  4909     } |  | 
|  4910     return childrenOverflowChanged; |  | 
|  4911 } |  | 
|  4912  |  | 
|  4913 bool RenderBlock::recalcOverflowAfterStyleChange() |  | 
|  4914 { |  | 
|  4915     ASSERT(needsOverflowRecalcAfterStyleChange()); |  | 
|  4916  |  | 
|  4917     bool childrenOverflowChanged = false; |  | 
|  4918     if (childNeedsOverflowRecalcAfterStyleChange()) |  | 
|  4919         childrenOverflowChanged = recalcChildOverflowAfterStyleChange(); |  | 
|  4920  |  | 
|  4921     if (!selfNeedsOverflowRecalcAfterStyleChange() && !childrenOverflowChanged) |  | 
|  4922         return false; |  | 
|  4923  |  | 
|  4924     setSelfNeedsOverflowRecalcAfterStyleChange(false); |  | 
|  4925     // If the current block needs layout, overflow will be recalculated during |  | 
|  4926     // layout time anyway. We can safely exit here. |  | 
|  4927     if (needsLayout()) |  | 
|  4928         return false; |  | 
|  4929  |  | 
|  4930     LayoutUnit oldClientAfterEdge = hasRenderOverflow() ? m_overflow->layoutClie
      ntAfterEdge() : clientLogicalBottom(); |  | 
|  4931     computeOverflow(oldClientAfterEdge, true); |  | 
|  4932  |  | 
|  4933     if (hasOverflowClip()) |  | 
|  4934         layer()->scrollableArea()->updateAfterOverflowRecalc(); |  | 
|  4935  |  | 
|  4936     return !hasOverflowClip(); |  | 
|  4937 } |  | 
|  4938  |  | 
|  4939 #ifndef NDEBUG |  4852 #ifndef NDEBUG | 
|  4940 void RenderBlock::checkPositionedObjectsNeedLayout() |  4853 void RenderBlock::checkPositionedObjectsNeedLayout() | 
|  4941 { |  4854 { | 
|  4942     if (!gPositionedDescendantsMap) |  4855     if (!gPositionedDescendantsMap) | 
|  4943         return; |  4856         return; | 
|  4944  |  4857  | 
|  4945     if (TrackedRendererListHashSet* positionedDescendantSet = positionedObjects(
      )) { |  4858     if (TrackedRendererListHashSet* positionedDescendantSet = positionedObjects(
      )) { | 
|  4946         TrackedRendererListHashSet::const_iterator end = positionedDescendantSet
      ->end(); |  4859         TrackedRendererListHashSet::const_iterator end = positionedDescendantSet
      ->end(); | 
|  4947         for (TrackedRendererListHashSet::const_iterator it = positionedDescendan
      tSet->begin(); it != end; ++it) { |  4860         for (TrackedRendererListHashSet::const_iterator it = positionedDescendan
      tSet->begin(); it != end; ++it) { | 
|  4948             RenderBox* currBox = *it; |  4861             RenderBox* currBox = *it; | 
|  4949             ASSERT(!currBox->needsLayout()); |  4862             ASSERT(!currBox->needsLayout()); | 
|  4950         } |  4863         } | 
|  4951     } |  4864     } | 
|  4952 } |  4865 } | 
|  4953  |  4866  | 
|  4954 void RenderBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m
      arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Render
      Object* obj) const |  4867 void RenderBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m
      arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Render
      Object* obj) const | 
|  4955 { |  4868 { | 
|  4956     showRenderObject(); |  4869     showRenderObject(); | 
|  4957     for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot
      Box()) |  4870     for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot
      Box()) | 
|  4958         root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa
      bel2, obj, 1); |  4871         root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa
      bel2, obj, 1); | 
|  4959 } |  4872 } | 
|  4960  |  4873  | 
|  4961 #endif |  4874 #endif | 
|  4962  |  4875  | 
|  4963 } // namespace WebCore |  4876 } // namespace WebCore | 
| OLD | NEW |