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