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 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
395 { | 395 { |
396 TrackedRendererListHashSet* positionedDescendants = positionedObjects(); | 396 TrackedRendererListHashSet* positionedDescendants = positionedObjects(); |
397 if (!positionedDescendants) | 397 if (!positionedDescendants) |
398 return; | 398 return; |
399 | 399 |
400 RenderBox* r; | 400 RenderBox* r; |
401 TrackedRendererListHashSet::iterator end = positionedDescendants->end(); | 401 TrackedRendererListHashSet::iterator end = positionedDescendants->end(); |
402 for (TrackedRendererListHashSet::iterator it = positionedDescendants->begin(
); it != end; ++it) { | 402 for (TrackedRendererListHashSet::iterator it = positionedDescendants->begin(
); it != end; ++it) { |
403 r = *it; | 403 r = *it; |
404 | 404 |
405 SubtreeLayoutScope layoutScope(*r); | |
406 | |
407 // When a non-positioned block element moves, it may have positioned chi
ldren that are implicitly positioned relative to the | |
408 // non-positioned block. Rather than trying to detect all of these move
ment cases, we just always lay out positioned | |
409 // objects that are positioned implicitly like this. Such objects are r
are, and so in typical DHTML menu usage (where everything is | |
410 // positioned explicitly) this should not incur a performance penalty. | |
411 if (relayoutChildren || (r->style()->hasStaticBlockPosition() && r->pare
nt() != this)) | |
412 layoutScope.setChildNeedsLayout(r); | |
413 | |
414 // If relayoutChildren is set and the child has percentage padding or an
embedded content box, we also need to invalidate the childs pref widths. | 405 // If relayoutChildren is set and the child has percentage padding or an
embedded content box, we also need to invalidate the childs pref widths. |
415 if (relayoutChildren && r->needsPreferredWidthsRecalculation()) | 406 if (relayoutChildren && r->needsPreferredWidthsRecalculation()) |
416 r->setPreferredLogicalWidthsDirty(MarkOnlyThis); | 407 r->setPreferredLogicalWidthsDirty(MarkOnlyThis); |
417 | 408 |
418 if (info == ForcedLayoutAfterContainingBlockMoved) | 409 if (info == ForcedLayoutAfterContainingBlockMoved) |
419 r->setNeedsPositionedMovementLayout(); | 410 r->setNeedsPositionedMovementLayout(); |
420 | 411 |
421 r->layoutIfNeeded(); | 412 r->layoutIfNeeded(); |
422 } | 413 } |
423 } | 414 } |
(...skipping 1308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1732 void RenderBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m
arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Render
Object* obj) const | 1723 void RenderBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m
arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Render
Object* obj) const |
1733 { | 1724 { |
1734 showRenderObject(); | 1725 showRenderObject(); |
1735 for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot
Box()) | 1726 for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot
Box()) |
1736 root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa
bel2, obj, 1); | 1727 root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa
bel2, obj, 1); |
1737 } | 1728 } |
1738 | 1729 |
1739 #endif | 1730 #endif |
1740 | 1731 |
1741 } // namespace blink | 1732 } // namespace blink |
OLD | NEW |