Home | History | Annotate | Download | only in rendering
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef ClipRectsCache_h
      6 #define ClipRectsCache_h
      7 
      8 #include "core/rendering/ClipRects.h"
      9 
     10 #if ENABLE(ASSERT)
     11 #include "core/rendering/RenderBox.h" // For OverlayScrollbarSizeRelevancy.
     12 #endif
     13 
     14 namespace blink {
     15 
     16 enum ClipRectsCacheSlot {
     17     // Relative to the ancestor treated as the root (e.g. transformed layer). Used for hit testing.
     18     RootRelativeClipRects,
     19 
     20     // Relative to the RenderView's layer. Used for compositing overlap testing.
     21     AbsoluteClipRects,
     22 
     23     // Relative to painting ancestor. Used for painting.
     24     PaintingClipRects,
     25     PaintingClipRectsIgnoringOverflowClip,
     26 
     27     NumberOfClipRectsCacheSlots,
     28     UncachedClipRects,
     29 };
     30 
     31 class ClipRectsCache {
     32     WTF_MAKE_FAST_ALLOCATED;
     33 public:
     34     struct Entry {
     35         Entry()
     36             : root(0)
     37 #if ENABLE(ASSERT)
     38             , scrollbarRelevancy(IgnoreOverlayScrollbarSize)
     39 #endif
     40         {
     41         }
     42 
     43         const RenderLayer* root;
     44         RefPtr<ClipRects> clipRects;
     45 #if ENABLE(ASSERT)
     46         OverlayScrollbarSizeRelevancy scrollbarRelevancy;
     47 #endif
     48     };
     49 
     50     Entry& get(ClipRectsCacheSlot slot)
     51     {
     52         ASSERT(slot < NumberOfClipRectsCacheSlots);
     53         return m_entries[slot];
     54     }
     55 
     56     void clear(ClipRectsCacheSlot slot)
     57     {
     58         ASSERT(slot < NumberOfClipRectsCacheSlots);
     59         m_entries[slot] = Entry();
     60     }
     61 
     62 private:
     63     Entry m_entries[NumberOfClipRectsCacheSlots];
     64 };
     65 
     66 } // namespace blink
     67 
     68 #endif // ClipRectsCache_h
     69