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 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 return FullyPainted; | 96 return FullyPainted; |
97 | 97 |
98 // If this layer is totally invisible then there is nothing to paint. | 98 // If this layer is totally invisible then there is nothing to paint. |
99 if (!m_paintLayer.layoutObject()->opacity() && | 99 if (!m_paintLayer.layoutObject()->opacity() && |
100 !m_paintLayer.layoutObject()->hasBackdropFilter()) | 100 !m_paintLayer.layoutObject()->hasBackdropFilter()) |
101 return FullyPainted; | 101 return FullyPainted; |
102 | 102 |
103 if (m_paintLayer.paintsWithTransparency(paintingInfo.getGlobalPaintFlags())) | 103 if (m_paintLayer.paintsWithTransparency(paintingInfo.getGlobalPaintFlags())) |
104 paintFlags |= PaintLayerHaveTransparency; | 104 paintFlags |= PaintLayerHaveTransparency; |
105 | 105 |
106 // Transforms will be applied by property nodes directly for SPv2. | 106 if (m_paintLayer.paintsWithTransform(paintingInfo.getGlobalPaintFlags()) && |
107 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled() && | |
108 m_paintLayer.paintsWithTransform(paintingInfo.getGlobalPaintFlags()) && | |
109 !(paintFlags & PaintLayerAppliedTransform)) | 107 !(paintFlags & PaintLayerAppliedTransform)) |
110 return paintLayerWithTransform(context, paintingInfo, paintFlags); | 108 return paintLayerWithTransform(context, paintingInfo, paintFlags); |
111 | 109 |
112 return paintLayerContentsCompositingAllPhases(context, paintingInfo, | 110 return paintLayerContentsCompositingAllPhases(context, paintingInfo, |
113 paintFlags); | 111 paintFlags); |
114 } | 112 } |
115 | 113 |
116 PaintLayerPainter::PaintResult | 114 PaintLayerPainter::PaintResult |
117 PaintLayerPainter::paintLayerContentsCompositingAllPhases( | 115 PaintLayerPainter::paintLayerContentsCompositingAllPhases( |
118 GraphicsContext& context, | 116 GraphicsContext& context, |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 | 185 |
188 // Repaint subsequence if the layer is marked for needing repaint. | 186 // Repaint subsequence if the layer is marked for needing repaint. |
189 // We don't set needsResetEmptyPaintPhase here, but clear the empty paint | 187 // We don't set needsResetEmptyPaintPhase here, but clear the empty paint |
190 // phase flags in PaintLayer::setNeedsPaintPhaseXXX(), to ensure that we won't | 188 // phase flags in PaintLayer::setNeedsPaintPhaseXXX(), to ensure that we won't |
191 // clear previousPaintPhaseXXXEmpty flags when unrelated things changed which | 189 // clear previousPaintPhaseXXXEmpty flags when unrelated things changed which |
192 // won't cause the paint phases to become non-empty. | 190 // won't cause the paint phases to become non-empty. |
193 if (paintLayer.needsRepaint()) | 191 if (paintLayer.needsRepaint()) |
194 needsRepaint = true; | 192 needsRepaint = true; |
195 | 193 |
196 // Repaint if layer's clip changes. | 194 // Repaint if layer's clip changes. |
197 ClipRects& clipRects = paintLayer.clipper().paintingClipRects( | 195 // TODO(chrishtr): implement detecting clipping changes in SPv2. |
198 paintingInfo.rootLayer, respectOverflowClip, subpixelAccumulation); | 196 // crbug.com/645667 |
199 ClipRects* previousClipRects = paintLayer.previousPaintingClipRects(); | 197 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
200 if (&clipRects != previousClipRects && | 198 ClipRects& clipRects = paintLayer.clipper().paintingClipRects( |
201 (!previousClipRects || clipRects != *previousClipRects)) { | 199 paintingInfo.rootLayer, respectOverflowClip, subpixelAccumulation); |
202 needsRepaint = true; | 200 ClipRects* previousClipRects = paintLayer.previousPaintingClipRects(); |
203 shouldClearEmptyPaintPhaseFlags = true; | 201 if (&clipRects != previousClipRects && |
| 202 (!previousClipRects || clipRects != *previousClipRects)) { |
| 203 needsRepaint = true; |
| 204 shouldClearEmptyPaintPhaseFlags = true; |
| 205 } |
| 206 paintLayer.setPreviousPaintingClipRects(clipRects); |
204 } | 207 } |
205 paintLayer.setPreviousPaintingClipRects(clipRects); | |
206 | 208 |
207 // Repaint if previously the layer might be clipped by paintDirtyRect and | 209 // Repaint if previously the layer might be clipped by paintDirtyRect and |
208 // paintDirtyRect changes. | 210 // paintDirtyRect changes. |
209 if (paintLayer.previousPaintResult() == | 211 if (paintLayer.previousPaintResult() == |
210 PaintLayerPainter::MayBeClippedByPaintDirtyRect && | 212 PaintLayerPainter::MayBeClippedByPaintDirtyRect && |
211 paintLayer.previousPaintDirtyRect() != paintingInfo.paintDirtyRect) { | 213 paintLayer.previousPaintDirtyRect() != paintingInfo.paintDirtyRect) { |
212 needsRepaint = true; | 214 needsRepaint = true; |
213 shouldClearEmptyPaintPhaseFlags = true; | 215 shouldClearEmptyPaintPhaseFlags = true; |
214 } | 216 } |
215 paintLayer.setPreviousPaintDirtyRect(paintingInfo.paintDirtyRect); | 217 paintLayer.setPreviousPaintDirtyRect(paintingInfo.paintDirtyRect); |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
389 localPaintingInfo.paintDirtyRect, cacheSlot, | 391 localPaintingInfo.paintDirtyRect, cacheSlot, |
390 IgnoreOverlayScrollbarSize, respectOverflowClip, &offsetFromRoot, | 392 IgnoreOverlayScrollbarSize, respectOverflowClip, &offsetFromRoot, |
391 localPaintingInfo.subPixelAccumulation); | 393 localPaintingInfo.subPixelAccumulation); |
392 else | 394 else |
393 m_paintLayer.collectFragments(layerFragments, localPaintingInfo.rootLayer, | 395 m_paintLayer.collectFragments(layerFragments, localPaintingInfo.rootLayer, |
394 localPaintingInfo.paintDirtyRect, cacheSlot, | 396 localPaintingInfo.paintDirtyRect, cacheSlot, |
395 IgnoreOverlayScrollbarSize, | 397 IgnoreOverlayScrollbarSize, |
396 respectOverflowClip, &offsetFromRoot, | 398 respectOverflowClip, &offsetFromRoot, |
397 localPaintingInfo.subPixelAccumulation); | 399 localPaintingInfo.subPixelAccumulation); |
398 | 400 |
399 // TODO(trchen): Needs to adjust cull rect between transform spaces. | |
400 // https://crbug.com/593596 | |
401 // Disables layer culling for SPv2 for now because the space of the cull | |
402 // rect doesn't match the space we paint in. Clipping will still be done by | |
403 // clip nodes, so this won't cause rendering issues, only performance. | |
404 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | |
405 layerFragments[0].backgroundRect = | |
406 LayoutRect(LayoutRect::infiniteIntRect()); | |
407 layerFragments[0].foregroundRect = | |
408 LayoutRect(LayoutRect::infiniteIntRect()); | |
409 } | |
410 | |
411 if (shouldPaintContent) { | 401 if (shouldPaintContent) { |
412 // TODO(wangxianzhu): This is for old slow scrolling. Implement similar | 402 // TODO(wangxianzhu): This is for old slow scrolling. Implement similar |
413 // optimization for slimming paint v2. | 403 // optimization for slimming paint v2. |
414 shouldPaintContent = atLeastOneFragmentIntersectsDamageRect( | 404 shouldPaintContent = atLeastOneFragmentIntersectsDamageRect( |
415 layerFragments, localPaintingInfo, paintFlags, offsetFromRoot); | 405 layerFragments, localPaintingInfo, paintFlags, offsetFromRoot); |
416 if (!shouldPaintContent) | 406 if (!shouldPaintContent) |
417 result = MayBeClippedByPaintDirtyRect; | 407 result = MayBeClippedByPaintDirtyRect; |
418 } | 408 } |
419 } | 409 } |
420 | 410 |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
557 newOffsetFromRoot)) | 547 newOffsetFromRoot)) |
558 return true; | 548 return true; |
559 } | 549 } |
560 return false; | 550 return false; |
561 } | 551 } |
562 | 552 |
563 PaintLayerPainter::PaintResult PaintLayerPainter::paintLayerWithTransform( | 553 PaintLayerPainter::PaintResult PaintLayerPainter::paintLayerWithTransform( |
564 GraphicsContext& context, | 554 GraphicsContext& context, |
565 const PaintLayerPaintingInfo& paintingInfo, | 555 const PaintLayerPaintingInfo& paintingInfo, |
566 PaintLayerFlags paintFlags) { | 556 PaintLayerFlags paintFlags) { |
567 // Transforms will be applied by property nodes directly for SPv2. | |
568 ASSERT(!RuntimeEnabledFeatures::slimmingPaintV2Enabled()); | |
569 | |
570 TransformationMatrix layerTransform = | 557 TransformationMatrix layerTransform = |
571 m_paintLayer.renderableTransform(paintingInfo.getGlobalPaintFlags()); | 558 m_paintLayer.renderableTransform(paintingInfo.getGlobalPaintFlags()); |
572 // If the transform can't be inverted, then don't paint anything. | 559 // If the transform can't be inverted, then don't paint anything. |
573 if (!layerTransform.isInvertible()) | 560 if (!layerTransform.isInvertible()) |
574 return FullyPainted; | 561 return FullyPainted; |
575 | 562 |
576 // FIXME: We should make sure that we don't walk past paintingInfo.rootLayer | 563 // FIXME: We should make sure that we don't walk past paintingInfo.rootLayer |
577 // here. m_paintLayer may be the "root", and then we should avoid looking at | 564 // here. m_paintLayer may be the "root", and then we should avoid looking at |
578 // its parent. | 565 // its parent. |
579 PaintLayer* parentLayer = m_paintLayer.parent(); | 566 PaintLayer* parentLayer = m_paintLayer.parent(); |
580 | 567 |
581 ClipRect ancestorBackgroundClipRect; | |
582 if (parentLayer) { | |
583 // Calculate the clip rectangle that the ancestors establish. | |
584 ClipRectsContext clipRectsContext(paintingInfo.rootLayer, | |
585 (paintFlags & PaintLayerUncachedClipRects) | |
586 ? UncachedClipRects | |
587 : PaintingClipRects, | |
588 IgnoreOverlayScrollbarSize); | |
589 if (shouldRespectOverflowClip(paintFlags, m_paintLayer.layoutObject()) == | |
590 IgnoreOverflowClip) | |
591 clipRectsContext.setIgnoreOverflowClip(); | |
592 ancestorBackgroundClipRect = | |
593 m_paintLayer.clipper().backgroundClipRect(clipRectsContext); | |
594 } | |
595 | |
596 LayoutObject* object = m_paintLayer.layoutObject(); | 568 LayoutObject* object = m_paintLayer.layoutObject(); |
597 LayoutView* view = object->view(); | 569 LayoutView* view = object->view(); |
598 bool isFixedPosObjectInPagedMedia = | 570 bool isFixedPosObjectInPagedMedia = |
599 object->style()->position() == FixedPosition && | 571 object->style()->position() == FixedPosition && |
600 object->container() == view && view->pageLogicalHeight(); | 572 object->container() == view && view->pageLogicalHeight(); |
601 PaintLayer* paginationLayer = m_paintLayer.enclosingPaginationLayer(); | 573 PaintLayer* paginationLayer = m_paintLayer.enclosingPaginationLayer(); |
602 PaintLayerFragments fragments; | 574 PaintLayerFragments fragments; |
603 // TODO(crbug.com/619094): Figure out the correct behaviour for fixed position | 575 // TODO(crbug.com/619094): Figure out the correct behaviour for fixed position |
604 // objects in paged media with vertical writing modes. | 576 // objects in paged media with vertical writing modes. |
605 if (isFixedPosObjectInPagedMedia && view->isHorizontalWritingMode()) { | 577 if (isFixedPosObjectInPagedMedia && view->isHorizontalWritingMode()) { |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
643 // path, when the transform has been applied. | 615 // path, when the transform has been applied. |
644 PaintLayerFragment fragment; | 616 PaintLayerFragment fragment; |
645 fragment.backgroundRect = paintingInfo.paintDirtyRect; | 617 fragment.backgroundRect = paintingInfo.paintDirtyRect; |
646 fragments.append(fragment); | 618 fragments.append(fragment); |
647 } | 619 } |
648 | 620 |
649 Optional<DisplayItemCacheSkipper> cacheSkipper; | 621 Optional<DisplayItemCacheSkipper> cacheSkipper; |
650 if (fragments.size() > 1) | 622 if (fragments.size() > 1) |
651 cacheSkipper.emplace(context); | 623 cacheSkipper.emplace(context); |
652 | 624 |
| 625 ClipRect ancestorBackgroundClipRect; |
| 626 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
| 627 if (parentLayer) { |
| 628 // Calculate the clip rectangle that the ancestors establish. |
| 629 ClipRectsContext clipRectsContext( |
| 630 paintingInfo.rootLayer, |
| 631 (paintFlags & PaintLayerUncachedClipRects) ? UncachedClipRects |
| 632 : PaintingClipRects, |
| 633 IgnoreOverlayScrollbarSize); |
| 634 if (shouldRespectOverflowClip(paintFlags, m_paintLayer.layoutObject()) == |
| 635 IgnoreOverflowClip) |
| 636 clipRectsContext.setIgnoreOverflowClip(); |
| 637 ancestorBackgroundClipRect = |
| 638 m_paintLayer.clipper().backgroundClipRect(clipRectsContext); |
| 639 } |
| 640 } |
| 641 |
653 PaintResult result = FullyPainted; | 642 PaintResult result = FullyPainted; |
654 for (const auto& fragment : fragments) { | 643 for (const auto& fragment : fragments) { |
655 Optional<LayerClipRecorder> clipRecorder; | 644 Optional<LayerClipRecorder> clipRecorder; |
656 if (parentLayer) { | 645 if (parentLayer && !RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
657 ClipRect clipRectForFragment(ancestorBackgroundClipRect); | 646 ClipRect clipRectForFragment(ancestorBackgroundClipRect); |
658 // A fixed-position object is repeated on every page, but if it is clipped | 647 // A fixed-position object is repeated on every page, but if it is clipped |
659 // by an ancestor layer then the repetitions are clipped out. | 648 // by an ancestor layer then the repetitions are clipped out. |
660 if (!isFixedPosObjectInPagedMedia) | 649 if (!isFixedPosObjectInPagedMedia) |
661 clipRectForFragment.moveBy(fragment.paginationOffset); | 650 clipRectForFragment.moveBy(fragment.paginationOffset); |
662 clipRectForFragment.intersect(fragment.backgroundRect); | 651 clipRectForFragment.intersect(fragment.backgroundRect); |
663 if (clipRectForFragment.isEmpty()) | 652 if (clipRectForFragment.isEmpty()) |
664 continue; | 653 continue; |
665 if (needsToClip(paintingInfo, clipRectForFragment)) { | 654 if (needsToClip(paintingInfo, clipRectForFragment)) { |
666 if (m_paintLayer.layoutObject()->isPositioned() && | 655 if (m_paintLayer.layoutObject()->isPositioned() && |
(...skipping 16 matching lines...) Expand all Loading... |
683 } | 672 } |
684 return result; | 673 return result; |
685 } | 674 } |
686 | 675 |
687 PaintLayerPainter::PaintResult | 676 PaintLayerPainter::PaintResult |
688 PaintLayerPainter::paintFragmentByApplyingTransform( | 677 PaintLayerPainter::paintFragmentByApplyingTransform( |
689 GraphicsContext& context, | 678 GraphicsContext& context, |
690 const PaintLayerPaintingInfo& paintingInfo, | 679 const PaintLayerPaintingInfo& paintingInfo, |
691 PaintLayerFlags paintFlags, | 680 PaintLayerFlags paintFlags, |
692 const LayoutPoint& fragmentTranslation) { | 681 const LayoutPoint& fragmentTranslation) { |
693 // Transforms will be applied by property nodes directly for SPv2. | |
694 ASSERT(!RuntimeEnabledFeatures::slimmingPaintV2Enabled()); | |
695 | |
696 // This involves subtracting out the position of the layer in our current | 682 // This involves subtracting out the position of the layer in our current |
697 // coordinate space, but preserving the accumulated error for sub-pixel | 683 // coordinate space, but preserving the accumulated error for sub-pixel |
698 // layout. | 684 // layout. |
699 LayoutPoint delta; | 685 LayoutPoint delta; |
700 m_paintLayer.convertToLayerCoords(paintingInfo.rootLayer, delta); | 686 m_paintLayer.convertToLayerCoords(paintingInfo.rootLayer, delta); |
701 delta.moveBy(fragmentTranslation); | 687 delta.moveBy(fragmentTranslation); |
702 TransformationMatrix transform( | 688 TransformationMatrix transform( |
703 m_paintLayer.renderableTransform(paintingInfo.getGlobalPaintFlags())); | 689 m_paintLayer.renderableTransform(paintingInfo.getGlobalPaintFlags())); |
704 IntPoint roundedDelta = roundedIntPoint(delta); | 690 IntPoint roundedDelta = roundedIntPoint(delta); |
705 transform.translateRight(roundedDelta.x(), roundedDelta.y()); | 691 transform.translateRight(roundedDelta.x(), roundedDelta.y()); |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
804 Optional<DisplayItemCacheSkipper> cacheSkipper; | 790 Optional<DisplayItemCacheSkipper> cacheSkipper; |
805 if (layerFragments.size() > 1) | 791 if (layerFragments.size() > 1) |
806 cacheSkipper.emplace(context); | 792 cacheSkipper.emplace(context); |
807 | 793 |
808 for (auto& fragment : layerFragments) { | 794 for (auto& fragment : layerFragments) { |
809 // We need to apply the same clips and transforms that | 795 // We need to apply the same clips and transforms that |
810 // paintFragmentWithPhase would have. | 796 // paintFragmentWithPhase would have. |
811 LayoutRect cullRect = fragment.backgroundRect.rect(); | 797 LayoutRect cullRect = fragment.backgroundRect.rect(); |
812 | 798 |
813 Optional<LayerClipRecorder> clipRecorder; | 799 Optional<LayerClipRecorder> clipRecorder; |
814 if (needsToClip(localPaintingInfo, fragment.backgroundRect)) | 800 if (needsToClip(localPaintingInfo, fragment.backgroundRect)) { |
815 clipRecorder.emplace(context, *m_paintLayer.layoutObject(), | 801 clipRecorder.emplace(context, *m_paintLayer.layoutObject(), |
816 DisplayItem::kClipLayerOverflowControls, | 802 DisplayItem::kClipLayerOverflowControls, |
817 fragment.backgroundRect, &localPaintingInfo, | 803 fragment.backgroundRect, &localPaintingInfo, |
818 fragment.paginationOffset, paintFlags); | 804 fragment.paginationOffset, paintFlags); |
| 805 } |
819 | 806 |
820 Optional<ScrollRecorder> scrollRecorder; | 807 Optional<ScrollRecorder> scrollRecorder; |
821 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled() && | 808 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled() && |
822 !localPaintingInfo.scrollOffsetAccumulation.isZero()) { | 809 !localPaintingInfo.scrollOffsetAccumulation.isZero()) { |
823 cullRect.move(localPaintingInfo.scrollOffsetAccumulation); | 810 cullRect.move(localPaintingInfo.scrollOffsetAccumulation); |
824 scrollRecorder.emplace(context, *m_paintLayer.layoutObject(), | 811 scrollRecorder.emplace(context, *m_paintLayer.layoutObject(), |
825 DisplayItem::kScrollOverflowControls, | 812 DisplayItem::kScrollOverflowControls, |
826 localPaintingInfo.scrollOffsetAccumulation); | 813 localPaintingInfo.scrollOffsetAccumulation); |
827 } | 814 } |
828 | 815 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
871 LayoutRect newCullRect(clipRect.rect()); | 858 LayoutRect newCullRect(clipRect.rect()); |
872 Optional<ScrollRecorder> scrollRecorder; | 859 Optional<ScrollRecorder> scrollRecorder; |
873 LayoutPoint paintOffset = -m_paintLayer.layoutBoxLocation(); | 860 LayoutPoint paintOffset = -m_paintLayer.layoutBoxLocation(); |
874 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | 861 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
875 const ObjectPaintProperties* objectPaintProperties = | 862 const ObjectPaintProperties* objectPaintProperties = |
876 m_paintLayer.layoutObject()->objectPaintProperties(); | 863 m_paintLayer.layoutObject()->objectPaintProperties(); |
877 ASSERT(objectPaintProperties && | 864 ASSERT(objectPaintProperties && |
878 objectPaintProperties->localBorderBoxProperties()); | 865 objectPaintProperties->localBorderBoxProperties()); |
879 paintOffset += | 866 paintOffset += |
880 toSize(objectPaintProperties->localBorderBoxProperties()->paintOffset); | 867 toSize(objectPaintProperties->localBorderBoxProperties()->paintOffset); |
| 868 newCullRect.move(paintingInfo.scrollOffsetAccumulation); |
881 } else { | 869 } else { |
882 paintOffset += toSize(fragment.layerBounds.location()); | 870 paintOffset += toSize(fragment.layerBounds.location()); |
883 if (!paintingInfo.scrollOffsetAccumulation.isZero()) { | 871 if (!paintingInfo.scrollOffsetAccumulation.isZero()) { |
884 // As a descendant of the root layer, m_paintLayer's painting is not | 872 // As a descendant of the root layer, m_paintLayer's painting is not |
885 // controlled by the ScrollRecorders created by BlockPainter of the | 873 // controlled by the ScrollRecorders created by BlockPainter of the |
886 // ancestor layers up to the root layer, so we need to issue | 874 // ancestor layers up to the root layer, so we need to issue |
887 // ScrollRecorder for this layer seperately, with the scroll offset | 875 // ScrollRecorder for this layer seperately, with the scroll offset |
888 // accumulated from the root layer to the parent of this layer, to get the | 876 // accumulated from the root layer to the parent of this layer, to get the |
889 // same result as ScrollRecorder in BlockPainter. | 877 // same result as ScrollRecorder in BlockPainter. |
890 paintOffset += paintingInfo.scrollOffsetAccumulation; | 878 paintOffset += paintingInfo.scrollOffsetAccumulation; |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1076 | 1064 |
1077 PaintLayerPaintingInfo paintingInfo(&m_paintLayer, | 1065 PaintLayerPaintingInfo paintingInfo(&m_paintLayer, |
1078 LayoutRect(enclosingIntRect(damageRect)), | 1066 LayoutRect(enclosingIntRect(damageRect)), |
1079 paintFlags, LayoutSize()); | 1067 paintFlags, LayoutSize()); |
1080 paintLayer(context, paintingInfo, PaintLayerPaintingOverlayScrollbars); | 1068 paintLayer(context, paintingInfo, PaintLayerPaintingOverlayScrollbars); |
1081 | 1069 |
1082 m_paintLayer.setContainsDirtyOverlayScrollbars(false); | 1070 m_paintLayer.setContainsDirtyOverlayScrollbars(false); |
1083 } | 1071 } |
1084 | 1072 |
1085 } // namespace blink | 1073 } // namespace blink |
OLD | NEW |