• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009, 2010 Apple Inc. All rights reserved.
3  * Copyright (C) 2014 Google Inc. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26 
27 #ifndef CompositingRequirementsUpdater_h
28 #define CompositingRequirementsUpdater_h
29 
30 #include "platform/geometry/IntRect.h"
31 #include "platform/graphics/CompositingReasons.h"
32 #include "wtf/Vector.h"
33 
34 namespace blink {
35 
36 class CompositingReasonFinder;
37 class RenderLayer;
38 class RenderView;
39 
40 class CompositingRequirementsUpdater {
41 public:
42     CompositingRequirementsUpdater(RenderView&, CompositingReasonFinder&);
43     ~CompositingRequirementsUpdater();
44 
45     //  Recurse through the layers in z-index and overflow order (which is equivalent to painting order)
46     //  For the z-order children of a compositing layer:
47     //      If a child layers has a compositing layer, then all subsequent layers must
48     //      be compositing in order to render above that layer.
49     //
50     //      If a child in the negative z-order list is compositing, then the layer itself
51     //      must be compositing so that its contents render over that child.
52     //      This implies that its positive z-index children must also be compositing.
53     //
54     void update(RenderLayer* root);
55 
56 private:
57     class OverlapMap;
58     class RecursionData;
59 
60     void updateRecursive(RenderLayer* ancestorLayer, RenderLayer* currentLayer, OverlapMap&, RecursionData&, bool& descendantHas3DTransform, Vector<RenderLayer*>& unclippedDescendants, IntRect& absoluteDecendantBoundingBox);
61 
62     RenderView& m_renderView;
63     CompositingReasonFinder& m_compositingReasonFinder;
64 };
65 
66 } // namespace blink
67 
68 #endif // CompositingRequirementsUpdater_h
69