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

Side by Side Diff: Source/core/rendering/RenderLayer.h

Issue 59613010: Fix propagation of clip-path and border-radius clipping to child layers (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: fix for mac build Created 7 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
« no previous file with comments | « Source/core/rendering/CompositedLayerMapping.cpp ('k') | Source/core/rendering/RenderLayer.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2003, 2009, 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2003, 2009, 2012 Apple Inc. All rights reserved.
3 * Copyright (C) 2013 Intel Corporation. All rights reserved. 3 * Copyright (C) 2013 Intel Corporation. All rights reserved.
4 * 4 *
5 * Portions are Copyright (C) 1998 Netscape Communications Corporation. 5 * Portions are Copyright (C) 1998 Netscape Communications Corporation.
6 * 6 *
7 * Other contributors: 7 * Other contributors:
8 * Robert O'Callahan <roc+@cs.cmu.edu> 8 * Robert O'Callahan <roc+@cs.cmu.edu>
9 * David Baron <dbaron@fas.harvard.edu> 9 * David Baron <dbaron@fas.harvard.edu>
10 * Christian Biesinger <cbiesinger@web.de> 10 * Christian Biesinger <cbiesinger@web.de>
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 #include "core/rendering/RenderLayerRepainter.h" 55 #include "core/rendering/RenderLayerRepainter.h"
56 #include "core/rendering/RenderLayerScrollableArea.h" 56 #include "core/rendering/RenderLayerScrollableArea.h"
57 #include "core/rendering/RenderLayerStackingNode.h" 57 #include "core/rendering/RenderLayerStackingNode.h"
58 58
59 #include "wtf/OwnPtr.h" 59 #include "wtf/OwnPtr.h"
60 60
61 #include "core/rendering/RenderLayerFilterInfo.h" 61 #include "core/rendering/RenderLayerFilterInfo.h"
62 62
63 namespace WebCore { 63 namespace WebCore {
64 64
65 struct ClipperContext;
66 class CompositedLayerMapping;
65 class FilterEffectRenderer; 67 class FilterEffectRenderer;
66 class FilterOperations; 68 class FilterOperations;
67 class HitTestRequest; 69 class HitTestRequest;
68 class HitTestResult; 70 class HitTestResult;
69 class HitTestingTransformState; 71 class HitTestingTransformState;
70 class PlatformEvent; 72 class PlatformEvent;
71 class RenderFlowThread; 73 class RenderFlowThread;
72 class RenderGeometryMap; 74 class RenderGeometryMap;
73 class CompositedLayerMapping;
74 class RenderLayerCompositor; 75 class RenderLayerCompositor;
75 class RenderReplica; 76 class RenderReplica;
76 class RenderScrollbarPart; 77 class RenderScrollbarPart;
77 class RenderStyle; 78 class RenderStyle;
79 class RenderSVGResourceClipper;
78 class RenderView; 80 class RenderView;
79 class Scrollbar; 81 class Scrollbar;
80 class TransformationMatrix; 82 class TransformationMatrix;
81 83
82 enum BorderRadiusClippingRule { IncludeSelfForBorderRadius, DoNotIncludeSelfForB orderRadius }; 84 enum BorderRadiusClippingRule { IncludeSelfForBorderRadius, DoNotIncludeSelfForB orderRadius };
83 85
84 class RenderLayer { 86 class RenderLayer {
85 public: 87 public:
86 friend class RenderReplica; 88 friend class RenderReplica;
87 // FIXME: Needed until we move all the necessary bits to the new class. 89 // FIXME: Needed until we move all the necessary bits to the new class.
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 // FIXME: We should ASSERT(!m_hasSelfPaintingLayerDescendantDirty); here but we hit the same bugs as visible content above. 202 // FIXME: We should ASSERT(!m_hasSelfPaintingLayerDescendantDirty); here but we hit the same bugs as visible content above.
201 // Part of the issue is with subtree relayout: we don't check if our ancesto rs have some descendant flags dirty, missing some updates. 203 // Part of the issue is with subtree relayout: we don't check if our ancesto rs have some descendant flags dirty, missing some updates.
202 bool hasSelfPaintingLayerDescendant() const { return m_hasSelfPaintingLayerD escendant; } 204 bool hasSelfPaintingLayerDescendant() const { return m_hasSelfPaintingLayerD escendant; }
203 205
204 // FIXME: We should ASSERT(!m_hasOutOfFlowPositionedDescendantDirty) here. S ee above. 206 // FIXME: We should ASSERT(!m_hasOutOfFlowPositionedDescendantDirty) here. S ee above.
205 bool hasOutOfFlowPositionedDescendant() const { return m_hasOutOfFlowPositio nedDescendant; } 207 bool hasOutOfFlowPositionedDescendant() const { return m_hasOutOfFlowPositio nedDescendant; }
206 208
207 void setHasOutOfFlowPositionedDescendant(bool hasDescendant) { m_hasOutOfFlo wPositionedDescendant = hasDescendant; } 209 void setHasOutOfFlowPositionedDescendant(bool hasDescendant) { m_hasOutOfFlo wPositionedDescendant = hasDescendant; }
208 void setHasOutOfFlowPositionedDescendantDirty(bool dirty) { m_hasOutOfFlowPo sitionedDescendantDirty = dirty; } 210 void setHasOutOfFlowPositionedDescendantDirty(bool dirty) { m_hasOutOfFlowPo sitionedDescendantDirty = dirty; }
209 211
212 void setHasComplexClippedAncestor(bool hasAncestor) { m_hasComplexClippedAnc estor = hasAncestor; }
213 bool hasComplexClippedAncestor() const { return m_hasComplexClippedAncestor; }
214
210 bool childLayerHasBlendMode() const { ASSERT(!m_childLayerHasBlendModeStatus Dirty); return m_childLayerHasBlendMode; } 215 bool childLayerHasBlendMode() const { ASSERT(!m_childLayerHasBlendModeStatus Dirty); return m_childLayerHasBlendMode; }
211 216
212 bool hasUnclippedDescendant() const { return m_hasUnclippedDescendant; } 217 bool hasUnclippedDescendant() const { return m_hasUnclippedDescendant; }
213 void setHasUnclippedDescendant(bool hasDescendant) { m_hasUnclippedDescendan t = hasDescendant; } 218 void setHasUnclippedDescendant(bool hasDescendant) { m_hasUnclippedDescendan t = hasDescendant; }
214 void updateHasUnclippedDescendant(); 219 void updateHasUnclippedDescendant();
215 bool isUnclippedDescendant() const { return m_isUnclippedDescendant; } 220 bool isUnclippedDescendant() const { return m_isUnclippedDescendant; }
216 221
217 bool hasVisibleNonLayerContent() const { return m_hasVisibleNonLayerContent; } 222 bool hasVisibleNonLayerContent() const { return m_hasVisibleNonLayerContent; }
218 void updateHasVisibleNonLayerContent(); 223 void updateHasVisibleNonLayerContent();
219 224
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 // FIXME: This is a temporary flag and should be removed once accelerated 464 // FIXME: This is a temporary flag and should be removed once accelerated
460 // overflow scroll is ready (crbug.com/254111). 465 // overflow scroll is ready (crbug.com/254111).
461 bool compositorDrivenAcceleratedScrollingEnabled() const; 466 bool compositorDrivenAcceleratedScrollingEnabled() const;
462 467
463 void clipToRect(RenderLayer* rootLayer, GraphicsContext*, const LayoutRect& paintDirtyRect, const ClipRect&, 468 void clipToRect(RenderLayer* rootLayer, GraphicsContext*, const LayoutRect& paintDirtyRect, const ClipRect&,
464 BorderRadiusClippingRule = IncludeSelfForBorderRadius); 469 BorderRadiusClippingRule = IncludeSelfForBorderRadius);
465 void restoreClip(GraphicsContext*, const LayoutRect& paintDirtyRect, const C lipRect&); 470 void restoreClip(GraphicsContext*, const LayoutRect& paintDirtyRect, const C lipRect&);
466 471
467 void updateSelfPaintingLayer(); 472 void updateSelfPaintingLayer();
468 void updateVisibilityAfterStyleChange(const RenderStyle* oldStyle); 473 void updateVisibilityAfterStyleChange(const RenderStyle* oldStyle);
474 void updateHasComplexClippedAncestor();
469 475
470 void updateOutOfFlowPositioned(const RenderStyle* oldStyle); 476 void updateOutOfFlowPositioned(const RenderStyle* oldStyle);
471 477
472 void didUpdateNeedsCompositedScrolling(); 478 void didUpdateNeedsCompositedScrolling();
473 479
474 // Returns true if the position changed. 480 // Returns true if the position changed.
475 bool updateLayerPosition(); 481 bool updateLayerPosition();
476 482
477 void updateLayerPositions(RenderGeometryMap* = 0, UpdateLayerPositionsFlags = defaultFlags); 483 void updateLayerPositions(RenderGeometryMap* = 0, UpdateLayerPositionsFlags = defaultFlags);
478 484
(...skipping 30 matching lines...) Expand all
509 const LayoutRect& transparencyPaintDirtyRect, bool haveTransparency, con st LayerPaintingInfo&, PaintBehavior, RenderObject* paintingRootForRenderer); 515 const LayoutRect& transparencyPaintDirtyRect, bool haveTransparency, con st LayerPaintingInfo&, PaintBehavior, RenderObject* paintingRootForRenderer);
510 void paintForegroundForFragments(const LayerFragments&, GraphicsContext*, Gr aphicsContext* transparencyLayerContext, 516 void paintForegroundForFragments(const LayerFragments&, GraphicsContext*, Gr aphicsContext* transparencyLayerContext,
511 const LayoutRect& transparencyPaintDirtyRect, bool haveTransparency, con st LayerPaintingInfo&, PaintBehavior, RenderObject* paintingRootForRenderer, 517 const LayoutRect& transparencyPaintDirtyRect, bool haveTransparency, con st LayerPaintingInfo&, PaintBehavior, RenderObject* paintingRootForRenderer,
512 bool selectionOnly, bool forceBlackText); 518 bool selectionOnly, bool forceBlackText);
513 void paintForegroundForFragmentsWithPhase(PaintPhase, const LayerFragments&, GraphicsContext*, const LayerPaintingInfo&, PaintBehavior, RenderObject* painti ngRootForRenderer); 519 void paintForegroundForFragmentsWithPhase(PaintPhase, const LayerFragments&, GraphicsContext*, const LayerPaintingInfo&, PaintBehavior, RenderObject* painti ngRootForRenderer);
514 void paintOutlineForFragments(const LayerFragments&, GraphicsContext*, const LayerPaintingInfo&, PaintBehavior, RenderObject* paintingRootForRenderer); 520 void paintOutlineForFragments(const LayerFragments&, GraphicsContext*, const LayerPaintingInfo&, PaintBehavior, RenderObject* paintingRootForRenderer);
515 void paintOverflowControlsForFragments(const LayerFragments&, GraphicsContex t*, const LayerPaintingInfo&); 521 void paintOverflowControlsForFragments(const LayerFragments&, GraphicsContex t*, const LayerPaintingInfo&);
516 void paintMaskForFragments(const LayerFragments&, GraphicsContext*, const La yerPaintingInfo&, RenderObject* paintingRootForRenderer); 522 void paintMaskForFragments(const LayerFragments&, GraphicsContext*, const La yerPaintingInfo&, RenderObject* paintingRootForRenderer);
517 void paintChildClippingMaskForFragments(const LayerFragments&, GraphicsConte xt*, const LayerPaintingInfo&, RenderObject* paintingRootForRenderer); 523 void paintChildClippingMaskForFragments(const LayerFragments&, GraphicsConte xt*, const LayerPaintingInfo&, RenderObject* paintingRootForRenderer);
518 void paintTransformedLayerIntoFragments(GraphicsContext*, const LayerPaintin gInfo&, PaintLayerFlags); 524 void paintTransformedLayerIntoFragments(GraphicsContext*, const LayerPaintin gInfo&, PaintLayerFlags);
525 void applyComplexClip(GraphicsContext*, RenderLayer*, ClipperContext*, const LayerPaintingInfo&, const LayoutPoint& offsetFromRoot, bool* needsContextRestor e, bool* rootRelativeBoundsComputed, IntRect* rootRelativeBounds, Vector<RenderS VGResourceClipper*>*);
519 526
520 RenderLayer* hitTestLayer(RenderLayer* rootLayer, RenderLayer* containerLaye r, const HitTestRequest& request, HitTestResult& result, 527 RenderLayer* hitTestLayer(RenderLayer* rootLayer, RenderLayer* containerLaye r, const HitTestRequest& request, HitTestResult& result,
521 const LayoutRect& hitTestRect, const HitTestLocati on&, bool appliedTransform, 528 const LayoutRect& hitTestRect, const HitTestLocati on&, bool appliedTransform,
522 const HitTestingTransformState* transformState = 0 , double* zOffset = 0); 529 const HitTestingTransformState* transformState = 0 , double* zOffset = 0);
523 RenderLayer* hitTestLayerByApplyingTransform(RenderLayer* rootLayer, RenderL ayer* containerLayer, const HitTestRequest&, HitTestResult&, 530 RenderLayer* hitTestLayerByApplyingTransform(RenderLayer* rootLayer, RenderL ayer* containerLayer, const HitTestRequest&, HitTestResult&,
524 const LayoutRect& hitTestRect, const HitTestLocation&, const HitTestingT ransformState* = 0, double* zOffset = 0, 531 const LayoutRect& hitTestRect, const HitTestLocation&, const HitTestingT ransformState* = 0, double* zOffset = 0,
525 const LayoutPoint& translationOffset = LayoutPoint()); 532 const LayoutPoint& translationOffset = LayoutPoint());
526 RenderLayer* hitTestList(Vector<RenderLayerStackingNode*>*, RenderLayer* roo tLayer, const HitTestRequest&, HitTestResult&, 533 RenderLayer* hitTestList(Vector<RenderLayerStackingNode*>*, RenderLayer* roo tLayer, const HitTestRequest&, HitTestResult&,
527 const LayoutRect& hitTestRect, const HitTestLocatio n&, 534 const LayoutRect& hitTestRect, const HitTestLocatio n&,
528 const HitTestingTransformState* transformState, dou ble* zOffsetForDescendants, double* zOffset, 535 const HitTestingTransformState* transformState, dou ble* zOffsetForDescendants, double* zOffset,
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 unsigned m_hasOutOfFlowPositionedDescendantDirty : 1; 628 unsigned m_hasOutOfFlowPositionedDescendantDirty : 1;
622 629
623 // This is true if we have an out-of-flow positioned descendant whose 630 // This is true if we have an out-of-flow positioned descendant whose
624 // containing block is our ancestor. If this is the case, the descendant 631 // containing block is our ancestor. If this is the case, the descendant
625 // may fall outside of our clip preventing things like opting into 632 // may fall outside of our clip preventing things like opting into
626 // composited scrolling (which causes clipping of all descendants). 633 // composited scrolling (which causes clipping of all descendants).
627 unsigned m_hasUnclippedDescendant : 1; 634 unsigned m_hasUnclippedDescendant : 1;
628 635
629 unsigned m_isUnclippedDescendant : 1; 636 unsigned m_isUnclippedDescendant : 1;
630 637
638 unsigned m_hasComplexClippedAncestor : 1;
639
631 const unsigned m_isRootLayer : 1; 640 const unsigned m_isRootLayer : 1;
632 641
633 unsigned m_usedTransparency : 1; // Tracks whether we need to close a transp arent layer, i.e., whether 642 unsigned m_usedTransparency : 1; // Tracks whether we need to close a transp arent layer, i.e., whether
634 // we ended up painting this layer or any desce ndants (and therefore need to 643 // we ended up painting this layer or any desce ndants (and therefore need to
635 // blend). 644 // blend).
636 645
637 unsigned m_childLayerHasBlendMode : 1; 646 unsigned m_childLayerHasBlendMode : 1;
638 unsigned m_childLayerHasBlendModeStatusDirty : 1; 647 unsigned m_childLayerHasBlendModeStatusDirty : 1;
639 648
640 unsigned m_visibleContentStatusDirty : 1; 649 unsigned m_visibleContentStatusDirty : 1;
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
735 744
736 } // namespace WebCore 745 } // namespace WebCore
737 746
738 #ifndef NDEBUG 747 #ifndef NDEBUG
739 // Outside the WebCore namespace for ease of invocation from gdb. 748 // Outside the WebCore namespace for ease of invocation from gdb.
740 void showLayerTree(const WebCore::RenderLayer*); 749 void showLayerTree(const WebCore::RenderLayer*);
741 void showLayerTree(const WebCore::RenderObject*); 750 void showLayerTree(const WebCore::RenderObject*);
742 #endif 751 #endif
743 752
744 #endif // RenderLayer_h 753 #endif // RenderLayer_h
OLDNEW
« no previous file with comments | « Source/core/rendering/CompositedLayerMapping.cpp ('k') | Source/core/rendering/RenderLayer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698