| 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 "config.h" | 5 #include "config.h" |
| 6 #include "core/paint/LayerPainter.h" | 6 #include "core/paint/LayerPainter.h" |
| 7 | 7 |
| 8 #include "core/frame/Settings.h" | 8 #include "core/frame/Settings.h" |
| 9 #include "core/layout/ClipPathOperation.h" | 9 #include "core/layout/ClipPathOperation.h" |
| 10 #include "core/layout/FilterEffectRenderer.h" | 10 #include "core/layout/FilterEffectRenderer.h" |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 return; | 189 return; |
| 190 | 190 |
| 191 // Ensure our lists are up-to-date. | 191 // Ensure our lists are up-to-date. |
| 192 m_renderLayer.stackingNode()->updateLayerListsIfNeeded(); | 192 m_renderLayer.stackingNode()->updateLayerListsIfNeeded(); |
| 193 | 193 |
| 194 LayoutPoint offsetFromRoot; | 194 LayoutPoint offsetFromRoot; |
| 195 m_renderLayer.convertToLayerCoords(paintingInfo.rootLayer, offsetFromRoot); | 195 m_renderLayer.convertToLayerCoords(paintingInfo.rootLayer, offsetFromRoot); |
| 196 | 196 |
| 197 if (m_renderLayer.compositingState() == PaintsIntoOwnBacking) | 197 if (m_renderLayer.compositingState() == PaintsIntoOwnBacking) |
| 198 offsetFromRoot.move(m_renderLayer.subpixelAccumulation()); | 198 offsetFromRoot.move(m_renderLayer.subpixelAccumulation()); |
| 199 else |
| 200 offsetFromRoot.move(paintingInfo.subPixelAccumulation); |
| 199 | 201 |
| 200 LayoutRect rootRelativeBounds; | 202 LayoutRect rootRelativeBounds; |
| 201 bool rootRelativeBoundsComputed = false; | 203 bool rootRelativeBoundsComputed = false; |
| 202 | 204 |
| 203 // These helpers output clip and compositing operations using a RAII pattern
. Stack-allocated-varibles are destructed in the reverse order of construction, | 205 // These helpers output clip and compositing operations using a RAII pattern
. Stack-allocated-varibles are destructed in the reverse order of construction, |
| 204 // so they are nested properly. | 206 // so they are nested properly. |
| 205 ClipPathHelper clipPathHelper(context, m_renderLayer, paintingInfo, rootRela
tiveBounds, rootRelativeBoundsComputed, offsetFromRoot, paintFlags); | 207 ClipPathHelper clipPathHelper(context, m_renderLayer, paintingInfo, rootRela
tiveBounds, rootRelativeBoundsComputed, offsetFromRoot, paintFlags); |
| 206 | 208 |
| 207 OwnPtr<LayerClipRecorder> clipRecorder; | 209 OwnPtr<LayerClipRecorder> clipRecorder; |
| 208 OwnPtr<CompositingRecorder> compositingRecorder; | 210 OwnPtr<CompositingRecorder> compositingRecorder; |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 435 bool LayerPainter::shouldPaintLayerInSoftwareMode(const LayerPaintingInfo& paint
ingInfo, PaintLayerFlags paintFlags) | 437 bool LayerPainter::shouldPaintLayerInSoftwareMode(const LayerPaintingInfo& paint
ingInfo, PaintLayerFlags paintFlags) |
| 436 { | 438 { |
| 437 DisableCompositingQueryAsserts disabler; | 439 DisableCompositingQueryAsserts disabler; |
| 438 | 440 |
| 439 return m_renderLayer.compositingState() == NotComposited | 441 return m_renderLayer.compositingState() == NotComposited |
| 440 || (paintingInfo.paintBehavior & PaintBehaviorFlattenCompositingLayers) | 442 || (paintingInfo.paintBehavior & PaintBehaviorFlattenCompositingLayers) |
| 441 || ((paintFlags & PaintLayerPaintingReflection) && !m_renderLayer.has3DT
ransform()) | 443 || ((paintFlags & PaintLayerPaintingReflection) && !m_renderLayer.has3DT
ransform()) |
| 442 || paintForFixedRootBackground(&m_renderLayer, paintFlags); | 444 || paintForFixedRootBackground(&m_renderLayer, paintFlags); |
| 443 } | 445 } |
| 444 | 446 |
| 445 static inline LayoutSize subPixelAccumulationIfNeeded(const LayoutSize& subPixel
Accumulation, CompositingState compositingState) | |
| 446 { | |
| 447 // Only apply the sub-pixel accumulation if we don't paint into our own back
ing layer, otherwise the position | |
| 448 // of the renderer already includes any sub-pixel offset. | |
| 449 if (compositingState == PaintsIntoOwnBacking) | |
| 450 return LayoutSize(); | |
| 451 return subPixelAccumulation; | |
| 452 } | |
| 453 | |
| 454 void LayerPainter::paintOverflowControlsForFragments(const LayerFragments& layer
Fragments, GraphicsContext* context, const LayerPaintingInfo& localPaintingInfo,
PaintLayerFlags paintFlags) | 447 void LayerPainter::paintOverflowControlsForFragments(const LayerFragments& layer
Fragments, GraphicsContext* context, const LayerPaintingInfo& localPaintingInfo,
PaintLayerFlags paintFlags) |
| 455 { | 448 { |
| 456 for (size_t i = 0; i < layerFragments.size(); ++i) { | 449 for (size_t i = 0; i < layerFragments.size(); ++i) { |
| 457 const LayerFragment& fragment = layerFragments.at(i); | 450 const LayerFragment& fragment = layerFragments.at(i); |
| 458 | 451 |
| 459 ScopeRecorder scopeRecorder(context, *m_renderLayer.renderer()); | 452 ScopeRecorder scopeRecorder(context, *m_renderLayer.renderer()); |
| 460 OwnPtr<LayerClipRecorder> clipRecorder; | 453 OwnPtr<LayerClipRecorder> clipRecorder; |
| 461 | 454 |
| 462 if (needsToClip(localPaintingInfo, fragment.backgroundRect)) { | 455 if (needsToClip(localPaintingInfo, fragment.backgroundRect)) { |
| 463 clipRecorder = adoptPtr(new LayerClipRecorder(m_renderLayer.renderer
(), context, DisplayItem::ClipLayerOverflowControls, fragment.backgroundRect, &l
ocalPaintingInfo, fragment.paginationOffset, paintFlags)); | 456 clipRecorder = adoptPtr(new LayerClipRecorder(m_renderLayer.renderer
(), context, DisplayItem::ClipLayerOverflowControls, fragment.backgroundRect, &l
ocalPaintingInfo, fragment.paginationOffset, paintFlags)); |
| 464 } | 457 } |
| 465 if (LayerScrollableArea* scrollableArea = m_renderLayer.scrollableArea()
) | 458 if (LayerScrollableArea* scrollableArea = m_renderLayer.scrollableArea()
) |
| 466 ScrollableAreaPainter(*scrollableArea).paintOverflowControls(context
, roundedIntPoint(toPoint(fragment.layerBounds.location() - m_renderLayer.layout
BoxLocation() + subPixelAccumulationIfNeeded(localPaintingInfo.subPixelAccumulat
ion, m_renderLayer.compositingState()))), pixelSnappedIntRect(fragment.backgroun
dRect.rect()), true); | 459 ScrollableAreaPainter(*scrollableArea).paintOverflowControls(context
, roundedIntPoint(toPoint(fragment.layerBounds.location() - m_renderLayer.layout
BoxLocation())), pixelSnappedIntRect(fragment.backgroundRect.rect()), true); |
| 467 } | 460 } |
| 468 } | 461 } |
| 469 | 462 |
| 470 static bool checkContainingBlockChainForPagination(LayoutBoxModelObject* rendere
r, LayoutBox* ancestorColumnsRenderer) | 463 static bool checkContainingBlockChainForPagination(LayoutBoxModelObject* rendere
r, LayoutBox* ancestorColumnsRenderer) |
| 471 { | 464 { |
| 472 LayoutView* view = renderer->view(); | 465 LayoutView* view = renderer->view(); |
| 473 LayoutBoxModelObject* prevBlock = renderer; | 466 LayoutBoxModelObject* prevBlock = renderer; |
| 474 LayoutBlock* containingBlock; | 467 LayoutBlock* containingBlock; |
| 475 for (containingBlock = renderer->containingBlock(); | 468 for (containingBlock = renderer->containingBlock(); |
| 476 containingBlock && containingBlock != view && containingBlock != ancesto
rColumnsRenderer; | 469 containingBlock && containingBlock != view && containingBlock != ancesto
rColumnsRenderer; |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 618 break; | 611 break; |
| 619 default: | 612 default: |
| 620 clippingRule = LayerClipRecorder::IncludeSelfForBorderRadius; | 613 clippingRule = LayerClipRecorder::IncludeSelfForBorderRadius; |
| 621 break; | 614 break; |
| 622 } | 615 } |
| 623 | 616 |
| 624 clipRecorder = adoptPtr(new LayerClipRecorder(m_renderLayer.renderer(),
context, clipType, clipRect, &paintingInfo, fragment.paginationOffset, paintFlag
s, clippingRule)); | 617 clipRecorder = adoptPtr(new LayerClipRecorder(m_renderLayer.renderer(),
context, clipType, clipRect, &paintingInfo, fragment.paginationOffset, paintFlag
s, clippingRule)); |
| 625 } | 618 } |
| 626 | 619 |
| 627 PaintInfo paintInfo(context, pixelSnappedIntRect(clipRect.rect()), phase, pa
intBehavior, paintingRootForRenderer, 0, paintingInfo.rootLayer->renderer()); | 620 PaintInfo paintInfo(context, pixelSnappedIntRect(clipRect.rect()), phase, pa
intBehavior, paintingRootForRenderer, 0, paintingInfo.rootLayer->renderer()); |
| 628 m_renderLayer.renderer()->paint(paintInfo, toPoint(fragment.layerBounds.loca
tion() - m_renderLayer.layoutBoxLocation() + subPixelAccumulationIfNeeded(painti
ngInfo.subPixelAccumulation, m_renderLayer.compositingState()))); | 621 m_renderLayer.renderer()->paint(paintInfo, toPoint(fragment.layerBounds.loca
tion() - m_renderLayer.layoutBoxLocation())); |
| 629 } | 622 } |
| 630 | 623 |
| 631 void LayerPainter::paintBackgroundForFragments(const LayerFragments& layerFragme
nts, GraphicsContext* context, | 624 void LayerPainter::paintBackgroundForFragments(const LayerFragments& layerFragme
nts, GraphicsContext* context, |
| 632 const LayoutRect& transparencyPaintDirtyRect, const LayerPaintingInfo& local
PaintingInfo, PaintBehavior paintBehavior, | 625 const LayoutRect& transparencyPaintDirtyRect, const LayerPaintingInfo& local
PaintingInfo, PaintBehavior paintBehavior, |
| 633 LayoutObject* paintingRootForRenderer, PaintLayerFlags paintFlags) | 626 LayoutObject* paintingRootForRenderer, PaintLayerFlags paintFlags) |
| 634 { | 627 { |
| 635 for (const auto& fragment: layerFragments) { | 628 for (const auto& fragment: layerFragments) { |
| 636 ScopeRecorder scopeRecorder(context, *m_renderLayer.renderer()); | 629 ScopeRecorder scopeRecorder(context, *m_renderLayer.renderer()); |
| 637 paintFragmentWithPhase(PaintPhaseBlockBackground, fragment, context, fra
gment.backgroundRect, localPaintingInfo, paintBehavior, paintingRootForRenderer,
paintFlags, HasNotClipped); | 630 paintFragmentWithPhase(PaintPhaseBlockBackground, fragment, context, fra
gment.backgroundRect, localPaintingInfo, paintBehavior, paintingRootForRenderer,
paintFlags, HasNotClipped); |
| 638 } | 631 } |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 708 if (!m_renderLayer.containsDirtyOverlayScrollbars()) | 701 if (!m_renderLayer.containsDirtyOverlayScrollbars()) |
| 709 return; | 702 return; |
| 710 | 703 |
| 711 LayerPaintingInfo paintingInfo(&m_renderLayer, LayoutRect(enclosingIntRect(d
amageRect)), paintBehavior, LayoutSize(), paintingRoot); | 704 LayerPaintingInfo paintingInfo(&m_renderLayer, LayoutRect(enclosingIntRect(d
amageRect)), paintBehavior, LayoutSize(), paintingRoot); |
| 712 paintLayer(context, paintingInfo, PaintLayerPaintingOverlayScrollbars); | 705 paintLayer(context, paintingInfo, PaintLayerPaintingOverlayScrollbars); |
| 713 | 706 |
| 714 m_renderLayer.setContainsDirtyOverlayScrollbars(false); | 707 m_renderLayer.setContainsDirtyOverlayScrollbars(false); |
| 715 } | 708 } |
| 716 | 709 |
| 717 } // namespace blink | 710 } // namespace blink |
| OLD | NEW |