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 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 const ComputedStyle* oldStyle = style(); | 228 const ComputedStyle* oldStyle = style(); |
229 | 229 |
230 setReplaced(newStyle.isDisplayInlineType()); | 230 setReplaced(newStyle.isDisplayInlineType()); |
231 | 231 |
232 if (oldStyle && parent()) { | 232 if (oldStyle && parent()) { |
233 bool oldHasTransformRelatedProperty = oldStyle->hasTransformRelatedPrope
rty(); | 233 bool oldHasTransformRelatedProperty = oldStyle->hasTransformRelatedPrope
rty(); |
234 bool newHasTransformRelatedProperty = newStyle.hasTransformRelatedProper
ty(); | 234 bool newHasTransformRelatedProperty = newStyle.hasTransformRelatedProper
ty(); |
235 bool oldStyleIsContainer = oldStyle->position() != StaticPosition || old
HasTransformRelatedProperty; | 235 bool oldStyleIsContainer = oldStyle->position() != StaticPosition || old
HasTransformRelatedProperty; |
236 | 236 |
237 if (oldStyleIsContainer && (newStyle.position() == StaticPosition || (ol
dHasTransformRelatedProperty && !newHasTransformRelatedProperty))) { | 237 if (oldStyleIsContainer && (newStyle.position() == StaticPosition || (ol
dHasTransformRelatedProperty && !newHasTransformRelatedProperty))) { |
238 // Clear our positioned objects list. Our absolutely positioned desc
endants will be | 238 // Clear our positioned objects list. Our absolute and fixed positio
ned descendants will be |
239 // inserted into our containing block's positioned objects list duri
ng layout. | 239 // inserted into our containing block's positioned objects list duri
ng layout. |
240 removePositionedObjects(0, NewContainingBlock); | 240 removePositionedObjects(nullptr, NewContainingBlock); |
241 } else if (!oldStyleIsContainer && (newStyle.position() != StaticPositio
n || newHasTransformRelatedProperty)) { | 241 } else if (!oldStyleIsContainer && (newStyle.position() != StaticPositio
n || newHasTransformRelatedProperty)) { |
242 // Remove our absolutely positioned descendants from their current c
ontaining block. | 242 // Remove our absolutely positioned descendants from their current c
ontaining block. |
243 // They will be inserted into our positioned objects list during lay
out. | 243 // They will be inserted into our positioned objects list during lay
out. |
244 if (LayoutBlock* cb = containingBlockForAbsolutePosition()) | 244 if (LayoutBlock* cb = containingBlockForAbsolutePosition()) |
245 cb->removePositionedObjects(this, NewContainingBlock); | 245 cb->removePositionedObjects(this, NewContainingBlock); |
246 } | 246 } |
| 247 if (!oldHasTransformRelatedProperty && newHasTransformRelatedProperty) { |
| 248 // Remove our fixed positioned descendants from their current contai
ning block. |
| 249 // They will be inserted into our positioned objects list during lay
out. |
| 250 if (LayoutBlock* cb = containerForFixedPosition()) |
| 251 cb->removePositionedObjects(this, NewContainingBlock); |
| 252 } |
247 } | 253 } |
248 | 254 |
249 LayoutBox::styleWillChange(diff, newStyle); | 255 LayoutBox::styleWillChange(diff, newStyle); |
250 } | 256 } |
251 | 257 |
252 static bool borderOrPaddingLogicalWidthChanged(const ComputedStyle& oldStyle, co
nst ComputedStyle& newStyle) | 258 static bool borderOrPaddingLogicalWidthChanged(const ComputedStyle& oldStyle, co
nst ComputedStyle& newStyle) |
253 { | 259 { |
254 if (newStyle.isHorizontalWritingMode()) { | 260 if (newStyle.isHorizontalWritingMode()) { |
255 return oldStyle.borderLeftWidth() != newStyle.borderLeftWidth() | 261 return oldStyle.borderLeftWidth() != newStyle.borderLeftWidth() |
256 || oldStyle.borderRightWidth() != newStyle.borderRightWidth() | 262 || oldStyle.borderRightWidth() != newStyle.borderRightWidth() |
(...skipping 17 matching lines...) Expand all Loading... |
274 if (previousSibling() && previousSibling()->isAnonymousBlock()) | 280 if (previousSibling() && previousSibling()->isAnonymousBlock()) |
275 toLayoutBlock(parent())->moveChildTo(toLayoutBlock(previousSibling()
), this, nullptr, false); | 281 toLayoutBlock(parent())->moveChildTo(toLayoutBlock(previousSibling()
), this, nullptr, false); |
276 else if (nextSibling() && nextSibling()->isAnonymousBlock()) | 282 else if (nextSibling() && nextSibling()->isAnonymousBlock()) |
277 toLayoutBlock(parent())->moveChildTo(toLayoutBlock(nextSibling()), t
his, nextSibling()->slowFirstChild(), false); | 283 toLayoutBlock(parent())->moveChildTo(toLayoutBlock(nextSibling()), t
his, nextSibling()->slowFirstChild(), false); |
278 } | 284 } |
279 | 285 |
280 const ComputedStyle& newStyle = styleRef(); | 286 const ComputedStyle& newStyle = styleRef(); |
281 | 287 |
282 if (oldStyle && parent()) { | 288 if (oldStyle && parent()) { |
283 if (oldStyle->position() != newStyle.position() && newStyle.position() !
= StaticPosition) { | 289 if (oldStyle->position() != newStyle.position() && newStyle.position() !
= StaticPosition) { |
284 // Remove our absolutely positioned descendants from their new conta
ining block, | 290 // Remove our absolute and fixed positioned descendants from their n
ew containing block, |
285 // in case containingBlock() changes by the change to the position p
roperty. | 291 // in case containingBlock() changes by the change to the position p
roperty. |
286 // See styleWillChange() for other cases. | 292 // See styleWillChange() for other cases. |
287 if (LayoutBlock* cb = containingBlock()) | 293 if (LayoutBlock* cb = containingBlock()) |
288 cb->removePositionedObjects(this, NewContainingBlock); | 294 cb->removePositionedObjects(this, NewContainingBlock); |
289 } | 295 } |
290 } | 296 } |
291 | 297 |
292 if (TextAutosizer* textAutosizer = document().textAutosizer()) | 298 if (TextAutosizer* textAutosizer = document().textAutosizer()) |
293 textAutosizer->record(this); | 299 textAutosizer->record(this); |
294 | 300 |
(...skipping 1164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1459 } | 1465 } |
1460 | 1466 |
1461 void LayoutBlock::removePositionedObjects(LayoutBlock* o, ContainingBlockState c
ontainingBlockState) | 1467 void LayoutBlock::removePositionedObjects(LayoutBlock* o, ContainingBlockState c
ontainingBlockState) |
1462 { | 1468 { |
1463 TrackedLayoutBoxListHashSet* positionedDescendants = positionedObjects(); | 1469 TrackedLayoutBoxListHashSet* positionedDescendants = positionedObjects(); |
1464 if (!positionedDescendants) | 1470 if (!positionedDescendants) |
1465 return; | 1471 return; |
1466 | 1472 |
1467 Vector<LayoutBox*, 16> deadObjects; | 1473 Vector<LayoutBox*, 16> deadObjects; |
1468 for (auto* positionedObject : *positionedDescendants) { | 1474 for (auto* positionedObject : *positionedDescendants) { |
1469 if (!o || positionedObject->isDescendantOf(o)) { | 1475 if (!o || (positionedObject->isDescendantOf(o) && o != positionedObject)
) { |
1470 if (containingBlockState == NewContainingBlock) { | 1476 if (containingBlockState == NewContainingBlock) { |
1471 positionedObject->setChildNeedsLayout(MarkOnlyThis); | 1477 positionedObject->setChildNeedsLayout(MarkOnlyThis); |
1472 if (positionedObject->needsPreferredWidthsRecalculation()) | 1478 if (positionedObject->needsPreferredWidthsRecalculation()) |
1473 positionedObject->setPreferredLogicalWidthsDirty(MarkOnlyThi
s); | 1479 positionedObject->setPreferredLogicalWidthsDirty(MarkOnlyThi
s); |
| 1480 |
| 1481 // The positioned object changing containing block may change pa
int invalidation container. |
| 1482 // Invalidate it (including non-compositing descendants) on its
original paint invalidation container. |
| 1483 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
| 1484 // This valid because we need to invalidate based on the cur
rent status. |
| 1485 DisableCompositingQueryAsserts compositingDisabler; |
| 1486 if (!positionedObject->isPaintInvalidationContainer()) |
| 1487 positionedObject->invalidatePaintIncludingNonCompositing
Descendants(); |
| 1488 } |
1474 } | 1489 } |
1475 | 1490 |
1476 // It is parent blocks job to add positioned child to positioned obj
ects list of its containing block | 1491 // It is parent blocks job to add positioned child to positioned obj
ects list of its containing block |
1477 // Parent layout needs to be invalidated to ensure this happens. | 1492 // Parent layout needs to be invalidated to ensure this happens. |
1478 LayoutObject* p = positionedObject->parent(); | 1493 LayoutObject* p = positionedObject->parent(); |
1479 while (p && !p->isLayoutBlock()) | 1494 while (p && !p->isLayoutBlock()) |
1480 p = p->parent(); | 1495 p = p->parent(); |
1481 if (p) | 1496 if (p) |
1482 p->setChildNeedsLayout(); | 1497 p->setChildNeedsLayout(); |
1483 | 1498 |
(...skipping 1389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2873 void LayoutBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m
arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Layout
Object* obj) const | 2888 void LayoutBlock::showLineTreeAndMark(const InlineBox* markedBox1, const char* m
arkedLabel1, const InlineBox* markedBox2, const char* markedLabel2, const Layout
Object* obj) const |
2874 { | 2889 { |
2875 showLayoutObject(); | 2890 showLayoutObject(); |
2876 for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot
Box()) | 2891 for (const RootInlineBox* root = firstRootBox(); root; root = root->nextRoot
Box()) |
2877 root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa
bel2, obj, 1); | 2892 root->showLineTreeAndMark(markedBox1, markedLabel1, markedBox2, markedLa
bel2, obj, 1); |
2878 } | 2893 } |
2879 | 2894 |
2880 #endif | 2895 #endif |
2881 | 2896 |
2882 } // namespace blink | 2897 } // namespace blink |
OLD | NEW |