| 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/paint/PaintLayerPainter.h" | 5 #include "core/paint/PaintLayerPainter.h" |
| 6 | 6 |
| 7 #include "core/frame/LocalFrame.h" | 7 #include "core/frame/LocalFrame.h" |
| 8 #include "core/layout/LayoutInline.h" | 8 #include "core/layout/LayoutInline.h" |
| 9 #include "core/layout/LayoutView.h" | 9 #include "core/layout/LayoutView.h" |
| 10 #include "core/paint/ClipPathClipper.h" | 10 #include "core/paint/ClipPathClipper.h" |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 paintLayer.setPreviousPaintDirtyRect(paintingInfo.paintDirtyRect); | 174 paintLayer.setPreviousPaintDirtyRect(paintingInfo.paintDirtyRect); |
| 175 | 175 |
| 176 // Repaint if scroll offset accumulation changes. | 176 // Repaint if scroll offset accumulation changes. |
| 177 if (!needsRepaint && paintingInfo.scrollOffsetAccumulation != paintLayer.pre
viousScrollOffsetAccumulationForPainting()) | 177 if (!needsRepaint && paintingInfo.scrollOffsetAccumulation != paintLayer.pre
viousScrollOffsetAccumulationForPainting()) |
| 178 needsRepaint = true; | 178 needsRepaint = true; |
| 179 paintLayer.setPreviousScrollOffsetAccumulationForPainting(paintingInfo.scrol
lOffsetAccumulation); | 179 paintLayer.setPreviousScrollOffsetAccumulationForPainting(paintingInfo.scrol
lOffsetAccumulation); |
| 180 | 180 |
| 181 return needsRepaint; | 181 return needsRepaint; |
| 182 } | 182 } |
| 183 | 183 |
| 184 static LayoutRect computeReferenceBox(const LayoutBoxModelObject& boxModelObject
) | |
| 185 { | |
| 186 if (boxModelObject.isLayoutInline()) | |
| 187 return toLayoutInline(boxModelObject).linesBoundingBox(); | |
| 188 SECURITY_DCHECK(boxModelObject.isBox()); | |
| 189 return toLayoutBox(boxModelObject).borderBoxRect(); | |
| 190 } | |
| 191 | |
| 192 PaintLayerPainter::PaintResult PaintLayerPainter::paintLayerContents(GraphicsCon
text& context, const PaintLayerPaintingInfo& paintingInfoArg, PaintLayerFlags pa
intFlags, FragmentPolicy fragmentPolicy) | 184 PaintLayerPainter::PaintResult PaintLayerPainter::paintLayerContents(GraphicsCon
text& context, const PaintLayerPaintingInfo& paintingInfoArg, PaintLayerFlags pa
intFlags, FragmentPolicy fragmentPolicy) |
| 193 { | 185 { |
| 194 ASSERT(m_paintLayer.isSelfPaintingLayer() || m_paintLayer.hasSelfPaintingLay
erDescendant()); | 186 ASSERT(m_paintLayer.isSelfPaintingLayer() || m_paintLayer.hasSelfPaintingLay
erDescendant()); |
| 195 ASSERT(!(paintFlags & PaintLayerAppliedTransform)); | 187 ASSERT(!(paintFlags & PaintLayerAppliedTransform)); |
| 196 | 188 |
| 197 bool isSelfPaintingLayer = m_paintLayer.isSelfPaintingLayer(); | 189 bool isSelfPaintingLayer = m_paintLayer.isSelfPaintingLayer(); |
| 198 bool isPaintingOverlayScrollbars = paintFlags & PaintLayerPaintingOverlayScr
ollbars; | 190 bool isPaintingOverlayScrollbars = paintFlags & PaintLayerPaintingOverlayScr
ollbars; |
| 199 bool isPaintingScrollingContent = paintFlags & PaintLayerPaintingCompositing
ScrollingPhase; | 191 bool isPaintingScrollingContent = paintFlags & PaintLayerPaintingCompositing
ScrollingPhase; |
| 200 bool isPaintingCompositedForeground = paintFlags & PaintLayerPaintingComposi
tingForegroundPhase; | 192 bool isPaintingCompositedForeground = paintFlags & PaintLayerPaintingComposi
tingForegroundPhase; |
| 201 bool isPaintingCompositedBackground = paintFlags & PaintLayerPaintingComposi
tingBackgroundPhase; | 193 bool isPaintingCompositedBackground = paintFlags & PaintLayerPaintingComposi
tingBackgroundPhase; |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 Optional<ClipPathClipper> clipPathClipper; | 247 Optional<ClipPathClipper> clipPathClipper; |
| 256 // Clip-path, like border radius, must not be applied to the contents of a c
omposited-scrolling container. | 248 // Clip-path, like border radius, must not be applied to the contents of a c
omposited-scrolling container. |
| 257 // It must, however, still be applied to the mask layer, so that the composi
tor can properly mask the | 249 // It must, however, still be applied to the mask layer, so that the composi
tor can properly mask the |
| 258 // scrolling contents and scrollbars. | 250 // scrolling contents and scrollbars. |
| 259 if (m_paintLayer.layoutObject()->hasClipPath() && (!m_paintLayer.needsCompos
itedScrolling() || (paintFlags & PaintLayerPaintingChildClippingMaskPhase))) { | 251 if (m_paintLayer.layoutObject()->hasClipPath() && (!m_paintLayer.needsCompos
itedScrolling() || (paintFlags & PaintLayerPaintingChildClippingMaskPhase))) { |
| 260 if (!rootRelativeBoundsComputed) { | 252 if (!rootRelativeBoundsComputed) { |
| 261 rootRelativeBounds = m_paintLayer.physicalBoundingBoxIncludingReflec
tionAndStackingChildren(offsetFromRoot); | 253 rootRelativeBounds = m_paintLayer.physicalBoundingBoxIncludingReflec
tionAndStackingChildren(offsetFromRoot); |
| 262 rootRelativeBoundsComputed = true; | 254 rootRelativeBoundsComputed = true; |
| 263 } | 255 } |
| 264 paintingInfo.ancestorHasClipPathClipping = true; | 256 paintingInfo.ancestorHasClipPathClipping = true; |
| 265 LayoutRect referenceBox(computeReferenceBox(*m_paintLayer.layoutObject()
)); | 257 |
| 258 LayoutRect referenceBox(m_paintLayer.boxForClipPath()); |
| 266 referenceBox.moveBy(offsetFromRoot); | 259 referenceBox.moveBy(offsetFromRoot); |
| 267 clipPathClipper.emplace( | 260 clipPathClipper.emplace( |
| 268 context, *m_paintLayer.layoutObject(), FloatRect(referenceBox), Floa
tRect(rootRelativeBounds), FloatPoint(offsetFromRoot)); | 261 context, *m_paintLayer.layoutObject(), FloatRect(referenceBox), Floa
tRect(rootRelativeBounds), FloatPoint(offsetFromRoot)); |
| 269 } | 262 } |
| 270 | 263 |
| 271 Optional<CompositingRecorder> compositingRecorder; | 264 Optional<CompositingRecorder> compositingRecorder; |
| 272 // Blending operations must be performed only with the nearest ancestor stac
king context. | 265 // Blending operations must be performed only with the nearest ancestor stac
king context. |
| 273 // Note that there is no need to composite if we're painting the root. | 266 // Note that there is no need to composite if we're painting the root. |
| 274 // FIXME: this should be unified further into PaintLayer::paintsWithTranspar
ency(). | 267 // FIXME: this should be unified further into PaintLayer::paintsWithTranspar
ency(). |
| 275 bool shouldCompositeForBlendMode = (!m_paintLayer.layoutObject()->isDocument
Element() || m_paintLayer.layoutObject()->isSVGRoot()) && m_paintLayer.stackingN
ode()->isStackingContext() && m_paintLayer.hasNonIsolatedDescendantWithBlendMode
(); | 268 bool shouldCompositeForBlendMode = (!m_paintLayer.layoutObject()->isDocument
Element() || m_paintLayer.layoutObject()->isSVGRoot()) && m_paintLayer.stackingN
ode()->isStackingContext() && m_paintLayer.hasNonIsolatedDescendantWithBlendMode
(); |
| (...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 765 if (!m_paintLayer.containsDirtyOverlayScrollbars()) | 758 if (!m_paintLayer.containsDirtyOverlayScrollbars()) |
| 766 return; | 759 return; |
| 767 | 760 |
| 768 PaintLayerPaintingInfo paintingInfo(&m_paintLayer, LayoutRect(enclosingIntRe
ct(damageRect)), paintFlags, LayoutSize()); | 761 PaintLayerPaintingInfo paintingInfo(&m_paintLayer, LayoutRect(enclosingIntRe
ct(damageRect)), paintFlags, LayoutSize()); |
| 769 paintLayer(context, paintingInfo, PaintLayerPaintingOverlayScrollbars); | 762 paintLayer(context, paintingInfo, PaintLayerPaintingOverlayScrollbars); |
| 770 | 763 |
| 771 m_paintLayer.setContainsDirtyOverlayScrollbars(false); | 764 m_paintLayer.setContainsDirtyOverlayScrollbars(false); |
| 772 } | 765 } |
| 773 | 766 |
| 774 } // namespace blink | 767 } // namespace blink |
| OLD | NEW |