| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef UI_DISPLAY_UNIFIED_DESKTOP_UTILS_H_ |
| #define UI_DISPLAY_UNIFIED_DESKTOP_UTILS_H_ |
| |
| #include <vector> |
| |
| #include "ui/display/display_export.h" |
| #include "ui/display/display_layout.h" |
| |
| namespace display { |
| |
| // Defines a display position in the unified display matrix. |
| enum class DisplayPositionInUnifiedMatrix { |
| kTopLeft, |
| kTopRight, |
| kBottomLeft, |
| }; |
| |
| // Type of the matrix that represents the display layout in Unified Desktop |
| // mode. The ID of a display is placed in a cell in the matrix where that |
| // display is desired to be placed in the actual layout. |
| using UnifiedDesktopLayoutMatrix = std::vector<std::vector<int64_t>>; |
| |
| // Validates that: |
| // - The matrix is not empty. |
| // - There are no holes (empty display IDs) in the matrix. |
| // - All matrix rows have equal non-zero widths. |
| bool DISPLAY_EXPORT ValidateMatrix(const UnifiedDesktopLayoutMatrix& matrix); |
| |
| // Validates that the given display |layout| is convertable to a valid Unified |
| // Desktop layout matrix. If yes, then the matrix will be built and filled in |
| // |out_matrix| and true is returned. False is returned and |out_matrix| will be |
| // unchanged. |
| // |
| // Rules of a valid Unified Desktop layout: |
| // - All IDs in the |layout|'s |primary_id| and |placement_list| must exist in |
| // the display |ids_list|. |
| // - There is a placement for each display in the |ids_list| except the primary |
| // display. |
| // - The primary display must be the root. |
| // - There is a path from each display to the root display with no cycles. |
| // - No placement offsets are allowed. |
| // - The |layout|'s |placement_list| is not required to be sorted. |
| // - A display can only have at most one child on either of its sides. |
| // - Layouts that specify a display grid must be complete; i.e. no empty holes |
| // in the grid. |
| bool DISPLAY_EXPORT |
| BuildUnifiedDesktopMatrix(const DisplayIdList& ids_list, |
| const DisplayLayout& layout, |
| UnifiedDesktopLayoutMatrix* out_matrix); |
| |
| } // namespace display |
| |
| #endif // UI_DISPLAY_UNIFIED_DESKTOP_UTILS_H_ |