| 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/BoxPainter.h" | 5 #include "core/paint/BoxPainter.h" |
| 6 | 6 |
| 7 #include "core/HTMLNames.h" | 7 #include "core/HTMLNames.h" |
| 8 #include "core/frame/Settings.h" | 8 #include "core/frame/Settings.h" |
| 9 #include "core/html/HTMLFrameOwnerElement.h" | 9 #include "core/html/HTMLFrameOwnerElement.h" |
| 10 #include "core/layout/ImageQualityController.h" | 10 #include "core/layout/ImageQualityController.h" |
| (...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 515 const PaintInfo& paintInfo, | 515 const PaintInfo& paintInfo, |
| 516 const FillLayerInfo& info, | 516 const FillLayerInfo& info, |
| 517 const FillLayer& layer, | 517 const FillLayer& layer, |
| 518 const LayoutRect& rect, | 518 const LayoutRect& rect, |
| 519 BackgroundBleedAvoidance bleedAvoidance, | 519 BackgroundBleedAvoidance bleedAvoidance, |
| 520 const InlineFlowBox* box, | 520 const InlineFlowBox* box, |
| 521 const LayoutSize& boxSize, | 521 const LayoutSize& boxSize, |
| 522 SkBlendMode op, | 522 SkBlendMode op, |
| 523 const LayoutObject* backgroundObject, | 523 const LayoutObject* backgroundObject, |
| 524 Optional<BackgroundImageGeometry>& geometry) { | 524 Optional<BackgroundImageGeometry>& geometry) { |
| 525 // Painting a background image from an ancestor onto a cell is a complex case. |
| 526 if (obj.isTableCell() && backgroundObject && !backgroundObject->isTableCell()) |
| 527 return false; |
| 525 // Complex cases not handled on the fast path. | 528 // Complex cases not handled on the fast path. |
| 526 if (!info.isBottomLayer || !info.isBorderFill || | 529 if (!info.isBottomLayer || !info.isBorderFill || |
| 527 info.isClippedWithLocalScrolling) | 530 info.isClippedWithLocalScrolling) |
| 528 return false; | 531 return false; |
| 529 | 532 |
| 530 // Transparent layer, nothing to paint. | 533 // Transparent layer, nothing to paint. |
| 531 if (!info.shouldPaintColor && !info.shouldPaintImage) | 534 if (!info.shouldPaintColor && !info.shouldPaintImage) |
| 532 return true; | 535 return true; |
| 533 | 536 |
| 534 // When the layer has an image, figure out whether it is covered by a single | 537 // When the layer has an image, figure out whether it is covered by a single |
| 535 // tile. | 538 // tile. |
| 536 FloatRect imageTile; | 539 FloatRect imageTile; |
| 537 if (info.shouldPaintImage) { | 540 if (info.shouldPaintImage) { |
| 538 DCHECK(!geometry); | 541 DCHECK(!geometry); |
| 539 geometry.emplace(); | 542 geometry.emplace(); |
| 540 geometry->calculate(obj, paintInfo.paintContainer(), | 543 geometry->calculate(obj, backgroundObject, paintInfo.paintContainer(), |
| 541 paintInfo.getGlobalPaintFlags(), layer, rect); | 544 paintInfo.getGlobalPaintFlags(), layer, rect); |
| 542 | 545 |
| 543 if (!geometry->destRect().isEmpty()) { | 546 if (!geometry->destRect().isEmpty()) { |
| 544 // The tile is too small. | 547 // The tile is too small. |
| 545 if (geometry->tileSize().width() < rect.width() || | 548 if (geometry->tileSize().width() < rect.width() || |
| 546 geometry->tileSize().height() < rect.height()) | 549 geometry->tileSize().height() < rect.height()) |
| 547 return false; | 550 return false; |
| 548 | 551 |
| 549 imageTile = Image::computeTileContaining( | 552 imageTile = Image::computeTileContaining( |
| 550 FloatPoint(geometry->destRect().location()), | 553 FloatPoint(geometry->destRect().location()), |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 740 // painting area. | 743 // painting area. |
| 741 if (info.isBottomLayer && info.color.alpha() && info.shouldPaintColor) { | 744 if (info.isBottomLayer && info.color.alpha() && info.shouldPaintColor) { |
| 742 IntRect backgroundRect(pixelSnappedIntRect(scrolledPaintRect)); | 745 IntRect backgroundRect(pixelSnappedIntRect(scrolledPaintRect)); |
| 743 context.fillRect(backgroundRect, info.color); | 746 context.fillRect(backgroundRect, info.color); |
| 744 } | 747 } |
| 745 | 748 |
| 746 // no progressive loading of the background image | 749 // no progressive loading of the background image |
| 747 if (info.shouldPaintImage) { | 750 if (info.shouldPaintImage) { |
| 748 if (!geometry) { | 751 if (!geometry) { |
| 749 geometry.emplace(); | 752 geometry.emplace(); |
| 750 geometry->calculate(obj, paintInfo.paintContainer(), | 753 geometry->calculate(obj, backgroundObject, paintInfo.paintContainer(), |
| 751 paintInfo.getGlobalPaintFlags(), bgLayer, | 754 paintInfo.getGlobalPaintFlags(), bgLayer, |
| 752 scrolledPaintRect); | 755 scrolledPaintRect); |
| 753 } else { | 756 } else { |
| 754 // The geometry was calculated in paintFastBottomLayer(). | 757 // The geometry was calculated in paintFastBottomLayer(). |
| 755 DCHECK(info.isBottomLayer && info.isBorderFill && | 758 DCHECK(info.isBottomLayer && info.isBorderFill && |
| 756 !info.isClippedWithLocalScrolling); | 759 !info.isClippedWithLocalScrolling); |
| 757 } | 760 } |
| 758 | 761 |
| 759 if (!geometry->destRect().isEmpty()) { | 762 if (!geometry->destRect().isEmpty()) { |
| 760 const ImagePaintContext imageContext(obj, context, bgLayer, *info.image, | 763 const ImagePaintContext imageContext(obj, context, bgLayer, *info.image, |
| (...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1083 bool BoxPainter::shouldForceWhiteBackgroundForPrintEconomy( | 1086 bool BoxPainter::shouldForceWhiteBackgroundForPrintEconomy( |
| 1084 const ComputedStyle& style, | 1087 const ComputedStyle& style, |
| 1085 const Document& document) { | 1088 const Document& document) { |
| 1086 return document.printing() && | 1089 return document.printing() && |
| 1087 style.printColorAdjust() == EPrintColorAdjust::kEconomy && | 1090 style.printColorAdjust() == EPrintColorAdjust::kEconomy && |
| 1088 (!document.settings() || | 1091 (!document.settings() || |
| 1089 !document.settings()->getShouldPrintBackgrounds()); | 1092 !document.settings()->getShouldPrintBackgrounds()); |
| 1090 } | 1093 } |
| 1091 | 1094 |
| 1092 } // namespace blink | 1095 } // namespace blink |
| OLD | NEW |