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