| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/layout/PaintInvalidationState.h" | 5 #include "core/layout/PaintInvalidationState.h" |
| 6 | 6 |
| 7 #include "core/frame/FrameView.h" | 7 #include "core/frame/FrameView.h" |
| 8 #include "core/frame/LocalFrame.h" | 8 #include "core/frame/LocalFrame.h" |
| 9 #include "core/frame/Settings.h" | 9 #include "core/frame/Settings.h" |
| 10 #include "core/layout/LayoutInline.h" | 10 #include "core/layout/LayoutInline.h" |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 m_paintInvalidationContainerForStackedContents = | 126 m_paintInvalidationContainerForStackedContents = |
| 127 toLayoutBoxModelObject(¤tObject); | 127 toLayoutBoxModelObject(¤tObject); |
| 128 } else if (currentObject.isLayoutView()) { | 128 } else if (currentObject.isLayoutView()) { |
| 129 // m_paintInvalidationContainerForStackedContents is only for stacked | 129 // m_paintInvalidationContainerForStackedContents is only for stacked |
| 130 // descendants in its own frame, because it doesn't establish stacking | 130 // descendants in its own frame, because it doesn't establish stacking |
| 131 // context for stacked contents in sub-frames. Contents stacked in the root | 131 // context for stacked contents in sub-frames. Contents stacked in the root |
| 132 // stacking context in this frame should use this frame's | 132 // stacking context in this frame should use this frame's |
| 133 // paintInvalidationContainer. | 133 // paintInvalidationContainer. |
| 134 m_paintInvalidationContainerForStackedContents = | 134 m_paintInvalidationContainerForStackedContents = |
| 135 m_paintInvalidationContainer; | 135 m_paintInvalidationContainer; |
| 136 } else if (currentObject.isFloating() && | 136 } else if (currentObject.isFloatingWithNonContainingBlockParent()) { |
| 137 !currentObject.parent()->isLayoutBlock()) { | |
| 138 // See LayoutObject::paintingLayer() for specialty of floating objects. | |
| 139 m_paintInvalidationContainer = | 137 m_paintInvalidationContainer = |
| 140 ¤tObject.containerForPaintInvalidation(); | 138 ¤tObject.containerForPaintInvalidation(); |
| 141 m_cachedOffsetsEnabled = false; | 139 m_cachedOffsetsEnabled = false; |
| 142 } else if (currentObject.styleRef().isStacked() && | 140 } else if (currentObject.styleRef().isStacked() && |
| 143 // This is to exclude some objects (e.g. LayoutText) inheriting | 141 // This is to exclude some objects (e.g. LayoutText) inheriting |
| 144 // stacked style from parent but aren't actually stacked. | 142 // stacked style from parent but aren't actually stacked. |
| 145 currentObject.hasLayer() && | 143 currentObject.hasLayer() && |
| 146 m_paintInvalidationContainer != | 144 m_paintInvalidationContainer != |
| 147 m_paintInvalidationContainerForStackedContents) { | 145 m_paintInvalidationContainerForStackedContents) { |
| 148 // The current object is stacked, so we should use | 146 // The current object is stacked, so we should use |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 | 221 |
| 224 updateForCurrentObject(parentState); | 222 updateForCurrentObject(parentState); |
| 225 } | 223 } |
| 226 | 224 |
| 227 PaintLayer& PaintInvalidationState::childPaintingLayer( | 225 PaintLayer& PaintInvalidationState::childPaintingLayer( |
| 228 const LayoutObject& child) const { | 226 const LayoutObject& child) const { |
| 229 if (child.hasLayer() && toLayoutBoxModelObject(child).hasSelfPaintingLayer()) | 227 if (child.hasLayer() && toLayoutBoxModelObject(child).hasSelfPaintingLayer()) |
| 230 return *toLayoutBoxModelObject(child).layer(); | 228 return *toLayoutBoxModelObject(child).layer(); |
| 231 // See LayoutObject::paintingLayer() for the special-cases of floating under | 229 // See LayoutObject::paintingLayer() for the special-cases of floating under |
| 232 // inline and multicolumn. | 230 // inline and multicolumn. |
| 233 if (child.isColumnSpanAll() || | 231 if (child.isColumnSpanAll() || child.isFloatingWithNonContainingBlockParent()) |
| 234 (child.isFloating() && !m_currentObject.isLayoutBlock())) | |
| 235 return *child.paintingLayer(); | 232 return *child.paintingLayer(); |
| 236 return m_paintingLayer; | 233 return m_paintingLayer; |
| 237 } | 234 } |
| 238 | 235 |
| 239 void PaintInvalidationState::updateForCurrentObject( | 236 void PaintInvalidationState::updateForCurrentObject( |
| 240 const PaintInvalidationState& parentState) { | 237 const PaintInvalidationState& parentState) { |
| 241 if (!m_cachedOffsetsEnabled) | 238 if (!m_cachedOffsetsEnabled) |
| 242 return; | 239 return; |
| 243 | 240 |
| 244 if (m_currentObject.isLayoutView()) { | 241 if (m_currentObject.isLayoutView()) { |
| (...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 632 } | 629 } |
| 633 | 630 |
| 634 void PaintInvalidatorContextAdapter::mapLocalRectToPaintInvalidationBacking( | 631 void PaintInvalidatorContextAdapter::mapLocalRectToPaintInvalidationBacking( |
| 635 const LayoutObject& object, | 632 const LayoutObject& object, |
| 636 LayoutRect& rect) const { | 633 LayoutRect& rect) const { |
| 637 DCHECK(&object == &m_paintInvalidationState.currentObject()); | 634 DCHECK(&object == &m_paintInvalidationState.currentObject()); |
| 638 m_paintInvalidationState.mapLocalRectToPaintInvalidationBacking(rect); | 635 m_paintInvalidationState.mapLocalRectToPaintInvalidationBacking(rect); |
| 639 } | 636 } |
| 640 | 637 |
| 641 } // namespace blink | 638 } // namespace blink |
| OLD | NEW |