display_controller.h revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef ASH_DISPLAY_DISPLAY_CONTROLLER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ASH_DISPLAY_DISPLAY_CONTROLLER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ash/ash_export.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/display/display_layout.h" 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ash/display/display_manager.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/observer_list.h" 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ui/aura/root_window_observer.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/display_observer.h" 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ui/gfx/point.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Display; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RootWindow; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Value; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <typename T> class JSONValueConverter; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace gfx { 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass Display; 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass Insets; 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internal { 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass DisplayInfo; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DisplayManager; 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class FocusActivationStore; 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass MirrorWindowController; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RootWindowController; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DisplayController owns and maintains RootWindows for each attached 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// display, keeping them in sync with display configuration changes. 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass ASH_EXPORT DisplayController : public gfx::DisplayObserver, 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public aura::RootWindowObserver, 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public internal::DisplayManager::Delegate { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class ASH_EXPORT Observer { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoked when the display configuration change is requested, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // but before the change is applied to aura/ash. 57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void OnDisplayConfigurationChanging() {} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Invoked when the all display configuration changes 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // have been applied. 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnDisplayConfigurationChanged() {}; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Observer() {} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DisplayController(); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DisplayController(); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Start(); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Shutdown(); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns primary display. This is safe to use after ash::Shell is 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // deleted. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const gfx::Display& GetPrimaryDisplay(); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the number of display. This is safe to use after 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ash::Shell is deleted. 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static int GetNumDisplays(); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch internal::MirrorWindowController* mirror_window_controller() { 827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return mirror_window_controller_.get(); 837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initializes primary display. 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void InitPrimaryDisplay(); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initialize secondary displays. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void InitSecondaryDisplays(); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add/Remove observers. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddObserver(Observer* observer); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveObserver(Observer* observer); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the root window for primary display. 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) aura::RootWindow* GetPrimaryRootWindow(); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the root window for |display_id|. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) aura::RootWindow* GetRootWindowForDisplayId(int64 id); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Toggle mirror mode. 10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void ToggleMirrorMode(); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Swap primary and secondary display. 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SwapPrimaryDisplay(); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the ID of the primary display. If the display is not connected, it 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // will switch the primary display when connected. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetPrimaryDisplayId(int64 id); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets primary display. This re-assigns the current root 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // window to given |display|. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetPrimaryDisplay(const gfx::Display& display); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the secondary display. 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Display* GetSecondaryDisplay(); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Closes all child windows in the all root windows. 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CloseChildWindows(); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns all root windows. In non extended desktop mode, this 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // returns the primary root window only. 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<aura::RootWindow*> GetAllRootWindows(); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns all oot window controllers. In non extended desktop 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mode, this return a RootWindowController for the primary root window only. 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<internal::RootWindowController*> GetAllRootWindowControllers(); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Gets/Sets/Clears the overscan insets for the specified |display_id|. See 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // display_manager.h for the details. 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Insets GetOverscanInsets(int64 display_id) const; 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetOverscanInsets(int64 display_id, const gfx::Insets& insets_in_dip); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets the layout for the current display pair. The |layout| specifies 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the locaion of the secondary display relative to the primary. 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetLayoutForCurrentDisplays(const DisplayLayout& layout); 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the display layout used for current displays. 139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DisplayLayout GetCurrentDisplayLayout(); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the current display pair. 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DisplayIdPair GetCurrentDisplayIdPair() const; 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Checks if the mouse pointer is on one of displays, and moves to 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // the center of the nearest display if it's outside of all displays. 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void EnsurePointerInDisplays(); 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Sets the work area's |insets| to the display assigned to |window|. 1497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool UpdateWorkAreaOfDisplayNearestWindow(const aura::Window* window, 1507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const gfx::Insets& insets); 1517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Returns the display object nearest given |point|. 1537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const gfx::Display& GetDisplayNearestPoint( 1547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const gfx::Point& point) const; 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Returns the display object nearest given |window|. 1577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const gfx::Display& GetDisplayNearestWindow( 1587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const aura::Window* window) const; 1597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Returns the display that most closely intersects |match_rect|. 1617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const gfx::Display& GetDisplayMatching( 1627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const gfx::Rect& match_rect)const; 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // aura::DisplayObserver overrides: 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnDisplayBoundsChanged( 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Display& display) OVERRIDE; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnDisplayAdded(const gfx::Display& display) OVERRIDE; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnDisplayRemoved(const gfx::Display& display) OVERRIDE; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // RootWindowObserver overrides: 1717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void OnRootWindowHostResized(const aura::RootWindow* root) OVERRIDE; 1727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // aura::DisplayManager::Delegate overrides: 1747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void CreateOrUpdateMirrorWindow( 1757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const internal::DisplayInfo& info) OVERRIDE; 1767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void CloseMirrorWindow() OVERRIDE; 1777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void PreDisplayConfigurationChange() OVERRIDE; 1787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void PostDisplayConfigurationChange() OVERRIDE; 1797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class internal::DisplayManager; 182eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch friend class internal::MirrorWindowController; 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Returns a display the |root| is assigned to for modification. 1857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Returns NULL if the no display is assigned, or the root window is 1867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // for mirroring. 1877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch gfx::Display* FindDisplayForRootWindow(const aura::RootWindow* root); 1887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a root window for |display| and stores it in the |root_windows_| 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // map. 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) aura::RootWindow* AddRootWindowForDisplay(const gfx::Display& display); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateDisplayBoundsForLayout(); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetLayoutForDisplayIdPair(const DisplayIdPair& display_pair, 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const DisplayLayout& layout); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnFadeOutForSwapDisplayFinished(); 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 200eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void UpdateHostWindowNames(); 201eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class DisplayChangeLimiter { 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DisplayChangeLimiter(); 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets how long the throttling should last. 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetThrottleTimeout(int64 throttle_ms); 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool IsThrottled() const; 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The time when the throttling ends. 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Time throttle_timeout_; 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DisplayChangeLimiter); 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The limiter to throttle how fast a user can 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // change the display configuration. 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<DisplayChangeLimiter> limiter_; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The mapping from display ID to its root window. 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<int64, aura::RootWindow*> root_windows_; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ObserverList<Observer> observers_; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Store the primary root window temporarily while replacing 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // display. 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) aura::RootWindow* primary_root_window_for_replace_; 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<internal::FocusActivationStore> focus_activation_store_; 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<internal::MirrorWindowController> mirror_window_controller_; 2357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Stores the curent cursor location (in native coordinates) used to 2377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // restore the cursor location when display configuration 2387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // changed. 2397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch gfx::Point cursor_location_in_native_coords_for_restore_; 2407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(DisplayController); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ash 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // ASH_DISPLAY_DISPLAY_CONTROLLER_H_ 247