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