17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file.
47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#ifndef ASH_DISPLAY_DISPLAY_LAYOUT_STORE_H_
67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define ASH_DISPLAY_DISPLAY_LAYOUT_STORE_H_
77dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include <map>
97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ash/ash_export.h"
117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ash/display/display_layout.h"
127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace ash {
147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace internal {
157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass ASH_EXPORT DisplayLayoutStore {
177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public:
187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  DisplayLayoutStore();
197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  ~DisplayLayoutStore();
207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  const DisplayLayout& default_display_layout() const {
227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    return default_display_layout_;
237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void SetDefaultDisplayLayout(const DisplayLayout& layout);
257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Registeres the display layout info for the specified display(s).
277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void RegisterLayoutForDisplayIdPair(int64 id1,
287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                      int64 id2,
297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                      const DisplayLayout& layout);
307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // If no layout is registered, it creatas new layout using
327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // |default_display_layout_|.
337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  DisplayLayout GetRegisteredDisplayLayout(const DisplayIdPair& pair);
347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Returns the display layout for the display id pair
367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // with display swapping applied.  That is, this returns
377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // flipped layout if the displays are swapped.
387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  DisplayLayout ComputeDisplayLayoutForDisplayIdPair(
397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      const DisplayIdPair& display_pair);
407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Update the mirrored flag in the display layout for
427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // |display_pair|.  This creates new display layout if no layout is
437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // registered for |display_pair|.
447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void UpdateMirrorStatus(const DisplayIdPair& display_pair,
457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                          bool mirrored);
467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Update the |primary_id| in the display layout for
487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // |display_pair|.  This creates new display layout if no layout is
497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // registered for |display_pair|.
507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void UpdatePrimaryDisplayId(const DisplayIdPair& display_pair,
517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                              int64 display_id);
527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private:
547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Creates new layout for display pair from |default_display_layout_|.
557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  DisplayLayout CreateDisplayLayout(const DisplayIdPair& display_pair);
567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // The default display layout.
587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  DisplayLayout default_display_layout_;
597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Display layout per pair of devices.
617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  std::map<DisplayIdPair, DisplayLayout> paired_layouts_;
627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(DisplayLayoutStore);
647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch};
657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}  // namespace internal
677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}  // namespace ash
687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif  // ASH_DISPLAY_DISPLAY_LAYOUT_STORE_H_
70