15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// Copyright 2013 The Chromium Authors. All rights reserved.
25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// Use of this source code is governed by a BSD-style license that can be
35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// found in the LICENSE file.
45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner#ifndef ASH_DISPLAY_DISPLAY_CHANGE_OBSERVER_CHROMEOS_H
60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner#define ASH_DISPLAY_DISPLAY_CHANGE_OBSERVER_CHROMEOS_H
75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "ash/ash_export.h"
95f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "ash/shell_observer.h"
105f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "base/basictypes.h"
115f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "ui/display/chromeos/display_configurator.h"
125f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "ui/events/input_device_event_observer.h"
135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencernamespace ash {
155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencerclass DisplayInfo;
1730a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruthstruct DisplayMode;
1830a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth
19d7a3e2c5f61cd4893f95b69a424fe4def3aa0f69Benjamin Kramer// An object that observes changes in display configuration and
208b5b4099c61a136e9a1714c4d8a593febe942268Sebastian Redl// update DisplayManagers.
211734317845d60307d474b5da8a8d33adbaf5e723Douglas Gregorclass DisplayChangeObserver : public ui::DisplayConfigurator::StateController,
2230a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth                              public ui::DisplayConfigurator::Observer,
230b6bc8bd7a1d2a7d7478d13d78cff94cacad61fcDouglas Gregor                              public ui::InputDeviceEventObserver,
24d7a3e2c5f61cd4893f95b69a424fe4def3aa0f69Benjamin Kramer                              public ShellObserver {
2582bfa19fe3be324b13fdbcda46304b52c500f0d4Aaron Ballman public:
2630a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth  // Returns the mode list for internal display.
27fb22d96692c5240fb8d611290dbf7eeed3759c73Steve Naroff  ASH_EXPORT static std::vector<DisplayMode> GetInternalDisplayModeList(
285cf243a883872441d73ca49cea7e20de5802629bChris Lattner      const DisplayInfo& display_info,
29cded4f649cd4b7ba7d461c25c6482ef52b8d3a2aDouglas Gregor      const ui::DisplayConfigurator::DisplayState& output);
305cf243a883872441d73ca49cea7e20de5802629bChris Lattner
311734317845d60307d474b5da8a8d33adbaf5e723Douglas Gregor  // Returns the resolution list.
327ad5c996e9519ed4e9afd1f0166be1cd2be8415aArgyrios Kyrtzidis  ASH_EXPORT static std::vector<DisplayMode> GetExternalDisplayModeList(
3330a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth      const ui::DisplayConfigurator::DisplayState& output);
3430a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth
357532dc66648cfe7432c9fe66dec5225f0ab301c6Douglas Gregor  DisplayChangeObserver();
366b304a0254a13f42390b865ff5ba668a49cc58aeJohn McCall  virtual ~DisplayChangeObserver();
376b304a0254a13f42390b865ff5ba668a49cc58aeJohn McCall
38f7616b9067790757f4e12e834b216c53c8c04ebeDouglas Gregor  // ui::DisplayConfigurator::StateController overrides:
396b304a0254a13f42390b865ff5ba668a49cc58aeJohn McCall  virtual ui::MultipleDisplayState GetStateForDisplayIds(
406b304a0254a13f42390b865ff5ba668a49cc58aeJohn McCall      const std::vector<int64>& outputs) const OVERRIDE;
41aed1df80bf64228e1429c1edc408397f9174847cChris Lattner  virtual bool GetResolutionForDisplayId(int64 display_id,
42aed1df80bf64228e1429c1edc408397f9174847cChris Lattner                                         gfx::Size* size) const OVERRIDE;
43aed1df80bf64228e1429c1edc408397f9174847cChris Lattner
446b304a0254a13f42390b865ff5ba668a49cc58aeJohn McCall  // Overriden from ui::DisplayConfigurator::Observer:
455f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  virtual void OnDisplayModeChanged(
464e7072872e8e2ed76a4c6933424bffa253896e7eChris Lattner      const ui::DisplayConfigurator::DisplayStateList& outputs) OVERRIDE;
474e7072872e8e2ed76a4c6933424bffa253896e7eChris Lattner
48daae940507f2e93c6fa12e8062fa958e34cc2d1cChris Lattner  // Overriden from ui::InputDeviceEventObserver:
49bfadf55ba5b736b13cc3e0fbc2b184569bc9f304Chris Lattner  virtual void OnInputDeviceConfigurationChanged() OVERRIDE;
50bfadf55ba5b736b13cc3e0fbc2b184569bc9f304Chris Lattner
51bfadf55ba5b736b13cc3e0fbc2b184569bc9f304Chris Lattner  // Overriden from ShellObserver:
52bfadf55ba5b736b13cc3e0fbc2b184569bc9f304Chris Lattner  virtual void OnAppTerminating() OVERRIDE;
53bfadf55ba5b736b13cc3e0fbc2b184569bc9f304Chris Lattner
54bfadf55ba5b736b13cc3e0fbc2b184569bc9f304Chris Lattner  // Exposed for testing.
55bfadf55ba5b736b13cc3e0fbc2b184569bc9f304Chris Lattner  ASH_EXPORT static float FindDeviceScaleFactor(float dpi);
566b304a0254a13f42390b865ff5ba668a49cc58aeJohn McCall
57bfadf55ba5b736b13cc3e0fbc2b184569bc9f304Chris Lattner private:
580953e767ff7817f97b3ab20896b229891eeff45bJohn McCall  DISALLOW_COPY_AND_ASSIGN(DisplayChangeObserver);
590953e767ff7817f97b3ab20896b229891eeff45bJohn McCall};
600953e767ff7817f97b3ab20896b229891eeff45bJohn McCall
610953e767ff7817f97b3ab20896b229891eeff45bJohn McCall}  // namespace ash
620953e767ff7817f97b3ab20896b229891eeff45bJohn McCall
630953e767ff7817f97b3ab20896b229891eeff45bJohn McCall#endif  // ASH_DISPLAY_AURA_DISPLAY_CHANGE_OBSERVER_CHROMEOS_H
640953e767ff7817f97b3ab20896b229891eeff45bJohn McCall