1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file.
4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef UI_VIEWS_CULL_SET_H_
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define UI_VIEWS_CULL_SET_H_
7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/containers/hash_tables.h"
9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/macros.h"
10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/views/views_export.h"
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace views {
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class View;
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// A CullSet defines a set of View pointers which have been possibly culled
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// from painting or other bounds-checking operations. It wraps a set of
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// pointers to views, or NULL if no such set is available.
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class VIEWS_EXPORT CullSet {
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public:
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Default constructor builds a CullSet that will always return true for
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // ShouldPaint().
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  CullSet();
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ~CullSet();
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Wraps a set of pointers to Views, as might be provided by
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // gfx::RTree::Query(), that intersect the damage rect and therefore need
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // to be painted. CullSet takes ownership of the provided pointer.
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  CullSet(scoped_ptr<base::hash_set<intptr_t> > cull_set);
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Returns true if |view| needs to be painted.
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool ShouldPaint(const View* view) const;
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private:
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  friend class BoundsTreeTestView;
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // The set of Views that collided with the query rectangle provided to the
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // RTree data structure, or NULL if one is not available.
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  scoped_ptr<base::hash_set<intptr_t> > cull_set_;
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(CullSet);
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // namespace views
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif  // UI_VIEWS_CULL_SET_H_
48