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 |