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 UI_DISPLAY_TYPES_DISPLAY_SNAPSHOT_H_
6#define UI_DISPLAY_TYPES_DISPLAY_SNAPSHOT_H_
7
8#include <vector>
9
10#include "ui/display/types/display_constants.h"
11#include "ui/display/types/display_mode.h"
12#include "ui/gfx/geometry/point.h"
13#include "ui/gfx/geometry/size.h"
14
15namespace ui {
16
17// This class represents the state of a display at one point in time. Platforms
18// will extend this class in order to add platform specific configuration and
19// identifiers required to configure this display.
20class DISPLAY_TYPES_EXPORT DisplaySnapshot {
21 public:
22  DisplaySnapshot(int64_t display_id,
23                  bool has_proper_display_id,
24                  const gfx::Point& origin,
25                  const gfx::Size& physical_size,
26                  DisplayConnectionType type,
27                  bool is_aspect_preserving_scaling,
28                  bool has_overscan,
29                  std::string display_name,
30                  const std::vector<const DisplayMode*>& modes,
31                  const DisplayMode* current_mode,
32                  const DisplayMode* native_mode);
33  virtual ~DisplaySnapshot();
34
35  const gfx::Point& origin() const { return origin_; }
36  const gfx::Size& physical_size() const { return physical_size_; }
37  ui::DisplayConnectionType type() const { return type_; }
38  bool is_aspect_preserving_scaling() const {
39    return is_aspect_preserving_scaling_;
40  }
41  bool has_overscan() const { return has_overscan_; }
42  std::string display_name() const { return display_name_; }
43
44  int64_t display_id() const { return display_id_; }
45  bool has_proper_display_id() const { return has_proper_display_id_; }
46
47  const DisplayMode* current_mode() const { return current_mode_; }
48  const DisplayMode* native_mode() const { return native_mode_; }
49
50  const std::vector<const DisplayMode*>& modes() const { return modes_; }
51
52  void set_current_mode(const DisplayMode* mode) { current_mode_ = mode; }
53  void set_origin(const gfx::Point& origin) { origin_ = origin; }
54  void add_mode(const DisplayMode* mode) { modes_.push_back(mode); }
55
56  // Returns a textual representation of this display state.
57  virtual std::string ToString() const = 0;
58
59 protected:
60  // Display id for this output.
61  int64_t display_id_;
62  bool has_proper_display_id_;
63
64  // Display's origin on the framebuffer.
65  gfx::Point origin_;
66
67  gfx::Size physical_size_;
68
69  DisplayConnectionType type_;
70
71  bool is_aspect_preserving_scaling_;
72
73  bool has_overscan_;
74
75  std::string display_name_;
76
77  std::vector<const DisplayMode*> modes_;  // Not owned.
78
79  // Mode currently being used by the output.
80  const DisplayMode* current_mode_;
81
82  // "Best" mode supported by the output.
83  const DisplayMode* native_mode_;
84
85  DISALLOW_COPY_AND_ASSIGN(DisplaySnapshot);
86};
87
88}  // namespace ui
89
90#endif  // UI_DISPLAY_TYPES_DISPLAY_SNAPSHOT_H_
91