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