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

Side by Side Diff: Source/core/rendering/compositing/CompositedLayerMapping.h

Issue 397713004: Overlay scrollbars must respect ancestor clip (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: . Created 6 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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 // but this is likely to evolve soon. 83 // but this is likely to evolve soon.
84 class CompositedLayerMapping FINAL : public GraphicsLayerClient { 84 class CompositedLayerMapping FINAL : public GraphicsLayerClient {
85 WTF_MAKE_NONCOPYABLE(CompositedLayerMapping); WTF_MAKE_FAST_ALLOCATED; 85 WTF_MAKE_NONCOPYABLE(CompositedLayerMapping); WTF_MAKE_FAST_ALLOCATED;
86 public: 86 public:
87 explicit CompositedLayerMapping(RenderLayer&); 87 explicit CompositedLayerMapping(RenderLayer&);
88 virtual ~CompositedLayerMapping(); 88 virtual ~CompositedLayerMapping();
89 89
90 RenderLayer& owningLayer() const { return m_owningLayer; } 90 RenderLayer& owningLayer() const { return m_owningLayer; }
91 91
92 bool updateGraphicsLayerConfiguration(); 92 bool updateGraphicsLayerConfiguration();
93 void updateGraphicsLayerGeometry(const RenderLayer* compositingContainer, Ve ctor<RenderLayer*>& layersNeedingPaintInvalidation); 93 void updateGraphicsLayerGeometry(const RenderLayer* compositingContainer, co nst RenderLayer* compositingStackingContext, Vector<RenderLayer*>& layersNeeding PaintInvalidation);
94 94
95 // Update whether layer needs blending. 95 // Update whether layer needs blending.
96 void updateContentsOpaque(); 96 void updateContentsOpaque();
97 97
98 GraphicsLayer* mainGraphicsLayer() const { return m_graphicsLayer.get(); } 98 GraphicsLayer* mainGraphicsLayer() const { return m_graphicsLayer.get(); }
99 99
100 // Layer to clip children 100 // Layer to clip children
101 bool hasClippingLayer() const { return m_childContainmentLayer; } 101 bool hasClippingLayer() const { return m_childContainmentLayer; }
102 GraphicsLayer* clippingLayer() const { return m_childContainmentLayer.get(); } 102 GraphicsLayer* clippingLayer() const { return m_childContainmentLayer.get(); }
103 103
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 void updateScrollingBlockSelection(); 219 void updateScrollingBlockSelection();
220 220
221 private: 221 private:
222 static const GraphicsLayerPaintInfo* containingSquashedLayer(const RenderObj ect*, const Vector<GraphicsLayerPaintInfo>& layers); 222 static const GraphicsLayerPaintInfo* containingSquashedLayer(const RenderObj ect*, const Vector<GraphicsLayerPaintInfo>& layers);
223 223
224 // Helper methods to updateGraphicsLayerGeometry: 224 // Helper methods to updateGraphicsLayerGeometry:
225 void computeGraphicsLayerParentLocation(const RenderLayer* compositingContai ner, const IntRect& ancestorCompositingBounds, IntPoint& graphicsLayerParentLoca tion); 225 void computeGraphicsLayerParentLocation(const RenderLayer* compositingContai ner, const IntRect& ancestorCompositingBounds, IntPoint& graphicsLayerParentLoca tion);
226 void updateSquashingLayerGeometry(const LayoutPoint& offsetFromCompositedAnc estor, const IntPoint& graphicsLayerParentLocation, const RenderLayer& reference Layer, Vector<GraphicsLayerPaintInfo>& layers, GraphicsLayer*, LayoutPoint* offs etFromTransformedAncestor, Vector<RenderLayer*>& layersNeedingPaintInvalidation) ; 226 void updateSquashingLayerGeometry(const LayoutPoint& offsetFromCompositedAnc estor, const IntPoint& graphicsLayerParentLocation, const RenderLayer& reference Layer, Vector<GraphicsLayerPaintInfo>& layers, GraphicsLayer*, LayoutPoint* offs etFromTransformedAncestor, Vector<RenderLayer*>& layersNeedingPaintInvalidation) ;
227 void updateMainGraphicsLayerGeometry(const IntRect& relativeCompositingBound s, const IntRect& localCompositingBounds, IntPoint& graphicsLayerParentLocation) ; 227 void updateMainGraphicsLayerGeometry(const IntRect& relativeCompositingBound s, const IntRect& localCompositingBounds, IntPoint& graphicsLayerParentLocation) ;
228 void updateAncestorClippingLayerGeometry(const RenderLayer* compositingConta iner, const IntPoint& snappedOffsetFromCompositedAncestor, IntPoint& graphicsLay erParentLocation); 228 void updateAncestorClippingLayerGeometry(const RenderLayer* compositingConta iner, const IntPoint& snappedOffsetFromCompositedAncestor, IntPoint& graphicsLay erParentLocation);
229 void updateOverflowControlsHostLayerGeometry(const RenderLayer* compositingS tackingContext);
229 void updateChildContainmentLayerGeometry(const IntRect& clippingBox, const I ntRect& localCompositingBounds); 230 void updateChildContainmentLayerGeometry(const IntRect& clippingBox, const I ntRect& localCompositingBounds);
230 void updateChildTransformLayerGeometry(); 231 void updateChildTransformLayerGeometry();
231 void updateMaskLayerGeometry(); 232 void updateMaskLayerGeometry();
232 void updateTransformGeometry(const IntPoint& snappedOffsetFromCompositedAnce stor, const IntRect& relativeCompositingBounds); 233 void updateTransformGeometry(const IntPoint& snappedOffsetFromCompositedAnce stor, const IntRect& relativeCompositingBounds);
233 void updateForegroundLayerGeometry(const FloatSize& relativeCompositingBound sSize, const IntRect& clippingBox); 234 void updateForegroundLayerGeometry(const FloatSize& relativeCompositingBound sSize, const IntRect& clippingBox);
234 void updateBackgroundLayerGeometry(const FloatSize& relativeCompositingBound sSize); 235 void updateBackgroundLayerGeometry(const FloatSize& relativeCompositingBound sSize);
235 void updateReflectionLayerGeometry(Vector<RenderLayer*>& layersNeedingPaintI nvalidation); 236 void updateReflectionLayerGeometry(Vector<RenderLayer*>& layersNeedingPaintI nvalidation);
236 void updateScrollingLayerGeometry(const IntRect& localCompositingBounds); 237 void updateScrollingLayerGeometry(const IntRect& localCompositingBounds);
237 void updateChildClippingMaskLayerGeometry(); 238 void updateChildClippingMaskLayerGeometry();
238 239
239 void createPrimaryGraphicsLayer(); 240 void createPrimaryGraphicsLayer();
240 void destroyGraphicsLayers(); 241 void destroyGraphicsLayers();
241 242
242 PassOwnPtr<GraphicsLayer> createGraphicsLayer(CompositingReasons); 243 PassOwnPtr<GraphicsLayer> createGraphicsLayer(CompositingReasons);
243 bool toggleScrollbarLayerIfNeeded(OwnPtr<GraphicsLayer>&, bool needsLayer, C ompositingReasons); 244 bool toggleScrollbarLayerIfNeeded(OwnPtr<GraphicsLayer>&, bool needsLayer, C ompositingReasons);
244 245
245 RenderLayerModelObject* renderer() const { return m_owningLayer.renderer(); } 246 RenderLayerModelObject* renderer() const { return m_owningLayer.renderer(); }
246 RenderLayerCompositor* compositor() const { return m_owningLayer.compositor( ); } 247 RenderLayerCompositor* compositor() const { return m_owningLayer.compositor( ); }
247 248
248 void updateInternalHierarchy(); 249 void updateInternalHierarchy();
249 void updatePaintingPhases(); 250 void updatePaintingPhases();
250 bool updateClippingLayers(bool needsAncestorClip, bool needsDescendantClip); 251 bool updateClippingLayers(bool needsAncestorClip, bool needsDescendantClip);
251 bool updateChildTransformLayer(bool needsChildTransformLayer); 252 bool updateChildTransformLayer(bool needsChildTransformLayer);
252 bool updateOverflowControlsLayers(bool needsHorizontalScrollbarLayer, bool n eedsVerticalScrollbarLayer, bool needsScrollCornerLayer); 253 bool updateOverflowControlsLayers(bool needsHorizontalScrollbarLayer, bool n eedsVerticalScrollbarLayer, bool needsScrollCornerLayer, bool needsAncestorClip) ;
253 bool updateForegroundLayer(bool needsForegroundLayer); 254 bool updateForegroundLayer(bool needsForegroundLayer);
254 bool updateBackgroundLayer(bool needsBackgroundLayer); 255 bool updateBackgroundLayer(bool needsBackgroundLayer);
255 bool updateMaskLayer(bool needsMaskLayer); 256 bool updateMaskLayer(bool needsMaskLayer);
256 bool updateClippingMaskLayers(bool needsChildClippingMaskLayer); 257 bool updateClippingMaskLayers(bool needsChildClippingMaskLayer);
257 bool requiresHorizontalScrollbarLayer() const { return m_owningLayer.scrolla bleArea() && m_owningLayer.scrollableArea()->horizontalScrollbar(); } 258 bool requiresHorizontalScrollbarLayer() const { return m_owningLayer.scrolla bleArea() && m_owningLayer.scrollableArea()->horizontalScrollbar(); }
258 bool requiresVerticalScrollbarLayer() const { return m_owningLayer.scrollabl eArea() && m_owningLayer.scrollableArea()->verticalScrollbar(); } 259 bool requiresVerticalScrollbarLayer() const { return m_owningLayer.scrollabl eArea() && m_owningLayer.scrollableArea()->verticalScrollbar(); }
259 bool requiresScrollCornerLayer() const { return m_owningLayer.scrollableArea () && !m_owningLayer.scrollableArea()->scrollCornerAndResizerRect().isEmpty(); } 260 bool requiresScrollCornerLayer() const { return m_owningLayer.scrollableArea () && !m_owningLayer.scrollableArea()->scrollCornerAndResizerRect().isEmpty(); }
260 bool updateScrollingLayers(bool scrollingLayers); 261 bool updateScrollingLayers(bool scrollingLayers);
261 void updateScrollParent(RenderLayer*); 262 void updateScrollParent(RenderLayer*);
262 void updateClipParent(); 263 void updateClipParent();
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 // + root content layer 379 // + root content layer
379 // 380 //
380 // With the hierarchy set up like this, the root content layer is able to sc roll without affecting 381 // With the hierarchy set up like this, the root content layer is able to sc roll without affecting
381 // the background layer (or repainting). 382 // the background layer (or repainting).
382 OwnPtr<GraphicsLayer> m_foregroundLayer; // Only used in cases where we need to draw the foreground separately. 383 OwnPtr<GraphicsLayer> m_foregroundLayer; // Only used in cases where we need to draw the foreground separately.
383 OwnPtr<GraphicsLayer> m_backgroundLayer; // Only used in cases where we need to draw the background separately. 384 OwnPtr<GraphicsLayer> m_backgroundLayer; // Only used in cases where we need to draw the background separately.
384 385
385 OwnPtr<GraphicsLayer> m_layerForHorizontalScrollbar; 386 OwnPtr<GraphicsLayer> m_layerForHorizontalScrollbar;
386 OwnPtr<GraphicsLayer> m_layerForVerticalScrollbar; 387 OwnPtr<GraphicsLayer> m_layerForVerticalScrollbar;
387 OwnPtr<GraphicsLayer> m_layerForScrollCorner; 388 OwnPtr<GraphicsLayer> m_layerForScrollCorner;
389
390 // This layer exists to simplify the reparenting of overflow control that is occasionally required
391 // to ensure that scrollbars appear above scrolling content.
388 OwnPtr<GraphicsLayer> m_overflowControlsHostLayer; 392 OwnPtr<GraphicsLayer> m_overflowControlsHostLayer;
389 393
394 // The reparented overflow controls sometimes need to be clipped by a non-an cestor. In just the same
395 // way we need an ancestor clipping layer to clip this CLM's internal hierar chy, we add another layer
396 // to clip the overflow controls. It would be possible to make m_overflowCon trolsHostLayer be
397 // responsible for applying this clip, but that could require repositioning all of the overflow
398 // controls since the this clip may apply an offset. By using a separate lay er, the overflow controls
399 // can remain ignorant of the layers above them and still work correctly.
chrishtr 2014/07/24 18:44:57 Starting with a basic question.. Can you give me
400 OwnPtr<GraphicsLayer> m_overflowControlsClippingLayer;
401
390 // A squashing CLM has two possible squashing-related structures. 402 // A squashing CLM has two possible squashing-related structures.
391 // 403 //
392 // If m_ancestorClippingLayer is present: 404 // If m_ancestorClippingLayer is present:
393 // 405 //
394 // m_ancestorClippingLayer 406 // m_ancestorClippingLayer
395 // + m_graphicsLayer 407 // + m_graphicsLayer
396 // + m_squashingLayer 408 // + m_squashingLayer
397 // 409 //
398 // If not: 410 // If not:
399 // 411 //
(...skipping 14 matching lines...) Expand all
414 unsigned m_isMainFrameRenderViewLayer : 1; 426 unsigned m_isMainFrameRenderViewLayer : 1;
415 unsigned m_requiresOwnBackingStoreForIntrinsicReasons : 1; 427 unsigned m_requiresOwnBackingStoreForIntrinsicReasons : 1;
416 unsigned m_requiresOwnBackingStoreForAncestorReasons : 1; 428 unsigned m_requiresOwnBackingStoreForAncestorReasons : 1;
417 unsigned m_backgroundLayerPaintsFixedRootBackground : 1; 429 unsigned m_backgroundLayerPaintsFixedRootBackground : 1;
418 unsigned m_scrollingContentsAreEmpty : 1; 430 unsigned m_scrollingContentsAreEmpty : 1;
419 }; 431 };
420 432
421 } // namespace blink 433 } // namespace blink
422 434
423 #endif // CompositedLayerMapping_h 435 #endif // CompositedLayerMapping_h
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderLayer.cpp ('k') | Source/core/rendering/compositing/CompositedLayerMapping.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698