1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef ASH_DISPLAY_DISPLAY_CHANGE_OBSERVER_CHROMEOS_H
6#define ASH_DISPLAY_DISPLAY_CHANGE_OBSERVER_CHROMEOS_H
7
8#include "ash/ash_export.h"
9#include "ash/shell_observer.h"
10#include "base/basictypes.h"
11#include "ui/display/chromeos/display_configurator.h"
12#include "ui/events/input_device_event_observer.h"
13
14namespace ash {
15
16class DisplayInfo;
17struct DisplayMode;
18
19// An object that observes changes in display configuration and
20// update DisplayManagers.
21class DisplayChangeObserver : public ui::DisplayConfigurator::StateController,
22                              public ui::DisplayConfigurator::Observer,
23                              public ui::InputDeviceEventObserver,
24                              public ShellObserver {
25 public:
26  // Returns the mode list for internal display.
27  ASH_EXPORT static std::vector<DisplayMode> GetInternalDisplayModeList(
28      const DisplayInfo& display_info,
29      const ui::DisplayConfigurator::DisplayState& output);
30
31  // Returns the resolution list.
32  ASH_EXPORT static std::vector<DisplayMode> GetExternalDisplayModeList(
33      const ui::DisplayConfigurator::DisplayState& output);
34
35  DisplayChangeObserver();
36  virtual ~DisplayChangeObserver();
37
38  // ui::DisplayConfigurator::StateController overrides:
39  virtual ui::MultipleDisplayState GetStateForDisplayIds(
40      const std::vector<int64>& outputs) const OVERRIDE;
41  virtual bool GetResolutionForDisplayId(int64 display_id,
42                                         gfx::Size* size) const OVERRIDE;
43
44  // Overriden from ui::DisplayConfigurator::Observer:
45  virtual void OnDisplayModeChanged(
46      const ui::DisplayConfigurator::DisplayStateList& outputs) OVERRIDE;
47
48  // Overriden from ui::InputDeviceEventObserver:
49  virtual void OnInputDeviceConfigurationChanged() OVERRIDE;
50
51  // Overriden from ShellObserver:
52  virtual void OnAppTerminating() OVERRIDE;
53
54  // Exposed for testing.
55  ASH_EXPORT static float FindDeviceScaleFactor(float dpi);
56
57 private:
58  DISALLOW_COPY_AND_ASSIGN(DisplayChangeObserver);
59};
60
61}  // namespace ash
62
63#endif  // ASH_DISPLAY_AURA_DISPLAY_CHANGE_OBSERVER_CHROMEOS_H
64