Chromium Code Reviews| 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 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 268 LayoutBox::willBeDestroyed(); | 268 LayoutBox::willBeDestroyed(); |
| 269 } | 269 } |
| 270 | 270 |
| 271 void LayoutBlock::styleWillChange(StyleDifference diff, const ComputedStyle& new Style) | 271 void LayoutBlock::styleWillChange(StyleDifference diff, const ComputedStyle& new Style) |
| 272 { | 272 { |
| 273 const ComputedStyle* oldStyle = style(); | 273 const ComputedStyle* oldStyle = style(); |
| 274 | 274 |
| 275 setReplaced(newStyle.isDisplayInlineType()); | 275 setReplaced(newStyle.isDisplayInlineType()); |
| 276 | 276 |
| 277 if (oldStyle && parent()) { | 277 if (oldStyle && parent()) { |
| 278 bool oldStyleIsContainer = oldStyle->position() != StaticPosition || old Style->hasTransformRelatedProperty(); | 278 bool oldHasTransformRelatedProperty = oldStyle->hasTransformRelatedPrope rty(); |
| 279 bool newStyleIsContainer = newStyle.position() != StaticPosition || newS tyle.hasTransformRelatedProperty(); | 279 bool newHasTransformRelatedProperty = newStyle.hasTransformRelatedProper ty(); |
| 280 bool oldStyleIsContainer = oldStyle->position() != StaticPosition || old HasTransformRelatedProperty; | |
| 280 | 281 |
| 281 if (oldStyleIsContainer && !newStyleIsContainer) { | 282 if (oldStyleIsContainer && (newStyle.position() == StaticPosition || !ne wHasTransformRelatedProperty)) { |
|
mstensho (USE GERRIT)
2015/06/16 14:22:37
Instead of !newHasTransformRelatedProperty:
(oldH
kojii
2015/06/16 18:56:20
Done.
| |
| 282 // Clear our positioned objects list. Our absolutely positioned desc endants will be | 283 // Clear our positioned objects list. Our absolutely positioned desc endants will be |
| 283 // inserted into our containing block's positioned objects list duri ng layout. | 284 // inserted into our containing block's positioned objects list duri ng layout. |
| 284 removePositionedObjects(0, NewContainingBlock); | 285 removePositionedObjects(0, NewContainingBlock); |
| 285 } else if (!oldStyleIsContainer && newStyleIsContainer) { | 286 } else if (!oldStyleIsContainer && (newStyle.position() != StaticPositio n || newHasTransformRelatedProperty)) { |
| 286 // Remove our absolutely positioned descendants from their current c ontaining block. | 287 // Remove our absolutely positioned descendants from their current c ontaining block. |
| 287 // They will be inserted into our positioned objects list during lay out. | 288 // They will be inserted into our positioned objects list during lay out. |
| 288 LayoutObject* cb = parent(); | 289 if (LayoutBlock* cb = containingBlock()) |
| 289 while (cb && (cb->style()->position() == StaticPosition || (cb->isIn line() && !cb->isReplaced())) && !cb->isLayoutView()) { | 290 cb->removePositionedObjects(this, NewContainingBlock); |
| 290 if (cb->style()->position() == RelativePosition && cb->isInline( ) && !cb->isReplaced()) { | |
| 291 cb = cb->containingBlock(); | |
| 292 break; | |
| 293 } | |
| 294 cb = cb->parent(); | |
| 295 } | |
| 296 | |
| 297 if (cb->isLayoutBlock()) | |
| 298 toLayoutBlock(cb)->removePositionedObjects(this, NewContainingBl ock); | |
| 299 } | 291 } |
| 300 } | 292 } |
| 301 | 293 |
| 302 LayoutBox::styleWillChange(diff, newStyle); | 294 LayoutBox::styleWillChange(diff, newStyle); |
| 303 } | 295 } |
| 304 | 296 |
| 305 static bool borderOrPaddingLogicalWidthChanged(const ComputedStyle& oldStyle, co nst ComputedStyle& newStyle) | 297 static bool borderOrPaddingLogicalWidthChanged(const ComputedStyle& oldStyle, co nst ComputedStyle& newStyle) |
| 306 { | 298 { |
| 307 if (newStyle.isHorizontalWritingMode()) { | 299 if (newStyle.isHorizontalWritingMode()) { |
| 308 return oldStyle.borderLeftWidth() != newStyle.borderLeftWidth() | 300 return oldStyle.borderLeftWidth() != newStyle.borderLeftWidth() |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 319 | 311 |
| 320 void LayoutBlock::styleDidChange(StyleDifference diff, const ComputedStyle* oldS tyle) | 312 void LayoutBlock::styleDidChange(StyleDifference diff, const ComputedStyle* oldS tyle) |
| 321 { | 313 { |
| 322 LayoutBox::styleDidChange(diff, oldStyle); | 314 LayoutBox::styleDidChange(diff, oldStyle); |
| 323 | 315 |
| 324 if (isFloatingOrOutOfFlowPositioned() && oldStyle && !oldStyle->isFloating() && !oldStyle->hasOutOfFlowPosition() && parent() && parent()->isLayoutBlockFlow ()) | 316 if (isFloatingOrOutOfFlowPositioned() && oldStyle && !oldStyle->isFloating() && !oldStyle->hasOutOfFlowPosition() && parent() && parent()->isLayoutBlockFlow ()) |
| 325 toLayoutBlock(parent())->removeAnonymousWrappersIfRequired(); | 317 toLayoutBlock(parent())->removeAnonymousWrappersIfRequired(); |
| 326 | 318 |
| 327 const ComputedStyle& newStyle = styleRef(); | 319 const ComputedStyle& newStyle = styleRef(); |
| 328 | 320 |
| 321 if (oldStyle && parent()) { | |
| 322 if (oldStyle->position() != newStyle.position() && newStyle.position() ! = StaticPosition) { | |
| 323 // Remove our absolutely positioned descendants from their new conta ining block, | |
| 324 // in case containingBlock() changes by the change to the position p roperty. | |
| 325 // See styleWillChange() for other cases. | |
| 326 if (LayoutBlock* cb = containingBlock()) | |
| 327 cb->removePositionedObjects(this, NewContainingBlock); | |
| 328 } | |
| 329 } | |
| 330 | |
| 329 if (TextAutosizer* textAutosizer = document().textAutosizer()) | 331 if (TextAutosizer* textAutosizer = document().textAutosizer()) |
| 330 textAutosizer->record(this); | 332 textAutosizer->record(this); |
| 331 | 333 |
| 332 propagateStyleToAnonymousChildren(true); | 334 propagateStyleToAnonymousChildren(true); |
| 333 | 335 |
| 334 // It's possible for our border/padding to change, but for the overall logic al width of the block to | 336 // It's possible for our border/padding to change, but for the overall logic al width of the block to |
| 335 // end up being the same. We keep track of this change so in layoutBlock, we can know to set relayoutChildren=true. | 337 // end up being the same. We keep track of this change so in layoutBlock, we can know to set relayoutChildren=true. |
| 336 m_widthAvailableToChildrenChanged |= oldStyle && diff.needsFullLayout() && n eedsLayout() && borderOrPaddingLogicalWidthChanged(*oldStyle, newStyle); | 338 m_widthAvailableToChildrenChanged |= oldStyle && diff.needsFullLayout() && n eedsLayout() && borderOrPaddingLogicalWidthChanged(*oldStyle, newStyle); |
| 337 | 339 |
| 338 // If the style has unloaded images, want to notify the ResourceLoadPriority Optimizer so that | 340 // If the style has unloaded images, want to notify the ResourceLoadPriority Optimizer so that |
| (...skipping 2576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2915 void LayoutBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Layout Object* obj) const | 2917 void LayoutBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Layout Object* obj) const |
| 2916 { | 2918 { |
| 2917 showLayoutObject(); | 2919 showLayoutObject(); |
| 2918 for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot Box()) | 2920 for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot Box()) |
| 2919 root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa bel2, obj, 1); | 2921 root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa bel2, obj, 1); |
| 2920 } | 2922 } |
| 2921 | 2923 |
| 2922 #endif | 2924 #endif |
| 2923 | 2925 |
| 2924 } // namespace blink | 2926 } // namespace blink |
| OLD | NEW |