Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(135)

Side by Side Diff: third_party/WebKit/Source/core/paint/BoxPainter.cpp

Issue 2600903002: Paint the whole of a table-part background image behind the cells in a table (Closed)
Patch Set: Paint the whole of an image behind the cells in a table Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/core/paint/BackgroundImageGeometry.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 500 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 const PaintInfo& paintInfo, 511 const PaintInfo& paintInfo,
512 const FillLayerInfo& info, 512 const FillLayerInfo& info,
513 const FillLayer& layer, 513 const FillLayer& layer,
514 const LayoutRect& rect, 514 const LayoutRect& rect,
515 BackgroundBleedAvoidance bleedAvoidance, 515 BackgroundBleedAvoidance bleedAvoidance,
516 const InlineFlowBox* box, 516 const InlineFlowBox* box,
517 const LayoutSize& boxSize, 517 const LayoutSize& boxSize,
518 SkBlendMode op, 518 SkBlendMode op,
519 const LayoutObject* backgroundObject, 519 const LayoutObject* backgroundObject,
520 Optional<BackgroundImageGeometry>& geometry) { 520 Optional<BackgroundImageGeometry>& geometry) {
521 // Painting a background image from an ancestor onto a cell is a complex case.
522 if (obj.isTableCell() && backgroundObject && !backgroundObject->isTableCell())
523 return false;
521 // Complex cases not handled on the fast path. 524 // Complex cases not handled on the fast path.
522 if (!info.isBottomLayer || !info.isBorderFill || 525 if (!info.isBottomLayer || !info.isBorderFill ||
523 info.isClippedWithLocalScrolling) 526 info.isClippedWithLocalScrolling)
524 return false; 527 return false;
525 528
526 // Transparent layer, nothing to paint. 529 // Transparent layer, nothing to paint.
527 if (!info.shouldPaintColor && !info.shouldPaintImage) 530 if (!info.shouldPaintColor && !info.shouldPaintImage)
528 return true; 531 return true;
529 532
530 // When the layer has an image, figure out whether it is covered by a single 533 // When the layer has an image, figure out whether it is covered by a single
531 // tile. 534 // tile.
532 FloatRect imageTile; 535 FloatRect imageTile;
533 if (info.shouldPaintImage) { 536 if (info.shouldPaintImage) {
534 DCHECK(!geometry); 537 DCHECK(!geometry);
535 geometry.emplace(); 538 geometry.emplace();
536 geometry->calculate(obj, paintInfo.paintContainer(), 539 geometry->calculate(obj, backgroundObject, paintInfo.paintContainer(),
537 paintInfo.getGlobalPaintFlags(), layer, rect); 540 paintInfo.getGlobalPaintFlags(), layer, rect);
538 541
539 if (!geometry->destRect().isEmpty()) { 542 if (!geometry->destRect().isEmpty()) {
540 // The tile is too small. 543 // The tile is too small.
541 if (geometry->tileSize().width() < rect.width() || 544 if (geometry->tileSize().width() < rect.width() ||
542 geometry->tileSize().height() < rect.height()) 545 geometry->tileSize().height() < rect.height())
543 return false; 546 return false;
544 547
545 imageTile = Image::computeTileContaining( 548 imageTile = Image::computeTileContaining(
546 FloatPoint(geometry->destRect().location()), 549 FloatPoint(geometry->destRect().location()),
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
736 // painting area. 739 // painting area.
737 if (info.isBottomLayer && info.color.alpha() && info.shouldPaintColor) { 740 if (info.isBottomLayer && info.color.alpha() && info.shouldPaintColor) {
738 IntRect backgroundRect(pixelSnappedIntRect(scrolledPaintRect)); 741 IntRect backgroundRect(pixelSnappedIntRect(scrolledPaintRect));
739 context.fillRect(backgroundRect, info.color); 742 context.fillRect(backgroundRect, info.color);
740 } 743 }
741 744
742 // no progressive loading of the background image 745 // no progressive loading of the background image
743 if (info.shouldPaintImage) { 746 if (info.shouldPaintImage) {
744 if (!geometry) { 747 if (!geometry) {
745 geometry.emplace(); 748 geometry.emplace();
746 geometry->calculate(obj, paintInfo.paintContainer(), 749 geometry->calculate(obj, backgroundObject, paintInfo.paintContainer(),
747 paintInfo.getGlobalPaintFlags(), bgLayer, 750 paintInfo.getGlobalPaintFlags(), bgLayer,
748 scrolledPaintRect); 751 scrolledPaintRect);
749 } else { 752 } else {
750 // The geometry was calculated in paintFastBottomLayer(). 753 // The geometry was calculated in paintFastBottomLayer().
751 DCHECK(info.isBottomLayer && info.isBorderFill && 754 DCHECK(info.isBottomLayer && info.isBorderFill &&
752 !info.isClippedWithLocalScrolling); 755 !info.isClippedWithLocalScrolling);
753 } 756 }
754 757
755 if (!geometry->destRect().isEmpty()) { 758 if (!geometry->destRect().isEmpty()) {
756 const ImagePaintContext imageContext(obj, context, bgLayer, *info.image, 759 const ImagePaintContext imageContext(obj, context, bgLayer, *info.image,
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
1079 bool BoxPainter::shouldForceWhiteBackgroundForPrintEconomy( 1082 bool BoxPainter::shouldForceWhiteBackgroundForPrintEconomy(
1080 const ComputedStyle& style, 1083 const ComputedStyle& style,
1081 const Document& document) { 1084 const Document& document) {
1082 return document.printing() && 1085 return document.printing() &&
1083 style.printColorAdjust() == EPrintColorAdjust::kEconomy && 1086 style.printColorAdjust() == EPrintColorAdjust::kEconomy &&
1084 (!document.settings() || 1087 (!document.settings() ||
1085 !document.settings()->getShouldPrintBackgrounds()); 1088 !document.settings()->getShouldPrintBackgrounds());
1086 } 1089 }
1087 1090
1088 } // namespace blink 1091 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/paint/BackgroundImageGeometry.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698