display_change_observer_chromeos.h revision 5f1c94371a64b3196d4be9466099bb892df9b88e
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
13namespace ash {
14
15class DisplayInfo;
16struct DisplayMode;
17
18// An object that observes changes in display configuration and
19// update DisplayManagers.
20class DisplayChangeObserver : public ui::DisplayConfigurator::StateController,
21                              public ui::DisplayConfigurator::Observer,
22                              public ShellObserver {
23 public:
24  // Returns the mode list for internal display.
25  ASH_EXPORT static std::vector<DisplayMode> GetInternalDisplayModeList(
26      const DisplayInfo& display_info,
27      const ui::DisplayConfigurator::DisplayState& output);
28
29  // Returns the resolution list.
30  ASH_EXPORT static std::vector<DisplayMode> GetExternalDisplayModeList(
31      const ui::DisplayConfigurator::DisplayState& output);
32
33  DisplayChangeObserver();
34  virtual ~DisplayChangeObserver();
35
36  // ui::DisplayConfigurator::StateController overrides:
37  virtual ui::MultipleDisplayState GetStateForDisplayIds(
38      const std::vector<int64>& outputs) const OVERRIDE;
39  virtual bool GetResolutionForDisplayId(int64 display_id,
40                                         gfx::Size* size) const OVERRIDE;
41
42  // Overriden from ui::DisplayConfigurator::Observer:
43  virtual void OnDisplayModeChanged(
44      const ui::DisplayConfigurator::DisplayStateList& outputs) OVERRIDE;
45
46  // Overriden from ShellObserver:
47  virtual void OnAppTerminating() OVERRIDE;
48
49  // Exposed for testing.
50  ASH_EXPORT static float FindDeviceScaleFactor(float dpi);
51
52 private:
53  DISALLOW_COPY_AND_ASSIGN(DisplayChangeObserver);
54};
55
56}  // namespace ash
57
58#endif  // ASH_DISPLAY_AURA_DISPLAY_CHANGE_OBSERVER_CHROMEOS_H
59