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_LAYOUT_STORE_H_
6#define ASH_DISPLAY_DISPLAY_LAYOUT_STORE_H_
7
8#include <map>
9
10#include "ash/ash_export.h"
11#include "ash/display/display_layout.h"
12
13namespace ash {
14namespace internal {
15
16class ASH_EXPORT DisplayLayoutStore {
17 public:
18  DisplayLayoutStore();
19  ~DisplayLayoutStore();
20
21  const DisplayLayout& default_display_layout() const {
22    return default_display_layout_;
23  }
24  void SetDefaultDisplayLayout(const DisplayLayout& layout);
25
26  // Registeres the display layout info for the specified display(s).
27  void RegisterLayoutForDisplayIdPair(int64 id1,
28                                      int64 id2,
29                                      const DisplayLayout& layout);
30
31  // If no layout is registered, it creatas new layout using
32  // |default_display_layout_|.
33  DisplayLayout GetRegisteredDisplayLayout(const DisplayIdPair& pair);
34
35  // Returns the display layout for the display id pair
36  // with display swapping applied.  That is, this returns
37  // flipped layout if the displays are swapped.
38  DisplayLayout ComputeDisplayLayoutForDisplayIdPair(
39      const DisplayIdPair& display_pair);
40
41  // Update the mirrored flag in the display layout for
42  // |display_pair|.  This creates new display layout if no layout is
43  // registered for |display_pair|.
44  void UpdateMirrorStatus(const DisplayIdPair& display_pair,
45                          bool mirrored);
46
47  // Update the |primary_id| in the display layout for
48  // |display_pair|.  This creates new display layout if no layout is
49  // registered for |display_pair|.
50  void UpdatePrimaryDisplayId(const DisplayIdPair& display_pair,
51                              int64 display_id);
52
53 private:
54  // Creates new layout for display pair from |default_display_layout_|.
55  DisplayLayout CreateDisplayLayout(const DisplayIdPair& display_pair);
56
57  // The default display layout.
58  DisplayLayout default_display_layout_;
59
60  // Display layout per pair of devices.
61  std::map<DisplayIdPair, DisplayLayout> paired_layouts_;
62
63  DISALLOW_COPY_AND_ASSIGN(DisplayLayoutStore);
64};
65
66}  // namespace internal
67}  // namespace ash
68
69#endif  // ASH_DISPLAY_DISPLAY_LAYOUT_STORE_H_
70