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) 2000 Dirk Mueller (mueller@kde.org) | 4 * (C) 2000 Dirk Mueller (mueller@kde.org) |
| 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) | 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) |
| 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv ed. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv ed. |
| 7 * Copyright (C) 2009 Google Inc. All rights reserved. | 7 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) | 8 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) |
| 9 * | 9 * |
| 10 * This library is free software; you can redistribute it and/or | 10 * This library is free software; you can redistribute it and/or |
| (...skipping 2037 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2048 setNeedsLayoutAndPrefWidthsRecalc(); | 2048 setNeedsLayoutAndPrefWidthsRecalc(); |
| 2049 else if (updatedDiff.needsPositionedMovementLayout()) | 2049 else if (updatedDiff.needsPositionedMovementLayout()) |
| 2050 setNeedsPositionedMovementLayout(); | 2050 setNeedsPositionedMovementLayout(); |
| 2051 } | 2051 } |
| 2052 | 2052 |
| 2053 if (diff.transformChanged() && !needsLayout()) { | 2053 if (diff.transformChanged() && !needsLayout()) { |
| 2054 if (RenderBlock* container = containingBlock()) | 2054 if (RenderBlock* container = containingBlock()) |
| 2055 container->setNeedsOverflowRecalcAfterStyleChange(); | 2055 container->setNeedsOverflowRecalcAfterStyleChange(); |
| 2056 } | 2056 } |
| 2057 | 2057 |
| 2058 if (updatedDiff.needsRepaint()) { | 2058 // FIXME: Should invalidate whole layer if updatedDiff.needsRepaintLayer(). crbug.com/394050. |
| 2059 // Invalidate paints with the new style, e.g., for example if we go from not having | 2059 if (diff.needsRepaintObject() || updatedDiff.needsRepaint()) { |
| 2060 // an outline to having an outline. | 2060 // FIXME: For objects that don't save previousPaintInvalidationRect, we still need |
| 2061 | 2061 // to invalidate now because their invalidateTreeIfNeeded won't invalida te themselves. |
| 2062 // The paintInvalidationForWholeRenderer() call is needed for non-layout changes to style. See the corresponding | 2062 // crbug.com/394133. |
| 2063 // comment in RenderObject::styleWillChange for why. | 2063 // FIXME: Test of parentTransformDidChange in RenderSVGModelObject::inva lidateTreeIfNeeded() |
| 2064 if (needsLayout()) | 2064 // prevents SVG objects from using unified invalidation for repaint-only style change. |
| 2065 // crbug.com/394619. | |
| 2066 if (needsLayout() || (invalidatesSelfDuringTreeInvalidation() && !isSVG( ))) | |
| 2065 setShouldDoFullPaintInvalidation(true); | 2067 setShouldDoFullPaintInvalidation(true); |
| 2066 else if (!selfNeedsLayout()) | 2068 else |
| 2067 paintInvalidationForWholeRenderer(); | 2069 paintInvalidationForWholeRenderer(); |
| 2068 } | 2070 } |
| 2069 } | 2071 } |
| 2070 | 2072 |
| 2071 static inline bool rendererHasBackground(const RenderObject* renderer) | 2073 static inline bool rendererHasBackground(const RenderObject* renderer) |
| 2072 { | 2074 { |
| 2073 return renderer && renderer->hasBackground(); | 2075 return renderer && renderer->hasBackground(); |
| 2074 } | 2076 } |
| 2075 | 2077 |
| 2076 void RenderObject::styleWillChange(StyleDifference diff, const RenderStyle& newS tyle) | 2078 void RenderObject::styleWillChange(StyleDifference diff, const RenderStyle& newS tyle) |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 2092 // We might not have an enclosing layer yet because we might not be in the tree. | 2094 // We might not have an enclosing layer yet because we might not be in the tree. |
| 2093 if (RenderLayer* layer = enclosingLayer()) { | 2095 if (RenderLayer* layer = enclosingLayer()) { |
| 2094 if (newStyle.visibility() == VISIBLE) { | 2096 if (newStyle.visibility() == VISIBLE) { |
| 2095 layer->setHasVisibleContent(); | 2097 layer->setHasVisibleContent(); |
| 2096 } else if (layer->hasVisibleContent() && (this == layer->rendere r() || layer->renderer()->style()->visibility() != VISIBLE)) { | 2098 } else if (layer->hasVisibleContent() && (this == layer->rendere r() || layer->renderer()->style()->visibility() != VISIBLE)) { |
| 2097 layer->dirtyVisibleContentStatus(); | 2099 layer->dirtyVisibleContentStatus(); |
| 2098 } | 2100 } |
| 2099 } | 2101 } |
| 2100 } | 2102 } |
| 2101 | 2103 |
| 2102 // For style-only changes that need paint invalidation, we currently nee d to issue a paint invalidation before and after the style | |
| 2103 // change. The paint invalidation before style change is accomplished he re. The paint invalidation after style change is accomplished | |
| 2104 // in RenderObject::setStyle. | |
| 2105 if (m_parent && diff.needsRepaintObject()) { | |
| 2106 if (!diff.needsLayout() && !needsLayout()) | |
| 2107 paintInvalidationForWholeRenderer(); | |
| 2108 } | |
| 2109 | |
| 2110 if (isFloating() && (m_style->floating() != newStyle.floating())) | 2104 if (isFloating() && (m_style->floating() != newStyle.floating())) |
| 2111 // For changes in float styles, we need to conceivably remove oursel ves | 2105 // For changes in float styles, we need to conceivably remove oursel ves |
| 2112 // from the floating objects list. | 2106 // from the floating objects list. |
| 2113 toRenderBox(this)->removeFloatingOrPositionedChildFromBlockLists(); | 2107 toRenderBox(this)->removeFloatingOrPositionedChildFromBlockLists(); |
| 2114 else if (isOutOfFlowPositioned() && (m_style->position() != newStyle.pos ition())) | 2108 else if (isOutOfFlowPositioned() && (m_style->position() != newStyle.pos ition())) |
| 2115 // For changes in positioning styles, we need to conceivably remove ourselves | 2109 // For changes in positioning styles, we need to conceivably remove ourselves |
| 2116 // from the positioned objects list. | 2110 // from the positioned objects list. |
| 2117 toRenderBox(this)->removeFloatingOrPositionedChildFromBlockLists(); | 2111 toRenderBox(this)->removeFloatingOrPositionedChildFromBlockLists(); |
| 2118 | 2112 |
| 2119 s_affectsParentBlock = isFloatingOrOutOfFlowPositioned() | 2113 s_affectsParentBlock = isFloatingOrOutOfFlowPositioned() |
| (...skipping 1267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3387 { | 3381 { |
| 3388 ASSERT_NOT_REACHED(); | 3382 ASSERT_NOT_REACHED(); |
| 3389 return false; | 3383 return false; |
| 3390 } | 3384 } |
| 3391 | 3385 |
| 3392 bool RenderObject::isRelayoutBoundaryForInspector() const | 3386 bool RenderObject::isRelayoutBoundaryForInspector() const |
| 3393 { | 3387 { |
| 3394 return objectIsRelayoutBoundary(this); | 3388 return objectIsRelayoutBoundary(this); |
| 3395 } | 3389 } |
| 3396 | 3390 |
| 3391 void RenderObject::setShouldDoFullPaintInvalidation(bool b) | |
| 3392 { | |
| 3393 m_bitfields.setShouldDoFullPaintInvalidation(b); | |
| 3394 if (!b) | |
| 3395 return; | |
| 3396 | |
| 3397 // Make sure our parent is marked as child needing invalidation. | |
|
dsinclair
2014/07/17 18:36:01
as child needing full paint invalidation
Xianzhu
2014/07/17 21:57:34
Updated.
| |
| 3398 for (RenderObject* p = parent(); p && !p->shouldCheckForPaintInvalidation(); p = p->parent()) | |
| 3399 p->setChildNeedsPaintInvalidation(true); | |
| 3400 } | |
| 3401 | |
| 3397 void RenderObject::clearPaintInvalidationState() | 3402 void RenderObject::clearPaintInvalidationState() |
| 3398 { | 3403 { |
| 3399 setShouldDoFullPaintInvalidation(false); | 3404 setShouldDoFullPaintInvalidation(false); |
| 3400 setShouldDoFullPaintInvalidationIfSelfPaintingLayer(false); | 3405 setShouldDoFullPaintInvalidationIfSelfPaintingLayer(false); |
| 3401 setOnlyNeededPositionedMovementLayout(false); | 3406 setOnlyNeededPositionedMovementLayout(false); |
| 3402 setNeededLayoutBecauseOfChildren(false); | 3407 setNeededLayoutBecauseOfChildren(false); |
| 3403 setShouldInvalidateOverflowForPaint(false); | 3408 setShouldInvalidateOverflowForPaint(false); |
| 3404 setLayoutDidGetCalled(false); | 3409 setLayoutDidGetCalled(false); |
| 3405 setMayNeedPaintInvalidation(false); | 3410 setMayNeedPaintInvalidation(false); |
| 3411 setChildNeedsPaintInvalidation(false); | |
| 3406 } | 3412 } |
| 3407 | 3413 |
| 3408 bool RenderObject::isAllowedToModifyRenderTreeStructure(Document& document) | 3414 bool RenderObject::isAllowedToModifyRenderTreeStructure(Document& document) |
| 3409 { | 3415 { |
| 3410 return DeprecatedDisableModifyRenderTreeStructureAsserts::canModifyRenderTre eStateInAnyState() | 3416 return DeprecatedDisableModifyRenderTreeStructureAsserts::canModifyRenderTre eStateInAnyState() |
| 3411 || document.lifecycle().stateAllowsRenderTreeMutations(); | 3417 || document.lifecycle().stateAllowsRenderTreeMutations(); |
| 3412 } | 3418 } |
| 3413 | 3419 |
| 3414 DeprecatedDisableModifyRenderTreeStructureAsserts::DeprecatedDisableModifyRender TreeStructureAsserts() | 3420 DeprecatedDisableModifyRenderTreeStructureAsserts::DeprecatedDisableModifyRender TreeStructureAsserts() |
| 3415 : m_disabler(gModifyRenderTreeStructureAnyState, true) | 3421 : m_disabler(gModifyRenderTreeStructureAnyState, true) |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 3446 { | 3452 { |
| 3447 if (object1) { | 3453 if (object1) { |
| 3448 const WebCore::RenderObject* root = object1; | 3454 const WebCore::RenderObject* root = object1; |
| 3449 while (root->parent()) | 3455 while (root->parent()) |
| 3450 root = root->parent(); | 3456 root = root->parent(); |
| 3451 root->showRenderTreeAndMark(object1, "*", object2, "-", 0); | 3457 root->showRenderTreeAndMark(object1, "*", object2, "-", 0); |
| 3452 } | 3458 } |
| 3453 } | 3459 } |
| 3454 | 3460 |
| 3455 #endif | 3461 #endif |
| OLD | NEW |