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