| // Copyright 2016 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_DISPLAY_LIST_H_ |
| #define UI_DISPLAY_DISPLAY_LIST_H_ |
| |
| #include <stdint.h> |
| |
| #include <vector> |
| |
| #include "base/observer_list.h" |
| #include "ui/display/display.h" |
| #include "ui/display/display_export.h" |
| |
| namespace display { |
| |
| class Display; |
| class DisplayObserver; |
| |
| // Maintains an ordered list of display::Displays as well as operations to add, |
| // remove and update said list. Additionally maintains display::DisplayObservers |
| // and updates them as appropriate. |
| class DISPLAY_EXPORT DisplayList { |
| public: |
| using Displays = std::vector<display::Display>; |
| |
| enum class Type { |
| PRIMARY, |
| NOT_PRIMARY, |
| }; |
| |
| DisplayList(); |
| ~DisplayList(); |
| |
| void AddObserver(display::DisplayObserver* observer); |
| void RemoveObserver(display::DisplayObserver* observer); |
| |
| const Displays& displays() const { return displays_; } |
| |
| Displays::const_iterator FindDisplayById(int64_t id) const; |
| Displays::iterator FindDisplayById(int64_t id); |
| |
| Displays::const_iterator GetPrimaryDisplayIterator() const; |
| |
| // Updates the cached id based on display.id() as well as whether the Display |
| // is the primary display. |
| void UpdateDisplay(const display::Display& display, Type type); |
| |
| // Adds a new Display. |
| void AddDisplay(const display::Display& display, Type type); |
| |
| // Removes the Display with the specified id. |
| void RemoveDisplay(int64_t id); |
| |
| private: |
| std::vector<display::Display> displays_; |
| int primary_display_index_ = -1; |
| base::ObserverList<display::DisplayObserver> observers_; |
| |
| DISALLOW_COPY_AND_ASSIGN(DisplayList); |
| }; |
| |
| } // namespace display |
| |
| #endif // UI_DISPLAY_DISPLAY_LIST_H_ |