display_manager.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// Copyright (c) 2012 The Chromium Authors. All rights reserved.
28a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// Use of this source code is governed by a BSD-style license that can be
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// found in the LICENSE file.
48a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#ifndef ASH_DISPLAY_DISPLAY_MANAGER_H_
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#define ASH_DISPLAY_DISPLAY_MANAGER_H_
78a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include <string>
9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#include <vector>
108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "ash/ash_export.h"
128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "ash/display/display_info.h"
138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "base/compiler_specific.h"
14fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com#include "base/gtest_prod_util.h"
15629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com#include "ui/aura/root_window_observer.h"
16629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com#include "ui/aura/window.h"
17629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com
18629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.comnamespace gfx {
198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass Display;
208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass Insets;
218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass Rect;
22fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com}
23fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com
24fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.comnamespace ash {
25fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.comclass AcceleratorControllerTest;
26fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.comnamespace test {
27fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.comclass DisplayManagerTestApi;
28fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.comclass SystemGestureEventFilterTest;
29fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com}
30fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.comnamespace internal {
31fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com
32fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com// DisplayManager maintains the current display configurations,
33fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com// and notifies observers when configuration changes.
34fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com// This is exported for unittest.
35fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com//
36fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com// TODO(oshima): Make this non internal.
37fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.comclass ASH_EXPORT DisplayManager : public aura::RootWindowObserver {
38fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com public:
39fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  DisplayManager();
40fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  virtual ~DisplayManager();
41fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com
42fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // Used to emulate display change when run in a desktop environment instead
43fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // of on a device.
44fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  static void CycleDisplay();
45fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  static void ToggleDisplayScaleFactor();
46fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com
47fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // Returns next valid UI scale.
48fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  static float GetNextUIScale(float scale, bool up);
49fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
50fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // When set to true, the MonitorManager calls OnDisplayBoundsChanged
51fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // even if the display's bounds didn't change. Used to swap primary
52fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // display.
53fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  void set_force_bounds_changed(bool force_bounds_changed) {
548b06f1a7ff6d5a59387a90433064550de20787eereed@google.com    force_bounds_changed_ = force_bounds_changed;
558b06f1a7ff6d5a59387a90433064550de20787eereed@google.com  }
568b06f1a7ff6d5a59387a90433064550de20787eereed@google.com
578b06f1a7ff6d5a59387a90433064550de20787eereed@google.com  // Returns the display id of the first display in the outupt list.
588b06f1a7ff6d5a59387a90433064550de20787eereed@google.com  int64 first_display_id() const { return first_display_id_; }
598b06f1a7ff6d5a59387a90433064550de20787eereed@google.com
608b06f1a7ff6d5a59387a90433064550de20787eereed@google.com  // True if the given |display| is currently connected.
618b06f1a7ff6d5a59387a90433064550de20787eereed@google.com  bool IsActiveDisplay(const gfx::Display& display) const;
628b06f1a7ff6d5a59387a90433064550de20787eereed@google.com
63fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // True if there is an internal display.
64fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  bool HasInternalDisplay() const;
65fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com
66fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  bool IsInternalDisplayId(int64 id) const;
67fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com
68fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  bool UpdateWorkAreaOfDisplayNearestWindow(const aura::Window* window,
69fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com                                            const gfx::Insets& insets);
70fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com
71fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // Returns display for given |id|;
72fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  const gfx::Display& GetDisplayForId(int64 id) const;
73fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com
74fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // Finds the display that contains |point| in screeen coordinates.
75fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // Returns invalid display if there is no display that can satisfy
76fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // the condition.
77fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  const gfx::Display& FindDisplayContainingPoint(
78fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com      const gfx::Point& point_in_screen) const;
79fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com
80fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // Registers the overscan insets for the display of the specified ID. Note
81fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // that the insets size should be specified in DIP size. It also triggers the
82fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // display's bounds change.
83fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  void SetOverscanInsets(int64 display_id, const gfx::Insets& insets_in_dip);
84fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com
85fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // Clears the overscan insets
86fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  void ClearCustomOverscanInsets(int64 display_id);
87fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com
88fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // Sets the display's rotation.
89fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  void SetDisplayRotation(int64 display_id, gfx::Display::Rotation rotation);
90fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com
91fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // Sets the display's ui scale.
92fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  void SetDisplayUIScale(int64 display_id, float ui_scale);
93fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com
94fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // Register per display properties. |overscan_insets| is NULL if
95fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // the display has no custom overscan insets.
96fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  void RegisterDisplayProperty(int64 display_id,
97fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com                               gfx::Display::Rotation rotation,
98fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com                               float ui_scale,
998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                               const gfx::Insets* overscan_insets);
1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // Tells if display rotation/ui scaling features are enabled.
1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  bool IsDisplayRotationEnabled() const;
1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  bool IsDisplayUIScalingEnabled() const;
1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // Returns the current overscan insets for the specified |display_id|.
1068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // Returns an empty insets (0, 0, 0, 0) if no insets are specified for
1077ffb1b21abcc7bbed5a0fc711f6dd7b9dbb4f577ctguil@chromium.org  // the display.
1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  gfx::Insets GetOverscanInsets(int64 display_id) const;
1090456e0b7b85060e9b9597ce414c4c2b19aff4f58robertphillips@google.com
1100456e0b7b85060e9b9597ce414c4c2b19aff4f58robertphillips@google.com  // Called when display configuration has changed. The new display
1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // configurations is passed as a vector of Display object, which
1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // contains each display's new infomration.
113fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  void OnNativeDisplaysChanged(
114fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com      const std::vector<DisplayInfo>& display_info_list);
115fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com
116fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // Updates the internal display data and notifies observers about the changes.
117fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  void UpdateDisplays(const std::vector<DisplayInfo>& display_info_list);
118fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com
119fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // Updates current displays using current |display_info_|.
120fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  void UpdateDisplays();
121fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com
122fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // Obsoleted: Do not use in new code.
123fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // Returns the display at |index|. The display at 0 is
124fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  // no longer considered "primary".
125fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  gfx::Display* GetDisplayAt(size_t index);
126fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com
127fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com  const gfx::Display* GetPrimaryDisplayCandidate() const;
128fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.com
1298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // Returns the logical number of displays. This returns 1
130e4f10a70807166484e5a6303a5cd0034e5e87abareed@google.com  // when displays are mirrored.
131e4f10a70807166484e5a6303a5cd0034e5e87abareed@google.com  size_t GetNumDisplays() const;
132e4f10a70807166484e5a6303a5cd0034e5e87abareed@google.com
133e4f10a70807166484e5a6303a5cd0034e5e87abareed@google.com  // Returns the number of connected displays. This returns 2
134e4f10a70807166484e5a6303a5cd0034e5e87abareed@google.com  // when displays are mirrored.
135e4f10a70807166484e5a6303a5cd0034e5e87abareed@google.com  size_t num_connected_displays() const { return num_connected_displays_; }
136629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com
137629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  // Returns the mirroring status.
138629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  bool IsMirrored() const;
139687c57c7d5a17549f63e0b15208db18b220e2a91skia.committer@gmail.com  int64 mirrored_display_id() const { return mirrored_display_id_; }
140629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com
141629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  // Returns the display object nearest given |window|.
142629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  const gfx::Display& GetDisplayNearestPoint(
143629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com      const gfx::Point& point) const;
144935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com
145935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com  // Returns the display object nearest given |point|.
146935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com  const gfx::Display& GetDisplayNearestWindow(
147629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com      const aura::Window* window) const;
148687c57c7d5a17549f63e0b15208db18b220e2a91skia.committer@gmail.com
149629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  // Returns the display that most closely intersects |match_rect|.
150629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  const gfx::Display& GetDisplayMatching(
151935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com      const gfx::Rect& match_rect)const;
152935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com
153935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com  // Retuns the display info associated with |display_id|.
154629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  const DisplayInfo& GetDisplayInfo(int64 display_id) const;
155629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com
156629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  // Returns the human-readable name for the display |id|.
157629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  std::string GetDisplayNameForId(int64 id);
158629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com
159629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  // RootWindowObserver overrides:
160629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  virtual void OnRootWindowResized(const aura::RootWindow* root,
161629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com                                   const gfx::Size& new_size) OVERRIDE;
162629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com
163629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com private:
164629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  FRIEND_TEST_ALL_PREFIXES(ExtendedDesktopTest, ConvertPoint);
165629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  FRIEND_TEST_ALL_PREFIXES(DisplayManagerTest, TestNativeDisplaysChanged);
166629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  FRIEND_TEST_ALL_PREFIXES(DisplayManagerTest,
167935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com                           NativeDisplaysChangedAfterPrimaryChange);
168935ad026826fb7d31d562ff7326b84ec3a827456robertphillips@google.com  FRIEND_TEST_ALL_PREFIXES(DisplayManagerTest, AutomaticOverscanInsets);
169629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  friend class ash::AcceleratorControllerTest;
170629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  friend class test::DisplayManagerTestApi;
171629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  friend class DisplayManagerTest;
1726d87557278052c131957e5d6e093d3a675162d22robertphillips@google.com  friend class test::SystemGestureEventFilterTest;
1736d87557278052c131957e5d6e093d3a675162d22robertphillips@google.com
1746d87557278052c131957e5d6e093d3a675162d22robertphillips@google.com  typedef std::vector<gfx::Display> DisplayList;
175629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com
176629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  void set_change_display_upon_host_resize(bool value) {
177629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com    change_display_upon_host_resize_ = value;
178629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  }
179629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com
180629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  void Init();
181687c57c7d5a17549f63e0b15208db18b220e2a91skia.committer@gmail.com  void CycleDisplayImpl();
182629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com  void ScaleDisplayImpl();
183629ab540667422d3edcb97c51e9628b7051e1ba4robertphillips@google.com
184ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com  gfx::Display& FindDisplayForRootWindow(const aura::RootWindow* root);
185ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com  gfx::Display& FindDisplayForId(int64 id);
186ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com
1878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // Refer to |CreateDisplayFromSpec| API for the format of |spec|.
1888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  void AddDisplayFromSpec(const std::string& spec);
1898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // Checks if the mouse pointer is on one of displays, and moves to
191ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com  // the center of the nearest display if it's outside of all displays.
192ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com  void EnsurePointerInDisplays();
1938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // Inserts and update the DisplayInfo according to the overscan
1958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // state. Note that The DisplayInfo stored in the |internal_display_info_|
1968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // can be different from |new_info| (due to overscan state), so
1978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // you must use |GetDisplayInfo| to get the correct DisplayInfo for
1988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // a display.
1998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  void InsertAndUpdateDisplayInfo(const DisplayInfo& new_info);
2008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
2018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // Creates a display object from the DisplayInfo for |display_id|.
2028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  gfx::Display CreateDisplayFromDisplayInfoById(int64 display_id);
2038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
2048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  int64 first_display_id_;
2058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
2068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  int64 mirrored_display_id_;
2078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
20854924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com  // List of current active dispays.
20954924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com  DisplayList displays_;
2108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
2118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  int num_connected_displays_;
212fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
2138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // An internal display info cache used when the internal display is
2148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // disconnectd.
2158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  scoped_ptr<DisplayInfo> internal_display_info_;
2168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
2178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  bool force_bounds_changed_;
2188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
2198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // The mapping from the display ID to its internal data.
2208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  std::map<int64, DisplayInfo> display_info_;
2218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
2228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // When set to true, the host window's resize event updates
2238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // the display's size. This is set to true when running on
2248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // desktop environment (for debugging) so that resizing the host
2258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // window wil update the display properly. This is set to false
2268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  // on device as well as during the unit tests.
2278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  bool change_display_upon_host_resize_;
2288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
2298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com  DISALLOW_COPY_AND_ASSIGN(DisplayManager);
2308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
2318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
232fd4be26c4202ae91f0f7cf2c03e44b5169d885ebreed@google.comextern const aura::WindowProperty<int64>* const kDisplayIdKey;
2338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
234ba28d03e94dc221d6a803bf2a84a420b9159255cdjsollen@google.com}  // namespace internal
2358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}  // namespace ash
23654924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com
2378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif  // ASH_DISPLAY_DISPLAY_MANAGER_H_
2388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com