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

Side by Side Diff: Source/core/rendering/RenderLayerBacking.cpp

Issue 20723003: Fix pixel snapping issues when layers become composited (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 5 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009, 2010, 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2009, 2010, 2011 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 return false; 314 return false;
315 315
316 if (layerOrAncestorIsTransformedOrUsingCompositedScrolling(m_owningLayer)) 316 if (layerOrAncestorIsTransformedOrUsingCompositedScrolling(m_owningLayer))
317 return false; 317 return false;
318 318
319 return true; 319 return true;
320 } 320 }
321 321
322 void RenderLayerBacking::updateCompositedBounds() 322 void RenderLayerBacking::updateCompositedBounds()
323 { 323 {
324 IntRect layerBounds = compositor()->calculateCompositedBounds(m_owningLayer, m_owningLayer); 324 LayoutRect layerBounds = compositor()->calculateCompositedBounds(m_owningLay er, m_owningLayer);
325 325
326 // Clip to the size of the document or enclosing overflow-scroll layer. 326 // Clip to the size of the document or enclosing overflow-scroll layer.
327 // If this or an ancestor is transformed, we can't currently compute the cor rect rect to intersect with. 327 // If this or an ancestor is transformed, we can't currently compute the cor rect rect to intersect with.
328 // We'd need RenderObject::convertContainerToLocalQuad(), which doesn't yet exist. 328 // We'd need RenderObject::convertContainerToLocalQuad(), which doesn't yet exist.
329 if (shouldClipCompositedBounds()) { 329 if (shouldClipCompositedBounds()) {
330 RenderView* view = m_owningLayer->renderer()->view(); 330 RenderView* view = m_owningLayer->renderer()->view();
331 RenderLayer* rootLayer = view->layer(); 331 RenderLayer* rootLayer = view->layer();
332 332
333 LayoutRect clippingBounds; 333 LayoutRect clippingBounds;
334 if (renderer()->style()->position() == FixedPosition && renderer()->cont ainer() == view) 334 if (renderer()->style()->position() == FixedPosition && renderer()->cont ainer() == view)
335 clippingBounds = view->frameView()->viewportConstrainedVisibleConten tRect(); 335 clippingBounds = view->frameView()->viewportConstrainedVisibleConten tRect();
336 else 336 else
337 clippingBounds = view->unscaledDocumentRect(); 337 clippingBounds = view->unscaledDocumentRect();
338 338
339 if (m_owningLayer != rootLayer) 339 if (m_owningLayer != rootLayer)
340 clippingBounds.intersect(m_owningLayer->backgroundClipRect(RenderLay er::ClipRectsContext(rootLayer, 0, AbsoluteClipRects)).rect()); // FIXME: Incorr ect for CSS regions. 340 clippingBounds.intersect(m_owningLayer->backgroundClipRect(RenderLay er::ClipRectsContext(rootLayer, 0, AbsoluteClipRects)).rect()); // FIXME: Incorr ect for CSS regions.
341 341
342 LayoutPoint delta; 342 LayoutPoint delta;
343 m_owningLayer->convertToLayerCoords(rootLayer, delta); 343 m_owningLayer->convertToLayerCoords(rootLayer, delta);
344 clippingBounds.move(-delta.x(), -delta.y()); 344 clippingBounds.move(-delta.x(), -delta.y());
345 345
346 layerBounds.intersect(pixelSnappedIntRect(clippingBounds)); 346 layerBounds.intersect(clippingBounds);
347 m_boundsConstrainedByClipping = true; 347 m_boundsConstrainedByClipping = true;
348 } else 348 } else
349 m_boundsConstrainedByClipping = false; 349 m_boundsConstrainedByClipping = false;
350 350
351 // If the element has a transform-origin that has fixed lengths, and the ren derer has zero size, 351 // If the element has a transform-origin that has fixed lengths, and the ren derer has zero size,
352 // then we need to ensure that the compositing layer has non-zero size so th at we can apply 352 // then we need to ensure that the compositing layer has non-zero size so th at we can apply
353 // the transform-origin via the GraphicsLayer anchorPoint (which is expresse d as a fractional value). 353 // the transform-origin via the GraphicsLayer anchorPoint (which is expresse d as a fractional value).
354 if (layerBounds.isEmpty() && hasNonZeroTransformOrigin(renderer())) { 354 if (layerBounds.isEmpty() && hasNonZeroTransformOrigin(renderer())) {
355 layerBounds.setWidth(1); 355 layerBounds.setWidth(1);
356 layerBounds.setHeight(1); 356 layerBounds.setHeight(1);
357 m_artificiallyInflatedBounds = true; 357 m_artificiallyInflatedBounds = true;
358 } else 358 } else
359 m_artificiallyInflatedBounds = false; 359 m_artificiallyInflatedBounds = false;
360 360
361 setCompositedBounds(layerBounds); 361 setCompositedBounds(layerBounds);
362 } 362 }
363 363
364 void RenderLayerBacking::updateAfterWidgetResize() 364 void RenderLayerBacking::updateAfterWidgetResize()
365 { 365 {
366 if (renderer()->isRenderPart()) { 366 if (renderer()->isRenderPart()) {
367 if (RenderLayerCompositor* innerCompositor = RenderLayerCompositor::fram eContentsCompositor(toRenderPart(renderer()))) { 367 if (RenderLayerCompositor* innerCompositor = RenderLayerCompositor::fram eContentsCompositor(toRenderPart(renderer()))) {
368 innerCompositor->frameViewDidChangeSize(); 368 innerCompositor->frameViewDidChangeSize();
369 innerCompositor->frameViewDidChangeLocation(contentsBox().location() ); 369 innerCompositor->frameViewDidChangeLocation(flooredIntPoint(contents Box().location()));
eae 2013/07/26 20:30:51 Don't you need to account for the subpixel accumul
370 } 370 }
371 } 371 }
372 } 372 }
373 373
374 void RenderLayerBacking::updateCompositingReasons() 374 void RenderLayerBacking::updateCompositingReasons()
375 { 375 {
376 // All other layers owned by this backing will have the same compositing rea son 376 // All other layers owned by this backing will have the same compositing rea son
377 // for their lifetime, so they are initialized only when created. 377 // for their lifetime, so they are initialized only when created.
378 m_graphicsLayer->setCompositingReasons(m_owningLayer->compositingReasons()); 378 m_graphicsLayer->setCompositingReasons(m_owningLayer->compositingReasons());
379 } 379 }
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 522
523 RenderLayer* compAncestor = m_owningLayer->ancestorCompositingLayer(); 523 RenderLayer* compAncestor = m_owningLayer->ancestorCompositingLayer();
524 524
525 // We compute everything relative to the enclosing compositing layer. 525 // We compute everything relative to the enclosing compositing layer.
526 IntRect ancestorCompositingBounds; 526 IntRect ancestorCompositingBounds;
527 if (compAncestor) { 527 if (compAncestor) {
528 ASSERT(compAncestor->backing()); 528 ASSERT(compAncestor->backing());
529 ancestorCompositingBounds = pixelSnappedIntRect(compAncestor->backing()- >compositedBounds()); 529 ancestorCompositingBounds = pixelSnappedIntRect(compAncestor->backing()- >compositedBounds());
530 } 530 }
531 531
532 IntRect localCompositingBounds = pixelSnappedIntRect(compositedBounds()); 532 LayoutRect localRawCompositingBounds = compositedBounds();
533 LayoutPoint rawDelta;
534 m_owningLayer->convertToLayerCoords(compAncestor, rawDelta);
535 IntPoint delta = flooredIntPoint(rawDelta);
536 m_subpixelAccumulation = toLayoutSize(rawDelta.fraction());
eae 2013/07/26 20:30:51 Wouldn't it make more sense to have the fraction m
leviw_travelin_and_unemployed 2013/07/26 20:36:21 We certainly can. It makes sense to me to request
537 // Move the bounds by the subpixel accumulation so that it pixel-snaps relat ive to absolute pixels instead of local coordinates.
538 localRawCompositingBounds.move(m_subpixelAccumulation);
533 539
540 IntRect localCompositingBounds = pixelSnappedIntRect(localRawCompositingBoun ds);
eae 2013/07/26 20:30:51 How about moving all of this snapping logic into a
leviw_travelin_and_unemployed 2013/07/26 20:36:21 Sure.
534 IntRect relativeCompositingBounds(localCompositingBounds); 541 IntRect relativeCompositingBounds(localCompositingBounds);
535 IntPoint delta;
536 m_owningLayer->convertToPixelSnappedLayerCoords(compAncestor, delta);
537 relativeCompositingBounds.moveBy(delta); 542 relativeCompositingBounds.moveBy(delta);
538 543
539 IntPoint graphicsLayerParentLocation; 544 IntPoint graphicsLayerParentLocation;
540 if (compAncestor && compAncestor->backing()->hasClippingLayer()) { 545 if (compAncestor && compAncestor->backing()->hasClippingLayer()) {
541 // If the compositing ancestor has a layer to clip children, we parent i n that, and therefore 546 // If the compositing ancestor has a layer to clip children, we parent i n that, and therefore
542 // position relative to it. 547 // position relative to it.
543 IntRect clippingBox = clipBox(toRenderBox(compAncestor->renderer())); 548 IntRect clippingBox = clipBox(toRenderBox(compAncestor->renderer()));
544 graphicsLayerParentLocation = clippingBox.location(); 549 graphicsLayerParentLocation = clippingBox.location();
545 } else if (compAncestor) 550 } else if (compAncestor)
546 graphicsLayerParentLocation = ancestorCompositingBounds.location(); 551 graphicsLayerParentLocation = ancestorCompositingBounds.location();
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
601 m_maskLayer->setNeedsDisplay(); 606 m_maskLayer->setNeedsDisplay();
602 } 607 }
603 m_maskLayer->setPosition(FloatPoint()); 608 m_maskLayer->setPosition(FloatPoint());
604 m_maskLayer->setOffsetFromRenderer(m_graphicsLayer->offsetFromRenderer() ); 609 m_maskLayer->setOffsetFromRenderer(m_graphicsLayer->offsetFromRenderer() );
605 } 610 }
606 611
607 if (m_owningLayer->hasTransform()) { 612 if (m_owningLayer->hasTransform()) {
608 const IntRect borderBox = toRenderBox(renderer())->pixelSnappedBorderBox Rect(); 613 const IntRect borderBox = toRenderBox(renderer())->pixelSnappedBorderBox Rect();
609 614
610 // Get layout bounds in the coords of compAncestor to match relativeComp ositingBounds. 615 // Get layout bounds in the coords of compAncestor to match relativeComp ositingBounds.
611 IntRect layerBounds = IntRect(delta, borderBox.size()); 616 IntRect layerBounds(delta, borderBox.size());
612 617
613 // Update properties that depend on layer dimensions 618 // Update properties that depend on layer dimensions
614 FloatPoint3D transformOrigin = computeTransformOrigin(borderBox); 619 FloatPoint3D transformOrigin = computeTransformOrigin(borderBox);
615 // Compute the anchor point, which is in the center of the renderer box unless transform-origin is set. 620 // Compute the anchor point, which is in the center of the renderer box unless transform-origin is set.
616 FloatPoint3D anchor(relativeCompositingBounds.width() != 0.0f ? ((layer Bounds.x() - relativeCompositingBounds.x()) + transformOrigin.x()) / relativeCom positingBounds.width() : 0.5f, 621 FloatPoint3D anchor(relativeCompositingBounds.width() != 0.0f ? ((layer Bounds.x() - relativeCompositingBounds.x()) + transformOrigin.x()) / relativeCom positingBounds.width() : 0.5f,
617 relativeCompositingBounds.height() != 0.0f ? ((layer Bounds.y() - relativeCompositingBounds.y()) + transformOrigin.y()) / relativeCom positingBounds.height() : 0.5f, 622 relativeCompositingBounds.height() != 0.0f ? ((layer Bounds.y() - relativeCompositingBounds.y()) + transformOrigin.y()) / relativeCom positingBounds.height() : 0.5f,
618 transformOrigin.z()); 623 transformOrigin.z());
619 m_graphicsLayer->setAnchorPoint(anchor); 624 m_graphicsLayer->setAnchorPoint(anchor);
620 625
621 RenderStyle* style = renderer()->style(); 626 RenderStyle* style = renderer()->style();
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 691
687 if (m_scrollingLayer) { 692 if (m_scrollingLayer) {
688 ASSERT(m_scrollingContentsLayer); 693 ASSERT(m_scrollingContentsLayer);
689 RenderBox* renderBox = toRenderBox(renderer()); 694 RenderBox* renderBox = toRenderBox(renderer());
690 IntRect clientBox = enclosingIntRect(renderBox->clientBoxRect()); 695 IntRect clientBox = enclosingIntRect(renderBox->clientBoxRect());
691 // FIXME: We should make RenderBox::clientBoxRect consider scrollbar pla cement. 696 // FIXME: We should make RenderBox::clientBoxRect consider scrollbar pla cement.
692 if (style->shouldPlaceBlockDirectionScrollbarOnLogicalLeft()) 697 if (style->shouldPlaceBlockDirectionScrollbarOnLogicalLeft())
693 clientBox.move(renderBox->verticalScrollbarWidth(), 0); 698 clientBox.move(renderBox->verticalScrollbarWidth(), 0);
694 699
695 IntSize adjustedScrollOffset = m_owningLayer->adjustedScrollOffset(); 700 IntSize adjustedScrollOffset = m_owningLayer->adjustedScrollOffset();
696 m_scrollingLayer->setPosition(FloatPoint(clientBox.location() - localCom positingBounds.location())); 701 m_scrollingLayer->setPosition(FloatPoint(clientBox.location() - localCom positingBounds.location() + roundedIntSize(m_subpixelAccumulation)));
eae 2013/07/26 20:30:51 Why round here?
697 m_scrollingLayer->setSize(clientBox.size()); 702 m_scrollingLayer->setSize(clientBox.size());
698 703
699 IntSize oldScrollingLayerOffset = m_scrollingLayer->offsetFromRenderer() ; 704 IntSize oldScrollingLayerOffset = m_scrollingLayer->offsetFromRenderer() ;
700 m_scrollingLayer->setOffsetFromRenderer(-toIntSize(clientBox.location()) ); 705 m_scrollingLayer->setOffsetFromRenderer(-toIntSize(clientBox.location()) );
701 706
702 bool clientBoxOffsetChanged = oldScrollingLayerOffset != m_scrollingLaye r->offsetFromRenderer(); 707 bool clientBoxOffsetChanged = oldScrollingLayerOffset != m_scrollingLaye r->offsetFromRenderer();
703 708
704 IntSize scrollSize(m_owningLayer->scrollWidth(), m_owningLayer->scrollHe ight()); 709 IntSize scrollSize(m_owningLayer->scrollWidth(), m_owningLayer->scrollHe ight());
705 if (scrollSize != m_scrollingContentsLayer->size() || clientBoxOffsetCha nged) 710 if (scrollSize != m_scrollingContentsLayer->size() || clientBoxOffsetCha nged)
706 m_scrollingContentsLayer->setNeedsDisplay(); 711 m_scrollingContentsLayer->setNeedsDisplay();
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
793 m_graphicsLayer->addChild(m_layerForVerticalScrollbar.get()); 798 m_graphicsLayer->addChild(m_layerForVerticalScrollbar.get());
794 } 799 }
795 if (m_layerForScrollCorner) { 800 if (m_layerForScrollCorner) {
796 m_layerForScrollCorner->removeFromParent(); 801 m_layerForScrollCorner->removeFromParent();
797 m_graphicsLayer->addChild(m_layerForScrollCorner.get()); 802 m_graphicsLayer->addChild(m_layerForScrollCorner.get());
798 } 803 }
799 } 804 }
800 805
801 void RenderLayerBacking::updateContentsRect(bool isSimpleContainer) 806 void RenderLayerBacking::updateContentsRect(bool isSimpleContainer)
802 { 807 {
803 IntRect contentsRect; 808 LayoutRect contentsRect;
804 if (isSimpleContainer && renderer()->hasBackground()) 809 if (isSimpleContainer && renderer()->hasBackground())
805 contentsRect = backgroundBox(); 810 contentsRect = backgroundBox();
806 else 811 else
807 contentsRect = contentsBox(); 812 contentsRect = contentsBox();
808 813
809 m_graphicsLayer->setContentsRect(contentsRect); 814 m_graphicsLayer->setContentsRect(pixelSnappedIntRect(contentsRect));
810 } 815 }
811 816
812 void RenderLayerBacking::updateDrawsContent(bool isSimpleContainer) 817 void RenderLayerBacking::updateDrawsContent(bool isSimpleContainer)
813 { 818 {
814 if (m_scrollingLayer) { 819 if (m_scrollingLayer) {
815 // We don't have to consider overflow controls, because we know that the scrollbars are drawn elsewhere. 820 // We don't have to consider overflow controls, because we know that the scrollbars are drawn elsewhere.
816 // m_graphicsLayer only needs backing store if the non-scrolling parts ( background, outlines, borders, shadows etc) need to paint. 821 // m_graphicsLayer only needs backing store if the non-scrolling parts ( background, outlines, borders, shadows etc) need to paint.
817 // m_scrollingLayer never has backing store. 822 // m_scrollingLayer never has backing store.
818 // m_scrollingContentsLayer only needs backing store if the scrolled con tents need to paint. 823 // m_scrollingContentsLayer only needs backing store if the scrolled con tents need to paint.
819 bool hasNonScrollingPaintedContent = m_owningLayer->hasVisibleContent() && m_owningLayer->hasBoxDecorationsOrBackground(); 824 bool hasNonScrollingPaintedContent = m_owningLayer->hasVisibleContent() && m_owningLayer->hasBoxDecorationsOrBackground();
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
927 scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(m_owning Layer->scrollableArea(), HorizontalScrollbar); 932 scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(m_owning Layer->scrollableArea(), HorizontalScrollbar);
928 if (verticalScrollbarLayerChanged) 933 if (verticalScrollbarLayerChanged)
929 scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(m_owning Layer->scrollableArea(), VerticalScrollbar); 934 scrollingCoordinator->scrollableAreaScrollbarLayerDidChange(m_owning Layer->scrollableArea(), VerticalScrollbar);
930 } 935 }
931 936
932 return horizontalScrollbarLayerChanged || verticalScrollbarLayerChanged || s crollCornerLayerChanged; 937 return horizontalScrollbarLayerChanged || verticalScrollbarLayerChanged || s crollCornerLayerChanged;
933 } 938 }
934 939
935 void RenderLayerBacking::positionOverflowControlsLayers(const IntSize& offsetFro mRoot) 940 void RenderLayerBacking::positionOverflowControlsLayers(const IntSize& offsetFro mRoot)
936 { 941 {
937 IntSize offsetFromRenderer = m_graphicsLayer->offsetFromRenderer(); 942 IntSize offsetFromRenderer = m_graphicsLayer->offsetFromRenderer() - rounded IntSize(m_subpixelAccumulation);
938 if (GraphicsLayer* layer = layerForHorizontalScrollbar()) { 943 if (GraphicsLayer* layer = layerForHorizontalScrollbar()) {
939 Scrollbar* hBar = m_owningLayer->horizontalScrollbar(); 944 Scrollbar* hBar = m_owningLayer->horizontalScrollbar();
940 if (hBar) { 945 if (hBar) {
941 layer->setPosition(hBar->frameRect().location() - offsetFromRoot - o ffsetFromRenderer); 946 layer->setPosition(hBar->frameRect().location() - offsetFromRoot - o ffsetFromRenderer);
942 layer->setSize(hBar->frameRect().size()); 947 layer->setSize(hBar->frameRect().size());
943 if (layer->hasContentsLayer()) 948 if (layer->hasContentsLayer())
944 layer->setContentsRect(IntRect(IntPoint(), hBar->frameRect().siz e())); 949 layer->setContentsRect(IntRect(IntPoint(), hBar->frameRect().siz e()));
945 } 950 }
946 layer->setDrawsContent(hBar && !layer->hasContentsLayer()); 951 layer->setDrawsContent(hBar && !layer->hasContentsLayer());
947 } 952 }
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
1425 float boxHeight = borderBox.height(); 1430 float boxHeight = borderBox.height();
1426 1431
1427 FloatPoint origin; 1432 FloatPoint origin;
1428 origin.setX(floatValueForLength(style->perspectiveOriginX(), boxWidth)); 1433 origin.setX(floatValueForLength(style->perspectiveOriginX(), boxWidth));
1429 origin.setY(floatValueForLength(style->perspectiveOriginY(), boxHeight)); 1434 origin.setY(floatValueForLength(style->perspectiveOriginY(), boxHeight));
1430 1435
1431 return origin; 1436 return origin;
1432 } 1437 }
1433 1438
1434 // Return the offset from the top-left of this compositing layer at which the re nderer's contents are painted. 1439 // Return the offset from the top-left of this compositing layer at which the re nderer's contents are painted.
1435 IntSize RenderLayerBacking::contentOffsetInCompostingLayer() const 1440 LayoutSize RenderLayerBacking::contentOffsetInCompostingLayer() const
1436 { 1441 {
1437 return IntSize(-m_compositedBounds.x(), -m_compositedBounds.y()); 1442 return LayoutSize(-m_compositedBounds.x(), -m_compositedBounds.y());
1438 } 1443 }
1439 1444
1440 IntRect RenderLayerBacking::contentsBox() const 1445 LayoutRect RenderLayerBacking::contentsBox() const
1441 { 1446 {
1442 IntRect contentsBox = contentsRect(renderer()); 1447 LayoutRect contentsBox = contentsRect(renderer());
1443 contentsBox.move(contentOffsetInCompostingLayer()); 1448 contentsBox.move(contentOffsetInCompostingLayer());
1444 return contentsBox; 1449 return contentsBox;
1445 } 1450 }
1446 1451
1447 IntRect RenderLayerBacking::backgroundBox() const 1452 IntRect RenderLayerBacking::backgroundBox() const
1448 { 1453 {
1449 IntRect backgroundBox = backgroundRect(renderer()); 1454 LayoutRect backgroundBox = backgroundRect(renderer());
1450 backgroundBox.move(contentOffsetInCompostingLayer()); 1455 backgroundBox.move(contentOffsetInCompostingLayer());
1451 return backgroundBox; 1456 return pixelSnappedIntRect(backgroundBox);
1452 } 1457 }
1453 1458
1454 GraphicsLayer* RenderLayerBacking::parentForSublayers() const 1459 GraphicsLayer* RenderLayerBacking::parentForSublayers() const
1455 { 1460 {
1456 if (m_scrollingContentsLayer) 1461 if (m_scrollingContentsLayer)
1457 return m_scrollingContentsLayer.get(); 1462 return m_scrollingContentsLayer.get();
1458 1463
1459 return m_childContainmentLayer ? m_childContainmentLayer.get() : m_graphicsL ayer.get(); 1464 return m_childContainmentLayer ? m_childContainmentLayer.get() : m_graphicsL ayer.get();
1460 } 1465 }
1461 1466
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
1565 paintFlags |= RenderLayer::PaintLayerPaintingOverflowContents; 1570 paintFlags |= RenderLayer::PaintLayerPaintingOverflowContents;
1566 if (paintingPhase & GraphicsLayerPaintCompositedScroll) 1571 if (paintingPhase & GraphicsLayerPaintCompositedScroll)
1567 paintFlags |= RenderLayer::PaintLayerPaintingCompositingScrollingPhase; 1572 paintFlags |= RenderLayer::PaintLayerPaintingCompositingScrollingPhase;
1568 1573
1569 if (graphicsLayer == m_backgroundLayer) 1574 if (graphicsLayer == m_backgroundLayer)
1570 paintFlags |= (RenderLayer::PaintLayerPaintingRootBackgroundOnly | Rende rLayer::PaintLayerPaintingCompositingForegroundPhase); // Need PaintLayerPaintin gCompositingForegroundPhase to walk child layers. 1575 paintFlags |= (RenderLayer::PaintLayerPaintingRootBackgroundOnly | Rende rLayer::PaintLayerPaintingCompositingForegroundPhase); // Need PaintLayerPaintin gCompositingForegroundPhase to walk child layers.
1571 else if (compositor()->fixedRootBackgroundLayer()) 1576 else if (compositor()->fixedRootBackgroundLayer())
1572 paintFlags |= RenderLayer::PaintLayerPaintingSkipRootBackground; 1577 paintFlags |= RenderLayer::PaintLayerPaintingSkipRootBackground;
1573 1578
1574 // FIXME: GraphicsLayers need a way to split for RenderRegions. 1579 // FIXME: GraphicsLayers need a way to split for RenderRegions.
1575 RenderLayer::LayerPaintingInfo paintingInfo(m_owningLayer, paintDirtyRect, p aintBehavior, LayoutSize()); 1580 RenderLayer::LayerPaintingInfo paintingInfo(m_owningLayer, paintDirtyRect, p aintBehavior, m_subpixelAccumulation);
1576 m_owningLayer->paintLayerContents(context, paintingInfo, paintFlags); 1581 m_owningLayer->paintLayerContents(context, paintingInfo, paintFlags);
1577 1582
1578 ASSERT(graphicsLayer != m_backgroundLayer || paintFlags & RenderLayer::Paint LayerPaintingRootBackgroundOnly); 1583 ASSERT(graphicsLayer != m_backgroundLayer || paintFlags & RenderLayer::Paint LayerPaintingRootBackgroundOnly);
1579 1584
1580 if (m_owningLayer->containsDirtyOverlayScrollbars()) 1585 if (m_owningLayer->containsDirtyOverlayScrollbars())
1581 m_owningLayer->paintLayerContents(context, paintingInfo, paintFlags | Re nderLayer::PaintLayerPaintingOverlayScrollbars); 1586 m_owningLayer->paintLayerContents(context, paintingInfo, paintFlags | Re nderLayer::PaintLayerPaintingOverlayScrollbars);
1582 1587
1583 ASSERT(!m_owningLayer->m_usedTransparency); 1588 ASSERT(!m_owningLayer->m_usedTransparency);
1584 } 1589 }
1585 1590
(...skipping 21 matching lines...) Expand all
1607 1612
1608 if (graphicsLayer == m_graphicsLayer.get() 1613 if (graphicsLayer == m_graphicsLayer.get()
1609 || graphicsLayer == m_foregroundLayer.get() 1614 || graphicsLayer == m_foregroundLayer.get()
1610 || graphicsLayer == m_backgroundLayer.get() 1615 || graphicsLayer == m_backgroundLayer.get()
1611 || graphicsLayer == m_maskLayer.get() 1616 || graphicsLayer == m_maskLayer.get()
1612 || graphicsLayer == m_scrollingContentsLayer.get()) { 1617 || graphicsLayer == m_scrollingContentsLayer.get()) {
1613 InspectorInstrumentation::willPaint(renderer()); 1618 InspectorInstrumentation::willPaint(renderer());
1614 1619
1615 // The dirtyRect is in the coords of the painting root. 1620 // The dirtyRect is in the coords of the painting root.
1616 IntRect dirtyRect = clip; 1621 IntRect dirtyRect = clip;
1617 if (!(paintingPhase & GraphicsLayerPaintOverflowContents)) 1622 if (!(paintingPhase & GraphicsLayerPaintOverflowContents)) {
1618 dirtyRect.intersect(compositedBounds()); 1623 LayoutRect bounds = compositedBounds();
1624 bounds.move(m_subpixelAccumulation);
1625 dirtyRect.intersect(pixelSnappedIntRect(bounds));
1626 } else {
1627 dirtyRect.move(roundedIntSize(m_subpixelAccumulation));
1628 }
1619 1629
1620 // We have to use the same root as for hit testing, because both methods can compute and cache clipRects. 1630 // We have to use the same root as for hit testing, because both methods can compute and cache clipRects.
1621 paintIntoLayer(graphicsLayer, &context, dirtyRect, PaintBehaviorNormal, paintingPhase); 1631 paintIntoLayer(graphicsLayer, &context, dirtyRect, PaintBehaviorNormal, paintingPhase);
1622 1632
1623 InspectorInstrumentation::didPaint(renderer(), &context, clip); 1633 InspectorInstrumentation::didPaint(renderer(), &context, clip);
1624 } else if (graphicsLayer == layerForHorizontalScrollbar()) { 1634 } else if (graphicsLayer == layerForHorizontalScrollbar()) {
1625 paintScrollbar(m_owningLayer->horizontalScrollbar(), context, clip); 1635 paintScrollbar(m_owningLayer->horizontalScrollbar(), context, clip);
1626 } else if (graphicsLayer == layerForVerticalScrollbar()) { 1636 } else if (graphicsLayer == layerForVerticalScrollbar()) {
1627 paintScrollbar(m_owningLayer->verticalScrollbar(), context, clip); 1637 paintScrollbar(m_owningLayer->verticalScrollbar(), context, clip);
1628 } else if (graphicsLayer == layerForScrollCorner()) { 1638 } else if (graphicsLayer == layerForScrollCorner()) {
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
1805 void RenderLayerBacking::suspendAnimations(double time) 1815 void RenderLayerBacking::suspendAnimations(double time)
1806 { 1816 {
1807 m_graphicsLayer->suspendAnimations(time); 1817 m_graphicsLayer->suspendAnimations(time);
1808 } 1818 }
1809 1819
1810 void RenderLayerBacking::resumeAnimations() 1820 void RenderLayerBacking::resumeAnimations()
1811 { 1821 {
1812 m_graphicsLayer->resumeAnimations(); 1822 m_graphicsLayer->resumeAnimations();
1813 } 1823 }
1814 1824
1815 IntRect RenderLayerBacking::compositedBounds() const 1825 LayoutRect RenderLayerBacking::compositedBounds() const
1816 { 1826 {
1817 return m_compositedBounds; 1827 return m_compositedBounds;
1818 } 1828 }
1819 1829
1820 void RenderLayerBacking::setCompositedBounds(const IntRect& bounds) 1830 void RenderLayerBacking::setCompositedBounds(const LayoutRect& bounds)
1821 { 1831 {
1822 m_compositedBounds = bounds; 1832 m_compositedBounds = bounds;
1823 } 1833 }
1824 1834
1825 CSSPropertyID RenderLayerBacking::graphicsLayerToCSSProperty(AnimatedPropertyID property) 1835 CSSPropertyID RenderLayerBacking::graphicsLayerToCSSProperty(AnimatedPropertyID property)
1826 { 1836 {
1827 CSSPropertyID cssProperty = CSSPropertyInvalid; 1837 CSSPropertyID cssProperty = CSSPropertyInvalid;
1828 switch (property) { 1838 switch (property) {
1829 case AnimatedPropertyWebkitTransform: 1839 case AnimatedPropertyWebkitTransform:
1830 cssProperty = CSSPropertyWebkitTransform; 1840 cssProperty = CSSPropertyWebkitTransform;
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1895 if (m_layerForVerticalScrollbar) 1905 if (m_layerForVerticalScrollbar)
1896 backingMemory += m_layerForVerticalScrollbar->backingStoreMemoryEstimate (); 1906 backingMemory += m_layerForVerticalScrollbar->backingStoreMemoryEstimate ();
1897 1907
1898 if (m_layerForScrollCorner) 1908 if (m_layerForScrollCorner)
1899 backingMemory += m_layerForScrollCorner->backingStoreMemoryEstimate(); 1909 backingMemory += m_layerForScrollCorner->backingStoreMemoryEstimate();
1900 1910
1901 return backingMemory; 1911 return backingMemory;
1902 } 1912 }
1903 1913
1904 } // namespace WebCore 1914 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698