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

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

Issue 2441853002: Plumb preferred raster bounds rather than scale (Closed)
Patch Set: none Created 4 years, 2 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
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 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 return bleedAvoidance == BackgroundBleedClipOnly || 105 return bleedAvoidance == BackgroundBleedClipOnly ||
106 bleedAvoidance == BackgroundBleedClipLayer; 106 bleedAvoidance == BackgroundBleedClipLayer;
107 } 107 }
108 108
109 } // anonymous namespace 109 } // anonymous namespace
110 110
111 // Sets a preferred composited raster scale for box with a background image, 111 // Sets a preferred composited raster scale for box with a background image,
112 // if possible. 112 // if possible.
113 // |srcRect| is the rect, in the space of the source image, to raster. 113 // |srcRect| is the rect, in the space of the source image, to raster.
114 // |destRect| is the rect, in the local layout space of |obj|, to raster. 114 // |destRect| is the rect, in the local layout space of |obj|, to raster.
115 inline void updatePreferredRasterScaleFromImage( 115 inline void updatePreferredRasterBoundsFromImage(
116 const FloatRect srcRect, 116 const FloatRect srcRect,
117 const FloatRect& destRect, 117 const FloatRect& destRect,
118 const LayoutBoxModelObject& obj) { 118 const LayoutBoxModelObject& obj) {
119 if (!RuntimeEnabledFeatures::preferredImageRasterScaleEnabled()) 119 if (!RuntimeEnabledFeatures::preferredImageRasterBoundsEnabled())
120 return; 120 return;
121 // Not yet implemented for SPv2. 121 // Not yet implemented for SPv2.
122 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) 122 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled())
123 return; 123 return;
124 if (destRect.width() == 0.0f || destRect.height() == 0.0f) 124 if (destRect.width() == 0.0f || destRect.height() == 0.0f)
125 return; 125 return;
126 float widthScale = srcRect.width() / destRect.width();
127 float heightScale = srcRect.height() / destRect.height();
128 float rasterScale = std::min(std::min(widthScale, heightScale), 10.0f);
129 if (PaintLayer* paintLayer = obj.layer()) { 126 if (PaintLayer* paintLayer = obj.layer()) {
130 if (paintLayer->compositingState() != PaintsIntoOwnBacking) 127 if (paintLayer->compositingState() != PaintsIntoOwnBacking)
131 return; 128 return;
132 paintLayer->graphicsLayerBacking()->setPreferredRasterScale(rasterScale); 129 // TODO(chrishtr): ensure that this rounding does not ever lose any
130 // precision.
131 paintLayer->graphicsLayerBacking()->setPreferredRasterBounds(
132 roundedIntSize(srcRect.size()));
133 } 133 }
134 } 134 }
135 135
136 inline void clearPreferredRasterScale(const LayoutBox& obj) { 136 inline void clearPreferredRasterBounds(const LayoutBox& obj) {
137 if (!RuntimeEnabledFeatures::preferredImageRasterBoundsEnabled())
138 return;
137 if (PaintLayer* paintLayer = obj.layer()) { 139 if (PaintLayer* paintLayer = obj.layer()) {
138 if (paintLayer->compositingState() != PaintsIntoOwnBacking) 140 if (paintLayer->compositingState() != PaintsIntoOwnBacking)
139 return; 141 return;
140 paintLayer->graphicsLayerBacking()->clearPreferredRasterScale(); 142 paintLayer->graphicsLayerBacking()->clearPreferredRasterBounds();
141 } 143 }
142 } 144 }
143 145
144 void BoxPainter::paintBoxDecorationBackgroundWithRect( 146 void BoxPainter::paintBoxDecorationBackgroundWithRect(
145 const PaintInfo& paintInfo, 147 const PaintInfo& paintInfo,
146 const LayoutPoint& paintOffset, 148 const LayoutPoint& paintOffset,
147 const LayoutRect& paintRect) { 149 const LayoutRect& paintRect) {
148 bool paintingOverflowContents = 150 bool paintingOverflowContents =
149 isPaintingBackgroundOfPaintContainerIntoScrollingContentsLayer( 151 isPaintingBackgroundOfPaintContainerIntoScrollingContentsLayer(
150 &m_layoutBox, paintInfo); 152 &m_layoutBox, paintInfo);
(...skipping 19 matching lines...) Expand all
170 paintingOverflowContents ? static_cast<const DisplayItemClient&>( 172 paintingOverflowContents ? static_cast<const DisplayItemClient&>(
171 *m_layoutBox.layer() 173 *m_layoutBox.layer()
172 ->compositedLayerMapping() 174 ->compositedLayerMapping()
173 ->scrollingContentsLayer()) 175 ->scrollingContentsLayer())
174 : m_layoutBox; 176 : m_layoutBox;
175 if (DrawingRecorder::useCachedDrawingIfPossible( 177 if (DrawingRecorder::useCachedDrawingIfPossible(
176 paintInfo.context, displayItemClient, 178 paintInfo.context, displayItemClient,
177 DisplayItem::kBoxDecorationBackground)) 179 DisplayItem::kBoxDecorationBackground))
178 return; 180 return;
179 181
180 clearPreferredRasterScale(m_layoutBox); 182 clearPreferredRasterBounds(m_layoutBox);
181 183
182 DrawingRecorder recorder( 184 DrawingRecorder recorder(
183 paintInfo.context, displayItemClient, 185 paintInfo.context, displayItemClient,
184 DisplayItem::kBoxDecorationBackground, 186 DisplayItem::kBoxDecorationBackground,
185 FloatRect(boundsForDrawingRecorder(paintInfo, paintOffset))); 187 FloatRect(boundsForDrawingRecorder(paintInfo, paintOffset)));
186 BoxDecorationData boxDecorationData(m_layoutBox); 188 BoxDecorationData boxDecorationData(m_layoutBox);
187 GraphicsContextStateSaver stateSaver(paintInfo.context, false); 189 GraphicsContextStateSaver stateSaver(paintInfo.context, false);
188 190
189 if (!paintingOverflowContents) { 191 if (!paintingOverflowContents) {
190 // FIXME: Should eventually give the theme control over whether the box 192 // FIXME: Should eventually give the theme control over whether the box
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 Image::computeSubsetForTile(imageTile, border.rect(), intrinsicTileSize); 651 Image::computeSubsetForTile(imageTile, border.rect(), intrinsicTileSize);
650 652
651 // The shadow may have been applied with the color fill. 653 // The shadow may have been applied with the color fill.
652 const ShadowContext shadowContext( 654 const ShadowContext shadowContext(
653 context, obj, info.shouldPaintShadow && !info.shouldPaintColor); 655 context, obj, info.shouldPaintShadow && !info.shouldPaintColor);
654 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "PaintImage", 656 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "PaintImage",
655 "data", InspectorPaintImageEvent::data(obj, *info.image)); 657 "data", InspectorPaintImageEvent::data(obj, *info.image));
656 context.drawImageRRect(imageContext.image(), border, srcRect, 658 context.drawImageRRect(imageContext.image(), border, srcRect,
657 imageContext.compositeOp()); 659 imageContext.compositeOp());
658 660
659 updatePreferredRasterScaleFromImage(srcRect, border.rect(), obj); 661 updatePreferredRasterBoundsFromImage(srcRect, border.rect(), obj);
660 662
661 return true; 663 return true;
662 } 664 }
663 665
664 } // anonymous namespace 666 } // anonymous namespace
665 667
666 void BoxPainter::paintFillLayer(const LayoutBoxModelObject& obj, 668 void BoxPainter::paintFillLayer(const LayoutBoxModelObject& obj,
667 const PaintInfo& paintInfo, 669 const PaintInfo& paintInfo,
668 const Color& color, 670 const Color& color,
669 const FillLayer& bgLayer, 671 const FillLayer& bgLayer,
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
1108 bool BoxPainter::shouldForceWhiteBackgroundForPrintEconomy( 1110 bool BoxPainter::shouldForceWhiteBackgroundForPrintEconomy(
1109 const ComputedStyle& style, 1111 const ComputedStyle& style,
1110 const Document& document) { 1112 const Document& document) {
1111 return document.printing() && 1113 return document.printing() &&
1112 style.getPrintColorAdjust() == PrintColorAdjustEconomy && 1114 style.getPrintColorAdjust() == PrintColorAdjustEconomy &&
1113 (!document.settings() || 1115 (!document.settings() ||
1114 !document.settings()->shouldPrintBackgrounds()); 1116 !document.settings()->shouldPrintBackgrounds());
1115 } 1117 }
1116 1118
1117 } // namespace blink 1119 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698