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

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

Issue 22419002: Set up clip and scroll parents on the blink side. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 4 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 22 matching lines...) Expand all
33 #include "core/html/HTMLIFrameElement.h" 33 #include "core/html/HTMLIFrameElement.h"
34 #include "core/html/HTMLMediaElement.h" 34 #include "core/html/HTMLMediaElement.h"
35 #include "core/html/canvas/CanvasRenderingContext.h" 35 #include "core/html/canvas/CanvasRenderingContext.h"
36 #include "core/inspector/InspectorInstrumentation.h" 36 #include "core/inspector/InspectorInstrumentation.h"
37 #include "core/loader/cache/CachedImage.h" 37 #include "core/loader/cache/CachedImage.h"
38 #include "core/page/Chrome.h" 38 #include "core/page/Chrome.h"
39 #include "core/page/FrameView.h" 39 #include "core/page/FrameView.h"
40 #include "core/page/Settings.h" 40 #include "core/page/Settings.h"
41 #include "core/page/animation/AnimationController.h" 41 #include "core/page/animation/AnimationController.h"
42 #include "core/page/scrolling/ScrollingCoordinator.h" 42 #include "core/page/scrolling/ScrollingCoordinator.h"
43 #include "core/platform/chromium/TraceEvent.h"
43 #include "core/platform/graphics/FontCache.h" 44 #include "core/platform/graphics/FontCache.h"
44 #include "core/platform/graphics/GraphicsContext.h" 45 #include "core/platform/graphics/GraphicsContext.h"
45 #include "core/platform/graphics/GraphicsLayer.h" 46 #include "core/platform/graphics/GraphicsLayer.h"
46 #include "core/plugins/PluginView.h" 47 #include "core/plugins/PluginView.h"
47 #include "core/rendering/RenderApplet.h" 48 #include "core/rendering/RenderApplet.h"
48 #include "core/rendering/RenderEmbeddedObject.h" 49 #include "core/rendering/RenderEmbeddedObject.h"
49 #include "core/rendering/RenderIFrame.h" 50 #include "core/rendering/RenderIFrame.h"
50 #include "core/rendering/RenderImage.h" 51 #include "core/rendering/RenderImage.h"
51 #include "core/rendering/RenderLayer.h" 52 #include "core/rendering/RenderLayer.h"
52 #include "core/rendering/RenderLayerCompositor.h" 53 #include "core/rendering/RenderLayerCompositor.h"
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 if (page && frame && page->mainFrame() == frame) { 165 if (page && frame && page->mainFrame() == frame) {
165 m_isMainFrameRenderViewLayer = true; 166 m_isMainFrameRenderViewLayer = true;
166 } 167 }
167 } 168 }
168 169
169 createPrimaryGraphicsLayer(); 170 createPrimaryGraphicsLayer();
170 } 171 }
171 172
172 RenderLayerBacking::~RenderLayerBacking() 173 RenderLayerBacking::~RenderLayerBacking()
173 { 174 {
174 updateClippingLayers(false, false); 175 updateClippingLayers(false, false, false);
175 updateOverflowControlsLayers(false, false, false); 176 updateOverflowControlsLayers(false, false, false);
176 updateForegroundLayer(false); 177 updateForegroundLayer(false);
177 updateBackgroundLayer(false); 178 updateBackgroundLayer(false);
178 updateMaskLayer(false); 179 updateMaskLayer(false);
179 updateScrollingLayers(false); 180 updateScrollingLayers(false);
180 destroyGraphicsLayers(); 181 destroyGraphicsLayers();
181 } 182 }
182 183
183 PassOwnPtr<GraphicsLayer> RenderLayerBacking::createGraphicsLayer(const String& name, CompositingReasons reasons) 184 PassOwnPtr<GraphicsLayer> RenderLayerBacking::createGraphicsLayer(const String& name, CompositingReasons reasons)
184 { 185 {
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 423
423 if (updateForegroundLayer(compositor->needsContentsCompositingLayer(m_owning Layer))) 424 if (updateForegroundLayer(compositor->needsContentsCompositingLayer(m_owning Layer)))
424 layerConfigChanged = true; 425 layerConfigChanged = true;
425 426
426 bool needsDescendentsClippingLayer = compositor->clipsCompositingDescendants (m_owningLayer); 427 bool needsDescendentsClippingLayer = compositor->clipsCompositingDescendants (m_owningLayer);
427 428
428 // Our scrolling layer will clip. 429 // Our scrolling layer will clip.
429 if (m_owningLayer->needsCompositedScrolling()) 430 if (m_owningLayer->needsCompositedScrolling())
430 needsDescendentsClippingLayer = false; 431 needsDescendentsClippingLayer = false;
431 432
432 if (updateClippingLayers(compositor->clippedByAncestor(m_owningLayer), needs DescendentsClippingLayer)) 433 bool needsAncestorClip = compositor->clippedByAncestor(m_owningLayer);
434 bool needsScrollClip = compositor->clippedByScrollingAncestor(m_owningLayer) ;
435 if (updateClippingLayers(needsAncestorClip, needsDescendentsClippingLayer, n eedsScrollClip))
433 layerConfigChanged = true; 436 layerConfigChanged = true;
434 437
435 if (updateOverflowControlsLayers(requiresHorizontalScrollbarLayer(), require sVerticalScrollbarLayer(), requiresScrollCornerLayer())) 438 if (updateOverflowControlsLayers(requiresHorizontalScrollbarLayer(), require sVerticalScrollbarLayer(), requiresScrollCornerLayer()))
436 layerConfigChanged = true; 439 layerConfigChanged = true;
437 440
438 if (updateScrollingLayers(m_owningLayer->needsCompositedScrolling())) 441 if (updateScrollingLayers(m_owningLayer->needsCompositedScrolling()))
439 layerConfigChanged = true; 442 layerConfigChanged = true;
440 443
444 updateScrollParent();
445
446 // If the clip we want to ignore is established by a stacking sibling, it wo n't affect us.
447 // We've already made sure that we don't get a troublesome m_ancestorClippin gLayer in this case.
448 if (!needsAncestorClip)
449 updateClipParent();
450
441 if (layerConfigChanged) 451 if (layerConfigChanged)
442 updateInternalHierarchy(); 452 updateInternalHierarchy();
443 453
444 if (updateMaskLayer(renderer->hasMask())) 454 if (updateMaskLayer(renderer->hasMask()))
445 m_graphicsLayer->setMaskLayer(m_maskLayer.get()); 455 m_graphicsLayer->setMaskLayer(m_maskLayer.get());
446 456
447 if (m_owningLayer->hasReflection()) { 457 if (m_owningLayer->hasReflection()) {
448 if (m_owningLayer->reflectionLayer()->backing()) { 458 if (m_owningLayer->reflectionLayer()->backing()) {
449 GraphicsLayer* reflectionLayer = m_owningLayer->reflectionLayer()->b acking()->graphicsLayer(); 459 GraphicsLayer* reflectionLayer = m_owningLayer->reflectionLayer()->b acking()->graphicsLayer();
450 m_graphicsLayer->setReplicatedByLayer(reflectionLayer); 460 m_graphicsLayer->setReplicatedByLayer(reflectionLayer);
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 else 557 else
548 graphicsLayerParentLocation = renderer()->view()->documentRect().locatio n(); 558 graphicsLayerParentLocation = renderer()->view()->documentRect().locatio n();
549 559
550 if (compAncestor && compAncestor->needsCompositedScrolling()) { 560 if (compAncestor && compAncestor->needsCompositedScrolling()) {
551 RenderBox* renderBox = toRenderBox(compAncestor->renderer()); 561 RenderBox* renderBox = toRenderBox(compAncestor->renderer());
552 IntSize scrollOffset = compAncestor->scrolledContentOffset(); 562 IntSize scrollOffset = compAncestor->scrolledContentOffset();
553 IntPoint scrollOrigin(renderBox->borderLeft(), renderBox->borderTop()); 563 IntPoint scrollOrigin(renderBox->borderLeft(), renderBox->borderTop());
554 graphicsLayerParentLocation = scrollOrigin - scrollOffset; 564 graphicsLayerParentLocation = scrollOrigin - scrollOffset;
555 } 565 }
556 566
567 RenderLayer* scrollAncestor = 0;
568 if (compAncestor && m_ancestorScrollClippingLayer) {
569 scrollAncestor = m_owningLayer->ancestorScrollingLayer();
570 ASSERT(scrollAncestor);
571 RenderLayer::ClipRectsContext clipRectsContext(compAncestor, 0, Temporar yClipRects, IgnoreOverlayScrollbarSize, IgnoreOverflowClip, scrollAncestor);
572 IntRect parentClipRect = pixelSnappedIntRect(m_owningLayer->backgroundCl ipRect(clipRectsContext).rect()); // FIXME: Incorrect for CSS regions.
573 ASSERT(parentClipRect != PaintInfo::infiniteRect());
574
575 m_ancestorScrollClippingLayer->setPosition(FloatPoint(parentClipRect.loc ation() - graphicsLayerParentLocation));
576 m_ancestorScrollClippingLayer->setSize(parentClipRect.size());
577
578 // backgroundRect is relative to compAncestor, so subtract deltaX/deltaY to get back to local coords.
579 m_ancestorScrollClippingLayer->setOffsetFromRenderer(parentClipRect.loca tion() - delta);
580
581 graphicsLayerParentLocation = parentClipRect.location();
582 }
583
557 if (compAncestor && m_ancestorClippingLayer) { 584 if (compAncestor && m_ancestorClippingLayer) {
558 // Call calculateRects to get the backgroundRect which is what is used t o clip the contents of this 585 // Call calculateRects to get the backgroundRect which is what is used t o clip the contents of this
559 // layer. Note that we call it with temporaryClipRects = true because no rmally when computing clip rects 586 // layer. Note that we call it with temporaryClipRects = true because no rmally when computing clip rects
560 // for a compositing layer, rootLayer is the layer itself. 587 // for a compositing layer, rootLayer is the layer itself. Also note tha t if we have an ancestor clipping
561 RenderLayer::ClipRectsContext clipRectsContext(compAncestor, 0, Temporar yClipRects, IgnoreOverlayScrollbarSize, IgnoreOverflowClip); 588 // layer, then we have a scroll parent. As such, we consider ourself unc lipped with respect to that
589 // scroll parent -- it's as if we are contained within a large, unclippe d scrolling layer that moves
590 // beneath the clip established by our scroll parent. If we did not do t his, we would be completely
591 // clipped and ignored when we slid outside our scroll parent's clip, pr eventing us from being
592 // prepainted, etc.
593 RenderLayer* clipRoot = compAncestor;
594 IntPoint scrollToCompAncestorOffset;
595 IntPoint compToScrollAncestorOffset;
596 if (m_ancestorScrollClippingLayer) {
597 ASSERT(m_owningLayer->renderer()->containingBlock()->enclosingLayer( ) != scrollAncestor);
598 ASSERT(scrollAncestor && scrollAncestor->hasAncestor(compAncestor));
599 clipRoot = scrollAncestor;
600 scrollAncestor->convertToPixelSnappedLayerCoords(compAncestor, compT oScrollAncestorOffset);
601 scrollToCompAncestorOffset = -compToScrollAncestorOffset;
602 }
603
604 RenderLayer::ClipRectsContext clipRectsContext(clipRoot, 0, TemporaryCli pRects, IgnoreOverlayScrollbarSize, IgnoreOverflowClip);
562 IntRect parentClipRect = pixelSnappedIntRect(m_owningLayer->backgroundCl ipRect(clipRectsContext).rect()); // FIXME: Incorrect for CSS regions. 605 IntRect parentClipRect = pixelSnappedIntRect(m_owningLayer->backgroundCl ipRect(clipRectsContext).rect()); // FIXME: Incorrect for CSS regions.
606
563 ASSERT(parentClipRect != PaintInfo::infiniteRect()); 607 ASSERT(parentClipRect != PaintInfo::infiniteRect());
564 m_ancestorClippingLayer->setPosition(FloatPoint(parentClipRect.location( ) - graphicsLayerParentLocation)); 608
609 // If we have an ancestor scroll clipping layer, then our clip rects wil l already be in our scroll
610 // parent's space (it would be the clip root), so there is no need to ad just the position of the
611 // ancestor clip's graphics layer. Otherwise, our clip is with respect t o compAncestor, so we must
612 // adjust here.
613 IntPoint positionOffset;
614 if (!m_ancestorScrollClippingLayer)
615 positionOffset = graphicsLayerParentLocation;
616
617 m_ancestorClippingLayer->setPosition(FloatPoint(parentClipRect.location( ) - positionOffset));
565 m_ancestorClippingLayer->setSize(parentClipRect.size()); 618 m_ancestorClippingLayer->setSize(parentClipRect.size());
566 619
567 // backgroundRect is relative to compAncestor, so subtract deltaX/deltaY to get back to local coords. 620 // backgroundRect is relative to clipRoot, so subtract deltaX/deltaY and the scrollToCompAncestorOffset to get back to local coords.
568 m_ancestorClippingLayer->setOffsetFromRenderer(parentClipRect.location() - delta); 621 IntPoint clipToLocalOffset = delta + scrollToCompAncestorOffset;
622 m_ancestorClippingLayer->setOffsetFromRenderer(parentClipRect.location() - clipToLocalOffset);
569 623
570 // The primary layer is then parented in, and positioned relative to thi s clipping layer. 624 // The primary layer is then parented in, and positioned relative to thi s clipping layer.
571 graphicsLayerParentLocation = parentClipRect.location(); 625 graphicsLayerParentLocation = parentClipRect.location() + compToScrollAn cestorOffset;
572 } 626 }
573 627
574 FloatSize contentsSize = relativeCompositingBounds.size(); 628 FloatSize contentsSize = relativeCompositingBounds.size();
575 629
576 m_graphicsLayer->setPosition(FloatPoint(relativeCompositingBounds.location() - graphicsLayerParentLocation)); 630 m_graphicsLayer->setPosition(FloatPoint(relativeCompositingBounds.location() - graphicsLayerParentLocation));
577 m_graphicsLayer->setOffsetFromRenderer(toIntSize(localCompositingBounds.loca tion())); 631 m_graphicsLayer->setOffsetFromRenderer(toIntSize(localCompositingBounds.loca tion()));
578 632
579 FloatSize oldSize = m_graphicsLayer->size(); 633 FloatSize oldSize = m_graphicsLayer->size();
580 if (oldSize != contentsSize) { 634 if (oldSize != contentsSize) {
581 m_graphicsLayer->setSize(contentsSize); 635 m_graphicsLayer->setSize(contentsSize);
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
753 807
754 // Page scale is applied as a transform on the root render view layer. Becau se the scroll 808 // Page scale is applied as a transform on the root render view layer. Becau se the scroll
755 // layer is further up in the hierarchy, we need to avoid marking the root r ender view 809 // layer is further up in the hierarchy, we need to avoid marking the root r ender view
756 // layer as a container. 810 // layer as a container.
757 bool isContainer = m_owningLayer->hasTransform() && !m_owningLayer->isRootLa yer(); 811 bool isContainer = m_owningLayer->hasTransform() && !m_owningLayer->isRootLa yer();
758 scrollingCoordinator->setLayerIsContainerForFixedPositionLayers(childForSupe rlayers(), isContainer); 812 scrollingCoordinator->setLayerIsContainerForFixedPositionLayers(childForSupe rlayers(), isContainer);
759 } 813 }
760 814
761 void RenderLayerBacking::updateInternalHierarchy() 815 void RenderLayerBacking::updateInternalHierarchy()
762 { 816 {
817 if (m_ancestorScrollClippingLayer)
818 m_ancestorScrollClippingLayer->removeAllChildren();
819
763 // m_foregroundLayer has to be inserted in the correct order with child laye rs, 820 // m_foregroundLayer has to be inserted in the correct order with child laye rs,
764 // so it's not inserted here. 821 // so it's not inserted here.
765 if (m_ancestorClippingLayer) 822 if (m_ancestorClippingLayer)
766 m_ancestorClippingLayer->removeAllChildren(); 823 m_ancestorClippingLayer->removeAllChildren();
767 824
768 m_graphicsLayer->removeFromParent(); 825 m_graphicsLayer->removeFromParent();
769 826
770 if (m_ancestorClippingLayer) 827 if (m_ancestorClippingLayer)
771 m_ancestorClippingLayer->addChild(m_graphicsLayer.get()); 828 m_ancestorClippingLayer->addChild(m_graphicsLayer.get());
772 829
830 if (m_ancestorScrollClippingLayer) {
831 if (m_ancestorClippingLayer)
832 m_ancestorScrollClippingLayer->addChild(m_ancestorClippingLayer.get( ));
833 else
834 m_ancestorScrollClippingLayer->addChild(m_graphicsLayer.get());
835 }
836
773 if (m_childContainmentLayer) { 837 if (m_childContainmentLayer) {
774 m_childContainmentLayer->removeFromParent(); 838 m_childContainmentLayer->removeFromParent();
775 m_graphicsLayer->addChild(m_childContainmentLayer.get()); 839 m_graphicsLayer->addChild(m_childContainmentLayer.get());
776 } 840 }
777 841
778 if (m_scrollingLayer) { 842 if (m_scrollingLayer) {
779 GraphicsLayer* superlayer = m_childContainmentLayer ? m_childContainment Layer.get() : m_graphicsLayer.get(); 843 GraphicsLayer* superlayer = m_childContainmentLayer ? m_childContainment Layer.get() : m_graphicsLayer.get();
780 m_scrollingLayer->removeFromParent(); 844 m_scrollingLayer->removeFromParent();
781 superlayer->addChild(m_scrollingLayer.get()); 845 superlayer->addChild(m_scrollingLayer.get());
782 } 846 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 // FIXME: we could refine this to only allocate backing for one of these lay ers if possible. 906 // FIXME: we could refine this to only allocate backing for one of these lay ers if possible.
843 m_graphicsLayer->setDrawsContent(hasPaintedContent); 907 m_graphicsLayer->setDrawsContent(hasPaintedContent);
844 if (m_foregroundLayer) 908 if (m_foregroundLayer)
845 m_foregroundLayer->setDrawsContent(hasPaintedContent); 909 m_foregroundLayer->setDrawsContent(hasPaintedContent);
846 910
847 if (m_backgroundLayer) 911 if (m_backgroundLayer)
848 m_backgroundLayer->setDrawsContent(hasPaintedContent); 912 m_backgroundLayer->setDrawsContent(hasPaintedContent);
849 } 913 }
850 914
851 // Return true if the layers changed. 915 // Return true if the layers changed.
852 bool RenderLayerBacking::updateClippingLayers(bool needsAncestorClip, bool needs DescendantClip) 916 bool RenderLayerBacking::updateClippingLayers(bool needsAncestorClip, bool needs DescendantClip, bool needsScrollClip)
853 { 917 {
918 TRACE_EVENT_INSTANT2(
919 "comp-scroll",
920 "RenderLayerBacking::updateClippingLayers",
921 "needsAncestorClip", needsAncestorClip,
922 "needsScrollClip", needsScrollClip);
923
854 bool layersChanged = false; 924 bool layersChanged = false;
855 925
856 if (needsAncestorClip) { 926 if (needsAncestorClip) {
857 if (!m_ancestorClippingLayer) { 927 if (!m_ancestorClippingLayer) {
858 m_ancestorClippingLayer = createGraphicsLayer("Ancestor clipping Lay er", CompositingReasonLayerForClip); 928 m_ancestorClippingLayer = createGraphicsLayer("Ancestor clipping Lay er", CompositingReasonLayerForClip);
859 m_ancestorClippingLayer->setMasksToBounds(true); 929 m_ancestorClippingLayer->setMasksToBounds(true);
860 layersChanged = true; 930 layersChanged = true;
861 } 931 }
862 } else if (m_ancestorClippingLayer) { 932 } else if (m_ancestorClippingLayer) {
863 m_ancestorClippingLayer->removeFromParent(); 933 m_ancestorClippingLayer->removeFromParent();
864 m_ancestorClippingLayer = nullptr; 934 m_ancestorClippingLayer = nullptr;
865 layersChanged = true; 935 layersChanged = true;
866 } 936 }
867 937
868 if (needsDescendantClip) { 938 if (needsDescendantClip) {
869 // We don't need a child containment layer if we're the main frame rende r view 939 // We don't need a child containment layer if we're the main frame rende r view
870 // layer. It's redundant as the frame clip above us will handle this cli pping. 940 // layer. It's redundant as the frame clip above us will handle this cli pping.
871 if (!m_childContainmentLayer && !m_isMainFrameRenderViewLayer) { 941 if (!m_childContainmentLayer && !m_isMainFrameRenderViewLayer) {
872 m_childContainmentLayer = createGraphicsLayer("Child clipping Layer" , CompositingReasonLayerForClip); 942 m_childContainmentLayer = createGraphicsLayer("Child clipping Layer" , CompositingReasonLayerForClip);
873 m_childContainmentLayer->setMasksToBounds(true); 943 m_childContainmentLayer->setMasksToBounds(true);
874 layersChanged = true; 944 layersChanged = true;
875 } 945 }
876 } else if (hasClippingLayer()) { 946 } else if (hasClippingLayer()) {
877 m_childContainmentLayer->removeFromParent(); 947 m_childContainmentLayer->removeFromParent();
878 m_childContainmentLayer = nullptr; 948 m_childContainmentLayer = nullptr;
879 layersChanged = true; 949 layersChanged = true;
880 } 950 }
881 951
952 if (needsScrollClip) {
953 if (!m_ancestorScrollClippingLayer) {
954 m_ancestorScrollClippingLayer = createGraphicsLayer("Ancestor scroll clipping Layer", CompositingReasonLayerForClip);
955 m_ancestorScrollClippingLayer->setMasksToBounds(true);
956 layersChanged = true;
957 }
958 } else if (m_ancestorScrollClippingLayer) {
959 m_ancestorScrollClippingLayer->removeFromParent();
960 m_ancestorScrollClippingLayer = nullptr;
961 layersChanged = true;
962 }
963
882 return layersChanged; 964 return layersChanged;
883 } 965 }
884 966
885 void RenderLayerBacking::setBackgroundLayerPaintsFixedRootBackground(bool backgr oundLayerPaintsFixedRootBackground) 967 void RenderLayerBacking::setBackgroundLayerPaintsFixedRootBackground(bool backgr oundLayerPaintsFixedRootBackground)
886 { 968 {
887 m_backgroundLayerPaintsFixedRootBackground = backgroundLayerPaintsFixedRootB ackground; 969 m_backgroundLayerPaintsFixedRootBackground = backgroundLayerPaintsFixedRootB ackground;
888 } 970 }
889 971
890 bool RenderLayerBacking::updateOverflowControlsLayers(bool needsHorizontalScroll barLayer, bool needsVerticalScrollbarLayer, bool needsScrollCornerLayer) 972 bool RenderLayerBacking::updateOverflowControlsLayers(bool needsHorizontalScroll barLayer, bool needsVerticalScrollbarLayer, bool needsScrollCornerLayer)
891 { 973 {
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
1102 updateInternalHierarchy(); 1184 updateInternalHierarchy();
1103 m_graphicsLayer->setPaintingPhase(paintingPhaseForPrimaryLayer()); 1185 m_graphicsLayer->setPaintingPhase(paintingPhaseForPrimaryLayer());
1104 m_graphicsLayer->setNeedsDisplay(); 1186 m_graphicsLayer->setNeedsDisplay();
1105 if (renderer()->view()) 1187 if (renderer()->view())
1106 compositor()->scrollingLayerDidChange(m_owningLayer); 1188 compositor()->scrollingLayerDidChange(m_owningLayer);
1107 } 1189 }
1108 1190
1109 return layerChanged; 1191 return layerChanged;
1110 } 1192 }
1111 1193
1194 void RenderLayerBacking::updateScrollParent()
1195 {
1196 ScrollingCoordinator* scrollingCoordinator = scrollingCoordinatorFromLayer(m _owningLayer);
1197 if (!scrollingCoordinator)
1198 return;
1199
1200 RenderLayer* scrollParent = 0;
1201 if (m_owningLayer->compositingReasons() & CompositingReasonOverflowScrolling Parent)
1202 scrollParent = m_owningLayer->ancestorScrollingLayer();
1203
1204 scrollingCoordinator->updateScrollParentForLayer(m_owningLayer, scrollParent );
1205 }
1206
1207 void RenderLayerBacking::updateClipParent()
1208 {
1209 ScrollingCoordinator* scrollingCoordinator = scrollingCoordinatorFromLayer(m _owningLayer);
1210 if (!scrollingCoordinator)
1211 return;
1212
1213 RenderLayer* clipParent = 0;
1214 if (m_owningLayer->compositingReasons() & CompositingReasonOutOfFlowClipping ) {
1215 if (RenderObject* containingBlock = m_owningLayer->renderer()->containin gBlock())
1216 clipParent = containingBlock->enclosingLayer()->enclosingCompositing Layer(true);
1217 }
1218
1219 scrollingCoordinator->updateClipParentForLayer(m_owningLayer, clipParent);
1220 }
1221
1112 GraphicsLayerPaintingPhase RenderLayerBacking::paintingPhaseForPrimaryLayer() co nst 1222 GraphicsLayerPaintingPhase RenderLayerBacking::paintingPhaseForPrimaryLayer() co nst
1113 { 1223 {
1114 unsigned phase = 0; 1224 unsigned phase = 0;
1115 if (!m_backgroundLayer) 1225 if (!m_backgroundLayer)
1116 phase |= GraphicsLayerPaintBackground; 1226 phase |= GraphicsLayerPaintBackground;
1117 if (!m_foregroundLayer) 1227 if (!m_foregroundLayer)
1118 phase |= GraphicsLayerPaintForeground; 1228 phase |= GraphicsLayerPaintForeground;
1119 if (!m_maskLayer) 1229 if (!m_maskLayer)
1120 phase |= GraphicsLayerPaintMask; 1230 phase |= GraphicsLayerPaintMask;
1121 1231
1122 if (m_scrollingContentsLayer) { 1232 if (m_scrollingContentsLayer) {
1123 phase &= ~GraphicsLayerPaintForeground; 1233 phase &= ~GraphicsLayerPaintForeground;
1124 phase |= GraphicsLayerPaintCompositedScroll; 1234 phase |= GraphicsLayerPaintCompositedScroll;
1125 } 1235 }
1126 1236
1237 if (m_owningLayer->compositingReasons() & CompositingReasonOverflowScrolling Parent)
1238 phase |= GraphicsLayerPaintCompositedScroll;
1239
1127 return static_cast<GraphicsLayerPaintingPhase>(phase); 1240 return static_cast<GraphicsLayerPaintingPhase>(phase);
1128 } 1241 }
1129 1242
1130 float RenderLayerBacking::compositingOpacity(float rendererOpacity) const 1243 float RenderLayerBacking::compositingOpacity(float rendererOpacity) const
1131 { 1244 {
1132 float finalOpacity = rendererOpacity; 1245 float finalOpacity = rendererOpacity;
1133 1246
1134 for (RenderLayer* curr = m_owningLayer->parent(); curr; curr = curr->parent( )) { 1247 for (RenderLayer* curr = m_owningLayer->parent(); curr; curr = curr->parent( )) {
1135 // We only care about parents that are stacking contexts. 1248 // We only care about parents that are stacking contexts.
1136 // Recall that opacity creates stacking context. 1249 // Recall that opacity creates stacking context.
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
1454 GraphicsLayer* RenderLayerBacking::parentForSublayers() const 1567 GraphicsLayer* RenderLayerBacking::parentForSublayers() const
1455 { 1568 {
1456 if (m_scrollingContentsLayer) 1569 if (m_scrollingContentsLayer)
1457 return m_scrollingContentsLayer.get(); 1570 return m_scrollingContentsLayer.get();
1458 1571
1459 return m_childContainmentLayer ? m_childContainmentLayer.get() : m_graphicsL ayer.get(); 1572 return m_childContainmentLayer ? m_childContainmentLayer.get() : m_graphicsL ayer.get();
1460 } 1573 }
1461 1574
1462 GraphicsLayer* RenderLayerBacking::childForSuperlayers() const 1575 GraphicsLayer* RenderLayerBacking::childForSuperlayers() const
1463 { 1576 {
1577 if (m_ancestorScrollClippingLayer)
1578 return m_ancestorScrollClippingLayer.get();
1579
1464 if (m_ancestorClippingLayer) 1580 if (m_ancestorClippingLayer)
1465 return m_ancestorClippingLayer.get(); 1581 return m_ancestorClippingLayer.get();
1466 1582
1467 return m_graphicsLayer.get(); 1583 return m_graphicsLayer.get();
1468 } 1584 }
1469 1585
1470 void RenderLayerBacking::setRequiresOwnBackingStore(bool requiresOwnBacking) 1586 void RenderLayerBacking::setRequiresOwnBackingStore(bool requiresOwnBacking)
1471 { 1587 {
1472 if (requiresOwnBacking == m_requiresOwnBackingStore) 1588 if (requiresOwnBacking == m_requiresOwnBackingStore)
1473 return; 1589 return;
(...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after
1916 if (m_layerForVerticalScrollbar) 2032 if (m_layerForVerticalScrollbar)
1917 backingMemory += m_layerForVerticalScrollbar->backingStoreMemoryEstimate (); 2033 backingMemory += m_layerForVerticalScrollbar->backingStoreMemoryEstimate ();
1918 2034
1919 if (m_layerForScrollCorner) 2035 if (m_layerForScrollCorner)
1920 backingMemory += m_layerForScrollCorner->backingStoreMemoryEstimate(); 2036 backingMemory += m_layerForScrollCorner->backingStoreMemoryEstimate();
1921 2037
1922 return backingMemory; 2038 return backingMemory;
1923 } 2039 }
1924 2040
1925 } // namespace WebCore 2041 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698