Home | History | Annotate | Download | only in display
      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 
     13 namespace ash {
     14 
     15 class 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