screen_ash.h revision cedac228d2dd51db4b79ea1e72c7f249408ee061
17765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org// Copyright 2014 The Chromium Authors. All rights reserved. 27765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org// Use of this source code is governed by a BSD-style license that can be 37765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org// found in the LICENSE file. 47765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org 57765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org#ifndef ASH_DISPLAY_SCREEN_ASH_H_ 67765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org#define ASH_DISPLAY_SCREEN_ASH_H_ 77765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org 87765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org#include "ash/ash_export.h" 97765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org#include "base/compiler_specific.h" 107765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org#include "base/observer_list.h" 117765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org#include "ui/gfx/display_observer.h" 127765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org#include "ui/gfx/screen.h" 137765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org 147765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.orgnamespace gfx { 157765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.orgclass Rect; 167765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org} 177765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org 187765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.orgnamespace ash { 197765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.orgnamespace internal { 207765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.orgclass DisplayManager; 217765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org} 227765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org 237765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org// Aura implementation of gfx::Screen. Implemented here to avoid circular 247765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org// dependencies. 25ace65784417788374f0b19ce5a8abd06c9ccd007johannkoenig@chromium.orgclass ASH_EXPORT ScreenAsh : public gfx::Screen { 267765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org public: 277765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org ScreenAsh(); 287765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org virtual ~ScreenAsh(); 297765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org 307765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org // Finds the display that contains |point| in screeen coordinates. 317765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org // Returns invalid display if there is no display that can satisfy 327765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org // the condition. 337765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org static gfx::Display FindDisplayContainingPoint(const gfx::Point& point); 347765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org 357765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org // Returns the bounds for maximized windows in parent coordinates. 367765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org // Maximized windows trigger auto-hiding the shelf. 377765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org static gfx::Rect GetMaximizedWindowBoundsInParent(aura::Window* window); 387765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org 397765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org // Returns the display bounds in parent coordinates. 407765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org static gfx::Rect GetDisplayBoundsInParent(aura::Window* window); 417765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org 427765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org // Returns the display's work area bounds in parent coordinates. 437765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org static gfx::Rect GetDisplayWorkAreaBoundsInParent(aura::Window* window); 447765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org 457765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org // Converts |rect| from |window|'s coordinates to the virtual screen 467765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org // coordinates. 477765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org static gfx::Rect ConvertRectToScreen(aura::Window* window, 487765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org const gfx::Rect& rect); 497765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org 507765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org // Converts |rect| from virtual screen coordinates to the |window|'s 517765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org // coordinates. 527765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org static gfx::Rect ConvertRectFromScreen(aura::Window* window, 537765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org const gfx::Rect& rect); 547765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org 557765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org // Returns a gfx::Display object for secondary display. Returns 567765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org // invalid display if there is no secondary display connected. 577765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org static const gfx::Display& GetSecondaryDisplay(); 587765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org 597765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org // Returns a gfx::Display object for the specified id. Returns 607765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org // invalid display if no such display is connected. 617765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org static const gfx::Display& GetDisplayForId(int64 display_id); 627765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org 637765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org // gfx::Screen overrides: 647765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org virtual bool IsDIPEnabled() OVERRIDE; 657765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org virtual gfx::Point GetCursorScreenPoint() OVERRIDE; 667765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org virtual gfx::NativeWindow GetWindowUnderCursor() OVERRIDE; 677765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org virtual gfx::NativeWindow GetWindowAtScreenPoint(const gfx::Point& point) 687765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org OVERRIDE; 697765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org virtual int GetNumDisplays() const OVERRIDE; 707765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org virtual std::vector<gfx::Display> GetAllDisplays() const OVERRIDE; 717765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org virtual gfx::Display GetDisplayNearestWindow( 727765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org gfx::NativeView view) const OVERRIDE; 737765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org virtual gfx::Display GetDisplayNearestPoint( 747765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org const gfx::Point& point) const OVERRIDE; 757765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org virtual gfx::Display GetDisplayMatching( 767765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org const gfx::Rect& match_rect) const OVERRIDE; 777765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org virtual gfx::Display GetPrimaryDisplay() const OVERRIDE; 787765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org virtual void AddObserver(gfx::DisplayObserver* observer) OVERRIDE; 797765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org virtual void RemoveObserver(gfx::DisplayObserver* observer) OVERRIDE; 807765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org 817765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org private: 827765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org friend class DisplayManager; 837765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org 847765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org // Notifies observers of display configuration changes. 857765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org void NotifyMetricsChanged(const gfx::Display& display, uint32_t metrics); 867765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org void NotifyDisplayAdded(const gfx::Display& display); 877765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org void NotifyDisplayRemoved(const gfx::Display& display); 8888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 897765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org // Creates a screen that can be used during shutdown. 9041294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org // It simply has a copy of the displays. 917765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org gfx::Screen* CloneForShutdown(); 927765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org 9341294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org ObserverList<gfx::DisplayObserver> observers_; 94d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org 957765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org DISALLOW_COPY_AND_ASSIGN(ScreenAsh); 96ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org}; 9788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 9841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org} // namespace ash 99e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org 10087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org#endif // ASH_DISPLAY_SCREEN_ASH_H_ 1017765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org