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

Side by Side Diff: Source/core/paint/LayerPainter.cpp

Issue 713823005: Factor painting code for filters out of FilterEffectRenderer into FilterPainter. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 1 month 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 | Annotate | Revision Log
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 "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/page/Page.h" 9 #include "core/page/Page.h"
10 #include "core/paint/FilterPainter.h"
10 #include "core/rendering/ClipPathOperation.h" 11 #include "core/rendering/ClipPathOperation.h"
11 #include "core/rendering/FilterEffectRenderer.h" 12 #include "core/rendering/FilterEffectRenderer.h"
12 #include "core/rendering/PaintInfo.h" 13 #include "core/rendering/PaintInfo.h"
13 #include "core/rendering/RenderBlock.h" 14 #include "core/rendering/RenderBlock.h"
14 #include "core/rendering/RenderLayer.h" 15 #include "core/rendering/RenderLayer.h"
15 #include "core/rendering/RenderView.h" 16 #include "core/rendering/RenderView.h"
16 #include "core/rendering/svg/RenderSVGResourceClipper.h" 17 #include "core/rendering/svg/RenderSVGResourceClipper.h"
17 18
18 namespace blink { 19 namespace blink {
19 20
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 if (m_renderLayer.parent()) { 96 if (m_renderLayer.parent()) {
96 ClipRectsContext clipRectsContext(paintingInfo.rootLayer, (paintFlag s & PaintLayerUncachedClipRects) ? UncachedClipRects : PaintingClipRects, Ignore OverlayScrollbarSize); 97 ClipRectsContext clipRectsContext(paintingInfo.rootLayer, (paintFlag s & PaintLayerUncachedClipRects) ? UncachedClipRects : PaintingClipRects, Ignore OverlayScrollbarSize);
97 if (shouldRespectOverflowClip(paintFlags, m_renderLayer.renderer()) == IgnoreOverflowClip) 98 if (shouldRespectOverflowClip(paintFlags, m_renderLayer.renderer()) == IgnoreOverflowClip)
98 clipRectsContext.setIgnoreOverflowClip(); 99 clipRectsContext.setIgnoreOverflowClip();
99 clipRect = m_renderLayer.clipper().backgroundClipRect(clipRectsConte xt); 100 clipRect = m_renderLayer.clipper().backgroundClipRect(clipRectsConte xt);
100 clipRect.intersect(paintingInfo.paintDirtyRect); 101 clipRect.intersect(paintingInfo.paintDirtyRect);
101 102
102 if (needsToClip(paintingInfo, clipRect)) { 103 if (needsToClip(paintingInfo, clipRect)) {
103 clipRecorder = adoptPtr(new ClipRecorder(m_renderLayer.parent(), context, DisplayItem::ClipLayerParent, clipRect)); 104 clipRecorder = adoptPtr(new ClipRecorder(m_renderLayer.parent(), context, DisplayItem::ClipLayerParent, clipRect));
104 105
105 LayerPainter(*m_renderLayer.parent()).applyRoundedRectClips(pain tingInfo, context, clipRect, paintFlags, *clipRecorder); 106 applyRoundedRectClips(*m_renderLayer.parent(), paintingInfo, con text, clipRect, paintFlags, *clipRecorder);
106 } 107 }
107 } 108 }
108 109
109 paintLayerByApplyingTransform(context, paintingInfo, paintFlags); 110 paintLayerByApplyingTransform(context, paintingInfo, paintFlags);
110 111
111 return; 112 return;
112 } 113 }
113 114
114 paintLayerContentsAndReflection(context, paintingInfo, paintFlags); 115 paintLayerContentsAndReflection(context, paintingInfo, paintFlags);
115 } 116 }
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 } 247 }
247 248
248 // Blending operations must be performed only with the nearest ancestor stac king context. 249 // Blending operations must be performed only with the nearest ancestor stac king context.
249 // Note that there is no need to create a transparency layer if we're painti ng the root. 250 // Note that there is no need to create a transparency layer if we're painti ng the root.
250 bool createTransparencyLayerForBlendMode = !m_renderLayer.renderer()->isDocu mentElement() && m_renderLayer.stackingNode()->isStackingContext() && m_renderLa yer.hasNonIsolatedDescendantWithBlendMode(); 251 bool createTransparencyLayerForBlendMode = !m_renderLayer.renderer()->isDocu mentElement() && m_renderLayer.stackingNode()->isStackingContext() && m_renderLa yer.hasNonIsolatedDescendantWithBlendMode();
251 252
252 if (createTransparencyLayerForBlendMode) 253 if (createTransparencyLayerForBlendMode)
253 beginTransparencyLayers(context, paintingInfo.rootLayer, paintingInfo.pa intDirtyRect, paintingInfo.subPixelAccumulation, paintingInfo.paintBehavior); 254 beginTransparencyLayers(context, paintingInfo.rootLayer, paintingInfo.pa intDirtyRect, paintingInfo.subPixelAccumulation, paintingInfo.paintBehavior);
254 255
255 LayerPaintingInfo localPaintingInfo(paintingInfo); 256 LayerPaintingInfo localPaintingInfo(paintingInfo);
256 bool haveFilterEffect = m_renderLayer.filterRenderer() && m_renderLayer.pain tsWithFilters();
257 257
258 LayerFragments layerFragments; 258 LayerFragments layerFragments;
259 if (shouldPaintContent || shouldPaintOutline || isPaintingOverlayScrollbars) { 259 if (shouldPaintContent || shouldPaintOutline || isPaintingOverlayScrollbars) {
260 // Collect the fragments. This will compute the clip rectangles and pain t offsets for each layer fragment. 260 // Collect the fragments. This will compute the clip rectangles and pain t offsets for each layer fragment.
261 m_renderLayer.collectFragments(layerFragments, localPaintingInfo.rootLay er, localPaintingInfo.paintDirtyRect, 261 m_renderLayer.collectFragments(layerFragments, localPaintingInfo.rootLay er, localPaintingInfo.paintDirtyRect,
262 (paintFlags & PaintLayerUncachedClipRects) ? UncachedClipRects : Pai ntingClipRects, IgnoreOverlayScrollbarSize, 262 (paintFlags & PaintLayerUncachedClipRects) ? UncachedClipRects : Pai ntingClipRects, IgnoreOverlayScrollbarSize,
263 shouldRespectOverflowClip(paintFlags, m_renderLayer.renderer()), &of fsetFromRoot, localPaintingInfo.subPixelAccumulation); 263 shouldRespectOverflowClip(paintFlags, m_renderLayer.renderer()), &of fsetFromRoot, localPaintingInfo.subPixelAccumulation);
264 if (shouldPaintContent) 264 if (shouldPaintContent)
265 shouldPaintContent = atLeastOneFragmentIntersectsDamageRect(layerFra gments, localPaintingInfo, paintFlags, offsetFromRoot); 265 shouldPaintContent = atLeastOneFragmentIntersectsDamageRect(layerFra gments, localPaintingInfo, paintFlags, offsetFromRoot);
266 } 266 }
267 267
268 bool selectionOnly = localPaintingInfo.paintBehavior & PaintBehaviorSelecti onOnly; 268 bool selectionOnly = localPaintingInfo.paintBehavior & PaintBehaviorSelecti onOnly;
269 // If this layer's renderer is a child of the paintingRoot, we render uncond itionally, which 269 // If this layer's renderer is a child of the paintingRoot, we render uncond itionally, which
270 // is done by passing a nil paintingRoot down to our renderer (as if no pain tingRoot was ever set). 270 // is done by passing a nil paintingRoot down to our renderer (as if no pain tingRoot was ever set).
271 // Else, our renderer tree may or may not contain the painting root, so we p ass that root along 271 // Else, our renderer tree may or may not contain the painting root, so we p ass that root along
272 // so it will be tested against as we descend through the renderers. 272 // so it will be tested against as we descend through the renderers.
273 RenderObject* paintingRootForRenderer = 0; 273 RenderObject* paintingRootForRenderer = 0;
274 if (localPaintingInfo.paintingRoot && !m_renderLayer.renderer()->isDescendan tOf(localPaintingInfo.paintingRoot)) 274 if (localPaintingInfo.paintingRoot && !m_renderLayer.renderer()->isDescendan tOf(localPaintingInfo.paintingRoot))
275 paintingRootForRenderer = localPaintingInfo.paintingRoot; 275 paintingRootForRenderer = localPaintingInfo.paintingRoot;
276 276
277 { // Begin block for the lifetime of any filter clip. 277 { // Begin block for the lifetime of any filter.
278 OwnPtr<ClipRecorder> clipRecorder; 278 OwnPtr<FilterPainter> filterPainter;
279 if (haveFilterEffect) { 279 if (m_renderLayer.filterRenderer() && m_renderLayer.paintsWithFilters()) {
280 ASSERT(m_renderLayer.filterInfo()); 280 ASSERT(m_renderLayer.filterInfo());
281 281
282 if (!rootRelativeBoundsComputed) 282 if (!rootRelativeBoundsComputed)
283 rootRelativeBounds = m_renderLayer.physicalBoundingBoxIncludingR eflectionAndStackingChildren(paintingInfo.rootLayer, offsetFromRoot); 283 rootRelativeBounds = m_renderLayer.physicalBoundingBoxIncludingR eflectionAndStackingChildren(paintingInfo.rootLayer, offsetFromRoot);
284 284
285 // Do transparency and clipping before starting filter processing. 285 // Do transparency and clipping before starting filter processing.
286 if (haveTransparency) { 286 if (haveTransparency) {
287 // If we have a filter and transparency, we have to eagerly star t a transparency layer here, rather than risk a child layer lazily starts one af ter filter processing. 287 // If we have a filter and transparency, we have to eagerly star t a transparency layer here, rather than risk a child layer lazily starts one af ter filter processing.
288 beginTransparencyLayers(context, localPaintingInfo.rootLayer, pa intingInfo.paintDirtyRect, paintingInfo.subPixelAccumulation, localPaintingInfo. paintBehavior); 288 beginTransparencyLayers(context, localPaintingInfo.rootLayer, pa intingInfo.paintDirtyRect, paintingInfo.subPixelAccumulation, localPaintingInfo. paintBehavior);
289 } 289 }
290 290
291 // We'll handle clipping to the dirty rect before filter rasterizati on. 291 // We'll handle clipping to the dirty rect before filter rasterizati on.
292 // Filter processing will automatically expand the clip rect and the offscreen to accommodate any filter outsets. 292 // Filter processing will automatically expand the clip rect and the offscreen to accommodate any filter outsets.
293 // FIXME: It is incorrect to just clip to the damageRect here once m ultiple fragments are involved. 293 // FIXME: It is incorrect to just clip to the damageRect here once m ultiple fragments are involved.
294 ClipRect backgroundRect = layerFragments.isEmpty() ? ClipRect() : la yerFragments[0].backgroundRect; 294 ClipRect backgroundRect = layerFragments.isEmpty() ? ClipRect() : la yerFragments[0].backgroundRect;
295 295
296 if (needsToClip(localPaintingInfo, backgroundRect)) {
297 clipRecorder = adoptPtr(new ClipRecorder(&m_renderLayer, context , DisplayItem::ClipLayerFilter, backgroundRect));
298 applyRoundedRectClips(localPaintingInfo, context, backgroundRect , paintFlags, *clipRecorder);
299 }
300
301 // Subsequent code should not clip to the dirty rect, since we've al ready 296 // Subsequent code should not clip to the dirty rect, since we've al ready
302 // done it above, and doing it later will defeat the outsets. 297 // done it above, and doing it later will defeat the outsets.
303 localPaintingInfo.clipToDirtyRect = false; 298 localPaintingInfo.clipToDirtyRect = false;
304 haveFilterEffect = m_renderLayer.filterRenderer()->beginFilterEffect (context, rootRelativeBounds); 299 filterPainter = adoptPtr(new FilterPainter(m_renderLayer, context, r ootRelativeBounds, backgroundRect, localPaintingInfo, paintFlags));
305 if (!haveFilterEffect) {
306 // If the the filter failed to start, undo the clip immediately
307 clipRecorder.clear();
308 }
309 } 300 }
310 301
311 ASSERT(!(localPaintingInfo.paintBehavior & PaintBehaviorForceBlackText)) ; 302 ASSERT(!(localPaintingInfo.paintBehavior & PaintBehaviorForceBlackText)) ;
312 303
313 bool shouldPaintBackground = isPaintingCompositedBackground && shouldPai ntContent && !selectionOnly; 304 bool shouldPaintBackground = isPaintingCompositedBackground && shouldPai ntContent && !selectionOnly;
314 bool shouldPaintNegZOrderList = (isPaintingScrollingContent && isPaintin gOverflowContents) || (!isPaintingScrollingContent && isPaintingCompositedBackgr ound); 305 bool shouldPaintNegZOrderList = (isPaintingScrollingContent && isPaintin gOverflowContents) || (!isPaintingScrollingContent && isPaintingCompositedBackgr ound);
315 bool shouldPaintOwnContents = isPaintingCompositedForeground && shouldPa intContent; 306 bool shouldPaintOwnContents = isPaintingCompositedForeground && shouldPa intContent;
316 bool shouldPaintNormalFlowAndPosZOrderLists = isPaintingCompositedForegr ound; 307 bool shouldPaintNormalFlowAndPosZOrderLists = isPaintingCompositedForegr ound;
317 bool shouldPaintOverlayScrollbars = isPaintingOverlayScrollbars; 308 bool shouldPaintOverlayScrollbars = isPaintingOverlayScrollbars;
318 309
(...skipping 17 matching lines...) Expand all
336 } 327 }
337 328
338 if (shouldPaintOutline) 329 if (shouldPaintOutline)
339 paintOutlineForFragments(layerFragments, context, localPaintingInfo, paintBehavior, paintingRootForRenderer, paintFlags); 330 paintOutlineForFragments(layerFragments, context, localPaintingInfo, paintBehavior, paintingRootForRenderer, paintFlags);
340 331
341 if (shouldPaintNormalFlowAndPosZOrderLists) 332 if (shouldPaintNormalFlowAndPosZOrderLists)
342 paintChildren(NormalFlowChildren | PositiveZOrderChildren, context, paintingInfo, paintFlags); 333 paintChildren(NormalFlowChildren | PositiveZOrderChildren, context, paintingInfo, paintFlags);
343 334
344 if (shouldPaintOverlayScrollbars) 335 if (shouldPaintOverlayScrollbars)
345 paintOverflowControlsForFragments(layerFragments, context, localPain tingInfo, paintFlags); 336 paintOverflowControlsForFragments(layerFragments, context, localPain tingInfo, paintFlags);
346
347 if (haveFilterEffect) {
348 // Apply the correct clipping (ie. overflow: hidden).
349 // FIXME: It is incorrect to just clip to the damageRect here once m ultiple fragments are involved.
350 m_renderLayer.filterRenderer()->endFilterEffect(context);
351 }
352 } // Filter clip block 337 } // Filter clip block
353 338
354 bool shouldPaintMask = (paintFlags & PaintLayerPaintingCompositingMaskPhase) && shouldPaintContent && m_renderLayer.renderer()->hasMask() && !selectionOnly; 339 bool shouldPaintMask = (paintFlags & PaintLayerPaintingCompositingMaskPhase) && shouldPaintContent && m_renderLayer.renderer()->hasMask() && !selectionOnly;
355 bool shouldPaintClippingMask = (paintFlags & PaintLayerPaintingChildClipping MaskPhase) && shouldPaintContent && !selectionOnly; 340 bool shouldPaintClippingMask = (paintFlags & PaintLayerPaintingChildClipping MaskPhase) && shouldPaintContent && !selectionOnly;
356 341
357 if (shouldPaintMask) 342 if (shouldPaintMask)
358 paintMaskForFragments(layerFragments, context, localPaintingInfo, painti ngRootForRenderer, paintFlags); 343 paintMaskForFragments(layerFragments, context, localPaintingInfo, painti ngRootForRenderer, paintFlags);
359 344
360 if (shouldPaintClippingMask) { 345 if (shouldPaintClippingMask) {
361 // Paint the border radius mask for the fragments. 346 // Paint the border radius mask for the fragments.
(...skipping 24 matching lines...) Expand all
386 } 371 }
387 372
388 return false; 373 return false;
389 } 374 }
390 375
391 bool LayerPainter::needsToClip(const LayerPaintingInfo& localPaintingInfo, const ClipRect& clipRect) 376 bool LayerPainter::needsToClip(const LayerPaintingInfo& localPaintingInfo, const ClipRect& clipRect)
392 { 377 {
393 return clipRect.rect() != localPaintingInfo.paintDirtyRect || clipRect.hasRa dius(); 378 return clipRect.rect() != localPaintingInfo.paintDirtyRect || clipRect.hasRa dius();
394 } 379 }
395 380
396 void LayerPainter::applyRoundedRectClips(const LayerPaintingInfo& localPaintingI nfo, GraphicsContext* context, const ClipRect& clipRect, 381 void LayerPainter::applyRoundedRectClips(RenderLayer& renderLayer, const LayerPa intingInfo& localPaintingInfo, GraphicsContext* context, const ClipRect& clipRec t,
397 PaintLayerFlags paintFlags, ClipRecorder& clipRecorder, BorderRadiusClipping Rule rule) 382 PaintLayerFlags paintFlags, ClipRecorder& clipRecorder, BorderRadiusClipping Rule rule)
398 { 383 {
399 if (!clipRect.hasRadius()) 384 if (!clipRect.hasRadius())
400 return; 385 return;
401 386
402 // If the clip rect has been tainted by a border radius, then we have to wal k up our layer chain applying the clips from 387 // If the clip rect has been tainted by a border radius, then we have to wal k up our layer chain applying the clips from
403 // any layers with overflow. The condition for being able to apply these cli ps is that the overflow object be in our 388 // any layers with overflow. The condition for being able to apply these cli ps is that the overflow object be in our
404 // containing block chain so we check that also. 389 // containing block chain so we check that also.
405 for (RenderLayer* layer = rule == IncludeSelfForBorderRadius ? &m_renderLaye r : m_renderLayer.parent(); layer; layer = layer->parent()) { 390 for (RenderLayer* layer = rule == IncludeSelfForBorderRadius ? &renderLayer : renderLayer.parent(); layer; layer = layer->parent()) {
406 // Composited scrolling layers handle border-radius clip in the composit or via a mask layer. We do not 391 // Composited scrolling layers handle border-radius clip in the composit or via a mask layer. We do not
407 // want to apply a border-radius clip to the layer contents itself, beca use that would require re-rastering 392 // want to apply a border-radius clip to the layer contents itself, beca use that would require re-rastering
408 // every frame to update the clip. We only want to make sure that the ma sk layer is properly clipped so 393 // every frame to update the clip. We only want to make sure that the ma sk layer is properly clipped so
409 // that it can in turn clip the scrolled contents in the compositor. 394 // that it can in turn clip the scrolled contents in the compositor.
410 if (layer->needsCompositedScrolling() && !(paintFlags & PaintLayerPainti ngChildClippingMaskPhase)) 395 if (layer->needsCompositedScrolling() && !(paintFlags & PaintLayerPainti ngChildClippingMaskPhase))
411 break; 396 break;
412 397
413 if (layer->renderer()->hasOverflowClip() && layer->renderer()->style()-> hasBorderRadius() && inContainingBlockChain(&m_renderLayer, layer)) { 398 if (layer->renderer()->hasOverflowClip() && layer->renderer()->style()-> hasBorderRadius() && inContainingBlockChain(&renderLayer, layer)) {
414 LayoutPoint delta; 399 LayoutPoint delta;
415 layer->convertToLayerCoords(localPaintingInfo.rootLayer, delta); 400 layer->convertToLayerCoords(localPaintingInfo.rootLayer, delta);
416 clipRecorder.addRoundedRectClip(layer->renderer()->style()->getRound edInnerBorderFor(LayoutRect(delta, layer->size()))); 401 clipRecorder.addRoundedRectClip(layer->renderer()->style()->getRound edInnerBorderFor(LayoutRect(delta, layer->size())));
417 } 402 }
418 403
419 if (layer == localPaintingInfo.rootLayer) 404 if (layer == localPaintingInfo.rootLayer)
420 break; 405 break;
421 } 406 }
422 } 407 }
423 408
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 503
519 void LayerPainter::paintOverflowControlsForFragments(const LayerFragments& layer Fragments, GraphicsContext* context, const LayerPaintingInfo& localPaintingInfo, PaintLayerFlags paintFlags) 504 void LayerPainter::paintOverflowControlsForFragments(const LayerFragments& layer Fragments, GraphicsContext* context, const LayerPaintingInfo& localPaintingInfo, PaintLayerFlags paintFlags)
520 { 505 {
521 for (size_t i = 0; i < layerFragments.size(); ++i) { 506 for (size_t i = 0; i < layerFragments.size(); ++i) {
522 const LayerFragment& fragment = layerFragments.at(i); 507 const LayerFragment& fragment = layerFragments.at(i);
523 508
524 OwnPtr<ClipRecorder> clipRecorder; 509 OwnPtr<ClipRecorder> clipRecorder;
525 510
526 if (needsToClip(localPaintingInfo, fragment.backgroundRect)) { 511 if (needsToClip(localPaintingInfo, fragment.backgroundRect)) {
527 clipRecorder = adoptPtr(new ClipRecorder(&m_renderLayer, context, Di splayItem::ClipLayerOverflowControls, fragment.backgroundRect)); 512 clipRecorder = adoptPtr(new ClipRecorder(&m_renderLayer, context, Di splayItem::ClipLayerOverflowControls, fragment.backgroundRect));
528 applyRoundedRectClips(localPaintingInfo, context, fragment.backgroun dRect, paintFlags, *clipRecorder); 513 applyRoundedRectClips(m_renderLayer, localPaintingInfo, context, fra gment.backgroundRect, paintFlags, *clipRecorder);
529 } 514 }
530 if (RenderLayerScrollableArea* scrollableArea = m_renderLayer.scrollable Area()) 515 if (RenderLayerScrollableArea* scrollableArea = m_renderLayer.scrollable Area())
531 scrollableArea->paintOverflowControls(context, roundedIntPoint(toPoi nt(fragment.layerBounds.location() - m_renderLayer.renderBoxLocation() + subPixe lAccumulationIfNeeded(localPaintingInfo.subPixelAccumulation, m_renderLayer.comp ositingState()))), pixelSnappedIntRect(fragment.backgroundRect.rect()), true); 516 scrollableArea->paintOverflowControls(context, roundedIntPoint(toPoi nt(fragment.layerBounds.location() - m_renderLayer.renderBoxLocation() + subPixe lAccumulationIfNeeded(localPaintingInfo.subPixelAccumulation, m_renderLayer.comp ositingState()))), pixelSnappedIntRect(fragment.backgroundRect.rect()), true);
532 } 517 }
533 } 518 }
534 519
535 static bool checkContainingBlockChainForPagination(RenderLayerModelObject* rende rer, RenderBox* ancestorColumnsRenderer) 520 static bool checkContainingBlockChainForPagination(RenderLayerModelObject* rende rer, RenderBox* ancestorColumnsRenderer)
536 { 521 {
537 RenderView* view = renderer->view(); 522 RenderView* view = renderer->view();
538 RenderLayerModelObject* prevBlock = renderer; 523 RenderLayerModelObject* prevBlock = renderer;
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
706 clippingRule = DoNotIncludeSelfForBorderRadius; // Mask painting wil l handle clipping to self. 691 clippingRule = DoNotIncludeSelfForBorderRadius; // Mask painting wil l handle clipping to self.
707 break; 692 break;
708 case PaintPhaseClippingMask: 693 case PaintPhaseClippingMask:
709 clipType = DisplayItem::ClipLayerFragmentClippingMask; 694 clipType = DisplayItem::ClipLayerFragmentClippingMask;
710 break; 695 break;
711 default: 696 default:
712 ASSERT_NOT_REACHED(); 697 ASSERT_NOT_REACHED();
713 } 698 }
714 699
715 clipRecorder = adoptPtr(new ClipRecorder(&m_renderLayer, context, clipTy pe, clipRect)); 700 clipRecorder = adoptPtr(new ClipRecorder(&m_renderLayer, context, clipTy pe, clipRect));
716 applyRoundedRectClips(paintingInfo, context, clipRect, paintFlags, *clip Recorder, clippingRule); 701 applyRoundedRectClips(m_renderLayer, paintingInfo, context, clipRect, pa intFlags, *clipRecorder, clippingRule);
717 } 702 }
718 703
719 PaintInfo paintInfo(context, pixelSnappedIntRect(clipRect.rect()), phase, pa intBehavior, paintingRootForRenderer, 0, paintingInfo.rootLayer->renderer()); 704 PaintInfo paintInfo(context, pixelSnappedIntRect(clipRect.rect()), phase, pa intBehavior, paintingRootForRenderer, 0, paintingInfo.rootLayer->renderer());
720 m_renderLayer.renderer()->paint(paintInfo, toPoint(fragment.layerBounds.loca tion() - m_renderLayer.renderBoxLocation() + subPixelAccumulationIfNeeded(painti ngInfo.subPixelAccumulation, m_renderLayer.compositingState()))); 705 m_renderLayer.renderer()->paint(paintInfo, toPoint(fragment.layerBounds.loca tion() - m_renderLayer.renderBoxLocation() + subPixelAccumulationIfNeeded(painti ngInfo.subPixelAccumulation, m_renderLayer.compositingState())));
721 } 706 }
722 707
723 void LayerPainter::paintBackgroundForFragments(const LayerFragments& layerFragme nts, GraphicsContext* context, 708 void LayerPainter::paintBackgroundForFragments(const LayerFragments& layerFragme nts, GraphicsContext* context,
724 const LayoutRect& transparencyPaintDirtyRect, bool haveTransparency, const L ayerPaintingInfo& localPaintingInfo, PaintBehavior paintBehavior, 709 const LayoutRect& transparencyPaintDirtyRect, bool haveTransparency, const L ayerPaintingInfo& localPaintingInfo, PaintBehavior paintBehavior,
725 RenderObject* paintingRootForRenderer, PaintLayerFlags paintFlags) 710 RenderObject* paintingRootForRenderer, PaintLayerFlags paintFlags)
726 { 711 {
(...skipping 20 matching lines...) Expand all
747 } 732 }
748 } 733 }
749 } 734 }
750 735
751 // Optimize clipping for the single fragment case. 736 // Optimize clipping for the single fragment case.
752 bool shouldClip = localPaintingInfo.clipToDirtyRect && layerFragments.size() == 1 && !layerFragments[0].foregroundRect.isEmpty(); 737 bool shouldClip = localPaintingInfo.clipToDirtyRect && layerFragments.size() == 1 && !layerFragments[0].foregroundRect.isEmpty();
753 ClipState clipState = HasNotClipped; 738 ClipState clipState = HasNotClipped;
754 OwnPtr<ClipRecorder> clipRecorder; 739 OwnPtr<ClipRecorder> clipRecorder;
755 if (shouldClip && needsToClip(localPaintingInfo, layerFragments[0].foregroun dRect)) { 740 if (shouldClip && needsToClip(localPaintingInfo, layerFragments[0].foregroun dRect)) {
756 clipRecorder = adoptPtr(new ClipRecorder(&m_renderLayer, context, Displa yItem::ClipLayerForeground, layerFragments[0].foregroundRect)); 741 clipRecorder = adoptPtr(new ClipRecorder(&m_renderLayer, context, Displa yItem::ClipLayerForeground, layerFragments[0].foregroundRect));
757 applyRoundedRectClips(localPaintingInfo, context, layerFragments[0].fore groundRect, paintFlags, *clipRecorder); 742 applyRoundedRectClips(m_renderLayer, localPaintingInfo, context, layerFr agments[0].foregroundRect, paintFlags, *clipRecorder);
758 clipState = HasClipped; 743 clipState = HasClipped;
759 } 744 }
760 745
761 // We have to loop through every fragment multiple times, since we have to i ssue paint invalidations in each specific phase in order for 746 // We have to loop through every fragment multiple times, since we have to i ssue paint invalidations in each specific phase in order for
762 // interleaving of the fragments to work properly. 747 // interleaving of the fragments to work properly.
763 paintForegroundForFragmentsWithPhase(selectionOnly ? PaintPhaseSelection : P aintPhaseChildBlockBackgrounds, layerFragments, 748 paintForegroundForFragmentsWithPhase(selectionOnly ? PaintPhaseSelection : P aintPhaseChildBlockBackgrounds, layerFragments,
764 context, localPaintingInfo, paintBehavior, paintingRootForRenderer, pain tFlags, clipState); 749 context, localPaintingInfo, paintBehavior, paintingRootForRenderer, pain tFlags, clipState);
765 750
766 if (!selectionOnly) { 751 if (!selectionOnly) {
767 paintForegroundForFragmentsWithPhase(PaintPhaseFloat, layerFragments, co ntext, localPaintingInfo, paintBehavior, paintingRootForRenderer, paintFlags, cl ipState); 752 paintForegroundForFragmentsWithPhase(PaintPhaseFloat, layerFragments, co ntext, localPaintingInfo, paintBehavior, paintingRootForRenderer, paintFlags, cl ipState);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
838 clipRectsContext.setIgnoreOverflowClip(); 823 clipRectsContext.setIgnoreOverflowClip();
839 LayoutRect parentClipRect = m_renderLayer.clipper().backgroundClipRe ct(clipRectsContext).rect(); 824 LayoutRect parentClipRect = m_renderLayer.clipper().backgroundClipRe ct(clipRectsContext).rect();
840 parentClipRect.moveBy(fragment.paginationOffset + offsetOfPagination LayerFromRoot); 825 parentClipRect.moveBy(fragment.paginationOffset + offsetOfPagination LayerFromRoot);
841 clipRect.intersect(parentClipRect); 826 clipRect.intersect(parentClipRect);
842 } 827 }
843 828
844 OwnPtr<ClipRecorder> clipRecorder; 829 OwnPtr<ClipRecorder> clipRecorder;
845 if (needsToClip(paintingInfo, clipRect)) { 830 if (needsToClip(paintingInfo, clipRect)) {
846 clipRecorder = adoptPtr(new ClipRecorder(m_renderLayer.parent(), con text, DisplayItem::ClipLayerFragmentParent, clipRect)); 831 clipRecorder = adoptPtr(new ClipRecorder(m_renderLayer.parent(), con text, DisplayItem::ClipLayerFragmentParent, clipRect));
847 // FIXME: why should we have to deal with rounded rect clips here at all? 832 // FIXME: why should we have to deal with rounded rect clips here at all?
848 LayerPainter(*m_renderLayer.parent()).applyRoundedRectClips(painting Info, context, clipRect, paintFlags, *clipRecorder); 833 applyRoundedRectClips(*m_renderLayer.parent(), paintingInfo, context , clipRect, paintFlags, *clipRecorder);
849 } 834 }
850 835
851 paintLayerByApplyingTransform(context, paintingInfo, paintFlags, fragmen t.paginationOffset); 836 paintLayerByApplyingTransform(context, paintingInfo, paintFlags, fragmen t.paginationOffset);
852 } 837 }
853 } 838 }
854 839
855 } // namespace blink 840 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698