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

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

Issue 99883002: Refactor BlendMode into a separate class. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink@master
Patch Set: Rebase to master Created 6 years, 11 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
« no previous file with comments | « Source/core/core.gypi ('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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 * version of this file under any of the LGPL, the MPL or the GPL. 42 * version of this file under any of the LGPL, the MPL or the GPL.
43 */ 43 */
44 44
45 #ifndef RenderLayer_h 45 #ifndef RenderLayer_h
46 #define RenderLayer_h 46 #define RenderLayer_h
47 47
48 #include "core/rendering/CompositedLayerMappingPtr.h" 48 #include "core/rendering/CompositedLayerMappingPtr.h"
49 #include "core/rendering/CompositingReasons.h" 49 #include "core/rendering/CompositingReasons.h"
50 #include "core/rendering/LayerPaintingInfo.h" 50 #include "core/rendering/LayerPaintingInfo.h"
51 #include "core/rendering/RenderBox.h" 51 #include "core/rendering/RenderBox.h"
52 #include "core/rendering/RenderLayerBlendInfo.h"
52 #include "core/rendering/RenderLayerClipper.h" 53 #include "core/rendering/RenderLayerClipper.h"
53 #include "core/rendering/RenderLayerFilterInfo.h" 54 #include "core/rendering/RenderLayerFilterInfo.h"
54 #include "core/rendering/RenderLayerReflectionInfo.h" 55 #include "core/rendering/RenderLayerReflectionInfo.h"
55 #include "core/rendering/RenderLayerRepainter.h" 56 #include "core/rendering/RenderLayerRepainter.h"
56 #include "core/rendering/RenderLayerScrollableArea.h" 57 #include "core/rendering/RenderLayerScrollableArea.h"
57 #include "core/rendering/RenderLayerStackingNode.h" 58 #include "core/rendering/RenderLayerStackingNode.h"
58 #include "core/rendering/RenderLayerStackingNodeIterator.h" 59 #include "core/rendering/RenderLayerStackingNodeIterator.h"
59 #include "wtf/OwnPtr.h" 60 #include "wtf/OwnPtr.h"
60 61
61 namespace WebCore { 62 namespace WebCore {
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 void updateLayerPositionsAfterLayout(const RenderLayer* rootLayer, UpdateLay erPositionsFlags); 156 void updateLayerPositionsAfterLayout(const RenderLayer* rootLayer, UpdateLay erPositionsFlags);
156 157
157 void updateLayerPositionsAfterOverflowScroll(); 158 void updateLayerPositionsAfterOverflowScroll();
158 void updateLayerPositionsAfterDocumentScroll(); 159 void updateLayerPositionsAfterDocumentScroll();
159 160
160 bool isPaginated() const { return m_isPaginated; } 161 bool isPaginated() const { return m_isPaginated; }
161 RenderLayer* enclosingPaginationLayer() const { return m_enclosingPagination Layer; } 162 RenderLayer* enclosingPaginationLayer() const { return m_enclosingPagination Layer; }
162 163
163 void updateTransform(); 164 void updateTransform();
164 165
165 void updateBlendMode();
166
167 const LayoutSize& offsetForInFlowPosition() const { return m_offsetForInFlow Position; } 166 const LayoutSize& offsetForInFlowPosition() const { return m_offsetForInFlow Position; }
168 167
169 void addBlockSelectionGapsBounds(const LayoutRect&); 168 void addBlockSelectionGapsBounds(const LayoutRect&);
170 void clearBlockSelectionGapsBounds(); 169 void clearBlockSelectionGapsBounds();
171 void repaintBlockSelectionGaps(); 170 void repaintBlockSelectionGaps();
172 bool hasBlockSelectionGapBounds() const; 171 bool hasBlockSelectionGapBounds() const;
173 172
174 RenderLayerStackingNode* stackingNode() { return m_stackingNode.get(); } 173 RenderLayerStackingNode* stackingNode() { return m_stackingNode.get(); }
175 const RenderLayerStackingNode* stackingNode() const { return m_stackingNode. get(); } 174 const RenderLayerStackingNode* stackingNode() const { return m_stackingNode. get(); }
176 175
(...skipping 17 matching lines...) Expand all
194 // FIXME: We should ASSERT(!m_hasSelfPaintingLayerDescendantDirty); here but we hit the same bugs as visible content above. 193 // FIXME: We should ASSERT(!m_hasSelfPaintingLayerDescendantDirty); here but we hit the same bugs as visible content above.
195 // Part of the issue is with subtree relayout: we don't check if our ancesto rs have some descendant flags dirty, missing some updates. 194 // Part of the issue is with subtree relayout: we don't check if our ancesto rs have some descendant flags dirty, missing some updates.
196 bool hasSelfPaintingLayerDescendant() const { return m_hasSelfPaintingLayerD escendant; } 195 bool hasSelfPaintingLayerDescendant() const { return m_hasSelfPaintingLayerD escendant; }
197 196
198 // FIXME: We should ASSERT(!m_hasOutOfFlowPositionedDescendantDirty) here. S ee above. 197 // FIXME: We should ASSERT(!m_hasOutOfFlowPositionedDescendantDirty) here. S ee above.
199 bool hasOutOfFlowPositionedDescendant() const { return m_hasOutOfFlowPositio nedDescendant; } 198 bool hasOutOfFlowPositionedDescendant() const { return m_hasOutOfFlowPositio nedDescendant; }
200 199
201 void setHasOutOfFlowPositionedDescendant(bool hasDescendant) { m_hasOutOfFlo wPositionedDescendant = hasDescendant; } 200 void setHasOutOfFlowPositionedDescendant(bool hasDescendant) { m_hasOutOfFlo wPositionedDescendant = hasDescendant; }
202 void setHasOutOfFlowPositionedDescendantDirty(bool dirty) { m_hasOutOfFlowPo sitionedDescendantDirty = dirty; } 201 void setHasOutOfFlowPositionedDescendantDirty(bool dirty) { m_hasOutOfFlowPo sitionedDescendantDirty = dirty; }
203 202
204 bool childLayerHasBlendMode() const { ASSERT(!m_childLayerHasBlendModeStatus Dirty); return m_childLayerHasBlendMode; }
205
206 bool hasUnclippedDescendant() const { return m_hasUnclippedDescendant; } 203 bool hasUnclippedDescendant() const { return m_hasUnclippedDescendant; }
207 void setHasUnclippedDescendant(bool hasDescendant) { m_hasUnclippedDescendan t = hasDescendant; } 204 void setHasUnclippedDescendant(bool hasDescendant) { m_hasUnclippedDescendan t = hasDescendant; }
208 void updateHasUnclippedDescendant(); 205 void updateHasUnclippedDescendant();
209 bool isUnclippedDescendant() const { return m_isUnclippedDescendant; } 206 bool isUnclippedDescendant() const { return m_isUnclippedDescendant; }
210 207
211 bool hasVisibleNonLayerContent() const { return m_hasVisibleNonLayerContent; } 208 bool hasVisibleNonLayerContent() const { return m_hasVisibleNonLayerContent; }
212 void updateHasVisibleNonLayerContent(); 209 void updateHasVisibleNonLayerContent();
213 210
214 // Gets the nearest enclosing positioned ancestor layer (also includes 211 // Gets the nearest enclosing positioned ancestor layer (also includes
215 // the <html> layer and the root layer). 212 // the <html> layer and the root layer).
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 // Returns true if the layer has a -webkit-perspective. 307 // Returns true if the layer has a -webkit-perspective.
311 // Note that this transform has the perspective-origin baked in. 308 // Note that this transform has the perspective-origin baked in.
312 TransformationMatrix perspectiveTransform() const; 309 TransformationMatrix perspectiveTransform() const;
313 FloatPoint perspectiveOrigin() const; 310 FloatPoint perspectiveOrigin() const;
314 bool preserves3D() const { return renderer()->style()->transformStyle3D() == TransformStyle3DPreserve3D; } 311 bool preserves3D() const { return renderer()->style()->transformStyle3D() == TransformStyle3DPreserve3D; }
315 bool has3DTransform() const { return m_transform && !m_transform->isAffine() ; } 312 bool has3DTransform() const { return m_transform && !m_transform->isAffine() ; }
316 313
317 void filterNeedsRepaint(); 314 void filterNeedsRepaint();
318 bool hasFilter() const { return renderer()->hasFilter(); } 315 bool hasFilter() const { return renderer()->hasFilter(); }
319 316
320 bool hasBlendMode() const; 317 bool paintsWithBlendMode() const { return m_blendInfo.hasBlendMode() && comp ositingState() != PaintsIntoOwnBacking; }
321 bool paintsWithBlendMode() const { return hasBlendMode() && compositingState () != PaintsIntoOwnBacking; }
322 318
323 void* operator new(size_t); 319 void* operator new(size_t);
324 // Only safe to call from RenderLayerModelObject::destroyLayer() 320 // Only safe to call from RenderLayerModelObject::destroyLayer()
325 void operator delete(void*); 321 void operator delete(void*);
326 322
327 CompositingState compositingState() const; 323 CompositingState compositingState() const;
328 324
329 CompositedLayerMappingPtr compositedLayerMapping() const { return m_composit edLayerMapping.get(); } 325 CompositedLayerMappingPtr compositedLayerMapping() const { return m_composit edLayerMapping.get(); }
330 CompositedLayerMappingPtr ensureCompositedLayerMapping(); 326 CompositedLayerMappingPtr ensureCompositedLayerMapping();
331 327
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 // RenderObject::canContainFixedPositionedObject() should probably be us ed 418 // RenderObject::canContainFixedPositionedObject() should probably be us ed
423 // instead. 419 // instead.
424 RenderLayerModelObject* layerRenderer = renderer(); 420 RenderLayerModelObject* layerRenderer = renderer();
425 return isRootLayer() || layerRenderer->isPositioned() || hasTransform(); 421 return isRootLayer() || layerRenderer->isPositioned() || hasTransform();
426 } 422 }
427 423
428 void paintLayer(GraphicsContext*, const LayerPaintingInfo&, PaintLayerFlags) ; 424 void paintLayer(GraphicsContext*, const LayerPaintingInfo&, PaintLayerFlags) ;
429 425
430 PassOwnPtr<Vector<FloatRect> > collectTrackedRepaintRects() const; 426 PassOwnPtr<Vector<FloatRect> > collectTrackedRepaintRects() const;
431 427
428 RenderLayerBlendInfo& blendInfo() { return m_blendInfo; }
429
432 void setOffsetFromSquashingLayerOrigin(IntSize offset) { m_compositingProper ties.offsetFromSquashingLayerOrigin = offset; } 430 void setOffsetFromSquashingLayerOrigin(IntSize offset) { m_compositingProper ties.offsetFromSquashingLayerOrigin = offset; }
433 IntSize offsetFromSquashingLayerOrigin() const { return m_compositingPropert ies.offsetFromSquashingLayerOrigin; } 431 IntSize offsetFromSquashingLayerOrigin() const { return m_compositingPropert ies.offsetFromSquashingLayerOrigin; }
434 432
435 private: 433 private:
436 bool hasOverflowControls() const; 434 bool hasOverflowControls() const;
437 435
438 void setIsUnclippedDescendant(bool isUnclippedDescendant) { m_isUnclippedDes cendant = isUnclippedDescendant; } 436 void setIsUnclippedDescendant(bool isUnclippedDescendant) { m_isUnclippedDes cendant = isUnclippedDescendant; }
439 437
440 void setAncestorChainHasSelfPaintingLayerDescendant(); 438 void setAncestorChainHasSelfPaintingLayerDescendant();
441 void dirtyAncestorChainHasSelfPaintingLayerDescendantStatus(); 439 void dirtyAncestorChainHasSelfPaintingLayerDescendantStatus();
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 bool requiresScrollableArea() const { return renderBox(); } 548 bool requiresScrollableArea() const { return renderBox(); }
551 void updateScrollableArea(); 549 void updateScrollableArea();
552 550
553 // Returns true our scrollable area is in the FrameView's collection of scro llable areas. This can 551 // Returns true our scrollable area is in the FrameView's collection of scro llable areas. This can
554 // only happen if we're both scrollable, and we do in fact overflow. 552 // only happen if we're both scrollable, and we do in fact overflow.
555 bool scrollsOverflow() const; 553 bool scrollsOverflow() const;
556 554
557 void dirtyAncestorChainVisibleDescendantStatus(); 555 void dirtyAncestorChainVisibleDescendantStatus();
558 void setAncestorChainHasVisibleDescendant(); 556 void setAncestorChainHasVisibleDescendant();
559 557
560 void dirtyAncestorChainBlendedDescendantStatus();
561 void setAncestorChainBlendedDescendant();
562
563 void updateDescendantDependentFlags(); 558 void updateDescendantDependentFlags();
564 559
565 // This flag is computed by RenderLayerCompositor, which knows more about 3d hierarchies than we do. 560 // This flag is computed by RenderLayerCompositor, which knows more about 3d hierarchies than we do.
566 void setHas3DTransformedDescendant(bool b) { m_has3DTransformedDescendant = b; } 561 void setHas3DTransformedDescendant(bool b) { m_has3DTransformedDescendant = b; }
567 bool has3DTransformedDescendant() const { return m_has3DTransformedDescendan t; } 562 bool has3DTransformedDescendant() const { return m_has3DTransformedDescendan t; }
568 563
569 void dirty3DTransformedDescendantStatus(); 564 void dirty3DTransformedDescendantStatus();
570 // Both updates the status, and returns true if descendants of this have 3d. 565 // Both updates the status, and returns true if descendants of this have 3d.
571 bool update3DTransformedDescendantStatus(); 566 bool update3DTransformedDescendantStatus();
572 567
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 unsigned m_hasUnclippedDescendant : 1; 611 unsigned m_hasUnclippedDescendant : 1;
617 612
618 unsigned m_isUnclippedDescendant : 1; 613 unsigned m_isUnclippedDescendant : 1;
619 614
620 const unsigned m_isRootLayer : 1; 615 const unsigned m_isRootLayer : 1;
621 616
622 unsigned m_usedTransparency : 1; // Tracks whether we need to close a transp arent layer, i.e., whether 617 unsigned m_usedTransparency : 1; // Tracks whether we need to close a transp arent layer, i.e., whether
623 // we ended up painting this layer or any desce ndants (and therefore need to 618 // we ended up painting this layer or any desce ndants (and therefore need to
624 // blend). 619 // blend).
625 620
626 unsigned m_childLayerHasBlendMode : 1;
627 unsigned m_childLayerHasBlendModeStatusDirty : 1;
628
629 unsigned m_visibleContentStatusDirty : 1; 621 unsigned m_visibleContentStatusDirty : 1;
630 unsigned m_hasVisibleContent : 1; 622 unsigned m_hasVisibleContent : 1;
631 unsigned m_visibleDescendantStatusDirty : 1; 623 unsigned m_visibleDescendantStatusDirty : 1;
632 unsigned m_hasVisibleDescendant : 1; 624 unsigned m_hasVisibleDescendant : 1;
633 625
634 unsigned m_hasVisibleNonLayerContent : 1; 626 unsigned m_hasVisibleNonLayerContent : 1;
635 627
636 unsigned m_isPaginated : 1; // If we think this layer is split by a multi-co lumn ancestor, then this bit will be set. 628 unsigned m_isPaginated : 1; // If we think this layer is split by a multi-co lumn ancestor, then this bit will be set.
637 629
638 unsigned m_3DTransformedDescendantStatusDirty : 1; 630 unsigned m_3DTransformedDescendantStatusDirty : 1;
639 // Set on a stacking context layer that has 3D descendants anywhere 631 // Set on a stacking context layer that has 3D descendants anywhere
640 // in a preserves3D hierarchy. Hint to do 3D-aware hit testing. 632 // in a preserves3D hierarchy. Hint to do 3D-aware hit testing.
641 unsigned m_has3DTransformedDescendant : 1; 633 unsigned m_has3DTransformedDescendant : 1;
642 634
643 unsigned m_containsDirtyOverlayScrollbars : 1; 635 unsigned m_containsDirtyOverlayScrollbars : 1;
644 636
645 // This is an optimization added for <table>. 637 // This is an optimization added for <table>.
646 // Currently cells do not need to update their repaint rectangles when scrol ling. This also 638 // Currently cells do not need to update their repaint rectangles when scrol ling. This also
647 // saves a lot of time when scrolling on a table. 639 // saves a lot of time when scrolling on a table.
648 const unsigned m_canSkipRepaintRectsUpdateOnScroll : 1; 640 const unsigned m_canSkipRepaintRectsUpdateOnScroll : 1;
649 641
650 unsigned m_hasFilterInfo : 1; 642 unsigned m_hasFilterInfo : 1;
651 643
652 blink::WebBlendMode m_blendMode;
653
654 RenderLayerModelObject* m_renderer; 644 RenderLayerModelObject* m_renderer;
655 645
656 RenderLayer* m_parent; 646 RenderLayer* m_parent;
657 RenderLayer* m_previous; 647 RenderLayer* m_previous;
658 RenderLayer* m_next; 648 RenderLayer* m_next;
659 RenderLayer* m_first; 649 RenderLayer* m_first;
660 RenderLayer* m_last; 650 RenderLayer* m_last;
661 651
662 // Our current relative position offset. 652 // Our current relative position offset.
663 LayoutSize m_offsetForInFlowPosition; 653 LayoutSize m_offsetForInFlowPosition;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
722 712
723 OwnPtr<CompositedLayerMapping> m_compositedLayerMapping; 713 OwnPtr<CompositedLayerMapping> m_compositedLayerMapping;
724 OwnPtr<RenderLayerScrollableArea> m_scrollableArea; 714 OwnPtr<RenderLayerScrollableArea> m_scrollableArea;
725 715
726 CompositedLayerMapping* m_groupedMapping; 716 CompositedLayerMapping* m_groupedMapping;
727 717
728 RenderLayerRepainter m_repainter; 718 RenderLayerRepainter m_repainter;
729 RenderLayerClipper m_clipper; // FIXME: Lazily allocate? 719 RenderLayerClipper m_clipper; // FIXME: Lazily allocate?
730 OwnPtr<RenderLayerStackingNode> m_stackingNode; 720 OwnPtr<RenderLayerStackingNode> m_stackingNode;
731 OwnPtr<RenderLayerReflectionInfo> m_reflectionInfo; 721 OwnPtr<RenderLayerReflectionInfo> m_reflectionInfo;
722 RenderLayerBlendInfo m_blendInfo;
732 }; 723 };
733 724
734 } // namespace WebCore 725 } // namespace WebCore
735 726
736 #ifndef NDEBUG 727 #ifndef NDEBUG
737 // Outside the WebCore namespace for ease of invocation from gdb. 728 // Outside the WebCore namespace for ease of invocation from gdb.
738 void showLayerTree(const WebCore::RenderLayer*); 729 void showLayerTree(const WebCore::RenderLayer*);
739 void showLayerTree(const WebCore::RenderObject*); 730 void showLayerTree(const WebCore::RenderObject*);
740 #endif 731 #endif
741 732
742 #endif // RenderLayer_h 733 #endif // RenderLayer_h
OLDNEW
« no previous file with comments | « Source/core/core.gypi ('k') | Source/core/rendering/RenderLayer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698