1 /*
2  * Copyright 2016 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef GrWindowRectsState_DEFINED
9 #define GrWindowRectsState_DEFINED
10 
11 #include "GrWindowRectangles.h"
12 
13 class GrWindowRectsState {
14 public:
15     enum class Mode : bool {
16         kExclusive,
17         kInclusive
18     };
19 
20     GrWindowRectsState() : fMode(Mode::kExclusive) {}
21     GrWindowRectsState(const GrWindowRectangles& windows, Mode mode)
22         : fMode(mode)
23         , fWindows(windows) {
24     }
25 
26     bool enabled() const { return Mode::kInclusive == fMode || !fWindows.empty(); }
27     Mode mode() const { return fMode; }
28     const GrWindowRectangles& windows() const { return fWindows; }
29     int numWindows() const { return fWindows.count(); }
30 
31     void setDisabled() {
32         fMode = Mode::kExclusive;
33         fWindows.reset();
34     }
35 
36     void set(const GrWindowRectangles& windows, Mode mode) {
37         fMode = mode;
38         fWindows = windows;
39     }
40 
41     bool operator==(const GrWindowRectsState& that) const {
42         if (fMode != that.fMode) {
43             return false;
44         }
45         return fWindows == that.fWindows;
46     }
47     bool operator!=(const GrWindowRectsState& that) const { return !(*this == that); }
48 
49 private:
50     Mode                 fMode;
51     GrWindowRectangles   fWindows;
52 };
53 
54 #endif
55